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 Types.Require Import WildCat.Require Import Pointed.Core.LocalOpen Scope pointed_scope.(* Pointed equivalence is a reflexive relation. *)
Reflexive pEquiv
Reflexive pEquiv
intro; exact pequiv_pmap_idmap.Defined.(* We can probably get rid of the following notation, and use ^-1$ instead. *)Notation"f ^-1*" := (@cate_inv pType _ _ _ _ hasequivs_ptype _ _ f) : pointed_scope.(* Pointed equivalence is a symmetric relation. *)
Symmetric pEquiv
Symmetric pEquiv
intros ? ?; exact pequiv_inverse.Defined.(* Pointed equivalences compose. *)Definitionpequiv_compose {ABC : pType} (f : A <~>* B) (g : B <~>* C)
: A <~>* C
:= g $oE f.(* Pointed equivalence is a transitive relation. *)
Transitive pEquiv
Transitive pEquiv
intros ? ? ?; exact pequiv_compose.Defined.Notation"g o*E f" := (pequiv_compose f g) : pointed_scope.(* Sometimes we wish to construct a pEquiv from an equiv and a proof that it is pointed. *)DefinitionBuild_pEquiv' {AB : pType} (f : A <~> B)
(p : f (point A) = point B)
: A <~>* B := Build_pEquiv (Build_pMap f p) _.(** The [&] is a bidirectionality hint that tells Coq to unify with the typing context after type checking the arguments to the left. In practice, this allows Coq to infer [A] and [B] from the context. *)Arguments Build_pEquiv' {A B} & f p.(* A version of equiv_adjointify for pointed equivalences where all data is pointed. There is a lot of unnecessary data here but sometimes it is easier to prove equivalences using this. *)Definitionpequiv_adjointify {AB : pType} (f : A ->* B) (f' : B ->* A)
(r : f o* f' ==* pmap_idmap) (s : f' o* f == pmap_idmap) : A <~>* B
:= (Build_pEquiv f (isequiv_adjointify f f' r s)).(* In some situations you want the back and forth maps to be pointed but not the sections. *)Definitionpequiv_adjointify' {AB : pType} (f : A ->* B) (f' : B ->* A)
(r : f o f' == idmap) (s : f' o f == idmap) : A <~>* B
:= (Build_pEquiv f (isequiv_adjointify f f' r s)).(** Pointed versions of [moveR_equiv_M] and friends. *)
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: g ==* f^-1* o* h
f o* g ==* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: g ==* f^-1* o* h
f o* g ==* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: g ==* f^-1* o* h
f o* (f^-1* o* h) ==* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: g ==* f^-1* o* h
f o* f^-1* o* h ==* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: g ==* f^-1* o* h
pmap_idmap o* h ==* h
apply pmap_postcompose_idmap.Defined.
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f^-1* o* h ==* g
h ==* f o* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f^-1* o* h ==* g
h ==* f o* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f^-1* o* h ==* g
h ==* f o* (f^-1* o* h)
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f^-1* o* h ==* g
h ==* f o* f^-1* o* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f^-1* o* h ==* g
pmap_idmap o* h ==* f o* f^-1* o* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f^-1* o* h ==* g
pmap_idmap ==* f o* f^-1*
symmetry; apply peisretr.Defined.
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f o* g ==* h
g ==* f^-1* o* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f o* g ==* h
g ==* f^-1* o* h
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f o* g ==* h
g ==* f^-1* o* (f o* g)
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f o* g ==* h
g ==* f^-1* o* f o* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f o* g ==* h
pmap_idmap o* g ==* f^-1* o* f o* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: f o* g ==* h
pmap_idmap ==* f^-1* o* f
symmetry; apply peissect.Defined.
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: h ==* f o* g
f^-1* o* h ==* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: h ==* f o* g
f^-1* o* h ==* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: h ==* f o* g
f^-1* o* (f o* g) ==* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: h ==* f o* g
f^-1* o* f o* g ==* g
A, B, C: pType f: B <~>* C g: A ->* B h: A ->* C p: h ==* f o* g
pmap_idmap o* g ==* g
apply pmap_postcompose_idmap.Defined.
A, B, C: pType f: B ->* C g: A <~>* B h: A ->* C p: f o* g ==* h
f ==* h o* g^-1*
A, B, C: pType f: B ->* C g: A <~>* B h: A ->* C p: f o* g ==* h
f ==* h o* g^-1*
A, B, C: pType f: B ->* C g: A <~>* B h: A ->* C p: f o* g ==* h
f ==* f o* g o* g^-1*
A, B, C: pType f: B ->* C g: A <~>* B h: A ->* C p: f o* g ==* h
f ==* f o* (g o* g^-1*)
A, B, C: pType f: B ->* C g: A <~>* B h: A ->* C p: f o* g ==* h
f o* pmap_idmap ==* f o* (g o* g^-1*)
A, B, C: pType f: B ->* C g: A <~>* B h: A ->* C p: f o* g ==* h
pmap_idmap ==* g o* g^-1*
symmetry; apply peisretr.Defined.
H: Funext A, B, C: pType f: A <~>* B
(B ->** C) <~>* (A ->** C)
H: Funext A, B, C: pType f: A <~>* B
(B ->** C) <~>* (A ->** C)
H: Funext A, B, C: pType f: A <~>* B
(B ->** C) <~> (A ->** C)
H: Funext A, B, C: pType f: A <~>* B
?f pt = pt
H: Funext A, B, C: pType f: A <~>* B
(B ->** C) <~> (A ->** C)
exact (equiv_precompose_cat_equiv f).
H: Funext A, B, C: pType f: A <~>* B
equiv_precompose_cat_equiv f pt = pt
H: Funext A, B, C: pType f: A <~>* B
Build_pMap (fun_ : A => pt)
(ap (fun_ : B => pt) (point_eq f) @ 1) = pconst
by pelim f.Defined.
H: Funext A, B, C: pType f: B <~>* C
(A ->** B) <~>* (A ->** C)
H: Funext A, B, C: pType f: B <~>* C
(A ->** B) <~>* (A ->** C)
H: Funext A, B, C: pType f: B <~>* C
(A ->** B) <~> (A ->** C)
H: Funext A, B, C: pType f: B <~>* C
?f pt = pt
H: Funext A, B, C: pType f: B <~>* C
(A ->** B) <~> (A ->** C)
exact (equiv_postcompose_cat_equiv f).
H: Funext A, B, C: pType f: B <~>* C
equiv_postcompose_cat_equiv f pt = pt
H: Funext A, B, C: pType f: B <~>* C
Build_pMap (fun_ : A => f pt) (1 @ point_eq f) =
pconst
by pelim f.Defined.
H: Funext A, B: pType
(A <~>* B) <~> (B <~>* A)
H: Funext A, B: pType
(A <~>* B) <~> (B <~>* A)
H: Funext A, B: pType
{f : A <~> B & f pt = pt} <~>
{f : B <~> A & f pt = pt}