Built with Alectryon. 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.
Require Import HoTT.Basics HoTT.Types.Require Import HoTT.Basics HoTT.Types.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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(unit_name
(foralla0 : acc_ngen O i, B a0;
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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
((unit_name
(foralla0 : acc_ngen O i, B a0;
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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(foralla0 : acc_ngen O i, B a0) <~> (B a).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(foralla0 : acc_ngen O i, B a0) -> (B a).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(B a).1 -> foralla0 : acc_ngen O i, B a0
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(foralla0 : acc_ngen O i, B a0) -> (B a).1
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i f: foralla0 : acc_ngen O i, B a0
(B a).1
exact (f a).
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(B a).1 -> foralla0 : acc_ngen O i, B a0
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i
(funf : foralla0 : acc_ngen O i, B a0 => 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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 : foralla0 : acc_ngen O i, B a0 => f a) == idmap
H: Univalence O: Modality H0: IsAccModality O Topological0: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i f: foralla0 : acc_ngen O i, B a0
(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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) i: lgen_indices (acc_lgen O) B: acc_ngen O i -> Type_ (modality_subuniv O) a: acc_ngen O i f: foralla0 : acc_ngen O i, B a0 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: foralli0 : ngen_indices (acc_ngen O), IsHProp (acc_ngen O i0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} 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.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} 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.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} 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.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} 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.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc0 : ngen_indices D0, IsHProp (D0 c0)) * (Nul D0 <=> Nul B0)} 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 :=
func0 : C =>
match c0 with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc0 : C, IsTrunc n.+1 (D c0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc0 : ngen_indices D0, IsHProp (D0 c0)) * (Nul D0 <=> Nul B0)} 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 :=
func0 : C =>
match c0 with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc0 : C, IsTrunc n.+1 (D c0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc0 : ngen_indices D0, IsHProp (D0 c0)) * (Nul D0 <=> Nul B0)} 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 :=
func0 : C =>
match c0 with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc0 : C, IsTrunc n.+1 (D c0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc0 : ngen_indices D0, IsHProp (D0 c0)) * (Nul D0 <=> Nul B0)} 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 :=
func0 : C =>
match c0 with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc0 : C, IsTrunc n.+1 (D c0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc0 : ngen_indices D0, IsHProp (D0 c0)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func0 : C =>
match c0 with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc0 : C, IsTrunc n.+1 (D c0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc0 : ngen_indices D0, IsHProp (D0 c0)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func0 : C =>
match c0 with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc0 : C, IsTrunc n.+1 (D c0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc0 : ngen_indices D0, IsHProp (D0 c0)) * (Nul D0 <=> Nul B0)} 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 :=
func0 : C =>
match c0 with
| inl a => merely (B a)
| inr s =>
lets0 := s inleta := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc0 : C, IsTrunc n.+1 (D c0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla0 : A, IsConnected O (B a0)
IsConnected O (lgen_domain (null_to_local_generators D) (inl a))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb0 := fst proj0 inletb3 := snd proj0 in b0 = b3
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: foralla0 : A, IsConnected O (B a0)
IsConnected O (lgen_domain (null_to_local_generators D) (inr (a; (b1, b2))))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla0 : A, IsConnected O (B a0)
IsConnected O (lgen_domain (null_to_local_generators D) (inl a))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla0 : A, IsConnected O (B a0)
NullHomotopy.NullHomotopy
(to O (lgen_domain (null_to_local_generators D) (inl a)))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla0 : A, IsConnected O (B a0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla0 : A, IsConnected O (B a0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) X: Type X_inO: In O X a: A Bc: foralla0 : A, IsConnected O (B a0) 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb0 := fst proj0 inletb3 := snd proj0 in b0 = b3
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: foralla0 : A, IsConnected O (B a0)
IsConnected O (lgen_domain (null_to_local_generators D) (inr (a; (b1, b2))))
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb0 := fst proj0 inletb3 := snd proj0 in b0 = b3
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: foralla0 : A, IsConnected O (B a0)
IsConnected O (b1 = b2)
rapply isconnected_paths.
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} 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.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} 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.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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 (funx0 : X => forallu : B a, x0 = f u) (q b)^ p == q
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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 (funx0 : X => forallu : B a, x0 = f u) (q b)^ p b = q b
H: Funext O: Modality Olex: Lex O n: trunc_index IHn: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla0 : ngen_indices B0, IsTrunc n.+1 (B0 a0)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} B: NullGenerators OeqB: O <=> Nul B gtr: foralla0 : ngen_indices B, IsTrunc n.+2 (B a0) A:= ngen_indices B: Type C:= A + {a0 : A & B a0 * B a0}: Type D:= {|
ngen_indices := C;
ngen_type :=
func : C =>
match c with
| inl a0 => merely (B a0)
| inr s =>
lets0 := s inleta0 := s0.1inletproj2 := s0.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 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: forallB0 : NullGenerators,
O <=> Nul B0 ->
(foralla : ngen_indices B0, IsTrunc n.+1 (B0 a)) ->
{D0 : NullGenerators &
(forallc : ngen_indices D0, IsHProp (D0 c)) * (Nul D0 <=> Nul B0)} 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.2inletproj0 := proj2 inletb1 := fst proj0 inletb2 := snd proj0 in b1 = b2
end
:
Type
|}: NullGenerators Dtrunc: forallc : C, IsTrunc n.+1 (D c) OeqD: O <=> Nul D