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]
LocalOpen Scope pointed_scope.(** * [O]-connected covers *)(** Given a reflective subuniverse [O], for any type [X] and [x : O X], the [O]-connected cover of [X] at [x] is the fibre of [to O X] at [x]. *)DefinitionO_cover@{u} `{O : ReflectiveSubuniverse@{u}}
(X : Type@{u}) (x : O X) : Type@{u}
:= hfiber (to O _) x.(** The "[O]-connected" cover is in fact [O]-connected when [O] is a modality, using [isconnected_hfiber_conn_map]. Since Coq can infer this using typeclasses, we don't restate it here. *)(** Characterization of paths in [O_cover] is given by [equiv_path_hfiber]. *)(* If [x] is an actual point of [X], then the connected cover is pointed. *)DefinitionO_pcover@{u} (O : ReflectiveSubuniverse@{u})
(X : Type@{u}) (x : X) : pType@{u}
:= pfiber@{u u u} (pto O [X,x]).(** Covers commute with products *)
O: ReflectiveSubuniverse X, Y: pType
O_pcover O (X * Y) pt <~>*
O_pcover O X pt * O_pcover O Y pt
O: ReflectiveSubuniverse X, Y: pType
O_pcover O (X * Y) pt <~>*
O_pcover O X pt * O_pcover O Y pt
O: ReflectiveSubuniverse X, Y: pType
O_pcover O (X * Y) pt <~>
[O_pcover O X pt * O_pcover O Y pt, ispointed_prod]
O: ReflectiveSubuniverse X, Y: pType
?f pt = pt
O: ReflectiveSubuniverse X, Y: pType
O_pcover O (X * Y) pt <~>
[O_pcover O X pt * O_pcover O Y pt, ispointed_prod]
O: ReflectiveSubuniverse X, Y: pType
{x : _ & ?Goal0 x} <~>
[O_pcover O X pt * O_pcover O Y pt, ispointed_prod]
O: ReflectiveSubuniverse X, Y: pType
foralla : [X * Y, pt],
pto O [X * Y, pt] a = pt <~> ?Goal0 a
O: ReflectiveSubuniverse X, Y: pType
{a : [X * Y, pt] &
((to O X (fst a) = to O X pt) *
(to O Y (snd a) = to O Y pt))%type} <~>
[O_pcover O X pt * O_pcover O Y pt, ispointed_prod]
napply equiv_sigma_prod_prod.
O: ReflectiveSubuniverse X, Y: pType
(equiv_sigma_prod_prod
(funx : [X, pt] => pto O [X, pt] x = pt)
(funx : [Y, pt] => pto O [Y, pt] x = pt)
oE equiv_functor_sigma_id
(funa : [X * Y, pt] => equiv_path_O_prod O)) pt =
pt
O: ReflectiveSubuniverse X, Y: pType
(pt;
ap fst
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt))) = pt
O: ReflectiveSubuniverse X, Y: pType
(pt;
ap snd
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt))) = pt
O: ReflectiveSubuniverse X, Y: pType
pt = pt
O: ReflectiveSubuniverse X, Y: pType
transport (funx : X => to O X x = ispointed_O X)
?p
(ap fst
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt))) =
point_eq (pto O [X, pt])
O: ReflectiveSubuniverse X, Y: pType
pt = pt
O: ReflectiveSubuniverse X, Y: pType
transport (funx : Y => to O Y x = ispointed_O Y)
?p0
(ap snd
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt))) =
point_eq (pto O [Y, pt])
O: ReflectiveSubuniverse X, Y: pType
transport (funx : X => to O X x = ispointed_O X) 1
(ap fst
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt))) =
point_eq (pto O [X, pt])
O: ReflectiveSubuniverse X, Y: pType
transport (funx : Y => to O Y x = ispointed_O Y) 1
(ap snd
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt))) =
point_eq (pto O [Y, pt])
O: ReflectiveSubuniverse X, Y: pType
ap fst
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt)) = 1
O: ReflectiveSubuniverse X, Y: pType
ap snd
(((O_rec_beta (O_prod_unit O X Y) (pt, pt))^ @ 1) @
O_rec_beta (O_prod_unit O X Y) (pt, pt)) = 1
all: byrewrite concat_p1, concat_Vp.Defined.(** ** Functoriality of [O_cover] *)(** Given [X] and [x : O X], any map [f : X -> Y] out of [X] induces a map [O_cover X x -> O_cover Y (O_functor O f x)]. *)Definitionfunctor_O_cover@{u v} `{O : ReflectiveSubuniverse} {X Y : Type@{u}}
(f : X -> Y) (x : O X) : O_cover@{u} X x -> O_cover@{u} Y (O_functor O f x)
:= functor_hfiber (f:=to O _) (g:=to O _)
(h:=f) (k:=O_functor O f) (to_O_natural O f) x.Definitionequiv_functor_O_cover `{O : ReflectiveSubuniverse}
{X Y : Type} (f : X -> Y) `{IsEquiv _ _ f} (x : O X)
: O_cover X x <~> O_cover Y (O_functor O f x)
:= Build_Equiv _ _ (functor_O_cover f x) _.(** *** Pointed functoriality *)Definitionpfunctor_O_pcover `{O : ReflectiveSubuniverse} {X Y : pType}
(f : X ->* Y) : O_pcover O X pt ->* O_pcover O Y pt
:= functor_pfiber (pto_O_natural O f).Definitionpequiv_pfunctor_O_pcover `{O : ReflectiveSubuniverse} {X Y : pType}
(f : X ->* Y) `{IsEquiv _ _ f} : O_pcover O X pt <~>* O_pcover O Y pt
:= Build_pEquiv (pfunctor_O_pcover f) _.(** In the case of truncations, [ptr_natural] gives a better proof of pointedness. *)Definitionpfunctor_pTr_pcover `{n : trunc_index} {X Y : pType}
(f : X ->* Y) : O_pcover (Tr n) X pt ->* O_pcover (Tr n) Y pt
:= functor_pfiber (ptr_natural n f).Definitionpequiv_pfunctor_pTr_pcover `{n : trunc_index}
{X Y : pType} (f : X ->* Y) `{IsEquiv _ _ f}
: O_pcover (Tr n) X pt <~>* O_pcover (Tr n) Y pt
:= Build_pEquiv (pfunctor_pTr_pcover f) _.(** * Components *)(** Path components are given by specializing to [O] being set-truncation. *)Definitioncomp := O_cover (O:=Tr 0).Definitionpcomp := O_pcover (Tr 0).Definitionpfunctor_pcomp {XY : pType} := @pfunctor_pTr_pcover (-1) X Y.Definitionpequiv_pfunctor_pcomp {XY : pType}
:= @pequiv_pfunctor_pTr_pcover (-1) X Y.(** If a property holds at a given point, then it holds for the whole component. This yields equivalences like the following: *)
H: Univalence X: Type x: X P: X -> Type H0: forallx : X, IsHProp (P x) Px: P x
comp {x : _ & P x} (tr (x; Px)) <~> comp X (tr x)
H: Univalence X: Type x: X P: X -> Type H0: forallx : X, IsHProp (P x) Px: P x
comp {x : _ & P x} (tr (x; Px)) <~> comp X (tr x)
H: Univalence X: Type x: X P: X -> Type H0: forallx : X, IsHProp (P x) Px: P x
{x0 : {x : _ & P x} &
to (Tr 0) {x : _ & P x} x0 = tr (x; Px)} <~>
{x0 : X & to (Tr 0) X x0 = tr x}
H: Univalence X: Type x: X P: X -> Type H0: forallx : X, IsHProp (P x) Px: P x