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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Types. Require Import WildCat. Require Import Pointed.Core. Local Open Scope pointed_scope. (* Pointed equivalence is a reflexive relation. *)

Reflexive pEquiv

Reflexive pEquiv
intro; apply 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 ? ?; apply pequiv_inverse. Defined. (* Pointed equivalences compose. *) Definition pequiv_compose {A B C : pType} (f : A <~>* B) (g : B <~>* C) : A <~>* C := g $oE f. (* Pointed equivalence is a transitive relation. *)

Transitive pEquiv

Transitive pEquiv
intros ? ? ?; apply 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. *) Definition Build_pEquiv' {A B : pType} (f : A <~> B) (p : f (point A) = point B) : A <~>* B := Build_pEquiv _ _ (Build_pMap _ _ f p) _. Arguments Build_pEquiv' & _ _ _ _. (* 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. *) Definition pequiv_adjointify {A B : 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. *) Definition pequiv_adjointify' {A B : 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 A C (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 A C (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}
H: Funext
A, B: pType
e: A <~> B

e pt = pt <~> e^-1 pt = pt
exact (equiv_moveR_equiv_V _ _ oE equiv_path_inverse _ _). Defined.