feat(pointed/equiv): add more theorems
The theorems are mostly about the interaction between pointed equivalences and pointed homotopies Some of these theorems were missing for (unpointed) equivalences, so I also added them there
This commit is contained in:
parent
eea2a1ac91
commit
6cdbc0f79f
3 changed files with 146 additions and 17 deletions
|
@ -198,7 +198,7 @@ namespace is_equiv
|
||||||
end
|
end
|
||||||
|
|
||||||
section
|
section
|
||||||
variables {A B : Type} {f : A → B} [Hf : is_equiv f] {a : A} {b : B}
|
variables {A B C : Type} {f : A → B} [Hf : is_equiv f] {a : A} {b : B} {g : B → C} {h : A → C}
|
||||||
include Hf
|
include Hf
|
||||||
|
|
||||||
--Rewrite rules
|
--Rewrite rules
|
||||||
|
@ -213,6 +213,20 @@ namespace is_equiv
|
||||||
|
|
||||||
definition eq_inv_of_eq (p : f a = b) : a = f⁻¹ b :=
|
definition eq_inv_of_eq (p : f a = b) : a = f⁻¹ b :=
|
||||||
(inv_eq_of_eq p⁻¹)⁻¹
|
(inv_eq_of_eq p⁻¹)⁻¹
|
||||||
|
|
||||||
|
variable (f)
|
||||||
|
definition homotopy_of_homotopy_inv' (p : g ~ h ∘ f⁻¹) : g ∘ f ~ h :=
|
||||||
|
λa, p (f a) ⬝ ap h (left_inv f a)
|
||||||
|
|
||||||
|
definition homotopy_of_inv_homotopy' (p : h ∘ f⁻¹ ~ g) : h ~ g ∘ f :=
|
||||||
|
λa, ap h (left_inv f a)⁻¹ ⬝ p (f a)
|
||||||
|
|
||||||
|
definition inv_homotopy_of_homotopy' (p : h ~ g ∘ f) : h ∘ f⁻¹ ~ g :=
|
||||||
|
λb, p (f⁻¹ b) ⬝ ap g (right_inv f b)
|
||||||
|
|
||||||
|
definition homotopy_inv_of_homotopy' (p : g ∘ f ~ h) : g ~ h ∘ f⁻¹ :=
|
||||||
|
λb, ap g (right_inv f b)⁻¹ ⬝ p (f⁻¹ b)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--Transporting is an equivalence
|
--Transporting is an equivalence
|
||||||
|
@ -364,6 +378,23 @@ namespace equiv
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
section
|
||||||
|
variables {A B C : Type} (f : A ≃ B) {a : A} {b : B} {g : B → C} {h : A → C}
|
||||||
|
|
||||||
|
definition homotopy_of_homotopy_inv (p : g ~ h ∘ f⁻¹) : g ∘ f ~ h :=
|
||||||
|
homotopy_of_homotopy_inv' f p
|
||||||
|
|
||||||
|
definition homotopy_of_inv_homotopy (p : h ∘ f⁻¹ ~ g) : h ~ g ∘ f :=
|
||||||
|
homotopy_of_inv_homotopy' f p
|
||||||
|
|
||||||
|
definition inv_homotopy_of_homotopy (p : h ~ g ∘ f) : h ∘ f⁻¹ ~ g :=
|
||||||
|
inv_homotopy_of_homotopy' f p
|
||||||
|
|
||||||
|
definition homotopy_inv_of_homotopy (p : g ∘ f ~ h) : g ~ h ∘ f⁻¹ :=
|
||||||
|
homotopy_inv_of_homotopy' f p
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
namespace ops
|
namespace ops
|
||||||
postfix ⁻¹ := equiv.symm -- overloaded notation for inverse
|
postfix ⁻¹ := equiv.symm -- overloaded notation for inverse
|
||||||
|
|
|
@ -7,7 +7,7 @@ Ported from Coq HoTT
|
||||||
-/
|
-/
|
||||||
|
|
||||||
import arity .eq .bool .unit .sigma .nat.basic prop_trunc
|
import arity .eq .bool .unit .sigma .nat.basic prop_trunc
|
||||||
open is_trunc eq prod sigma nat equiv option is_equiv bool unit algebra equiv.ops
|
open is_trunc eq prod sigma nat equiv option is_equiv bool unit algebra equiv.ops sigma.ops
|
||||||
|
|
||||||
structure pointed [class] (A : Type) :=
|
structure pointed [class] (A : Type) :=
|
||||||
(point : A)
|
(point : A)
|
||||||
|
@ -301,20 +301,18 @@ namespace pointed
|
||||||
{ esimp, exact !con.left_inv⁻¹}},
|
{ esimp, exact !con.left_inv⁻¹}},
|
||||||
end
|
end
|
||||||
|
|
||||||
-- set_option pp.notation false
|
definition pmap_equiv_right (A : Type*) (B : Type)
|
||||||
-- definition pmap_equiv_right (A : Type*) (B : Type)
|
: (Σ(b : B), A →* (pointed.Mk b)) ≃ (A → B) :=
|
||||||
-- : (Σ(b : B), A →* (pointed.Mk b)) ≃ (A → B) :=
|
begin
|
||||||
-- begin
|
fapply equiv.MK,
|
||||||
-- fapply equiv.MK,
|
{ intro u a, exact pmap.to_fun u.2 a},
|
||||||
-- { intro u a, cases u with b f, cases f with f p, esimp at f, exact f a},
|
{ intro f, refine ⟨f pt, _⟩, fapply pmap.mk,
|
||||||
-- { intro f, refine ⟨f pt, _⟩, fapply pmap.mk,
|
intro a, esimp, exact f a,
|
||||||
-- intro a, esimp, exact f a,
|
reflexivity},
|
||||||
-- reflexivity},
|
{ intro f, reflexivity},
|
||||||
-- { intro f, reflexivity},
|
{ intro u, cases u with b f, cases f with f p, esimp at *, induction p,
|
||||||
-- { intro u, cases u with b f, cases f with f p, esimp at *, apply sigma_eq p,
|
reflexivity}
|
||||||
-- esimp, apply sorry
|
end
|
||||||
-- }
|
|
||||||
-- end
|
|
||||||
|
|
||||||
definition pmap_bool_equiv (B : Type*) : (pbool →* B) ≃ B :=
|
definition pmap_bool_equiv (B : Type*) : (pbool →* B) ≃ B :=
|
||||||
begin
|
begin
|
||||||
|
@ -377,6 +375,15 @@ namespace pointed
|
||||||
{ reflexivity}
|
{ reflexivity}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
definition ap1_compose_pinverse (f : A →* B) : ap1 f ∘* pinverse ~* pinverse ∘* ap1 f :=
|
||||||
|
begin
|
||||||
|
fconstructor,
|
||||||
|
{ intro p, esimp, refine !con.assoc ⬝ _ ⬝ !con_inv⁻¹, apply whisker_left,
|
||||||
|
refine whisker_right !ap_inv _ ⬝ _ ⬝ !con_inv⁻¹, apply whisker_left,
|
||||||
|
exact !inv_inv⁻¹},
|
||||||
|
{ induction B with B b, induction f with f pf, esimp at *, induction pf, reflexivity},
|
||||||
|
end
|
||||||
|
|
||||||
/- categorical properties of pointed homotopies -/
|
/- categorical properties of pointed homotopies -/
|
||||||
|
|
||||||
protected definition phomotopy.refl [constructor] [refl] (f : A →* B) : f ~* f :=
|
protected definition phomotopy.refl [constructor] [refl] (f : A →* B) : f ~* f :=
|
||||||
|
|
|
@ -7,7 +7,7 @@ Ported from Coq HoTT
|
||||||
-/
|
-/
|
||||||
|
|
||||||
|
|
||||||
import .equiv
|
import .equiv cubical.square
|
||||||
|
|
||||||
open eq is_equiv equiv equiv.ops pointed is_trunc
|
open eq is_equiv equiv equiv.ops pointed is_trunc
|
||||||
|
|
||||||
|
@ -19,6 +19,9 @@ structure pequiv (A B : Type*) extends equiv A B, pmap A B
|
||||||
|
|
||||||
namespace pointed
|
namespace pointed
|
||||||
|
|
||||||
|
attribute pequiv._trans_of_to_pmap pequiv._trans_of_to_equiv pequiv.to_pmap pequiv.to_equiv
|
||||||
|
[unfold 3]
|
||||||
|
|
||||||
variables {A B C : Type*}
|
variables {A B C : Type*}
|
||||||
|
|
||||||
/- pointed equivalences -/
|
/- pointed equivalences -/
|
||||||
|
@ -96,4 +99,92 @@ namespace pointed
|
||||||
infix ` ⬝e*p `:75 := peconcat_eq
|
infix ` ⬝e*p `:75 := peconcat_eq
|
||||||
infix ` ⬝pe* `:75 := eq_peconcat
|
infix ` ⬝pe* `:75 := eq_peconcat
|
||||||
|
|
||||||
|
local attribute pequiv.symm [constructor]
|
||||||
|
definition pleft_inv (f : A ≃* B) : f⁻¹ᵉ* ∘* f ~* pid A :=
|
||||||
|
phomotopy.mk (left_inv f)
|
||||||
|
abstract begin
|
||||||
|
esimp, rewrite ap_inv, symmetry, apply con_inv_cancel_left
|
||||||
|
end end
|
||||||
|
|
||||||
|
definition pright_inv (f : A ≃* B) : f ∘* f⁻¹ᵉ* ~* pid B :=
|
||||||
|
phomotopy.mk (right_inv f)
|
||||||
|
abstract begin
|
||||||
|
induction f with f H p, esimp,
|
||||||
|
rewrite [ap_con, +ap_inv, -adj f, -ap_compose],
|
||||||
|
note q := natural_square (right_inv f) p,
|
||||||
|
rewrite [ap_id at q],
|
||||||
|
apply eq_bot_of_square,
|
||||||
|
exact transpose q
|
||||||
|
end end
|
||||||
|
|
||||||
|
definition pcancel_left (f : B ≃* C) {g h : A →* B} (p : f ∘* g ~* f ∘* h) : g ~* h :=
|
||||||
|
begin
|
||||||
|
refine _⁻¹* ⬝* pwhisker_left f⁻¹ᵉ* p ⬝* _:
|
||||||
|
refine !passoc⁻¹* ⬝* _:
|
||||||
|
refine pwhisker_right _ (pleft_inv f) ⬝* _:
|
||||||
|
apply pid_comp
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
definition pcancel_right (f : A ≃* B) {g h : B →* C} (p : g ∘* f ~* h ∘* f) : g ~* h :=
|
||||||
|
begin
|
||||||
|
refine _⁻¹* ⬝* pwhisker_right f⁻¹ᵉ* p ⬝* _:
|
||||||
|
refine !passoc ⬝* _:
|
||||||
|
refine pwhisker_left _ (pright_inv f) ⬝* _:
|
||||||
|
apply comp_pid
|
||||||
|
end
|
||||||
|
|
||||||
|
definition phomotopy_pinv_right_of_phomotopy {f : A ≃* B} {g : B →* C} {h : A →* C}
|
||||||
|
(p : g ∘* f ~* h) : g ~* h ∘* f⁻¹ᵉ* :=
|
||||||
|
begin
|
||||||
|
refine _ ⬝* pwhisker_right _ p, symmetry,
|
||||||
|
refine !passoc ⬝* _,
|
||||||
|
refine pwhisker_left _ (pright_inv f) ⬝* _,
|
||||||
|
apply comp_pid
|
||||||
|
end
|
||||||
|
|
||||||
|
definition phomotopy_of_pinv_right_phomotopy {f : B ≃* A} {g : B →* C} {h : A →* C}
|
||||||
|
(p : g ∘* f⁻¹ᵉ* ~* h) : g ~* h ∘* f :=
|
||||||
|
begin
|
||||||
|
refine _ ⬝* pwhisker_right _ p, symmetry,
|
||||||
|
refine !passoc ⬝* _,
|
||||||
|
refine pwhisker_left _ (pleft_inv f) ⬝* _,
|
||||||
|
apply comp_pid
|
||||||
|
end
|
||||||
|
|
||||||
|
definition pinv_right_phomotopy_of_phomotopy {f : A ≃* B} {g : B →* C} {h : A →* C}
|
||||||
|
(p : h ~* g ∘* f) : h ∘* f⁻¹ᵉ* ~* g :=
|
||||||
|
(phomotopy_pinv_right_of_phomotopy p⁻¹*)⁻¹*
|
||||||
|
|
||||||
|
definition phomotopy_of_phomotopy_pinv_right {f : B ≃* A} {g : B →* C} {h : A →* C}
|
||||||
|
(p : h ~* g ∘* f⁻¹ᵉ*) : h ∘* f ~* g :=
|
||||||
|
(phomotopy_of_pinv_right_phomotopy p⁻¹*)⁻¹*
|
||||||
|
|
||||||
|
definition phomotopy_pinv_left_of_phomotopy {f : B ≃* C} {g : A →* B} {h : A →* C}
|
||||||
|
(p : f ∘* g ~* h) : g ~* f⁻¹ᵉ* ∘* h :=
|
||||||
|
begin
|
||||||
|
refine _ ⬝* pwhisker_left _ p, symmetry,
|
||||||
|
refine !passoc⁻¹* ⬝* _,
|
||||||
|
refine pwhisker_right _ (pleft_inv f) ⬝* _,
|
||||||
|
apply pid_comp
|
||||||
|
end
|
||||||
|
|
||||||
|
definition phomotopy_of_pinv_left_phomotopy {f : C ≃* B} {g : A →* B} {h : A →* C}
|
||||||
|
(p : f⁻¹ᵉ* ∘* g ~* h) : g ~* f ∘* h :=
|
||||||
|
begin
|
||||||
|
refine _ ⬝* pwhisker_left _ p, symmetry,
|
||||||
|
refine !passoc⁻¹* ⬝* _,
|
||||||
|
refine pwhisker_right _ (pright_inv f) ⬝* _,
|
||||||
|
apply pid_comp
|
||||||
|
end
|
||||||
|
|
||||||
|
definition pinv_left_phomotopy_of_phomotopy {f : B ≃* C} {g : A →* B} {h : A →* C}
|
||||||
|
(p : h ~* f ∘* g) : f⁻¹ᵉ* ∘* h ~* g :=
|
||||||
|
(phomotopy_pinv_left_of_phomotopy p⁻¹*)⁻¹*
|
||||||
|
|
||||||
|
|
||||||
|
definition phomotopy_of_phomotopy_pinv_left {f : C ≃* B} {g : A →* B} {h : A →* C}
|
||||||
|
(p : h ~* f⁻¹ᵉ* ∘* g) : f ∘* h ~* g :=
|
||||||
|
(phomotopy_of_pinv_left_phomotopy p⁻¹*)⁻¹*
|
||||||
|
|
||||||
end pointed
|
end pointed
|
||||||
|
|
Loading…
Reference in a new issue