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.(** * The object classifier *)(** We prove that type families correspond to fibrations [equiv_sigma_fibration] (Theorem 4.8.3) and the projection [pointed_type : pType -> Type] is an object classifier [ispullback_square_objectclassifier] (Theorem 4.8.4). *)(** We denote the type of all maps into a type [Y] as follows, and refer to them "bundles over Y". *)DefinitionSlice (Y : Type@{u}) := { X : Type@{u} & X -> Y }.DefinitionpSlice (Y : pType@{u}) := { X : pType@{u} & X ->* Y }.Definitionsigma_fibration@{u v} {Y : Type@{u}} (P : Y -> Type@{u}) : Slice@{u v} Y
:= (sig@{u u} P; pr1).Definitionsigma_fibration_inverse {Y : Type@{u}} (p : Slice Y) : Y -> Type@{u}
:= hfiber p.2.
H: Univalence Y: Type
IsEquiv sigma_fibration
H: Univalence Y: Type
IsEquiv sigma_fibration
H: Univalence Y: Type
Slice Y -> Y -> Type
H: Univalence Y: Type
sigma_fibration o ?g == idmap
H: Univalence Y: Type
?g o sigma_fibration == idmap
H: Univalence Y: Type
Slice Y -> Y -> Type
exact sigma_fibration_inverse.
H: Univalence Y: Type
sigma_fibration o sigma_fibration_inverse == idmap
A: Type P: A -> Type a: A T: Type t: IsPointed T p: P a = T
transport (funb : A => {c : pType & P b = c}) 1
(topmap P (a; transport idmap p^ pt);
objectclassifier_square P (a; transport idmap p^ pt)) =
([T, t]; p)
byinduction p.
A: Type P: A -> Type
(funX : Pullback P pointed_type =>
(fun (a : A) (proj2 : {c : pType & P a = c}) =>
(fun (F : pType) (p : P a = F) =>
(a; transport idmap p^ pt)) proj2.1 proj2.2) X.1
X.2) o pullback_corec (objectclassifier_square P) ==
idmap
reflexivity.Defined.(** ** Classifying bundles with specified fiber *)(** Bundles over [B] with fiber [F] correspond to pointed maps into the universe pointed at [F]. *)
{a : Type &
{a0 : a &
{a1 : a -> Y &
{a2 : a1 a0 = pt &
{a3 : hfiber a1 pt <~> F & a3 (a0; a2) = pt}}}}} <~>
{p : pSlice Y & pfiber p.2 <~>* F}
make_equiv.Defined.Definitionequiv_sigma_pfibration@{u v +} `{Univalence} {Y F : pType@{u}}
: (Y ->* [Type@{u}, F]) <~> { p : pSlice@{u v} Y & pfiber p.2 <~>* F}
:= equiv_pfiber_fibration_pfibration oE equiv_sigma_fibration_p.(** * The classifier for O-local types *)(** Families of O-local types correspond to bundles with O-local fibers. *)
H: Univalence O: Subuniverse Y: Type
(Y -> Type_ O) <~>
{p : {X : Type & X -> Y} & MapIn O p.2}
H: Univalence O: Subuniverse Y: Type
(Y -> Type_ O) <~>
{p : {X : Type & X -> Y} & MapIn O p.2}
H: Univalence O: Subuniverse Y: Type
{f : Y -> Type & forallx : Y, In O (f x)} <~>
{p : {X : Type & X -> Y} & MapIn O p.2}
H: Univalence O: Subuniverse Y: Type P: Y -> Type
(forallx : Y, In O (P x)) <~> MapIn O pr1
rapply equiv_forall_inO_mapinO_pr1.Defined.(** ** Classifying O-local bundles with specified fiber *)(** We consider a pointed base [Y], and the universe of O-local types [Type_ O] pointed at some O-local type [F]. *)(** Pointed maps into [Type_ O] correspond to O-local bundles with fiber [F] over the base point of [Y]. *)
H: Univalence O: Subuniverse Y: pType F: Type inO: In O F
(Y ->* [Type_ O, (F; inO)]) <~>
{p : {q : Slice Y & MapIn O q.2} &
hfiber (p.1).2 pt <~> F}
H: Univalence O: Subuniverse Y: pType F: Type inO: In O F
(Y ->* [Type_ O, (F; inO)]) <~>
{p : {q : Slice Y & MapIn O q.2} &
hfiber (p.1).2 pt <~> F}
H: Univalence O: Subuniverse Y: pType F: Type inO: In O F
{f : Y -> Type_ O & f pt = (F; inO)} <~>
{p : {q : Slice Y & MapIn O q.2} &
hfiber (p.1).2 pt <~> F}
H: Univalence O: Subuniverse Y: pType F: Type inO: In O F P: Y -> Type_ O
P pt = (F; inO) <~> (hfiber pr1 pt <~> F)
H: Univalence O: Subuniverse Y: pType F: Type inO: In O F P: Y -> Type_ O
(P pt).1 = F <~> (hfiber pr1 pt <~> F)
H: Univalence O: Subuniverse Y: pType F: Type inO: In O F P: Y -> Type_ O
((P pt).1 <~> F) <~> (hfiber pr1 pt <~> F)
H: Univalence O: Subuniverse Y: pType F: Type inO: In O F P: Y -> Type_ O
(P pt).1 <~> hfiber pr1 pt
exact (hfiber_fibration (point Y) _).Defined.(** When the base [Y] is connected, the fibers being O-local follow from the fact that the fiber [F] over the base point is. *)
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F
(Y ->* [Type_ O, (F; inO)]) <~>
{p : Slice Y & hfiber p.2 pt <~> F}
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F
(Y ->* [Type_ O, (F; inO)]) <~>
{p : Slice Y & hfiber p.2 pt <~> F}
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F
{p : {q : Slice Y & MapIn O q.2} &
hfiber (p.1).2 pt <~> F} <~>
{p : Slice Y & hfiber p.2 pt <~> F}
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F
{a : {X : Type & X -> Y} &
{_ : MapIn O a.2 & hfiber a.2 pt <~> F}} <~>
{p : Slice Y & hfiber p.2 pt <~> F}
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F a: {X : Type & X -> Y}
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F a: {X : Type & X -> Y}
{_ : hfiber a.2 pt <~> F & MapIn O a.2} <~>
(hfiber a.2 pt <~> F)
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F a: {X : Type & X -> Y} e: hfiber a.2 pt <~> F
Contr (MapIn O a.2)
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F a: {X : Type & X -> Y} e: hfiber a.2 pt <~> F
MapIn O a.2
H: Univalence O: Subuniverse Y: pType H0: IsConnected (Tr 0) Y F: Type inO: In O F a: {X : Type & X -> Y} e: hfiber a.2 pt <~> F
In O (hfiber a.2 pt)
exact (inO_equiv_inO F e^-1).Defined.(** *** Classifying O-local bundles with specified pointed fiber *)(** When the fiber [F] is pointed, the right-hand side can be upgraded to pointed fiber sequences with O-local fibers. *)
H: Univalence O: Subuniverse Y, F: pType inO: In O F
(Y ->* [Type_ O, (F; inO)]) <~>
{p : {q : pSlice Y & MapIn O q.2} &
pfiber (p.1).2 <~>* F}
H: Univalence O: Subuniverse Y, F: pType inO: In O F
(Y ->* [Type_ O, (F; inO)]) <~>
{p : {q : pSlice Y & MapIn O q.2} &
pfiber (p.1).2 <~>* F}
H: Univalence O: Subuniverse Y, F: pType inO: In O F
{p : {q : Slice Y & MapIn O q.2} &
hfiber (p.1).2 pt <~> F} <~>
{p : {q : pSlice Y & MapIn O q.2} &
pfiber (p.1).2 <~>* F}
H: Univalence O: Subuniverse Y, F: pType inO: In O F
{aq : {a : {X : Type & X -> Y} & hfiber a.2 pt <~> F}
& MapIn O (aq.1).2} <~>
{p : {q : pSlice Y & MapIn O q.2} &
pfiber (p.1).2 <~>* F}
H: Univalence O: Subuniverse Y, F: pType inO: In O F
{aq : {a : {X : Type & X -> Y} & hfiber a.2 pt <~> F}
& MapIn O (aq.1).2} <~>
{ap : {a : {X : pType & X ->* Y} & pfiber a.2 <~>* F}
& MapIn O (ap.1).2}
by rapply (equiv_functor_sigma' equiv_pfiber_fibration_pfibration).Defined.(** When moreover the base [Y] is connected, the right-hand side is exactly the type of pointed fiber sequences, since the fibers being O-local follow from [F] being O-local and [Y] connected. *)Definitionequiv_sigma_pfibration_O_connected@{u v +} `{Univalence} (O : Subuniverse)
{Y F : pType@{u}} `{IsConnected 0 Y} `{inO : In O F}
: (Y ->* [Type_ O, (pointed_type F; inO)])
<~> { p : pSlice@{u v} Y & pfiber p.2 <~>* F }
:= equiv_pfiber_fibration_pfibration oE equiv_sigma_fibration_Op_connected.(** As a corollary, pointed maps into the universe of O-local types are just pointed maps into the universe, when the base [Y] is connected. *)Definitionequiv_pmap_typeO_type_connected `{Univalence} {O : Subuniverse}
{Y : pType@{u}} `{IsConnected 0 Y} {F : Type@{u}} `{inO : In O F}
: (Y ->* [Type_ O, (F; inO)]) <~> (Y ->* [Type@{u}, F])
:= equiv_sigma_fibration_p^-1 oE equiv_sigma_fibration_Op_connected.