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]
(** * Pointed sections of pointed maps *)LocalOpen Scope pointed_scope.(* The type of pointed sections of a pointed map. *)DefinitionpSect {AB : pType} (f : A ->* B)
:= { s : B ->* A & f o* s ==* pmap_idmap }.
A, B: pType f: A ->* B
{s : B -> A &
{p : s pt = pt &
{H : f o s == idmap & H pt = ap f p @ point_eq f}}} <~>
pSect f
A, B: pType f: A ->* B
{s : B -> A &
{p : s pt = pt &
{H : f o s == idmap & H pt = ap f p @ point_eq f}}} <~>
pSect f
A, B: pType f: A ->* B
{s : B -> A &
{p : s pt = pt &
{H : f o s == idmap & H pt = ap f p @ point_eq f}}} <~>
{s : B -> A &
{p : s pt = pt &
{H : f o s == idmap &
H pt = (ap f p @ point_eq f) @ 1}}}
A, B: pType f: A ->* B
{s : B -> A &
{p : s pt = pt &
{H : f o s == idmap &
H pt = (ap f p @ point_eq f) @ 1}}} <~> pSect f
A, B: pType f: A ->* B
{s : B -> A &
{p : s pt = pt &
{H : f o s == idmap & H pt = ap f p @ point_eq f}}} <~>
{s : B -> A &
{p : s pt = pt &
{H : f o s == idmap &
H pt = (ap f p @ point_eq f) @ 1}}}
A, B: pType f: A ->* B a: B -> A a0: a pt = pt a1: (funx : B => f (a x)) == idmap
a1 pt = ap f a0 @ point_eq f <~>
a1 pt = (ap f a0 @ point_eq f) @ 1
A, B: pType f: A ->* B a: B -> A a0: a pt = pt a1: (funx : B => f (a x)) == idmap
ap f a0 @ point_eq f = (ap f a0 @ point_eq f) @ 1
exact (concat_p1 _)^.Defined.(** Any pointed equivalence over [A] induces an equivalence between pointed sections. *)
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t
pSect f <~> pSect g
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t
pSect f <~> pSect g
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t
(A ->* B) <~> (A ->* C)
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t
foralla : A ->* B,
(funs : A ->* B => f o* s ==* pmap_idmap) a <~>
(funs : A ->* C => g o* s ==* pmap_idmap) (?f a)
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t
foralla : A ->* B,
(funs : A ->* B => f o* s ==* pmap_idmap) a <~>
(funs : A ->* C => g o* s ==* pmap_idmap)
(pequiv_pequiv_postcompose t a)
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t s: A ->* B
f o* s ==* pmap_idmap <~> g o* (t o* s) ==* pmap_idmap
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t s: A ->* B
g o* (t o* s) ==* f o* s
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t s: A ->* B
g o* t o* s ==* f o* s
H: Funext A, B, C: pType f: B ->* A g: C ->* A t: B <~>* C h: f ==* g o* t s: A ->* B
g o* t ==* f
exact h^*.Defined.(** Pointed sections of [psnd : A * B ->* B] correspond to pointed maps [B ->* A]. *)
H: Funext A, B: pType
pSect psnd <~> (B ->* A)
H: Funext A, B: pType
pSect psnd <~> (B ->* A)
H: Funext A, B: pType
{s : B ->* A * B & psnd o* s ==* pmap_idmap} <~>
(B ->* A)
H: Funext A, B: pType
{s : B ->* A * B & psnd o* s ==* pmap_idmap} <~>
{s : (B ->* A) * (B ->* B) & snd s ==* pmap_idmap}
H: Funext A, B: pType
{s : (B ->* A) * (B ->* B) & snd s ==* pmap_idmap} <~>
(B ->* A)
H: Funext A, B: pType
{s : B ->* A * B & psnd o* s ==* pmap_idmap} <~>
{s : (B ->* A) * (B ->* B) & snd s ==* pmap_idmap}
H: Funext A, B: pType
foralla : pForall B
{|
pfam_pr1 :=
funa : B =>
(pfam_const A a * pfam_const B a)%type;
dpoint :=
(dpoint (pfam_const A),
dpoint (pfam_const B))
|},
(funs : B ->* A * B => psnd o* s ==* pmap_idmap) a <~>
(funs : (B ->* A) * (B ->* B) => snd s ==* pmap_idmap)
((equiv_pprod_coind (pfam_const A) (pfam_const B))^-1%equiv
a)
H: Funext A, B: pType
foralla : pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|},
psnd o* a ==* pmap_idmap <~>
{|
pointed_fun := funx : B => snd (a x);
dpoint_eq := ap snd (dpoint_eq a)
|} ==* pmap_idmap
H: Funext A, B: pType s: pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|}
psnd o* s ==* pmap_idmap <~>
{|
pointed_fun := funx : B => snd (s x);
dpoint_eq := ap snd (dpoint_eq s)
|} ==* pmap_idmap
H: Funext A, B: pType s: pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|}
{|
pointed_fun := funx : B => snd (s x);
dpoint_eq := ap snd (dpoint_eq s)
|} ==* psnd o* s
H: Funext A, B: pType s: pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|}
{|
pointed_fun := funx : B => snd (s x);
dpoint_eq := ap snd (dpoint_eq s)
|} == psnd o* s
H: Funext A, B: pType s: pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|}
?p pt =
dpoint_eq
{|
pointed_fun := funx : B => snd (s x);
dpoint_eq := ap snd (dpoint_eq s)
|} @ (dpoint_eq (psnd o* s))^
H: Funext A, B: pType s: pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|}
(funx0 : B => 1) pt =
dpoint_eq
{|
pointed_fun := funx : B => snd (s x);
dpoint_eq := ap snd (dpoint_eq s)
|} @ (dpoint_eq (psnd o* s))^
H: Funext A, B: pType s: pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|}
1 = ap snd (dpoint_eq s) @ (ap snd (point_eq s) @ 1)^
H: Funext A, B: pType s: pForall B
{|
pfam_pr1 := fun_ : B => (A * B)%type;
dpoint := (pt, pt)
|}
1 @ (ap snd (point_eq s) @ 1) = ap snd (dpoint_eq s)
exact (concat_1p _ @ concat_p1 _).
H: Funext A, B: pType
{s : (B ->* A) * (B ->* B) & snd s ==* pmap_idmap} <~>
(B ->* A)
H: Funext A, B: pType
{s : (B ->* A) * (B ->* B) & snd s = pmap_idmap} <~>
(B ->* A)
H: Funext A, B: pType
{x : {_ : B ->* A & B ->* B} & x.2 = pmap_idmap} <~>
(B ->* A)
H: Funext A, B: pType
{_ : B ->* A & {p : B ->* B & p = pmap_idmap}} <~>
(B ->* A)