Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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.
(* -*- mode: coq; mode: visual-line -*- *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Types.Sigma.LocalOpen Scope path_scope.(** * Null homotopies of maps *)SectionNullHomotopy.Context `{Funext}.(** Geometrically, a nullhomotopy of a map [f : X -> Y] is an extension of [f] to a map [Cone X -> Y]. One might more simply call it e.g. [Constant f], but that is a little ambiguous: it could also reasonably mean e.g. a factorisation of [f] through [ Trunc -1 X ]. (Should the unique map [0 -> Y] be constant in one way, or in [Y]-many ways?) *)DefinitionNullHomotopy {XY : Type} (f : X -> Y)
:= {y : Y & forallx:X, f x = y}.
H: Funext n: trunc_index X, Y: Type f: X -> Y IsTrunc0: IsTrunc n Y
IsTrunc n (NullHomotopy f)
H: Funext n: trunc_index X, Y: Type f: X -> Y IsTrunc0: IsTrunc n Y
IsTrunc n (NullHomotopy f)
H: Funext n: trunc_index X, Y: Type f: X -> Y IsTrunc0: IsTrunc n Y
foralla : Y, IsTrunc n (forallx : X, f x = a)
H: Funext n: trunc_index X, Y: Type f: X -> Y IsTrunc0: IsTrunc n Y y: Y
IsTrunc n (forallx : X, f x = y)
H: Funext n: trunc_index X, Y: Type f: X -> Y IsTrunc0: IsTrunc n Y y: Y
foralla : X, IsTrunc n (f a = y)
H: Funext n: trunc_index X, Y: Type f: X -> Y IsTrunc0: IsTrunc n Y y: Y x: X
IsTrunc n (f x = y)
apply istrunc_paths'.Defined.
H: Funext X, Y: Type f, g: X -> Y p: f == g
NullHomotopy f -> NullHomotopy g
H: Funext X, Y: Type f, g: X -> Y p: f == g
NullHomotopy f -> NullHomotopy g
H: Funext X, Y: Type f, g: X -> Y p: f == g y: Y e: forallx : X, f x = y
NullHomotopy g
H: Funext X, Y: Type f, g: X -> Y p: f == g y: Y e: forallx : X, f x = y
forallx : X, g x = y
intros x; exact ((p x)^ @ e x).Defined.
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z
NullHomotopy g -> NullHomotopy (g o f)
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z
NullHomotopy g -> NullHomotopy (g o f)
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z z: Z e: forallx : Y, g x = z
NullHomotopy (funx : X => g (f x))
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z z: Z e: forallx : Y, g x = z
forallx : X, g (f x) = z
intros x; exact (e (f x)).Defined.
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z
NullHomotopy f -> NullHomotopy (g o f)
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z
NullHomotopy f -> NullHomotopy (g o f)
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z y: Y e: forallx : X, f x = y
NullHomotopy (funx : X => g (f x))
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z y: Y e: forallx : X, f x = y
forallx : X, g (f x) = g y
intros x; exact (ap g (e x)).Defined.
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv g
NullHomotopy (g o f) -> NullHomotopy f
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv g
NullHomotopy (g o f) -> NullHomotopy f
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv g z: Z e: forallx : X, g (f x) = z
NullHomotopy f
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv g z: Z e: forallx : X, g (f x) = z
forallx : X, f x = g^-1 z
intros x; apply moveL_equiv_V, e.Defined.
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f
NullHomotopy (g o f) -> NullHomotopy g
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f
NullHomotopy (g o f) -> NullHomotopy g
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f z: Z e: forallx : X, g (f x) = z
NullHomotopy g
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f z: Z e: forallx : X, g (f x) = z
forallx : Y, g x = z
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f z: Z e: forallx : X, g (f x) = z y: Y
g y = g (f (f^-1 y))
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f z: Z e: forallx : X, g (f x) = z y: Y
g (f (f^-1 y)) = z
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f z: Z e: forallx : X, g (f x) = z y: Y
g y = g (f (f^-1 y))
symmetry; apply ap, eisretr.
H: Funext X, Y, Z: Type f: X -> Y g: Y -> Z H0: IsEquiv f z: Z e: forallx : X, g (f x) = z y: Y
g (f (f^-1 y)) = z
apply e.Defined.
H: Funext X, Y: Type f: X -> Y x1, x2: X
NullHomotopy f -> NullHomotopy (ap f)
H: Funext X, Y: Type f: X -> Y x1, x2: X
NullHomotopy f -> NullHomotopy (ap f)
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y
NullHomotopy (ap f)
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y
f x1 = f x2
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y
forallx : x1 = x2, ap f x = ?y
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y
f x1 = f x2
exact (e x1 @ (e x2)^).
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y
forallx : x1 = x2, ap f x = e x1 @ (e x2)^
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y p: x1 = x2
ap f p = e x1 @ (e x2)^
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y p: x1 = x2
ap f p @ e x2 = e x1
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y p: x1 = x2
e x1 @ ap (fun_ : X => y) p = e x1
H: Funext X, Y: Type f: X -> Y x1, x2: X y: Y e: forallx : X, f x = y p: x1 = x2