move naturality of loop-susp-adjunction to standard library
This commit is contained in:
parent
64327eb804
commit
9e3611fe3e
3 changed files with 71 additions and 38 deletions
|
@ -594,17 +594,15 @@ definition inf_group_of_add_inf_group (A : Type) [G : add_inf_group A] : inf_gro
|
||||||
inv := has_neg.neg,
|
inv := has_neg.neg,
|
||||||
mul_left_inv := add.left_inv ⦄
|
mul_left_inv := add.left_inv ⦄
|
||||||
|
|
||||||
namespace norm_num
|
theorem add.comm4 [s : add_comm_inf_semigroup A] :
|
||||||
|
Π (n m k l : A), n + m + (k + l) = n + k + (m + l) :=
|
||||||
|
comm4 add.comm add.assoc
|
||||||
|
|
||||||
definition add1 [s : has_add A] [s' : has_one A] (a : A) : A := add a one
|
definition add1 [s : has_add A] [s' : has_one A] (a : A) : A := add a one
|
||||||
|
|
||||||
theorem add_comm_three [s : add_comm_inf_semigroup A] (a b c : A) : a + b + c = c + b + a :=
|
theorem add_comm_three [s : add_comm_inf_semigroup A] (a b c : A) : a + b + c = c + b + a :=
|
||||||
by rewrite [{a + _}add.comm, {_ + c}add.comm, -*add.assoc]
|
by rewrite [{a + _}add.comm, {_ + c}add.comm, -*add.assoc]
|
||||||
|
|
||||||
theorem add.comm4 [s : add_comm_inf_semigroup A] :
|
|
||||||
Π (n m k l : A), n + m + (k + l) = n + k + (m + l) :=
|
|
||||||
comm4 add.comm add.assoc
|
|
||||||
|
|
||||||
theorem add_comm_four [s : add_comm_inf_semigroup A] (a b : A) :
|
theorem add_comm_four [s : add_comm_inf_semigroup A] (a b : A) :
|
||||||
a + a + (b + b) = (a + b) + (a + b) :=
|
a + a + (b + b) = (a + b) + (a + b) :=
|
||||||
!add.comm4
|
!add.comm4
|
||||||
|
@ -706,20 +704,5 @@ theorem subst_into_sum [s : has_add A] (l r tl tr t : A) (prl : l = tl) (prr : r
|
||||||
theorem neg_zero_helper [s : add_inf_group A] (a : A) (H : a = 0) : - a = 0 :=
|
theorem neg_zero_helper [s : add_inf_group A] (a : A) (H : a = 0) : - a = 0 :=
|
||||||
by rewrite [H, neg_zero]
|
by rewrite [H, neg_zero]
|
||||||
|
|
||||||
end norm_num
|
|
||||||
|
|
||||||
end algebra
|
end algebra
|
||||||
open algebra
|
|
||||||
|
|
||||||
attribute [simp]
|
|
||||||
zero_add add_zero one_mul mul_one
|
|
||||||
at simplifier.unit
|
|
||||||
|
|
||||||
attribute [simp]
|
|
||||||
neg_neg sub_eq_add_neg
|
|
||||||
at simplifier.neg
|
|
||||||
|
|
||||||
attribute [simp]
|
|
||||||
add.assoc add.comm add.left_comm
|
|
||||||
mul.left_comm mul.comm mul.assoc
|
|
||||||
at simplifier.ac
|
|
||||||
|
|
|
@ -511,20 +511,26 @@ end join
|
||||||
namespace join
|
namespace join
|
||||||
|
|
||||||
open sphere sphere.ops
|
open sphere sphere.ops
|
||||||
|
|
||||||
|
definition join_susp (A B : Type) : join (susp A) B ≃ susp (join A B) :=
|
||||||
|
calc join (susp A) B
|
||||||
|
≃ join (join bool A) B
|
||||||
|
: join_equiv_join (join_bool A)⁻¹ᵉ erfl
|
||||||
|
... ≃ join bool (join A B)
|
||||||
|
: join_assoc
|
||||||
|
... ≃ susp (join A B)
|
||||||
|
: join_bool (join A B)
|
||||||
|
|
||||||
definition join_sphere (n m : ℕ) : join (S n) (S m) ≃ S (n+m+1) :=
|
definition join_sphere (n m : ℕ) : join (S n) (S m) ≃ S (n+m+1) :=
|
||||||
begin
|
begin
|
||||||
refine join_symm (S n) (S m) ⬝e _,
|
refine join_symm (S n) (S m) ⬝e _,
|
||||||
induction m with m IH,
|
induction m with m IH,
|
||||||
{ exact join_bool (S n) },
|
{ exact join_bool (S n) },
|
||||||
{ calc join (S (m+1)) (S n)
|
{ calc join (S (m+1)) (S n)
|
||||||
≃ join (join bool (S m)) (S n)
|
≃ susp (join (S m) (S n))
|
||||||
: join_equiv_join (join_bool (S m))⁻¹ᵉ erfl
|
: join_susp (S m) (S n)
|
||||||
... ≃ join bool (join (S m) (S n))
|
|
||||||
: join_assoc
|
|
||||||
... ≃ join bool (S (n+m+1))
|
|
||||||
: join_equiv_join erfl IH
|
|
||||||
... ≃ sphere (n+m+2)
|
... ≃ sphere (n+m+2)
|
||||||
: join_bool (S (n+m+1)) }
|
: susp.equiv IH }
|
||||||
end
|
end
|
||||||
|
|
||||||
end join
|
end join
|
||||||
|
|
|
@ -8,7 +8,7 @@ Declaration of suspension
|
||||||
|
|
||||||
import hit.pushout types.pointed2 cubical.square .connectedness
|
import hit.pushout types.pointed2 cubical.square .connectedness
|
||||||
|
|
||||||
open pushout unit eq equiv pointed
|
open pushout unit eq equiv pointed is_equiv
|
||||||
|
|
||||||
definition susp' (A : Type) : Type := pushout (λ(a : A), star) (λ(a : A), star)
|
definition susp' (A : Type) : Type := pushout (λ(a : A), star) (λ(a : A), star)
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ end susp
|
||||||
|
|
||||||
namespace susp
|
namespace susp
|
||||||
open pointed is_trunc
|
open pointed is_trunc
|
||||||
variables {X Y Z : Type*}
|
variables {X X' Y Y' Z : Type*}
|
||||||
|
|
||||||
definition susp_functor [constructor] (f : X →* Y) : susp X →* susp Y :=
|
definition susp_functor [constructor] (f : X →* Y) : susp X →* susp Y :=
|
||||||
begin
|
begin
|
||||||
|
@ -394,24 +394,68 @@ namespace susp
|
||||||
{ intro f, apply eq_of_phomotopy, exact susp_adjoint_loop_left_inv f }
|
{ intro f, apply eq_of_phomotopy, exact susp_adjoint_loop_left_inv f }
|
||||||
end
|
end
|
||||||
|
|
||||||
definition susp_adjoint_loop_pconst (X Y : Type*) :
|
definition susp_functor_pconst_homotopy [unfold 3] {X Y : Type*} (x : susp X) :
|
||||||
susp_adjoint_loop_unpointed X Y (pconst (susp X) Y) ~* pconst X (Ω Y) :=
|
susp_functor (pconst X Y) x = pt :=
|
||||||
begin
|
begin
|
||||||
refine pwhisker_right _ !ap1_pconst ⬝* _,
|
induction x,
|
||||||
apply pconst_pcompose
|
{ reflexivity },
|
||||||
|
{ exact (merid pt)⁻¹ },
|
||||||
|
{ apply eq_pathover, refine !elim_merid ⬝ph _ ⬝hp !ap_constant⁻¹, exact square_of_eq !con.right_inv⁻¹ }
|
||||||
|
end
|
||||||
|
|
||||||
|
definition susp_functor_pconst [constructor] (X Y : Type*) : susp_functor (pconst X Y) ~* pconst (susp X) (susp Y) :=
|
||||||
|
begin
|
||||||
|
fapply phomotopy.mk,
|
||||||
|
{ exact susp_functor_pconst_homotopy },
|
||||||
|
{ reflexivity }
|
||||||
|
end
|
||||||
|
|
||||||
|
definition susp_pfunctor [constructor] (X Y : Type*) : ppmap X Y →* ppmap (susp X) (susp Y) :=
|
||||||
|
pmap.mk susp_functor (eq_of_phomotopy !susp_functor_pconst)
|
||||||
|
|
||||||
|
definition susp_pelim [constructor] (X Y : Type*) : ppmap X (Ω Y) →* ppmap (susp X) Y :=
|
||||||
|
ppcompose_left (loop_susp_counit Y) ∘* susp_pfunctor X (Ω Y)
|
||||||
|
|
||||||
|
definition loop_susp_pintro [constructor] (X Y : Type*) : ppmap (susp X) Y →* ppmap X (Ω Y) :=
|
||||||
|
ppcompose_right (loop_susp_unit X) ∘* pap1 (susp X) Y
|
||||||
|
|
||||||
|
definition loop_susp_pintro_natural_left (f : X' →* X) :
|
||||||
|
psquare (loop_susp_pintro X Y) (loop_susp_pintro X' Y)
|
||||||
|
(ppcompose_right (susp_functor f)) (ppcompose_right f) :=
|
||||||
|
!pap1_natural_left ⬝h* ppcompose_right_psquare (loop_susp_unit_natural f)⁻¹*
|
||||||
|
|
||||||
|
definition loop_susp_pintro_natural_right (f : Y →* Y') :
|
||||||
|
psquare (loop_susp_pintro X Y) (loop_susp_pintro X Y')
|
||||||
|
(ppcompose_left f) (ppcompose_left (Ω→ f)) :=
|
||||||
|
!pap1_natural_right ⬝h* !ppcompose_left_ppcompose_right⁻¹*
|
||||||
|
|
||||||
|
definition is_equiv_loop_susp_pintro [constructor] (X Y : Type*) :
|
||||||
|
is_equiv (loop_susp_pintro X Y) :=
|
||||||
|
begin
|
||||||
|
fapply adjointify,
|
||||||
|
{ exact susp_pelim X Y },
|
||||||
|
{ intro g, apply eq_of_phomotopy, exact susp_adjoint_loop_right_inv g },
|
||||||
|
{ intro f, apply eq_of_phomotopy, exact susp_adjoint_loop_left_inv f }
|
||||||
end
|
end
|
||||||
|
|
||||||
definition susp_adjoint_loop [constructor] (X Y : Type*) : ppmap (susp X) Y ≃* ppmap X (Ω Y) :=
|
definition susp_adjoint_loop [constructor] (X Y : Type*) : ppmap (susp X) Y ≃* ppmap X (Ω Y) :=
|
||||||
begin
|
pequiv_of_pmap (loop_susp_pintro X Y) (is_equiv_loop_susp_pintro X Y)
|
||||||
apply pequiv_of_equiv (susp_adjoint_loop_unpointed X Y),
|
|
||||||
apply eq_of_phomotopy,
|
definition susp_adjoint_loop_natural_right (f : Y →* Y') :
|
||||||
apply susp_adjoint_loop_pconst
|
psquare (susp_adjoint_loop X Y) (susp_adjoint_loop X Y')
|
||||||
end
|
(ppcompose_left f) (ppcompose_left (Ω→ f)) :=
|
||||||
|
loop_susp_pintro_natural_right f
|
||||||
|
|
||||||
|
definition susp_adjoint_loop_natural_left (f : X' →* X) :
|
||||||
|
psquare (susp_adjoint_loop X Y) (susp_adjoint_loop X' Y)
|
||||||
|
(ppcompose_right (susp_functor f)) (ppcompose_right f) :=
|
||||||
|
loop_susp_pintro_natural_left f
|
||||||
|
|
||||||
definition ap1_susp_elim {A : Type*} {X : Type*} (p : A →* Ω X) :
|
definition ap1_susp_elim {A : Type*} {X : Type*} (p : A →* Ω X) :
|
||||||
Ω→(susp_elim p) ∘* loop_susp_unit A ~* p :=
|
Ω→(susp_elim p) ∘* loop_susp_unit A ~* p :=
|
||||||
susp_adjoint_loop_right_inv p
|
susp_adjoint_loop_right_inv p
|
||||||
|
|
||||||
|
/- the underlying homotopies of susp_adjoint_loop_natural_* -/
|
||||||
definition susp_adjoint_loop_nat_right (f : susp X →* Y) (g : Y →* Z)
|
definition susp_adjoint_loop_nat_right (f : susp X →* Y) (g : Y →* Z)
|
||||||
: susp_adjoint_loop X Z (g ∘* f) ~* ap1 g ∘* susp_adjoint_loop X Y f :=
|
: susp_adjoint_loop X Z (g ∘* f) ~* ap1 g ∘* susp_adjoint_loop X Y f :=
|
||||||
begin
|
begin
|
||||||
|
|
Loading…
Reference in a new issue