Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Extensions HoTT.Truncations.Require Import Accessible Lex Nullification.LocalOpen Scope path_scope.(** * Topological localizations *)(** A topological localization -- or, as we will say, a topological nullification -- is a nullification at a family of hprops, or more generally an accessible modality whose generators of accessibility are all hprops. This is not quite the same as Lurie's definition: in Higher Topos Theory, a topological localization is an accessible *left exact* localization at a pullback-stable class generated by a set of monomorphisms. "Pullback-stable class generated by" is roughly incorporated into our internal notion of accessibility, so the main new difference here is that when the generation is internal in this way, the localization at a family of hprops is *automatically* left exact. *)NotationTopological O := (foralli, IsHProp (acc_ngen O i)).(** ** Topological modalities are lex *)(** We prove left-exactness by proving that the universe of modal types is modal, using univalence. It's unclear whether univalence is necessary or not in general; in one special case (open modalities) funext suffices. But it's plausible that it would be necessary in general, because lex-ness of nullification is a statement about the path-spaces of a HIT, and characterizing those in any way usually requires some amount of univalence. *)
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i)
Lex O
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i)
(funx : acc_ngen O i -> Type_ (modality_subuniv O) =>
(funB : acc_ngen O i -> Type_ (modality_subuniv O)
=>
unit_name
(foralla : acc_ngen O i, B a;
inO_forall O (acc_ngen O i)
(funx0 : acc_ngen O i => B x0)
(funx0 : acc_ngen O i => inO_TypeO (B x0)))) x
oD (fun_ : acc_ngen O i => tt)) == idmap
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O)
unit_name
(foralla : acc_ngen O i, B a;
inO_forall O (acc_ngen O i)
(funx : acc_ngen O i => B x)
(funx : acc_ngen O i => inO_TypeO (B x)))
oD (fun_ : acc_ngen O i => tt) = B
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(unit_name
(foralla : acc_ngen O i, B a;
inO_forall O (acc_ngen O i)
(funx : acc_ngen O i => B x)
(funx : acc_ngen O i => inO_TypeO (B x)))
oD (fun_ : acc_ngen O i => tt)) a =
B a
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
((unit_name
(foralla : acc_ngen O i, B a;
inO_forall O (acc_ngen O i)
(funx : acc_ngen O i => B x)
(funx : acc_ngen O i => inO_TypeO (B x)))
oD (fun_ : acc_ngen O i => tt)) a).1 <~>
(B a).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(foralla : acc_ngen O i, B a) <~> (B a).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(foralla : acc_ngen O i, B a) -> (B a).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(B a).1 -> foralla : acc_ngen O i, B a
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
?f o ?g == idmap
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
?g o ?f == idmap
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(foralla : acc_ngen O i, B a) -> (B a).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i f: foralla : acc_ngen O i, B a
(B a).1
exact (f a).
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(B a).1 -> foralla : acc_ngen O i, B a
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i b: (B a).1 a': acc_ngen O i
B a'
exact (transport B (path_ishprop a a') b).
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(funf : foralla : acc_ngen O i, B a => f a)
o (fun (b : (B a).1) (a' : acc_ngen O i) =>
transport (funx : acc_ngen O i => B x)
(path_ishprop a a') b) == idmap
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i b: (B a).1
transport (funx : acc_ngen O i => B x)
(path_ishprop a a) b = b
exact (transport2 B (path_contr _ 1) b).
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(fun (b : (B a).1) (a' : acc_ngen O i) =>
transport (funx : acc_ngen O i => B x)
(path_ishprop a a') b)
o (funf : foralla : acc_ngen O i, B a => f a) ==
idmap
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i f: foralla : acc_ngen O i, B a
(funa' : acc_ngen O i =>
transport (funx : acc_ngen O i => B x)
(path_ishprop a a')
(f a)) = f
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i f: foralla : acc_ngen O i, B a a': acc_ngen O i
transport (funx : acc_ngen O i => B x)
(path_ishprop a a')
(f a) = f a'
(funx : Unit -> Type_ (modality_subuniv O) =>
(funB : acc_ngen O i -> Type_ (modality_subuniv O)
=>
unit_name
(foralla : acc_ngen O i, B a;
inO_forall O (acc_ngen O i)
(funx0 : acc_ngen O i => B x0)
(funx0 : acc_ngen O i => inO_TypeO (B x0))))
(x oD (fun_ : acc_ngen O i => tt))) == idmap
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: Unit -> Type_ (modality_subuniv O)
unit_name
(foralla : acc_ngen O i,
(B oD (fun_ : acc_ngen O i => tt)) a;
inO_forall O (acc_ngen O i)
(funx : acc_ngen O i =>
(B oD (fun_ : acc_ngen O i => tt)) x)
(funx : acc_ngen O i =>
inO_TypeO ((B oD (fun_ : acc_ngen O i => tt)) x))) =
B
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: Unit -> Type_ (modality_subuniv O)
(foralla : acc_ngen O i,
(B oD (fun_ : acc_ngen O i => tt)) a;
inO_forall O (acc_ngen O i)
(funx : acc_ngen O i =>
(B oD (fun_ : acc_ngen O i => tt)) x)
(funx : acc_ngen O i =>
inO_TypeO ((B oD (fun_ : acc_ngen O i => tt)) x))) =
B tt
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: Unit -> Type_ (modality_subuniv O)
(foralla : acc_ngen O i,
(B oD (fun_ : acc_ngen O i => tt)) a;
inO_forall O (acc_ngen O i)
(funx : acc_ngen O i =>
(B oD (fun_ : acc_ngen O i => tt)) x)
(funx : acc_ngen O i =>
inO_TypeO ((B oD (fun_ : acc_ngen O i => tt)) x))).1 <~>
(B tt).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: Unit -> Type_ (modality_subuniv O)
(acc_ngen O i -> B tt) <~> (B tt).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: Unit -> Type_ (modality_subuniv O) e:= isequiv_ooextendable
(fun_ : lgen_codomain
(null_to_local_generators (acc_ngen O))
i => B tt)
(null_to_local_generators (acc_ngen O) i)
(fst (inO_iff_isnull O (B tt))
(inO_TypeO (B tt)) i): IsEquiv
(fung : forallb : lgen_codomain
(null_to_local_generators
(acc_ngen O)) i,
(fun_ : lgen_codomain
(null_to_local_generators
(acc_ngen O)) i =>
TypeO_pr1 (modality_subuniv O) (B tt)) b
=> g oD null_to_local_generators (acc_ngen O) i)
(acc_ngen O i -> B tt) <~> (B tt).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: Unit -> Type_ (modality_subuniv O) e:= isequiv_ooextendable
(unit_name (B tt))
(fun_ : acc_ngen O i => tt)
(fst (inO_iff_isnull O (B tt))
(inO_TypeO (B tt)) i): IsEquiv
(fun (g : Unit -> B tt) (_ : acc_ngen O i) =>
g tt)
(acc_ngen O i -> B tt) <~> (B tt).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli : ngen_indices (acc_ngen O),
IsHProp (acc_ngen O i) i: lgen_indices (acc_lgen O) B: Unit -> Type_ (modality_subuniv O) e:= isequiv_ooextendable
(unit_name (B tt))
(fun_ : acc_ngen O i => tt)
(fst (inO_iff_isnull O (B tt))
(inO_TypeO (B tt)) i): IsEquiv
(fun (g : Unit -> B tt) (_ : acc_ngen O i) =>
g tt)
rapply lex_topological.Defined.(** ** Lex modalities generated by n-types are topological *)(** For [n >= 0], nullification at a family of [n]-types need not be lex. For instance, the (-1)-truncation is nullification at [Bool]. However, if the nullification at a family of [n]-types *is* lex, then it is topological. *)(** This is kind of annoying to prove, not just because the proof is fiddly, but because we have to pass back and forth between different generating families for the "same" modality. It's a bit easier to prove it about nullifications than about arbitrary accessible lex modalities. *)
H: Funext B: NullGenerators Olex: Lex (Nul B) n: trunc_index gtr: foralla : ngen_indices B, IsTrunc n (B a)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c)
O <=> Nul D
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type
In O X -> In (Nul D) X
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type
In (Nul D) X -> In O X
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type
In O X -> In (Nul D) X
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X c: lgen_indices (null_to_local_generators D)
ooExtendableAlong (null_to_local_generators D c)
(fun_ : lgen_codomain (null_to_local_generators D) c
=> X)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X c: lgen_indices (null_to_local_generators D)
foralla : A, IsConnected O (B a)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X c: lgen_indices (null_to_local_generators D) Bc: foralla : A, IsConnected O (B a)
ooExtendableAlong (null_to_local_generators D c)
(fun_ : lgen_codomain (null_to_local_generators D) c
=> X)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X c: lgen_indices (null_to_local_generators D)
foralla : A, IsConnected O (B a)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X c: lgen_indices (null_to_local_generators D) a: A
IsConnected O (B a)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X c: lgen_indices (null_to_local_generators D) a: A
IsConnected (Nul B) (B a)
exact (isconnected_acc_ngen (Nul B) a).
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X c: lgen_indices (null_to_local_generators D) Bc: foralla : A, IsConnected O (B a)
ooExtendableAlong (null_to_local_generators D c)
(fun_ : lgen_codomain (null_to_local_generators D) c
=> X)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla : A, IsConnected O (B a)
IsConnected O
(lgen_domain (null_to_local_generators D) (inl a))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A b1, b2: B a Bc: foralla : A, IsConnected O (B a)
IsConnected O
(lgen_domain (null_to_local_generators D)
(inr (a; (b1, b2))))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla : A, IsConnected O (B a)
IsConnected O
(lgen_domain (null_to_local_generators D) (inl a))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla : A, IsConnected O (B a)
NullHomotopy.NullHomotopy
(to O
(lgen_domain (null_to_local_generators D) (inl a)))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla : A, IsConnected O (B a) x: O (merely (B a)) h: forallx0 : B a, to O (merely (B a)) (tr x0) = x
NullHomotopy.NullHomotopy
(to O
(lgen_domain (null_to_local_generators D) (inl a)))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla : A, IsConnected O (B a) x: O (merely (B a)) h: forallx0 : B a, to O (merely (B a)) (tr x0) = x y: Trunc (-1) (B a)
to O
(lgen_domain (null_to_local_generators D) (inl a)) y =
x
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla : A, IsConnected O (B a) x: O (merely (B a)) h: forallx0 : B a, to O (merely (B a)) (tr x0) = x y: B a
to O
(lgen_domain (null_to_local_generators D) (inl a))
(tr y) = x
exact (h y).
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A b1, b2: B a Bc: foralla : A, IsConnected O (B a)
IsConnected O
(lgen_domain (null_to_local_generators D)
(inr (a; (b1, b2))))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A b1, b2: B a Bc: foralla : A, IsConnected O (B a)
IsConnected O (b1 = b2)
rapply isconnected_paths.
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type
In (Nul D) X -> In O X
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X
In (Nul B) X
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B
ooExtendableAlong (fun_ : B a => tt) (unit_name X)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B
IsEquiv
(fung : Unit -> X => g oD (fun_ : B a => tt))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
Contr
(hfiber
(fung : Unit -> X => g oD (fun_ : B a => tt)) f)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
{x : X & forallu : B a, x = f u} <~>
hfiber (fung : Unit -> X => g oD (fun_ : B a => tt))
f
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
{x : X & forallu : B a, x = f u} <~>
hfiber (fung : Unit -> X => g oD (fun_ : B a => tt))
f
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
foralla0 : X,
(forallu : B a, a0 = f u) <~>
equiv_unit_rec X a0 oD (fun_ : B a => tt) = f
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X x: X
(forallu : B a, x = f u) <~> (fun_ : B a => x) = f
apply equiv_path_arrow.
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
IsConnected (Nul D) (D (inl a))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
D (inl a) -> Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
IsConnected (Nul D) (D (inl a))
tapply isconnected_acc_ngen.
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X
D (inl a) -> Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: Trunc (-1) (B a)
Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a
Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a
IsConnMap (Nul D) (unit_name b)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b)
Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a
IsConnMap (Nul D) (unit_name b)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b, x: B a
IsConnected (Nul D) {_ : Unit & b = x}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b, x: B a
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b)
Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b) p:= conn_map_elim (Nul D) (unit_name b)
(funu : B a => f b = f u)
(unit_name 1): forallb0 : B a, (funu : B a => f b = f u) b0
Contr {x : X & forallu : B a, x = f u}
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b) p:= conn_map_elim (Nul D) (unit_name b)
(funu : B a => f b = f u)
(unit_name 1): forallb0 : B a, (funu : B a => f b = f u) b0 x: X q: forallu : B a, x = f u
(f b; p) = (x; q)
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b) p:= conn_map_elim (Nul D) (unit_name b)
(funu : B a => f b = f u)
(unit_name 1): forallb0 : B a, (funu : B a => f b = f u) b0 x: X q: forallu : B a, x = f u
transport (funx : X => forallu : B a, x = f u)
(q b)^ p == q
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b) p:= conn_map_elim (Nul D) (unit_name b)
(funu : B a => f b = f u)
(unit_name 1): forallb0 : B a, (funu : B a => f b = f u) b0 x: X q: forallu : B a, x = f u
transport (funx : X => forallu : B a, x = f u)
(q b)^ p b = q b
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b) p:= conn_map_elim (Nul D) (unit_name b)
(funu : B a => f b = f u)
(unit_name 1): forallb0 : B a, (funu : B a => f b = f u) b0 x: X q: forallu : B a, x = f u
q b @ p b = q b
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type Dnull: In (Nul D) X a: ngen_indices B f: B a -> X b: B a bc: IsConnMap (Nul D) (unit_name b) p:= conn_map_elim (Nul D) (unit_name b)
(funu : B a => f b = f u)
(unit_name 1): forallb0 : B a, (funu : B a => f b = f u) b0 x: X q: forallu : B a, x = f u
q b @ 1 = q b
apply concat_p1.
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) OeqD: O <=> Nul D
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) OeqD: O <=> Nul D E: NullGenerators HE: forallc : ngen_indices E, IsHProp (E c) EeqD: Nul E <=> Nul D
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) OeqD: O <=> Nul D E: NullGenerators HE: forallc : ngen_indices E, IsHProp (E c) EeqD: Nul E <=> Nul D
Nul E <=> Nul B
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) OeqD: O <=> Nul D E: NullGenerators HE: forallc : ngen_indices E, IsHProp (E c) EeqD: Nul E <=> Nul D
Nul D <=> Nul B
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB : NullGenerators,
O <=> Nul B ->
(foralla : ngen_indices B, IsTrunc n.+1 (B a)) ->
{D : NullGenerators &
(forallc : ngen_indices D, IsHProp (D c)) *
(Nul D <=> Nul B)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla : ngen_indices B, IsTrunc n.+2 (B a) A:= ngen_indices B: Type C:= A + {a : A & B a * B a}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj3 := proj2 inletb1 := fst proj3 inletb2 := snd proj3 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) OeqD: O <=> Nul D E: NullGenerators HE: forallc : ngen_indices E, IsHProp (E c) EeqD: Nul E <=> Nul D