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 SuccessorStructure.Require Import WildCat.Require Import Pointed.Require Import Modalities.Identity Modalities.Descent.Require Import Truncations.Require Import HFiber.Require Import ObjectClassifier.LocalOpen Scope succ_scope.Open Scope pointed_scope.(** * Exact sequences *)(** ** Very short complexes *)(** A (very short) complex is a pair of pointed maps whose composite is the zero map. *)DefinitionIsComplex {FXY} (i : F ->* X) (f : X ->* Y)
:= (f o* i ==* pconst).(** This induces a map from the domain of [i] to the fiber of [f]. *)
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
F ->* pfiber f
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
F ->* pfiber f
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
F -> pfiber f
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
?f pt = pt
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
F -> pfiber f
exact (funx => (i x; cx x)).
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
(funx : F => (i x; cx x)) pt = pt
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
(i pt; cx pt) = ispointed_fiber f
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
transport (funx : X => f x = pt) (point_eq i) (cx pt) =
point_eq f
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
(ap f (point_eq i))^ @ cx pt = point_eq f
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
cx pt = ap f (point_eq i) @ point_eq f
exact ((concat_p1 _)^ @ point_htpy cx).Defined.(** ...whose composite with the projection [pfib : pfiber i -> X] is [i]. *)
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
pfib f o* cxfib cx ==* i
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
pfib f o* cxfib cx ==* i
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
pfib f o* cxfib cx == i
F, X, Y: pType i: F ->* X f: X ->* Y cx: IsComplex i f
apply iscomplex_loops; assumption.Defined.(** Passage across homotopies preserves complexes. *)Definitioniscomplex_homotopic_i {FXY : pType}
{ii' : F ->* X} (ii : i' ==* i) (f : X ->* Y) (cx : IsComplex i f)
: IsComplex i' f := pmap_postwhisker f ii @* cx.Definitioniscomplex_homotopic_f {FXY : pType}
(i : F ->* X) {ff' : X ->* Y} (ff : f' ==* f) (cx : IsComplex i f)
: IsComplex i f'
:= pmap_prewhisker i ff @* cx.
F, X, Y, Y': pType i: F ->* X f: X ->* Y e: Y <~>* Y' cx: IsComplex i (e o* f)
IsComplex i f
F, X, Y, Y': pType i: F ->* X f: X ->* Y e: Y <~>* Y' cx: IsComplex i (e o* f)
IsComplex i f
F, X, Y, Y': pType i: F ->* X f: X ->* Y e: Y <~>* Y' cx: IsComplex i (e o* f)
f o* i ==* e^-1* o* pconst
F, X, Y, Y': pType i: F ->* X f: X ->* Y e: Y <~>* Y' cx: IsComplex i (e o* f)
e^-1* $o (e $o (f o* i)) $== e^-1* o* pconst
F, X, Y, Y': pType i: F ->* X f: X ->* Y e: Y <~>* Y' cx: IsComplex i (e o* f)
e $o (f o* i) $== pconst
F, X, Y, Y': pType i: F ->* X f: X ->* Y e: Y <~>* Y' cx: IsComplex i (e o* f)
e $o f $o i $== pconst
exact cx.Defined.(** And likewise passage across squares with equivalences *)
F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y cx: IsComplex i f
IsComplex i' (f o* h)
F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y cx: IsComplex i f
IsComplex i' (f o* h)
F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y cx: IsComplex i f
f o* (h o* i') ==* pconst
F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y cx: IsComplex i f
f o* (i o* g) ==* pconst
F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y cx: IsComplex i f
f o* i o* g ==* pconst
F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y cx: IsComplex i f
pconst o* g ==* pconst
apply postcompose_pconst.Defined.(** A special version with only an equivalence on the fiber. *)
F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F cx: IsComplex i f
IsComplex (i o* phi) f
F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F cx: IsComplex i f
IsComplex (i o* phi) f
F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F cx: IsComplex i f
f o* i o* phi ==* pconst
F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F cx: IsComplex i f
pconst o* phi ==* pconst
apply postcompose_pconst.Defined.(** Any pointed map induces a trivial complex. *)
((funx : pUnit =>
point_eq f : (f o* pconst) x = pconst x)
:
f o* pconst == pconst) pt =
dpoint_eq (f o* pconst) @ (dpoint_eq pconst)^
X, Y: pType f: X ->* Y
(1 @ point_eq f) @ 1 = point_eq f
exact (concat_p1 _ @ concat_1p _).Defined.(** If [Y] is a set, then [IsComplex] is an [HProp]. *)Instanceishprop_iscomplex_hset `{Funext} {F X Y : pType} `{IsHSet Y}
(i : F ->* X) (f : X ->* Y)
: IsHProp (IsComplex i f) := _.(** ** Very short exact sequences and fiber sequences *)(** A complex is [n]-exact if the induced map [cxfib] is [n]-connected. *)CumulativeClassIsExact (n : Modality) {FXY : pType} (i : F ->* X) (f : X ->* Y) :=
{
cx_isexact : IsComplex i f ;
conn_map_isexact :: IsConnMap n (cxfib cx_isexact)
}.Definitionissig_isexact (n : Modality) {FXY : pType} (i : F ->* X) (f : X ->* Y)
: _ <~> IsExact n i f := ltac:(issig).(** If [Y] is a set, then [IsExact] is an [HProp]. *)
H: Univalence F, X, Y: pType IsHSet0: IsHSet Y n: Modality i: F ->* X f: X ->* Y
IsHProp (IsExact n i f)
H: Univalence F, X, Y: pType IsHSet0: IsHSet Y n: Modality i: F ->* X f: X ->* Y
IsHProp (IsExact n i f)
H: Univalence F, X, Y: pType IsHSet0: IsHSet Y n: Modality i: F ->* X f: X ->* Y
{cx : IsComplex i f & IsConnMap n (cxfib cx)} =
IsExact n i f
H: Univalence F, X, Y: pType IsHSet0: IsHSet Y n: Modality i: F ->* X f: X ->* Y
IsHProp {cx : IsComplex i f & IsConnMap n (cxfib cx)}
H: Univalence F, X, Y: pType IsHSet0: IsHSet Y n: Modality i: F ->* X f: X ->* Y
{cx : IsComplex i f & IsConnMap n (cxfib cx)} =
IsExact n i f
apply path_universe_uncurried; issig.Defined.(** With exactness we can choose preimages. *)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: X p: f x = pt
O (hfiber i x)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: X p: f x = pt
O (hfiber i x)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: X p: f x = pt
hfiber (cxfib cx_isexact) (x; p) -> hfiber i x
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: X p: f x = pt
O (hfiber (cxfib cx_isexact) (x; p))
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: X p: f x = pt
hfiber (cxfib cx_isexact) (x; p) -> hfiber i x
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: X p: f x = pt z: F q: cxfib cx_isexact z = (x; p)
hfiber i x
exact (z; ap pr1 q).
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: X p: f x = pt
O (hfiber (cxfib cx_isexact) (x; p))
apply center, conn_map_isexact.Defined.(** Bundled version of the above. *)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: hfiber f pt
O (hfiber i x.1)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact O i f x: hfiber f pt
O (hfiber i x.1)
srapply isexact_preimage; exact x.2.Defined.(** If the base is contractible, then [i] is [O]-connected. *)Definitionisconnmap_O_isexact_base_contr (O : Modality@{u}) {FXY : pType}
`{Contr Y} (i : F ->* X) (f : X ->* Y)
`{IsExact@{_ _ u u u} O _ _ _ i f}
: IsConnMap O i
:= conn_map_compose@{u _ u _} O (cxfib@{u u _ _} cx_isexact) pr1.(** Passage across homotopies preserves exactness. *)
n: Modality F, X, Y: pType i, i': F ->* X ii: i' ==* i f: X ->* Y H: IsExact n i f
IsExact n i' f
n: Modality F, X, Y: pType i, i': F ->* X ii: i' ==* i f: X ->* Y H: IsExact n i f
IsExact n i' f
n: Modality F, X, Y: pType i, i': F ->* X ii: i' ==* i f: X ->* Y H: IsExact n i f
IsConnMap n
(cxfib (iscomplex_homotopic_i ii f cx_isexact))
n: Modality F, X, Y: pType i, i': F ->* X ii: i' ==* i f: X ->* Y H: IsExact n i f
cxfib cx_isexact ==
cxfib (iscomplex_homotopic_i ii f cx_isexact)
n: Modality F, X, Y: pType i, i': F ->* X ii: i' ==* i f: X ->* Y H: IsExact n i f u: F
(i u; cx_isexact u) =
(i' u; ap f (ii u) @ cx_isexact u)
n: Modality F, X, Y: pType i, i': F ->* X ii: i' ==* i f: X ->* Y H: IsExact n i f u: F
transport (funx : X => f x = pt) (ii u)^
(cx_isexact u) = ap f (ii u) @ cx_isexact u
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f
IsExact n i f'
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f
IsExact n i f'
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f
IsConnMap n
(cxfib (iscomplex_homotopic_f i ff cx_isexact))
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt
IsConnMap n
(cxfib (iscomplex_homotopic_f i ff cx_isexact))
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt
IsEquiv e
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt
IsConnMap n
(funx : F =>
e (cxfib (iscomplex_homotopic_f i ff cx_isexact) x))
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt
IsConnMap n
(funx : F =>
e (cxfib (iscomplex_homotopic_f i ff cx_isexact) x))
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt
cxfib cx_isexact ==
(funx : F =>
e (cxfib (iscomplex_homotopic_f i ff cx_isexact) x))
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt u: F
cxfib cx_isexact u =
e (cxfib (iscomplex_homotopic_f i ff cx_isexact) u)
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt u: F
(i u; cx_isexact u) =
(i u; (ff (i u))^ @ (ff (i u) @ cx_isexact u))
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt u: F
(i u; cx_isexact u).1 =
(i u; (ff (i u))^ @ (ff (i u) @ cx_isexact u)).1
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt u: F
(i u; cx_isexact u).2 =
ap f ?q @
(i u; (ff (i u))^ @ (ff (i u) @ cx_isexact u)).2
n: Modality F, X, Y: pType i: F ->* X f, f': X ->* Y ff: f' ==* f H: IsExact n i f e:= equiv_hfiber_homotopic f' f ff pt: hfiber f' pt <~> hfiber f pt u: F
(i u; cx_isexact u).2 =
ap f 1 @
(i u; (ff (i u))^ @ (ff (i u) @ cx_isexact u)).2
exact (concat_1p _ @ concat_V_pp _ _)^.Defined.(** And also passage across squares with equivalences. *)
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
IsExact n i' (f o* h)
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
IsExact n i' (f o* h)
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
IsConnMap n
(funx : F' =>
(i' x;
1 @ (ap f (p x) @ (1 @ (cx_isexact (g x) @ 1)))))
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
hfiber (funx : X' => f (h x)) pt <~> pfiber f
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
IsConnMap n
(?g
o (funx : F' =>
(i' x;
1 @ (ap f (p x) @ (1 @ (cx_isexact (g x) @ 1))))))
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
hfiber (funx : X' => f (h x)) pt <~> pfiber f
exact (@equiv_functor_hfiber _ _ _ _ (f o h) f h equiv_idmap
(funx => 1%path) (point Y)).
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
IsConnMap n
(equiv_functor_hfiber (funx : X' => 1) pt
o (funx : F' =>
(i' x;
1 @ (ap f (p x) @ (1 @ (cx_isexact (g x) @ 1))))))
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
IsConnMap n
(funx : F' =>
(h (i' x);
1 @
ap idmap
(1 @ (ap f (p x) @ (1 @ (cx_isexact (g x) @ 1))))))
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f
(funx : F' => cxfib cx_isexact (g x)) ==
(funx : F' =>
(h (i' x);
1 @
ap idmap
(1 @ (ap f (p x) @ (1 @ (cx_isexact (g x) @ 1))))))
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f u: F'
(i (g u); cx_isexact (g u)) =
(h (i' u);
1 @
ap idmap
(1 @ (ap f (p u) @ (1 @ (cx_isexact (g u) @ 1)))))
n: Modality F, F', X, X', Y: pType i: F ->* X i': F' ->* X' g: F' <~>* F h: X' <~>* X p: h o* i' ==* i o* g f: X ->* Y H: IsExact n i f u: F'
transport (funx : X => f x = pt) (p u)^
(cx_isexact (g u)) =
1 @
ap idmap
(1 @ (ap f (p u) @ (1 @ (cx_isexact (g u) @ 1))))
abstract (
rewrite transport_paths_Fl, ap_V, inv_V,
!concat_1p, concat_p1, ap_idmap;
reflexivity
).Defined.(** In particular, we can transfer exactness across equivalences of the total space. *)
n: Modality F, X, X', Y: pType i: F ->* X f: X' ->* Y phi: X <~>* X' H: IsExact n (phi o* i) f
IsExact n i (f o* phi)
n: Modality F, X, X', Y: pType i: F ->* X f: X' ->* Y phi: X <~>* X' H: IsExact n (phi o* i) f
IsExact n i (f o* phi)
n: Modality F, X, X', Y: pType i: F ->* X f: X' ->* Y phi: X <~>* X' H: IsExact n (phi o* i) f
phi o* i ==* phi o* i o* pmap_idmap
exact (pmap_precompose_idmap _)^*.Defined.(** Similarly, we can cancel equivalences on the fiber. *)
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
IsExact n (i o* phi) f
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
IsExact n (i o* phi) f
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
IsComplex (i o* phi) f
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
IsConnMap n (cxfib ?cx_isexact)
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
IsConnMap n (cxfib (iscomplex_equiv_fiber i f phi))
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
cxfib cx_isexact o* phi ==
cxfib (iscomplex_equiv_fiber i f phi)
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
IsConnMap n (cxfib cx_isexact o* phi)
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
cxfib cx_isexact o* phi ==
cxfib (iscomplex_equiv_fiber i f phi)
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f x: F'
(i (phi x); cx_isexact (phi x)) =
(i (phi x); 1 @ (cx_isexact (phi x) @ 1))
byrewrite concat_p1, concat_1p.
n: Modality F, F', X, Y: pType i: F ->* X f: X ->* Y phi: F' <~>* F E: IsExact n i f
IsConnMap n (cxfib cx_isexact o* phi)
exact _.Defined.(** An equivalence of short sequences preserves exactness. *)
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f
IsExact n i' f'
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f
IsExact n i' f'
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h)
IsExact n i' f'
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f')
IsExact n i' f'
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f')
IsConnMap n
(cxfib (iscomplex_cancelL i' f' k cx_isexact))
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f')
IsConnMap n
(cxfib (iscomplex_cancelL i' f' k cx_isexact))
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f')
IsEquiv e
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f')
IsConnMap n
(funx : F' =>
e (cxfib (iscomplex_cancelL i' f' k cx_isexact) x))
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f')
IsConnMap n
(funx : F' =>
e (cxfib (iscomplex_cancelL i' f' k cx_isexact) x))
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f')
cxfib cx_isexact ==
(funx : F' =>
e (cxfib (iscomplex_cancelL i' f' k cx_isexact) x))
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
cxfib cx_isexact u =
e (cxfib (iscomplex_cancelL i' f' k cx_isexact) u)
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
(cxfib cx_isexact u).1 =
(e (cxfib (iscomplex_cancelL i' f' k cx_isexact) u)).1
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
(cxfib cx_isexact u).2 =
ap (k o* f') ?q @
(e (cxfib (iscomplex_cancelL i' f' k cx_isexact) u)).2
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
(cxfib cx_isexact u).1 =
(e (cxfib (iscomplex_cancelL i' f' k cx_isexact) u)).1
reflexivity.
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
(cxfib cx_isexact u).2 =
ap (k o* f') 1 @
(e (cxfib (iscomplex_cancelL i' f' k cx_isexact) u)).2
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
q (i' u) @
(1 @ (ap f (p u) @ (1 @ (cx_isexact (g u) @ 1)))) =
1 @
((1 @
ap k
((((1 @ (1 @ eissect k (f' (i' u)))) @ 1)^ @
ap k^-1
(1 @
(q (i' u) @
(1 @
(ap f (p u) @ (1 @ (cx_isexact (g u) @ 1))))))) @
moveR_equiv_V pt pt (point_eq k)^)) @ point_eq k)
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
q (i' u) @
(1 @ (ap f (p u) @ (1 @ (cx_isexact (g u) @ 1)))) =
1 @
((1 @
ap k
((((1 @ (1 @ eissect k (f' (i' u)))) @ 1)^ @
ap k^-1
(1 @
(q (i' u) @
(1 @
(ap f (p u) @ (1 @ (cx_isexact (g u) @ 1))))))) @
(ap k^-1 (point_eq k)^ @ eissect k pt))) @
point_eq k)
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
q (i' u) @ (ap f (p u) @ cx_isexact (g u)) =
((eisretr k (k (f' (i' u))))^ @
ap k
(ap k^-1
(q (i' u) @ (ap f (p u) @ cx_isexact (g u))))) @
((ap k (ap k^-1 (point_eq k)^) @ eisretr k (k pt)) @
point_eq k)
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
q (i' u) @ (ap f (p u) @ cx_isexact (g u)) =
(eisretr k (k (f' (i' u))))^ @
(ap (funx : Y => k (k^-1 x))
(q (i' u) @ (ap f (p u) @ cx_isexact (g u))) @
((ap (funx : Y => k (k^-1 x)) (point_eq k)^ @
eisretr k (k pt)) @ point_eq k))
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
q (i' u) @ (ap f (p u) @ cx_isexact (g u)) =
(eisretr k (k (f' (i' u))))^ @
(ap (funx : Y => k (k^-1 x))
(q (i' u) @ (ap f (p u) @ cx_isexact (g u))) @
eisretr k pt)
n: Modality F, F', X, X', Y, Y': pType i: F ->* X i': F' ->* X' f: X ->* Y f': X' ->* Y' g: F' <~>* F h: X' <~>* X k: Y' <~>* Y p: h o* i' ==* i o* g q: k o* f' ==* f o* h H: IsExact n i f I:= isexact_equiv_i n i i' g h p f: IsExact n i' (f o* h) I2:= isexact_homotopic_f n i' q: IsExact n i' (k o* f') e:= pequiv_pfiber pequiv_pmap_idmap k
(pmap_precompose_idmap (k o* f'))^*
:
pfiber f' <~>* pfiber (k o* f'): pfiber f' <~>* pfiber (k o* f') u: F'
q (i' u) @ (ap f (p u) @ cx_isexact (g u)) =
q (i' u) @ (ap f (p u) @ cx_isexact (g u))
reflexivity.Defined.(** If a complex [F -> E -> B] is [O]-exact, the map [F -> B] is [O]-local, and path types in [Y] are [O]-local, then the induced map [cxfib] is an equivalence. *)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In O (y = y') H0: MapIn O i ex: IsExact O i f
IsEquiv (cxfib cx_isexact)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In O (y = y') H0: MapIn O i ex: IsExact O i f
IsEquiv (cxfib cx_isexact)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In O (y = y') H0: MapIn O i ex: IsExact O i f
IsConnMap ?Goal (cxfib cx_isexact)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In O (y = y') H0: MapIn O i ex: IsExact O i f
MapIn ?Goal (cxfib cx_isexact)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In O (y = y') H0: MapIn O i ex: IsExact O i f
MapIn O (cxfib cx_isexact)
rapply (cancelL_mapinO _ _ pr1).Defined.Definitionequiv_cxfib {O : Modality} {FXY : pType} {i : F ->* X} {f : X ->* Y}
`{forallyy' : Y, In O (y = y')} `{MapIn O _ _ i} (ex : IsExact O i f)
: F <~>* pfiber f
:= Build_pEquiv _ (isequiv_cxfib ex).
F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In (Tr 0%nat) (y = y') H0: MapIn (Tr 0%nat) i ex: IsExact (Tr 0%nat) i f
i o pequiv_inverse (equiv_cxfib ex) == pfib f
F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In (Tr 0%nat) (y = y') H0: MapIn (Tr 0%nat) i ex: IsExact (Tr 0%nat) i f
i o pequiv_inverse (equiv_cxfib ex) == pfib f
F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In (Tr 0%nat) (y = y') H0: MapIn (Tr 0%nat) i ex: IsExact (Tr 0%nat) i f
IsEquiv ?Goal0
F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In (Tr 0%nat) (y = y') H0: MapIn (Tr 0%nat) i ex: IsExact (Tr 0%nat) i f
forallx : ?Goal,
i (pequiv_inverse (equiv_cxfib ex) (?Goal0 x)) =
pfib f (?Goal0 x)
F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In (Tr 0%nat) (y = y') H0: MapIn (Tr 0%nat) i ex: IsExact (Tr 0%nat) i f
forallx : F,
i
(pequiv_inverse (equiv_cxfib ex)
(cxfib cx_isexact x)) =
pfib f (cxfib cx_isexact x)
F, X, Y: pType i: F ->* X f: X ->* Y H: forallyy' : Y, In (Tr 0%nat) (y = y') H0: MapIn (Tr 0%nat) i ex: IsExact (Tr 0%nat) i f x: F
i
(pequiv_inverse (equiv_cxfib ex)
(cxfib cx_isexact x)) =
pfib f (cxfib cx_isexact x)
exact (ap (fung => i g) (eissect _ x)).Defined.(** A purely exact sequence is [O]-exact for any modality [O]. *)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsExact O i f
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsExact O i f
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsComplex i f
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsConnMap O (cxfib ?cx_isexact)
O: Modality F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsConnMap O (cxfib cx_isexact)
exact _.Defined.(** When [n] is the identity modality [purely], so that [cxfib] is an equivalence, we get simply a fiber sequence. In particular, the fiber of a given map yields an purely-exact sequence. *)
((funx0 : pfiber f => (funx : X => idmap) x0.1 x0.2)
:
f o* pfib f == pconst) pt =
dpoint_eq (f o* pfib f) @ (dpoint_eq pconst)^
X, Y: pType f: X ->* Y
point_eq f = (1 @ point_eq f) @ 1
exact (concat_p1 _ @ concat_1p _)^.Defined.
X, Y: pType f: X ->* Y
IsExact purely (pfib f) f
X, Y: pType f: X ->* Y
IsExact purely (pfib f) f
X, Y: pType f: X ->* Y
IsConnMap purely (cxfib (iscomplex_pfib f))
exact _.Defined.(** Fiber sequences can alternatively be defined as an equivalence to the fiber of some map. *)DefinitionFiberSeq (FXY : pType) := { f : X ->* Y & F <~>* pfiber f }.Definitioni_fiberseq {FXY} (fs : FiberSeq F X Y)
: F ->* X
:= pfib fs.1 o* fs.2.
change (IsEquiv fs.2); exact _.Defined.Definitionpequiv_cxfib {FXY : pType} {i : F ->* X} {f : X ->* Y}
`{IsExact purely F X Y i f}
: F <~>* pfiber f
:= Build_pEquiv (cxfib cx_isexact) _.Definitionfiberseq_isexact_purely {FXY : pType} (i : F ->* X) (f : X ->* Y)
`{IsExact purely F X Y i f} : FiberSeq F X Y
:= (f; pequiv_cxfib).(** It's easier to show that [loops] preserves fiber sequences than that it preserves purely-exact sequences. *)
exact (pfiber_fmap_loops fs.1)^-1*.Defined.(** Now we can deduce that [loops] preserves purely-exact sequences. The hardest part is modifying the first map back to [fmap loops i]. *)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsExact purely (fmap loops i) (fmap loops f)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsExact purely (fmap loops i) (fmap loops f)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
fmap loops i ==*
i_fiberseq
(fiberseq_loops (fiberseq_isexact_purely i f))
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n)
(cxfib (iscomplex_ptr n.+1 i f cx_isexact))
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n) tr
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n)
(cxfib (iscomplex_ptr n.+1 i f cx_isexact) o tr)
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n) tr
intros x; rapply isconnected_pred.
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n)
(cxfib (iscomplex_ptr n.+1 i f cx_isexact) o tr)
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
?Goal ==
(funx : F =>
cxfib (iscomplex_ptr n.+1 i f cx_isexact) (tr x))
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n) ?Goal
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
(funx : F =>
functor_hfiber
(funy : X => (to_O_natural (Tr n.+1) f y)^) pt
(cxfib ?Goal1 x)) ==
(funx : F =>
cxfib (iscomplex_ptr n.+1 i f cx_isexact) (tr x))
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n) (cxfib ?Goal1)
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n)
(functor_hfiber
(funy : X => (to_O_natural (Tr n.+1) f y)^) pt)
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
(funx : F =>
functor_hfiber
(funy : X => (to_O_natural (Tr n.+1) f y)^) pt
(cxfib ?Goal1 x)) ==
(funx : F =>
cxfib (iscomplex_ptr n.+1 i f cx_isexact) (tr x))
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n) (cxfib ?Goal1)
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
(funx : F =>
functor_hfiber
(funy : X => (to_O_natural (Tr n.+1) f y)^) pt
(cxfib ?Goal1 x)) ==
(funx : F =>
cxfib (iscomplex_ptr n.+1 i f cx_isexact) (tr x))
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f x: F
((to_O_natural (Tr n.+1) f (i x))^)^ @ ap tr (?Goal x) =
1 @ (ap tr (cx_isexact x) @ 1)
(* This is even simpler than it looks, because for truncations [to_O_natural n.+1 := 1], [to n.+1 := tr], and [cx_const := H]. *)exact (1 @@ (concat_p1 _)^).
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact (Tr n) i f
IsConnMap (Tr n) (cxfib cx_isexact)
exact _.Defined.(** In particular, (n.+1)-truncation takes fiber sequences to n-exact ones. *)
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact purely i f
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact purely i f
IsExact (Tr n) i f
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact purely i f
IsConnMap (Tr n) (cxfib cx_isexact)
H: Univalence n: trunc_index F, X, Y: pType i: F ->* X f: X ->* Y H0: IsExact purely i f z: pfiber f
Contr (hfiber (cxfib cx_isexact) z)
exact (conn_map_isexact (f := f) (i := i) z).Defined.(** ** Connecting maps *)(** It's useful to see [pfib_cxfib] as a degenerate square. *)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
pequiv_pmap_idmap o* i ==* pfib f o* pequiv_cxfib
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
pequiv_pmap_idmap o* i ==* pfib f o* pequiv_cxfib
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
pequiv_pmap_idmap o* i ==* pfib f o* pequiv_cxfib
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
i ==* pfib f o* pequiv_cxfib
symmetry; apply pfib_cxfib.Defined.(** The connecting maps for the long exact sequence of loop spaces, defined as an extension to a fiber sequence. *)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
FiberSeq (loops Y) F X
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
FiberSeq (loops Y) F X
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
loops Y <~>* pfiber i
exact (((pfiber2_loops f) o*E (pequiv_pfiber _ _ (square_pfib_pequiv_cxfib i f)))^-1*).Defined.Definitionconnecting_map {FXY}
(i : F ->* X) (f : X ->* Y) `{IsExact purely F X Y i f}
: loops Y ->* F
:= i_fiberseq (connect_fiberseq i f).
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsExact purely (fmap loops f) (connecting_map i f)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
IsExact purely (fmap loops f) (connecting_map i f)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
(pfiber2_loops f
o*E pequiv_pfiber pequiv_cxfib pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f))^-1*
o* fmap loops f ==*
pfib (pfib i)
o* (loops_inv X o*E pfiber2_loops (pfib f)
o*E pequiv_pfiber
(pequiv_pfiber pequiv_cxfib
pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f))
pequiv_cxfib
(square_pequiv_pfiber pequiv_cxfib
pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f)))^-1*
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
Square
(loops_inv X o*E pfiber2_loops (pfib f)
o*E pequiv_pfiber
(pequiv_pfiber pequiv_cxfib pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f))
pequiv_cxfib
(square_pequiv_pfiber pequiv_cxfib
pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f)))
(pfiber2_loops f
o*E pequiv_pfiber pequiv_cxfib pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f))
(pfib (pfib i)) (fmap loops f)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
Square
(pequiv_pfiber
(pequiv_pfiber pequiv_cxfib pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f)) pequiv_cxfib
(square_pequiv_pfiber pequiv_cxfib
pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f)))
(pequiv_pfiber pequiv_cxfib pequiv_pmap_idmap
(square_pfib_pequiv_cxfib i f)) (pfib (pfib i))
?Goal
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
exact (pfiber2_fmap_loops f).Defined.(** The connecting map associated to a pointed family. *)
Y: pType P: pFam Y
loops Y ->* [P pt, dpoint P]
Y: pType P: pFam Y
loops Y ->* [P pt, dpoint P]
Y: pType P: pFam Y
loops Y -> [P pt, dpoint P]
Y: pType P: pFam Y
?f pt = pt
Y: pType P: pFam Y
loops Y -> [P pt, dpoint P]
Y: pType P: pFam Y l: loops Y
[P pt, dpoint P]
Y: pType P: pFam Y l: loops Y
P pt
apply P.
Y: pType P: pFam Y
(funl : loops Y =>
transport P l (letX := dpoint P in X)) pt = pt
reflexivity.Defined.(** ** Long exact sequences *)RecordLongExactSequence (k : Modality) (N : SuccStr) : Type :=
{
les_carrier : N -> pType;
les_fn : foralln, les_carrier n.+1 ->* les_carrier n;
les_isexact :: foralln, IsExact k (les_fn n.+1) (les_fn n)
}.Coercionles_carrier : LongExactSequence >-> Funclass.Arguments les_fn {k N} S n : rename.(** Long exact sequences are preserved by truncation. *)Definitiontrunc_les `{Univalence} (k : trunc_index) {N : SuccStr}
(S : LongExactSequence purely N)
: LongExactSequence (Tr k) N
:= Build_LongExactSequence
(Tr k) N (funn => pTr k.+1 (S n))
(funn => fmap (pTr k.+1) (les_fn S n)) _.(** ** LES of loop spaces and homotopy groups *)Definitionloops_carrier (FXY : pType) (n : N3) : pType :=
match n with
| (n, inl (inl (inl x))) => Empty_ind _ x
| (n, inl (inl (inr tt))) => iterated_loops n Y
| (n, inl (inr tt)) => iterated_loops n X
| (n, inr tt) => iterated_loops n F
end.(** Starting from a fiber sequence, we can obtain a long purely-exact sequence of loop spaces. *)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
LongExactSequence purely N3
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
LongExactSequence purely N3
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
foralln : N3,
loops_carrier F X Y n.+1 ->* loops_carrier F X Y n
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
(fix F (m : nat) : pType :=
match m with
| 0%nat => X
| m'.+1%nat => loops (F m')
end) n ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => Y
| m'.+1%nat => loops (F m')
end) n
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
(fix F (m : nat) : pType :=
match m with
| 0%nat => F
| m'.+1%nat => loops (F m')
end) n ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => X
| m'.+1%nat => loops (F m')
end) n
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
loops
((fix F (m : nat) : pType :=
match m with
| 0%nat => Y
| m'.+1%nat => loops (F m')
end) n) ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => F
| m'.+1%nat => loops (F m')
end) n
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
IsExact purely ?Goal0?Goal
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
IsExact purely ?Goal1?Goal0
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
IsExact purely ?Goal@{n:=n.+1%nat} ?Goal1
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
(fix F (m : nat) : pType :=
match m with
| 0%nat => X
| m'.+1%nat => loops (F m')
end) n ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => Y
| m'.+1%nat => loops (F m')
end) n
exact (fmap (iterated_loops n) f).
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
(fix F (m : nat) : pType :=
match m with
| 0%nat => F
| m'.+1%nat => loops (F m')
end) n ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => X
| m'.+1%nat => loops (F m')
end) n
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
loops
((fix F (m : nat) : pType :=
match m with
| 0%nat => Y
| m'.+1%nat => loops (F m')
end) n) ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => F
| m'.+1%nat => loops (F m')
end) n
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
IsExact purely ?Goal (fmap (iterated_loops n) f)
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
IsExact purely ?Goal0?Goal
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
(fix F (m : nat) : pType :=
match m with
| 0%nat => F
| m'.+1%nat => loops (F m')
end) n ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => X
| m'.+1%nat => loops (F m')
end) n
exact (fmap (iterated_loops n) i).
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
loops
((fix F (m : nat) : pType :=
match m with
| 0%nat => Y
| m'.+1%nat => loops (F m')
end) n) ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => F
| m'.+1%nat => loops (F m')
end) n
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
F, X, Y: pType i: F ->* X f: X ->* Y H: IsExact purely i f n: +N
loops
((fix F (m : nat) : pType :=
match m with
| 0%nat => Y
| m'.+1%nat => loops (F m')
end) n) ->*
(fix F (m : nat) : pType :=
match m with
| 0%nat => F
| m'.+1%nat => loops (F m')
end) n
all:exact _.Defined.(** And from that, a long exact sequence of homotopy groups (though for now it is just a sequence of pointed sets). *)DefinitionPi_les `{Univalence} {F X Y : pType}
(i : F ->* X) (f : X ->* Y) `{IsExact purely F X Y i f}
: LongExactSequence (Tr (-1)) (N3)
:= trunc_les (-1) (loops_les i f).(** * Classifying fiber sequences *)(** Fiber sequences correspond to pointed maps into the universe. *)
H: Univalence Y, F: pType
(Y ->* [Type, F]) <~> {X : pType & FiberSeq F X Y}
H: Univalence Y, F: pType
(Y ->* [Type, F]) <~> {X : pType & FiberSeq F X Y}
H: Univalence Y, F: pType
?Goal <~> {X : pType & FiberSeq F X Y}
H: Univalence Y, F: pType
(Y ->* [Type, F]) <~> ?Goal
(** To apply [equiv_sigma_pfibration] we need to invert the equivalence on the fiber. *)
H: Univalence Y, F: pType
?Goal <~> {X : pType & FiberSeq F X Y}
H: Univalence Y, F, a: pType a0: a ->* Y
?Goal0 a0 <~> (F <~>* pfiber a0)
exact equiv_pequiv_inverse.
H: Univalence Y, F: pType
(Y ->* [Type, F]) <~>
{a : pType & {a0 : a ->* Y & pfiber a0 <~>* F}}