make pointed suspension and spheres the default

There is one proof in realprojective which I couldn't quite fix, so for now I left a sorry
This commit is contained in:
Floris van Doorn 2017-07-20 18:01:22 +01:00
parent a5c80f79c6
commit 3367c20f9d
23 changed files with 360 additions and 333 deletions

View file

@ -22,3 +22,13 @@ Some of these things still need to be changes, some of them are already changed,
- Type class inference for equivalences doesn't really work in Lean, since it recognizes that `f ∘ id` is definitionally `f`, hence it can always apply `is_equiv_compose` and get trapped in a loop. - Type class inference for equivalences doesn't really work in Lean, since it recognizes that `f ∘ id` is definitionally `f`, hence it can always apply `is_equiv_compose` and get trapped in a loop.
- Coercions should all be defined *immediately* after defining a structure, *before* declaring any - Coercions should all be defined *immediately* after defining a structure, *before* declaring any
instances. This is because the coercion graph is updated after each declared coercion. instances. This is because the coercion graph is updated after each declared coercion.
- When you have a functor in two arguments (`→`, `×`, `Π`, `Σ`, pointed versions of these, `=`, `∧`,
``, and so on), the functoriality should be stated in both arguments at once, and the special
cases where only one argument changes should be a special case of that one. This makes it easier
to prove properties about the functorial action, because you only have to do work once (although
that work is sometimes twice as much, but sometimes much less). We haven't always done this,
because it's sometimes easier to define a special case first (even though later you probably still
have to define the general case). Note that for `=` this gives square filling as primitive,
instead of concatenation (which can be seen as functoriality in the second argument), and Dan
Licata argued for that as primitive instead of concatenation. On the other hand, the definition
of the more general functor might be more complicated, in which case definitional reduction won't be as nice

View file

@ -58,8 +58,8 @@ namespace group
refine !con.assoc ⬝ whisker_left _ _, apply ap1_gen_con_idp } refine !con.assoc ⬝ whisker_left _ _, apply ap1_gen_con_idp }
end end
definition loop_psusp_intro_pmap_mul {X Y : Type*} (f g : psusp X →* Ω Y) : definition loop_susp_intro_pmap_mul {X Y : Type*} (f g : susp X →* Ω Y) :
loop_psusp_intro (pmap_mul f g) ~* pmap_mul (loop_psusp_intro f) (loop_psusp_intro g) := loop_susp_intro (pmap_mul f g) ~* pmap_mul (loop_susp_intro f) (loop_susp_intro g) :=
pwhisker_right _ !ap1_pmap_mul ⬝* !pmap_mul_pcompose pwhisker_right _ !ap1_pmap_mul ⬝* !pmap_mul_pcompose
definition inf_group_pmap [constructor] [instance] (A B : Type*) : inf_group (A →* Ω B) := definition inf_group_pmap [constructor] [instance] (A B : Type*) : inf_group (A →* Ω B) :=

View file

@ -74,28 +74,28 @@ section prod
definition wpr2 (A B : Type*) : (A B) →* B := definition wpr2 (A B : Type*) : (A B) →* B :=
pmap.mk (wedge.elim (pconst A B) (pid B) idp) idp pmap.mk (wedge.elim (pconst A B) (pid B) idp) idp
definition ppr1_pprod_of_pwedge (A B : Type*) definition ppr1_pprod_of_wedge (A B : Type*)
: ppr1 ∘* pprod_of_pwedge A B ~* wpr1 A B := : ppr1 ∘* pprod_of_wedge A B ~* wpr1 A B :=
begin begin
fconstructor, fconstructor,
{ intro w, induction w with a b, { intro w, induction w with a b,
{ reflexivity }, { reflexivity },
{ reflexivity }, { reflexivity },
{ apply eq_pathover, apply hdeg_square, { apply eq_pathover, apply hdeg_square,
apply trans (ap_compose ppr1 (pprod_of_pwedge A B) (pushout.glue star)), apply trans (ap_compose ppr1 (pprod_of_wedge A B) (pushout.glue star)),
krewrite pushout.elim_glue, krewrite pushout.elim_glue } }, krewrite pushout.elim_glue, krewrite pushout.elim_glue } },
{ reflexivity } { reflexivity }
end end
definition ppr2_pprod_of_pwedge (A B : Type*) definition ppr2_pprod_of_wedge (A B : Type*)
: ppr2 ∘* pprod_of_pwedge A B ~* wpr2 A B := : ppr2 ∘* pprod_of_wedge A B ~* wpr2 A B :=
begin begin
fconstructor, fconstructor,
{ intro w, induction w with a b, { intro w, induction w with a b,
{ reflexivity }, { reflexivity },
{ reflexivity }, { reflexivity },
{ apply eq_pathover, apply hdeg_square, { apply eq_pathover, apply hdeg_square,
apply trans (ap_compose ppr2 (pprod_of_pwedge A B) (pushout.glue star)), apply trans (ap_compose ppr2 (pprod_of_wedge A B) (pushout.glue star)),
krewrite pushout.elim_glue, krewrite pushout.elim_glue } }, krewrite pushout.elim_glue, krewrite pushout.elim_glue } },
{ reflexivity } { reflexivity }
end end
@ -103,7 +103,7 @@ section prod
end prod end prod
structure co_h_space [class] (A : Type*) := structure co_h_space [class] (A : Type*) :=
(comul : A →* (A A)) (comul : A →* (A A))
(colaw : pprod_of_pwedge A A ∘* comul ~* pdiag A) (colaw : pprod_of_wedge A A ∘* comul ~* pdiag A)
open co_h_space open co_h_space
@ -113,18 +113,18 @@ definition co_h_space_of_counit_laws {A : Type*}
: co_h_space A := : co_h_space A :=
co_h_space.mk c (pair_phomotopy co_h_space.mk c (pair_phomotopy
(calc (calc
ppr1 ∘* pprod_of_pwedge A A ∘* c ppr1 ∘* pprod_of_wedge A A ∘* c
~* (ppr1 ∘* pprod_of_pwedge A A) ∘* c ~* (ppr1 ∘* pprod_of_wedge A A) ∘* c
: (passoc ppr1 (pprod_of_pwedge A A) c)⁻¹* : (passoc ppr1 (pprod_of_wedge A A) c)⁻¹*
... ~* wpr1 A A ∘* c ... ~* wpr1 A A ∘* c
: pwhisker_right c (ppr1_pprod_of_pwedge A A) : pwhisker_right c (ppr1_pprod_of_wedge A A)
... ~* pid A : l) ... ~* pid A : l)
(calc (calc
ppr2 ∘* pprod_of_pwedge A A ∘* c ppr2 ∘* pprod_of_wedge A A ∘* c
~* (ppr2 ∘* pprod_of_pwedge A A) ∘* c ~* (ppr2 ∘* pprod_of_wedge A A) ∘* c
: (passoc ppr2 (pprod_of_pwedge A A) c)⁻¹* : (passoc ppr2 (pprod_of_wedge A A) c)⁻¹*
... ~* wpr2 A A ∘* c ... ~* wpr2 A A ∘* c
: pwhisker_right c (ppr2_pprod_of_pwedge A A) : pwhisker_right c (ppr2_pprod_of_wedge A A)
... ~* pid A : r)) ... ~* pid A : r))
section section
@ -134,20 +134,20 @@ section
definition counit_left : wpr1 A A ∘* comul A ~* pid A := definition counit_left : wpr1 A A ∘* comul A ~* pid A :=
calc calc
wpr1 A A ∘* comul A wpr1 A A ∘* comul A
~* (ppr1 ∘* (pprod_of_pwedge A A)) ∘* comul A ~* (ppr1 ∘* (pprod_of_wedge A A)) ∘* comul A
: (pwhisker_right (comul A) (ppr1_pprod_of_pwedge A A))⁻¹* : (pwhisker_right (comul A) (ppr1_pprod_of_wedge A A))⁻¹*
... ~* ppr1 ∘* ((pprod_of_pwedge A A) ∘* comul A) ... ~* ppr1 ∘* ((pprod_of_wedge A A) ∘* comul A)
: passoc ppr1 (pprod_of_pwedge A A) (comul A) : passoc ppr1 (pprod_of_wedge A A) (comul A)
... ~* pid A ... ~* pid A
: pwhisker_left ppr1 (colaw A) : pwhisker_left ppr1 (colaw A)
definition counit_right : wpr2 A A ∘* comul A ~* pid A := definition counit_right : wpr2 A A ∘* comul A ~* pid A :=
calc calc
wpr2 A A ∘* comul A wpr2 A A ∘* comul A
~* (ppr2 ∘* (pprod_of_pwedge A A)) ∘* comul A ~* (ppr2 ∘* (pprod_of_wedge A A)) ∘* comul A
: (pwhisker_right (comul A) (ppr2_pprod_of_pwedge A A))⁻¹* : (pwhisker_right (comul A) (ppr2_pprod_of_wedge A A))⁻¹*
... ~* ppr2 ∘* ((pprod_of_pwedge A A) ∘* comul A) ... ~* ppr2 ∘* ((pprod_of_wedge A A) ∘* comul A)
: passoc ppr2 (pprod_of_pwedge A A) (comul A) : passoc ppr2 (pprod_of_wedge A A) (comul A)
... ~* pid A ... ~* pid A
: pwhisker_left ppr2 (colaw A) : pwhisker_left ppr2 (colaw A)
@ -169,7 +169,7 @@ end
section section
variable (A : Type*) variable (A : Type*)
definition pinch : ⅀ A →* pwedge (⅀ A) (⅀ A) := definition pinch : ⅀ A →* wedge (⅀ A) (⅀ A) :=
begin begin
fapply pmap.mk, fapply pmap.mk,
{ intro sa, induction sa with a, { intro sa, induction sa with a,
@ -178,7 +178,7 @@ section
{ reflexivity } { reflexivity }
end end
definition co_h_space_psusp : co_h_space (⅀ A) := definition co_h_space_susp : co_h_space (⅀ A) :=
co_h_space_of_counit_laws (pinch A) co_h_space_of_counit_laws (pinch A)
begin begin
fapply phomotopy.mk, fapply phomotopy.mk,

View file

@ -91,7 +91,7 @@ exit
open susp open susp
definition psusp_of_smash_pcircle [unfold 2] (x : smash A S¹*) : psusp A := definition susp_of_smash_pcircle [unfold 2] (x : smash A S¹*) : susp A :=
begin begin
induction x using smash.elim, induction x using smash.elim,
{ induction b, exact pt, exact merid a ⬝ (merid pt)⁻¹ }, { induction b, exact pt, exact merid a ⬝ (merid pt)⁻¹ },
@ -102,7 +102,7 @@ exit
exact !elim_loop ⬝ !con.right_inv } exact !elim_loop ⬝ !con.right_inv }
end end
definition smash_pcircle_of_psusp [unfold 2] (x : psusp A) : smash A S¹* := definition smash_pcircle_of_susp [unfold 2] (x : susp A) : smash A S¹* :=
begin begin
induction x, induction x,
{ exact pt }, { exact pt },
@ -111,13 +111,13 @@ exit
end end
-- the definitions below compile, but take a long time to do so and have sorry's in them -- the definitions below compile, but take a long time to do so and have sorry's in them
definition smash_pcircle_of_psusp_of_smash_pcircle_pt [unfold 3] (a : A) (x : S¹*) : definition smash_pcircle_of_susp_of_smash_pcircle_pt [unfold 3] (a : A) (x : S¹*) :
smash_pcircle_of_psusp (psusp_of_smash_pcircle (smash.mk a x)) = smash.mk a x := smash_pcircle_of_susp (susp_of_smash_pcircle (smash.mk a x)) = smash.mk a x :=
begin begin
induction x, induction x,
{ exact gluel' pt a }, { exact gluel' pt a },
{ exact abstract begin apply eq_pathover, { exact abstract begin apply eq_pathover,
refine ap_compose smash_pcircle_of_psusp _ _ ⬝ph _, refine ap_compose smash_pcircle_of_susp _ _ ⬝ph _,
refine ap02 _ (elim_loop north (merid a ⬝ (merid pt)⁻¹)) ⬝ph _, refine ap02 _ (elim_loop north (merid a ⬝ (merid pt)⁻¹)) ⬝ph _,
refine !ap_con ⬝ (!elim_merid ◾ (!ap_inv ⬝ !elim_merid⁻²)) ⬝ph _, refine !ap_con ⬝ (!elim_merid ◾ (!ap_inv ⬝ !elim_merid⁻²)) ⬝ph _,
-- make everything below this a lemma defined by path induction? -- make everything below this a lemma defined by path induction?
@ -136,10 +136,10 @@ exit
end end } end end }
end end
-- definition smash_pcircle_of_psusp_of_smash_pcircle_gluer_base (b : S¹*) -- definition smash_pcircle_of_susp_of_smash_pcircle_gluer_base (b : S¹*)
-- : square (smash_pcircle_of_psusp_of_smash_pcircle_pt (Point A) b) -- : square (smash_pcircle_of_susp_of_smash_pcircle_pt (Point A) b)
-- (gluer pt) -- (gluer pt)
-- (ap smash_pcircle_of_psusp (ap (λ a, psusp_of_smash_pcircle a) (gluer b))) -- (ap smash_pcircle_of_susp (ap (λ a, susp_of_smash_pcircle a) (gluer b)))
-- (gluer b) := -- (gluer b) :=
-- begin -- begin
-- refine ap02 _ !elim_gluer ⬝ph _, -- refine ap02 _ !elim_gluer ⬝ph _,
@ -149,36 +149,36 @@ exit
-- end -- end
exit exit
definition smash_pcircle_pequiv [constructor] (A : Type*) : smash A S¹* ≃* psusp A := definition smash_pcircle_pequiv [constructor] (A : Type*) : smash A S¹* ≃* susp A :=
begin begin
fapply pequiv_of_equiv, fapply pequiv_of_equiv,
{ fapply equiv.MK, { fapply equiv.MK,
{ exact psusp_of_smash_pcircle }, { exact susp_of_smash_pcircle },
{ exact smash_pcircle_of_psusp }, { exact smash_pcircle_of_susp },
{ exact abstract begin intro x, induction x, { exact abstract begin intro x, induction x,
{ reflexivity }, { reflexivity },
{ exact merid pt }, { exact merid pt },
{ apply eq_pathover_id_right, { apply eq_pathover_id_right,
refine ap_compose psusp_of_smash_pcircle _ _ ⬝ph _, refine ap_compose susp_of_smash_pcircle _ _ ⬝ph _,
refine ap02 _ !elim_merid ⬝ph _, refine ap02 _ !elim_merid ⬝ph _,
rewrite [↑gluel', +ap_con, +ap_inv, -ap_compose'], rewrite [↑gluel', +ap_con, +ap_inv, -ap_compose'],
refine (_ ◾ _⁻² ◾ _ ◾ (_ ◾ _⁻²)) ⬝ph _, refine (_ ◾ _⁻² ◾ _ ◾ (_ ◾ _⁻²)) ⬝ph _,
rotate 5, do 2 (unfold [psusp_of_smash_pcircle]; apply elim_gluel), rotate 5, do 2 (unfold [susp_of_smash_pcircle]; apply elim_gluel),
esimp, apply elim_loop, do 2 (unfold [psusp_of_smash_pcircle]; apply elim_gluel), esimp, apply elim_loop, do 2 (unfold [susp_of_smash_pcircle]; apply elim_gluel),
refine idp_con (merid a ⬝ (merid (Point A))⁻¹) ⬝ph _, refine idp_con (merid a ⬝ (merid (Point A))⁻¹) ⬝ph _,
apply square_of_eq, refine !idp_con ⬝ _⁻¹, apply inv_con_cancel_right } end end }, apply square_of_eq, refine !idp_con ⬝ _⁻¹, apply inv_con_cancel_right } end end },
{ intro x, induction x using smash.rec, { intro x, induction x using smash.rec,
{ exact smash_pcircle_of_psusp_of_smash_pcircle_pt a b }, { exact smash_pcircle_of_susp_of_smash_pcircle_pt a b },
{ exact gluel pt }, { exact gluel pt },
{ exact gluer pt }, { exact gluer pt },
{ apply eq_pathover_id_right, { apply eq_pathover_id_right,
refine ap_compose smash_pcircle_of_psusp _ _ ⬝ph _, refine ap_compose smash_pcircle_of_susp _ _ ⬝ph _,
unfold [psusp_of_smash_pcircle], unfold [susp_of_smash_pcircle],
refine ap02 _ !elim_gluel ⬝ph _, refine ap02 _ !elim_gluel ⬝ph _,
esimp, apply whisker_rt, exact vrfl }, esimp, apply whisker_rt, exact vrfl },
{ apply eq_pathover_id_right, { apply eq_pathover_id_right,
refine ap_compose smash_pcircle_of_psusp _ _ ⬝ph _, refine ap_compose smash_pcircle_of_susp _ _ ⬝ph _,
unfold [psusp_of_smash_pcircle], unfold [susp_of_smash_pcircle],
refine ap02 _ !elim_gluer ⬝ph _, refine ap02 _ !elim_gluer ⬝ph _,
induction b, induction b,
{ apply square_of_eq, exact whisker_right _ !con.right_inv }, { apply square_of_eq, exact whisker_right _ !con.right_inv },

View file

@ -180,49 +180,49 @@ parametrized_cohomology_isomorphism_right
/- suspension axiom -/ /- suspension axiom -/
definition cohomology_psusp_2 (Y : spectrum) (n : ) : definition cohomology_susp_2 (Y : spectrum) (n : ) :
Ω (Ω[2] (Y ((n+1)+2))) ≃* Ω[2] (Y (n+2)) := Ω (Ω[2] (Y ((n+1)+2))) ≃* Ω[2] (Y (n+2)) :=
begin begin
apply loopn_pequiv_loopn 2, apply loopn_pequiv_loopn 2,
exact loop_pequiv_loop (pequiv_of_eq (ap Y (add.right_comm n 1 2))) ⬝e* !equiv_glue⁻¹ᵉ* exact loop_pequiv_loop (pequiv_of_eq (ap Y (add.right_comm n 1 2))) ⬝e* !equiv_glue⁻¹ᵉ*
end end
definition cohomology_psusp_1 (X : Type*) (Y : spectrum) (n : ) : definition cohomology_susp_1 (X : Type*) (Y : spectrum) (n : ) :
psusp X →* Ω (Ω (Y (n + 1 + 2))) ≃ X →* Ω (Ω (Y (n+2))) := susp X →* Ω (Ω (Y (n + 1 + 2))) ≃ X →* Ω (Ω (Y (n+2))) :=
calc calc
psusp X →* Ω[2] (Y (n + 1 + 2)) ≃ X →* Ω (Ω[2] (Y (n + 1 + 2))) : psusp_adjoint_loop_unpointed susp X →* Ω[2] (Y (n + 1 + 2)) ≃ X →* Ω (Ω[2] (Y (n + 1 + 2))) : susp_adjoint_loop_unpointed
... ≃ X →* Ω[2] (Y (n+2)) : equiv_of_pequiv (pequiv_ppcompose_left ... ≃ X →* Ω[2] (Y (n+2)) : equiv_of_pequiv (pequiv_ppcompose_left
(cohomology_psusp_2 Y n)) (cohomology_susp_2 Y n))
definition cohomology_psusp_1_pmap_mul {X : Type*} {Y : spectrum} {n : } definition cohomology_susp_1_pmap_mul {X : Type*} {Y : spectrum} {n : }
(f g : psusp X →* Ω (Ω (Y (n + 1 + 2)))) : cohomology_psusp_1 X Y n (pmap_mul f g) ~* (f g : susp X →* Ω (Ω (Y (n + 1 + 2)))) : cohomology_susp_1 X Y n (pmap_mul f g) ~*
pmap_mul (cohomology_psusp_1 X Y n f) (cohomology_psusp_1 X Y n g) := pmap_mul (cohomology_susp_1 X Y n f) (cohomology_susp_1 X Y n g) :=
begin begin
unfold [cohomology_psusp_1], unfold [cohomology_susp_1],
refine pwhisker_left _ !loop_psusp_intro_pmap_mul ⬝* _, refine pwhisker_left _ !loop_susp_intro_pmap_mul ⬝* _,
apply pcompose_pmap_mul apply pcompose_pmap_mul
end end
definition cohomology_psusp_equiv (X : Type*) (Y : spectrum) (n : ) : definition cohomology_susp_equiv (X : Type*) (Y : spectrum) (n : ) :
H^n+1[psusp X, Y] ≃ H^n[X, Y] := H^n+1[susp X, Y] ≃ H^n[X, Y] :=
trunc_equiv_trunc _ (cohomology_psusp_1 X Y n) trunc_equiv_trunc _ (cohomology_susp_1 X Y n)
definition cohomology_psusp (X : Type*) (Y : spectrum) (n : ) : definition cohomology_susp (X : Type*) (Y : spectrum) (n : ) :
H^n+1[psusp X, Y] ≃g H^n[X, Y] := H^n+1[susp X, Y] ≃g H^n[X, Y] :=
isomorphism_of_equiv (cohomology_psusp_equiv X Y n) isomorphism_of_equiv (cohomology_susp_equiv X Y n)
begin begin
intro f₁ f₂, induction f₁ with f₁, induction f₂ with f₂, intro f₁ f₂, induction f₁ with f₁, induction f₂ with f₂,
apply ap tr, apply eq_of_phomotopy, exact cohomology_psusp_1_pmap_mul f₁ f₂ apply ap tr, apply eq_of_phomotopy, exact cohomology_susp_1_pmap_mul f₁ f₂
end end
definition cohomology_psusp_natural {X X' : Type*} (f : X →* X') (Y : spectrum) (n : ) : definition cohomology_susp_natural {X X' : Type*} (f : X →* X') (Y : spectrum) (n : ) :
cohomology_psusp X Y n ∘ cohomology_functor (psusp_functor f) Y (n+1) ~ cohomology_susp X Y n ∘ cohomology_functor (susp_functor f) Y (n+1) ~
cohomology_functor f Y n ∘ cohomology_psusp X' Y n := cohomology_functor f Y n ∘ cohomology_susp X' Y n :=
begin begin
refine (trunc_functor_compose _ _ _)⁻¹ʰᵗʸ ⬝hty _ ⬝hty trunc_functor_compose _ _ _, refine (trunc_functor_compose _ _ _)⁻¹ʰᵗʸ ⬝hty _ ⬝hty trunc_functor_compose _ _ _,
apply trunc_functor_homotopy, intro g, apply trunc_functor_homotopy, intro g,
apply eq_of_phomotopy, refine _ ⬝* !passoc⁻¹*, apply pwhisker_left, apply eq_of_phomotopy, refine _ ⬝* !passoc⁻¹*, apply pwhisker_left,
apply loop_psusp_intro_natural apply loop_susp_intro_natural
end end
/- exactness -/ /- exactness -/
@ -284,9 +284,9 @@ structure cohomology_theory.{u} : Type.{u+1} :=
(Hid : Π(n : ) {X : Type*} (x : HH n X), Hh n (pid X) x = x) (Hid : Π(n : ) {X : Type*} (x : HH n X), Hh n (pid X) x = x)
(Hcompose : Π(n : ) {X Y Z : Type*} (g : Y →* Z) (f : X →* Y) (z : HH n Z), (Hcompose : Π(n : ) {X Y Z : Type*} (g : Y →* Z) (f : X →* Y) (z : HH n Z),
Hh n (g ∘* f) z = Hh n f (Hh n g z)) Hh n (g ∘* f) z = Hh n f (Hh n g z))
(Hsusp : Π(n : ) (X : Type*), HH (succ n) (psusp X) ≃g HH n X) (Hsusp : Π(n : ) (X : Type*), HH (succ n) (susp X) ≃g HH n X)
(Hsusp_natural : Π(n : ) {X Y : Type*} (f : X →* Y), (Hsusp_natural : Π(n : ) {X Y : Type*} (f : X →* Y),
Hsusp n X ∘ Hh (succ n) (psusp_functor f) ~ Hh n f ∘ Hsusp n Y) Hsusp n X ∘ Hh (succ n) (susp_functor f) ~ Hh n f ∘ Hsusp n Y)
(Hexact : Π(n : ) {X Y : Type*} (f : X →* Y), is_exact_g (Hh n (pcod f)) (Hh n f)) (Hexact : Π(n : ) {X Y : Type*} (f : X →* Y), is_exact_g (Hh n (pcod f)) (Hh n f))
(Hadditive : Π(n : ) {I : Type.{u}} (X : I → Type*), has_choice 0 I → (Hadditive : Π(n : ) {I : Type.{u}} (X : I → Type*), has_choice 0 I →
is_equiv (Group_pi_intro (λi, Hh n (pinl i)) : HH n ( X) → Πᵍ i, HH n (X i))) is_equiv (Group_pi_intro (λi, Hh n (pinl i)) : HH n ( X) → Πᵍ i, HH n (X i)))
@ -301,19 +301,19 @@ open cohomology_theory
definition Hequiv (H : cohomology_theory) (n : ) {X Y : Type*} (f : X ≃* Y) : H n Y ≃ H n X := definition Hequiv (H : cohomology_theory) (n : ) {X Y : Type*} (f : X ≃* Y) : H n Y ≃ H n X :=
equiv_of_isomorphism (Hiso H n f) equiv_of_isomorphism (Hiso H n f)
definition Hsusp_neg (H : cohomology_theory) (n : ) (X : Type*) : H n (psusp X) ≃g H (pred n) X := definition Hsusp_neg (H : cohomology_theory) (n : ) (X : Type*) : H n (susp X) ≃g H (pred n) X :=
isomorphism_of_eq (ap (λn, H n _) proof (sub_add_cancel n 1)⁻¹ qed) ⬝g cohomology_theory.Hsusp H (pred n) X isomorphism_of_eq (ap (λn, H n _) proof (sub_add_cancel n 1)⁻¹ qed) ⬝g cohomology_theory.Hsusp H (pred n) X
definition Hsusp_neg_natural (H : cohomology_theory) (n : ) {X Y : Type*} (f : X →* Y) : definition Hsusp_neg_natural (H : cohomology_theory) (n : ) {X Y : Type*} (f : X →* Y) :
Hsusp_neg H n X ∘ H ^→ n (psusp_functor f) ~ H ^→ (pred n) f ∘ Hsusp_neg H n Y := Hsusp_neg H n X ∘ H ^→ n (susp_functor f) ~ H ^→ (pred n) f ∘ Hsusp_neg H n Y :=
sorry sorry
definition Hsusp_inv_natural (H : cohomology_theory) (n : ) {X Y : Type*} (f : X →* Y) : definition Hsusp_inv_natural (H : cohomology_theory) (n : ) {X Y : Type*} (f : X →* Y) :
H ^→ (succ n) (psusp_functor f) ∘g (Hsusp H n Y)⁻¹ᵍ ~ (Hsusp H n X)⁻¹ᵍ ∘ H ^→ n f := H ^→ (succ n) (susp_functor f) ∘g (Hsusp H n Y)⁻¹ᵍ ~ (Hsusp H n X)⁻¹ᵍ ∘ H ^→ n f :=
sorry sorry
definition Hsusp_neg_inv_natural (H : cohomology_theory) (n : ) {X Y : Type*} (f : X →* Y) : definition Hsusp_neg_inv_natural (H : cohomology_theory) (n : ) {X Y : Type*} (f : X →* Y) :
H ^→ n (psusp_functor f) ∘g (Hsusp_neg H n Y)⁻¹ᵍ ~ (Hsusp_neg H n X)⁻¹ᵍ ∘ H ^→ (pred n) f := H ^→ n (susp_functor f) ∘g (Hsusp_neg H n Y)⁻¹ᵍ ~ (Hsusp_neg H n X)⁻¹ᵍ ∘ H ^→ (pred n) f :=
sorry sorry
definition Hadditive_equiv (H : cohomology_theory) (n : ) {I : Type} (X : I → Type*) (H2 : has_choice 0 I) definition Hadditive_equiv (H : cohomology_theory) (n : ) {I : Type} (X : I → Type*) (H2 : has_choice 0 I)
@ -346,7 +346,7 @@ end
-- definition Hwedge (H : cohomology_theory) (n : ) (A B : Type*) : H n (A B) ≃g H n A ×ag H n B := -- definition Hwedge (H : cohomology_theory) (n : ) (A B : Type*) : H n (A B) ≃g H n A ×ag H n B :=
-- begin -- begin
-- refine Hiso H n (pwedge_pequiv_fwedge A B)⁻¹ᵉ* ⬝g _, -- refine Hiso H n (wedge_pequiv_fwedge A B)⁻¹ᵉ* ⬝g _,
-- refine Hadditive_equiv H n _ _ ⬝g _ -- refine Hadditive_equiv H n _ _ ⬝g _
-- end -- end
@ -360,8 +360,8 @@ cohomology_theory.mk
(λn A B f x, cohomology_functor_phomotopy_refl f Y n x) (λn A B f x, cohomology_functor_phomotopy_refl f Y n x)
(λn A x, cohomology_functor_pid A Y n x) (λn A x, cohomology_functor_pid A Y n x)
(λn A B C g f x, cohomology_functor_pcompose g f Y n x) (λn A B C g f x, cohomology_functor_pcompose g f Y n x)
(λn A, cohomology_psusp A Y n) (λn A, cohomology_susp A Y n)
(λn A B f, cohomology_psusp_natural f Y n) (λn A B f, cohomology_susp_natural f Y n)
(λn A B f, cohomology_exact f Y n) (λn A B f, cohomology_exact f Y n)
(λn I A H, spectrum_additive H A Y n) (λn I A H, spectrum_additive H A Y n)

View file

@ -20,15 +20,15 @@ namespace homology
(Hpid : Π(n : ) {X : Type*} (x : HH n X), Hh n (pid X) x = x) (Hpid : Π(n : ) {X : Type*} (x : HH n X), Hh n (pid X) x = x)
(Hpcompose : Π(n : ) {X Y Z : Type*} (f : Y →* Z) (g : X →* Y), (Hpcompose : Π(n : ) {X Y Z : Type*} (f : Y →* Z) (g : X →* Y),
Hh n (f ∘* g) ~ Hh n f ∘ Hh n g) Hh n (f ∘* g) ~ Hh n f ∘ Hh n g)
(Hpsusp : Π(n : ) (X : Type*), HH (succ n) (psusp X) ≃g HH n X) (Hsusp : Π(n : ) (X : Type*), HH (succ n) (susp X) ≃g HH n X)
(Hpsusp_natural : Π(n : ) {X Y : Type*} (f : X →* Y), (Hsusp_natural : Π(n : ) {X Y : Type*} (f : X →* Y),
Hpsusp n Y ∘ Hh (succ n) (psusp_functor f) ~ Hh n f ∘ Hpsusp n X) Hsusp n Y ∘ Hh (succ n) (susp_functor f) ~ Hh n f ∘ Hsusp n X)
(Hexact : Π(n : ) {X Y : Type*} (f : X →* Y), is_exact_g (Hh n f) (Hh n (pcod f))) (Hexact : Π(n : ) {X Y : Type*} (f : X →* Y), is_exact_g (Hh n f) (Hh n (pcod f)))
(Hadditive : Π(n : ) {I : Set.{u}} (X : I → Type*), is_equiv (Hadditive : Π(n : ) {I : Set.{u}} (X : I → Type*), is_equiv
(dirsum_elim (λi, Hh n (pinl i)) : dirsum (λi, HH n (X i)) → HH n ( X))) (dirsum_elim (λi, Hh n (pinl i)) : dirsum (λi, HH n (X i)) → HH n ( X)))
structure ordinary_homology_theory.{u} extends homology_theory.{u} : Type.{u+1} := structure ordinary_homology_theory.{u} extends homology_theory.{u} : Type.{u+1} :=
(Hdimension : Π(n : ), n ≠ 0 → is_contr (HH n (plift (psphere 0)))) (Hdimension : Π(n : ), n ≠ 0 → is_contr (HH n (plift (sphere 0))))
section section
universe variable u universe variable u
@ -37,20 +37,20 @@ namespace homology
theorem HH_base_indep (n : ) {A : Type} (a b : A) theorem HH_base_indep (n : ) {A : Type} (a b : A)
: HH theory n (pType.mk A a) ≃g HH theory n (pType.mk A b) := : HH theory n (pType.mk A a) ≃g HH theory n (pType.mk A b) :=
calc HH theory n (pType.mk A a) ≃g HH theory (int.succ n) (psusp A) : by exact (Hpsusp theory n (pType.mk A a)) ⁻¹ᵍ calc HH theory n (pType.mk A a) ≃g HH theory (int.succ n) (susp A) : by exact (Hsusp theory n (pType.mk A a)) ⁻¹ᵍ
... ≃g HH theory n (pType.mk A b) : by exact Hpsusp theory n (pType.mk A b) ... ≃g HH theory n (pType.mk A b) : by exact Hsusp theory n (pType.mk A b)
theorem Hh_homotopy' (n : ) {A B : Type*} (f : A → B) (p q : f pt = pt) theorem Hh_homotopy' (n : ) {A B : Type*} (f : A → B) (p q : f pt = pt)
: Hh theory n (pmap.mk f p) ~ Hh theory n (pmap.mk f q) := λ x, : Hh theory n (pmap.mk f p) ~ Hh theory n (pmap.mk f q) := λ x,
calc Hh theory n (pmap.mk f p) x calc Hh theory n (pmap.mk f p) x
= Hh theory n (pmap.mk f p) (Hpsusp theory n A ((Hpsusp theory n A)⁻¹ᵍ x)) = Hh theory n (pmap.mk f p) (Hsusp theory n A ((Hsusp theory n A)⁻¹ᵍ x))
: by exact ap (Hh theory n (pmap.mk f p)) (equiv.to_right_inv (equiv_of_isomorphism (Hpsusp theory n A)) x)⁻¹ : by exact ap (Hh theory n (pmap.mk f p)) (equiv.to_right_inv (equiv_of_isomorphism (Hsusp theory n A)) x)⁻¹
... = Hpsusp theory n B (Hh theory (succ n) (pmap.mk (susp.functor f) !refl) ((Hpsusp theory n A)⁻¹ x)) ... = Hsusp theory n B (Hh theory (succ n) (pmap.mk (susp_functor' f) !refl) ((Hsusp theory n A)⁻¹ x))
: by exact (Hpsusp_natural theory n (pmap.mk f p) ((Hpsusp theory n A)⁻¹ᵍ x))⁻¹ : by exact (Hsusp_natural theory n (pmap.mk f p) ((Hsusp theory n A)⁻¹ᵍ x))⁻¹
... = Hh theory n (pmap.mk f q) (Hpsusp theory n A ((Hpsusp theory n A)⁻¹ x)) ... = Hh theory n (pmap.mk f q) (Hsusp theory n A ((Hsusp theory n A)⁻¹ x))
: by exact Hpsusp_natural theory n (pmap.mk f q) ((Hpsusp theory n A)⁻¹ x) : by exact Hsusp_natural theory n (pmap.mk f q) ((Hsusp theory n A)⁻¹ x)
... = Hh theory n (pmap.mk f q) x ... = Hh theory n (pmap.mk f q) x
: by exact ap (Hh theory n (pmap.mk f q)) (equiv.to_right_inv (equiv_of_isomorphism (Hpsusp theory n A)) x) : by exact ap (Hh theory n (pmap.mk f q)) (equiv.to_right_inv (equiv_of_isomorphism (Hsusp theory n A)) x)
theorem Hh_homotopy (n : ) {A B : Type*} (f g : A →* B) (h : f ~ g) : Hh theory n f ~ Hh theory n g := λ x, theorem Hh_homotopy (n : ) {A B : Type*} (f g : A →* B) (h : f ~ g) : Hh theory n f ~ Hh theory n g := λ x,
calc Hh theory n f x calc Hh theory n f x
@ -122,8 +122,8 @@ namespace homology
definition Hfwedge (n : ) {I : Type} [is_set I] (X : I → Type*): HH theory n ( X) ≃g dirsum (λi, HH theory n (X i)) := definition Hfwedge (n : ) {I : Type} [is_set I] (X : I → Type*): HH theory n ( X) ≃g dirsum (λi, HH theory n (X i)) :=
(isomorphism.mk _ (Hadditive theory n X))⁻¹ᵍ (isomorphism.mk _ (Hadditive theory n X))⁻¹ᵍ
definition Hpwedge (n : ) (A B : Type*) : HH theory n (pwedge A B) ≃g HH theory n A ×g HH theory n B := definition Hwedge (n : ) (A B : Type*) : HH theory n (wedge A B) ≃g HH theory n A ×g HH theory n B :=
calc HH theory n (A B) ≃g HH theory n ( (bool.rec A B)) : by exact HH_isomorphism n (pwedge_pequiv_fwedge A B) calc HH theory n (A B) ≃g HH theory n ( (bool.rec A B)) : by exact HH_isomorphism n (wedge_pequiv_fwedge A B)
... ≃g dirsum (λb, HH theory n (bool.rec A B b)) : by exact (Hadditive'_equiv n (bool.rec A B))⁻¹ᵍ ... ≃g dirsum (λb, HH theory n (bool.rec A B b)) : by exact (Hadditive'_equiv n (bool.rec A B))⁻¹ᵍ
... ≃g dirsum (bool.rec (HH theory n A) (HH theory n B)) : by exact dirsum_isomorphism (bool.rec !isomorphism.refl !isomorphism.refl) ... ≃g dirsum (bool.rec (HH theory n A) (HH theory n B)) : by exact dirsum_isomorphism (bool.rec !isomorphism.refl !isomorphism.refl)
... ≃g HH theory n A ×g HH theory n B : by exact binary_dirsum (HH theory n A) (HH theory n B) ... ≃g HH theory n A ×g HH theory n B : by exact binary_dirsum (HH theory n A) (HH theory n B)
@ -134,13 +134,13 @@ namespace homology
parameter (theory : homology_theory.{max u v}) parameter (theory : homology_theory.{max u v})
open homology_theory open homology_theory
definition Hplift_psusp (n : ) (A : Type*): HH theory (n + 1) (plift.{u v} (psusp A)) ≃g HH theory n (plift.{u v} A) := definition Hplift_susp (n : ) (A : Type*): HH theory (n + 1) (plift.{u v} (susp A)) ≃g HH theory n (plift.{u v} A) :=
calc HH theory (n + 1) (plift.{u v} (psusp A)) ≃g HH theory (n + 1) (psusp (plift.{u v} A)) : by exact HH_isomorphism theory (n + 1) (plift_psusp _) calc HH theory (n + 1) (plift.{u v} (susp A)) ≃g HH theory (n + 1) (susp (plift.{u v} A)) : by exact HH_isomorphism theory (n + 1) (plift_susp _)
... ≃g HH theory n (plift.{u v} A) : by exact Hpsusp theory n (plift.{u v} A) ... ≃g HH theory n (plift.{u v} A) : by exact Hsusp theory n (plift.{u v} A)
definition Hplift_pwedge (n : ) (A B : Type*): HH theory n (plift.{u v} (A B)) ≃g HH theory n (plift.{u v} A) ×g HH theory n (plift.{u v} B) := definition Hplift_wedge (n : ) (A B : Type*): HH theory n (plift.{u v} (A B)) ≃g HH theory n (plift.{u v} A) ×g HH theory n (plift.{u v} B) :=
calc HH theory n (plift.{u v} (A B)) ≃g HH theory n (plift.{u v} A plift.{u v} B) : by exact HH_isomorphism theory n (plift_pwedge A B) calc HH theory n (plift.{u v} (A B)) ≃g HH theory n (plift.{u v} A plift.{u v} B) : by exact HH_isomorphism theory n (plift_wedge A B)
... ≃g HH theory n (plift.{u v} A) ×g HH theory n (plift.{u v} B) : by exact Hpwedge theory n (plift.{u v} A) (plift.{u v} B) ... ≃g HH theory n (plift.{u v} A) ×g HH theory n (plift.{u v} B) : by exact Hwedge theory n (plift.{u v} A) (plift.{u v} B)
definition Hplift_isomorphism (n : ) {A B : Type*} (e : A ≃* B) : HH theory n (plift.{u v} A) ≃g HH theory n (plift.{u v} B) := definition Hplift_isomorphism (n : ) {A B : Type*} (e : A ≃* B) : HH theory n (plift.{u v} A) ≃g HH theory n (plift.{u v} B) :=
HH_isomorphism theory n (!pequiv_plift⁻¹ᵉ* ⬝e* e ⬝e* !pequiv_plift) HH_isomorphism theory n (!pequiv_plift⁻¹ᵉ* ⬝e* e ⬝e* !pequiv_plift)
@ -175,11 +175,12 @@ definition homology_functor [constructor] {X Y : Type*} {E F : prespectrum} (f :
(g : E →ₛ F) (n : ) : homology X E n →g homology Y F n := (g : E →ₛ F) (n : ) : homology X E n →g homology Y F n :=
pshomotopy_group_fun n (smash_prespectrum_fun f g) pshomotopy_group_fun n (smash_prespectrum_fun f g)
print is_exact_g
print is_exact
definition homology_theory_spectrum_is_exact.{u} (E : spectrum.{u}) (n : ) {X Y : Type*} (f : X →* Y) : definition homology_theory_spectrum_is_exact.{u} (E : spectrum.{u}) (n : ) {X Y : Type*} (f : X →* Y) :
is_exact_g (homology_functor f (sid (gen_spectrum.to_prespectrum E)) n) is_exact_g (homology_functor f (sid E) n) (homology_functor (pcod f) (sid E) n) :=
(homology_functor (pcod f) (sid (gen_spectrum.to_prespectrum E)) n) :=
begin begin
esimp[is_exact_g], esimp [is_exact_g],
-- fconstructor, -- fconstructor,
-- { intro a, exact sorry }, -- { intro a, exact sorry },
-- { intro a, exact sorry } -- { intro a, exact sorry }
@ -211,8 +212,8 @@ begin
-- (λn A B f x, cohomology_functor_phomotopy_refl f Y n x) -- (λn A B f x, cohomology_functor_phomotopy_refl f Y n x)
-- (λn A x, cohomology_functor_pid A Y n x) -- (λn A x, cohomology_functor_pid A Y n x)
-- (λn A B C g f x, cohomology_functor_pcompose g f Y n x) -- (λn A B C g f x, cohomology_functor_pcompose g f Y n x)
-- (λn A, cohomology_psusp A Y n) -- (λn A, cohomology_susp A Y n)
-- (λn A B f, cohomology_psusp_natural f Y n) -- (λn A B f, cohomology_susp_natural f Y n)
-- (λn A B f, cohomology_exact f Y n) -- (λn A B f, cohomology_exact f Y n)
-- (λn I A H, spectrum_additive H A Y n) -- (λn I A H, spectrum_additive H A Y n)
end end

View file

@ -17,18 +17,18 @@ section
open homology_theory open homology_theory
theorem Hpsphere : Π(n : )(m : ), HH theory n (plift (psphere m)) ≃g HH theory (n - m) (plift (psphere 0)) := theorem Hsphere : Π(n : )(m : ), HH theory n (plift (sphere m)) ≃g HH theory (n - m) (plift (sphere 0)) :=
begin begin
intros n m, revert n, induction m with m, intros n m, revert n, induction m with m,
{ exact λ n, isomorphism_ap (λ n, HH theory n (plift (psphere 0))) (sub_zero n)⁻¹ }, { exact λ n, isomorphism_ap (λ n, HH theory n (plift (sphere 0))) (sub_zero n)⁻¹ },
{ intro n, exact calc { intro n, exact calc
HH theory n (plift (psusp (psphere m))) HH theory n (plift (susp (sphere m)))
≃g HH theory (succ (pred n)) (plift (psusp (psphere m))) ≃g HH theory (succ (pred n)) (plift (susp (sphere m)))
: by exact isomorphism_ap (λ n, HH theory n (plift (psusp (psphere m)))) (succ_pred n)⁻¹ : by exact isomorphism_ap (λ n, HH theory n (plift (susp (sphere m)))) (succ_pred n)⁻¹
... ≃g HH theory (pred n) (plift (psphere m)) : by exact Hplift_psusp theory (pred n) (psphere m) ... ≃g HH theory (pred n) (plift (sphere m)) : by exact Hplift_susp theory (pred n) (sphere m)
... ≃g HH theory (pred n - m) (plift (psphere 0)) : by exact v_0 (pred n) ... ≃g HH theory (pred n - m) (plift (sphere 0)) : by exact v_0 (pred n)
... ≃g HH theory (n - succ m) (plift (psphere 0)) ... ≃g HH theory (n - succ m) (plift (sphere 0))
: by exact isomorphism_ap (λ n, HH theory n (plift (psphere 0))) (sub_sub n 1 m ⬝ ap (λ m, n - m) (add.comm 1 m)) : by exact isomorphism_ap (λ n, HH theory n (plift (sphere 0))) (sub_sub n 1 m ⬝ ap (λ m, n - m) (add.comm 1 m))
} }
end end
end end

View file

@ -17,23 +17,23 @@ section
open ordinary_homology_theory open ordinary_homology_theory
theorem Hptorus : Π(n : )(m : ), HH theory n (plift (psphere m ×* psphere m)) ≃g theorem Hptorus : Π(n : )(m : ), HH theory n (plift (sphere m ×* sphere m)) ≃g
HH theory n (plift (psphere m)) ×g (HH theory n (plift (psphere m)) ×g HH theory n (plift (psphere (m + m)))) := λ n m, HH theory n (plift (sphere m)) ×g (HH theory n (plift (sphere m)) ×g HH theory n (plift (sphere (m + m)))) := λ n m,
calc HH theory n (plift (psphere m ×* psphere m)) calc HH theory n (plift (sphere m ×* sphere m))
≃g HH theory (n + 1) (plift (⅀ (psphere m ×* psphere m))) : by exact (Hplift_psusp theory n (psphere m ×* psphere m))⁻¹ᵍ ≃g HH theory (n + 1) (plift (⅀ (sphere m ×* sphere m))) : by exact (Hplift_susp theory n (sphere m ×* sphere m))⁻¹ᵍ
... ≃g HH theory (n + 1) (plift (⅀ (psphere m) (⅀ (psphere m) ⅀ (psphere m ∧ psphere m)))) ... ≃g HH theory (n + 1) (plift (⅀ (sphere m) (⅀ (sphere m) ⅀ (sphere m ∧ sphere m))))
: by exact Hplift_isomorphism theory (n + 1) (susp_product (psphere m) (psphere m)) : by exact Hplift_isomorphism theory (n + 1) (susp_product (sphere m) (sphere m))
... ≃g HH theory (n + 1) (plift (⅀ (psphere m))) ×g HH theory (n + 1) (plift (⅀ (psphere m) (⅀ (psphere m ∧ psphere m)))) ... ≃g HH theory (n + 1) (plift (⅀ (sphere m))) ×g HH theory (n + 1) (plift (⅀ (sphere m) (⅀ (sphere m ∧ sphere m))))
: by exact Hplift_pwedge theory (n + 1) (⅀ (psphere m)) (⅀ (psphere m) (⅀ (psphere m ∧ psphere m))) : by exact Hplift_wedge theory (n + 1) (⅀ (sphere m)) (⅀ (sphere m) (⅀ (sphere m ∧ sphere m)))
... ≃g HH theory n (plift (psphere m)) ×g (HH theory n (plift (psphere m)) ×g HH theory n (plift (psphere (m + m)))) ... ≃g HH theory n (plift (sphere m)) ×g (HH theory n (plift (sphere m)) ×g HH theory n (plift (sphere (m + m))))
: by exact product_isomorphism (Hplift_psusp theory n (psphere m)) : by exact product_isomorphism (Hplift_susp theory n (sphere m))
(calc (calc
HH theory (n + 1) (plift (⅀ (psphere m) (⅀ (psphere m ∧ psphere m)))) HH theory (n + 1) (plift (⅀ (sphere m) (⅀ (sphere m ∧ sphere m))))
≃g HH theory (n + 1) (plift (⅀ (psphere m))) ×g HH theory (n + 1) (plift (⅀ (psphere m ∧ psphere m))) ≃g HH theory (n + 1) (plift (⅀ (sphere m))) ×g HH theory (n + 1) (plift (⅀ (sphere m ∧ sphere m)))
: by exact Hplift_pwedge theory (n + 1) (⅀ (psphere m)) (⅀ (psphere m ∧ psphere m)) : by exact Hplift_wedge theory (n + 1) (⅀ (sphere m)) (⅀ (sphere m ∧ sphere m))
... ≃g HH theory n (plift (psphere m)) ×g HH theory n (plift (psphere (m + m))) ... ≃g HH theory n (plift (sphere m)) ×g HH theory n (plift (sphere (m + m)))
: by exact product_isomorphism (Hplift_psusp theory n (psphere m)) : by exact product_isomorphism (Hplift_susp theory n (sphere m))
(Hplift_psusp theory n (psphere m ∧ psphere m) ⬝g Hplift_isomorphism theory n (sphere_smash_sphere m m))) (Hplift_susp theory n (sphere m ∧ sphere m) ⬝g Hplift_isomorphism theory n (sphere_smash_sphere m m)))
end end

View file

@ -1,7 +1,7 @@
-- Authors: Floris van Doorn -- Authors: Floris van Doorn
import homotopy.EM algebra.category.functor.equivalence types.pointed2 ..pointed_pi ..pointed import homotopy.EM algebra.category.functor.equivalence types.pointed2 ..pointed_pi ..pointed
..move_to_lib .susp ..move_to_lib .susp ..algebra.quotient_group
open eq equiv is_equiv algebra group nat pointed EM.ops is_trunc trunc susp function is_conn open eq equiv is_equiv algebra group nat pointed EM.ops is_trunc trunc susp function is_conn
@ -10,7 +10,7 @@ open eq equiv is_equiv algebra group nat pointed EM.ops is_trunc trunc susp func
namespace EM namespace EM
definition EMadd1_functor_succ [unfold_full] {G H : AbGroup} (φ : G →g H) (n : ) : definition EMadd1_functor_succ [unfold_full] {G H : AbGroup} (φ : G →g H) (n : ) :
EMadd1_functor φ (succ n) ~* ptrunc_functor (n+2) (psusp_functor (EMadd1_functor φ n)) := EMadd1_functor φ (succ n) ~* ptrunc_functor (n+2) (susp_functor (EMadd1_functor φ n)) :=
by reflexivity by reflexivity
definition EM1_functor_gid (G : Group) : EM1_functor (gid G) ~* !pid := definition EM1_functor_gid (G : Group) : EM1_functor (gid G) ~* !pid :=
@ -28,7 +28,7 @@ namespace EM
induction n with n p, induction n with n p,
{ apply EM1_functor_gid }, { apply EM1_functor_gid },
{ refine !EMadd1_functor_succ ⬝* _, { refine !EMadd1_functor_succ ⬝* _,
refine ptrunc_functor_phomotopy _ (psusp_functor_phomotopy p ⬝* !psusp_functor_pid) ⬝* _, refine ptrunc_functor_phomotopy _ (susp_functor_phomotopy p ⬝* !susp_functor_pid) ⬝* _,
apply ptrunc_functor_pid } apply ptrunc_functor_pid }
end end
@ -58,7 +58,7 @@ namespace EM
induction n with n p, induction n with n p,
{ apply EM1_functor_gcompose }, { apply EM1_functor_gcompose },
{ refine !EMadd1_functor_succ ⬝* _, { refine !EMadd1_functor_succ ⬝* _,
refine ptrunc_functor_phomotopy _ (psusp_functor_phomotopy p ⬝* !psusp_functor_pcompose) ⬝* _, refine ptrunc_functor_phomotopy _ (susp_functor_phomotopy p ⬝* !susp_functor_pcompose) ⬝* _,
apply ptrunc_functor_pcompose } apply ptrunc_functor_pcompose }
end end
@ -87,7 +87,7 @@ namespace EM
begin begin
induction n with n q, induction n with n q,
{ exact EM1_functor_phomotopy p }, { exact EM1_functor_phomotopy p },
{ exact ptrunc_functor_phomotopy _ (psusp_functor_phomotopy q) } { exact ptrunc_functor_phomotopy _ (susp_functor_phomotopy q) }
end end
definition EM_functor_phomotopy {G H : AbGroup} {φ ψ : G →g H} (p : φ ~ ψ) (n : ) : definition EM_functor_phomotopy {G H : AbGroup} {φ ψ : G →g H} (p : φ ~ ψ) (n : ) :
@ -154,7 +154,7 @@ namespace EM
-- is_trunc_EMadd1 G n -- is_trunc_EMadd1 G n
definition loop_EMadd1_succ (G : AbGroup) (n : ) : definition loop_EMadd1_succ (G : AbGroup) (n : ) :
loop_EMadd1 G (n+1) ~* (loop_ptrunc_pequiv (n+1+1) (psusp (EMadd1 G (n+1))))⁻¹ᵉ* ∘* loop_EMadd1 G (n+1) ~* (loop_ptrunc_pequiv (n+1+1) (susp (EMadd1 G (n+1))))⁻¹ᵉ* ∘*
freudenthal_pequiv (EMadd1 G (n+1)) (add_mul_le_mul_add n 1 1) ∘* freudenthal_pequiv (EMadd1 G (n+1)) (add_mul_le_mul_add n 1 1) ∘*
(ptrunc_pequiv (n+1+1) (EMadd1 G (n+1)))⁻¹ᵉ* := (ptrunc_pequiv (n+1+1) (EMadd1 G (n+1)))⁻¹ᵉ* :=
by reflexivity by reflexivity
@ -166,7 +166,7 @@ namespace EM
induction n with n IH, induction n with n IH,
{ refine pwhisker_left _ !hopf.to_pmap_delooping_pinv ⬝* _ ⬝* { refine pwhisker_left _ !hopf.to_pmap_delooping_pinv ⬝* _ ⬝*
pwhisker_right _ !hopf.to_pmap_delooping_pinv⁻¹*, pwhisker_right _ !hopf.to_pmap_delooping_pinv⁻¹*,
refine !loop_psusp_unit_natural⁻¹* ⬝h* _, refine !loop_susp_unit_natural⁻¹* ⬝h* _,
apply ap1_psquare, apply ap1_psquare,
apply ptr_natural }, apply ptr_natural },
{ refine pwhisker_left _ !loop_EMadd1_succ ⬝* _ ⬝* pwhisker_right _ !loop_EMadd1_succ⁻¹*, { refine pwhisker_left _ !loop_EMadd1_succ ⬝* _ ⬝* pwhisker_right _ !loop_EMadd1_succ⁻¹*,
@ -175,7 +175,7 @@ namespace EM
refine pwhisker_left _ !to_pmap_freudenthal_pequiv ⬝* _ ⬝* refine pwhisker_left _ !to_pmap_freudenthal_pequiv ⬝* _ ⬝*
pwhisker_right _ !to_pmap_freudenthal_pequiv⁻¹*, pwhisker_right _ !to_pmap_freudenthal_pequiv⁻¹*,
apply ptrunc_functor_psquare, apply ptrunc_functor_psquare,
exact !loop_psusp_unit_natural⁻¹* } exact !loop_susp_unit_natural⁻¹* }
end end
definition apn_EMadd1_pequiv_EM1_natural {G H : AbGroup} (φ : G →g H) (n : ) : definition apn_EMadd1_pequiv_EM1_natural {G H : AbGroup} (φ : G →g H) (n : ) :
@ -264,10 +264,10 @@ namespace EM
refine (ptrunc_elim_pcompose ((succ n).+1) _ _)⁻¹* ⬝* _ ⬝* refine (ptrunc_elim_pcompose ((succ n).+1) _ _)⁻¹* ⬝* _ ⬝*
(ptrunc_elim_ptrunc_functor ((succ n).+1) _ _)⁻¹*, (ptrunc_elim_ptrunc_functor ((succ n).+1) _ _)⁻¹*,
apply ptrunc_elim_phomotopy, apply ptrunc_elim_phomotopy,
refine _ ⬝* !psusp_elim_psusp_functor⁻¹*, refine _ ⬝* !susp_elim_susp_functor⁻¹*,
refine _ ⬝* psusp_elim_phomotopy (IH _ _ _ _ _ (is_homomorphism_EM_up eX rX) _ (@is_conn_loop _ _ H1) refine _ ⬝* susp_elim_phomotopy (IH _ _ _ _ _ (is_homomorphism_EM_up eX rX) _ (@is_conn_loop _ _ H1)
(@is_trunc_loop _ _ H2) _ _ (EM_up_natural φ f eX eY p)), (@is_trunc_loop _ _ H2) _ _ (EM_up_natural φ f eX eY p)),
apply psusp_elim_natural } apply susp_elim_natural }
end end
definition EMadd1_pequiv'_natural {G H : AbGroup} {X Y : Type*} (f : X →* Y) (n : ) (eX : Ω[succ n] X ≃* G) definition EMadd1_pequiv'_natural {G H : AbGroup} {X Y : Type*} (f : X →* Y) (n : ) (eX : Ω[succ n] X ≃* G)
@ -374,7 +374,7 @@ namespace EM
-- { exact EM1_pmap e⁻¹ᵉ* (equiv.inv_preserve_binary e concat mul r) }, -- { exact EM1_pmap e⁻¹ᵉ* (equiv.inv_preserve_binary e concat mul r) },
-- rewrite [EMadd1_succ], -- rewrite [EMadd1_succ],
-- exact ptrunc.elim ((succ n).+1) -- exact ptrunc.elim ((succ n).+1)
-- (psusp.elim (f _ (EM_up e) (is_mul_hom_EM_up e r) _ _)), -- (susp.elim (f _ (EM_up e) (is_mul_hom_EM_up e r) _ _)),
-- end -- end
-- definition is_set_pmap_ptruncconntype {n : ℕ₋₂} (X Y : (n.+1)-Type*[n]) : is_set (X →* Y) := -- definition is_set_pmap_ptruncconntype {n : ℕ₋₂} (X Y : (n.+1)-Type*[n]) : is_set (X →* Y) :=
@ -550,7 +550,7 @@ namespace EM
begin begin
induction n with n IH, induction n with n IH,
{ exact is_contr_EM1 H }, { exact is_contr_EM1 H },
{ have is_contr (ptrunc (n+2) (psusp (EMadd1 G n))), from _, { have is_contr (ptrunc (n+2) (susp (EMadd1 G n))), from _,
exact this } exact this }
end end
@ -640,6 +640,7 @@ namespace EM
-- end -- end
open group algebra
definition homotopy_group_fiber_EM1_functor {G H : Group} (φ : G →g H) : definition homotopy_group_fiber_EM1_functor {G H : Group} (φ : G →g H) :
π₁ (pfiber (EM1_functor φ)) ≃g kernel φ := π₁ (pfiber (EM1_functor φ)) ≃g kernel φ :=
sorry sorry

View file

@ -86,14 +86,14 @@ namespace sphere
{ unfold [πnSn], exact sorry} { unfold [πnSn], exact sorry}
end end
definition deg {n : } [H : is_succ n] (f : S* n →* S* n) : := definition deg {n : } [H : is_succ n] (f : S n →* S n) : :=
by induction H with n; exact πnSn n (π→g[n+1] f (tr surf)) by induction H with n; exact πnSn n (π→g[n+1] f (tr surf))
definition deg_id (n : ) [H : is_succ n] : deg (pid (S* n)) = (1 : ) := definition deg_id (n : ) [H : is_succ n] : deg (pid (S n)) = (1 : ) :=
by induction H with n; by induction H with n;
exact ap (πnSn n) (homotopy_group_functor_pid (succ n) (S* (succ n)) (tr surf)) ⬝ πnSn_surf n exact ap (πnSn n) (homotopy_group_functor_pid (succ n) (S (succ n)) (tr surf)) ⬝ πnSn_surf n
definition deg_phomotopy {n : } [H : is_succ n] {f g : S* n →* S* n} (p : f ~* g) : definition deg_phomotopy {n : } [H : is_succ n] {f g : S n →* S n} (p : f ~* g) :
deg f = deg g := deg f = deg g :=
begin begin
induction H with n, induction H with n,
@ -115,7 +115,7 @@ namespace sphere
{ symmetry, exact to_right_inv (equiv_of_isomorphism e) n} { symmetry, exact to_right_inv (equiv_of_isomorphism e) n}
end end
definition deg_compose {n : } [H : is_succ n] (f g : S* n →* S* n) : definition deg_compose {n : } [H : is_succ n] (f g : S n →* S n) :
deg (g ∘* f) = deg g *[] deg f := deg (g ∘* f) = deg g *[] deg f :=
begin begin
induction H with n, induction H with n,
@ -123,7 +123,7 @@ namespace sphere
apply endomorphism_equiv_Z !πnSn !πnSn_surf (π→g[n+1] g) apply endomorphism_equiv_Z !πnSn !πnSn_surf (π→g[n+1] g)
end end
definition deg_equiv {n : } [H : is_succ n] (f : S* n ≃* S* n) : definition deg_equiv {n : } [H : is_succ n] (f : S n ≃* S n) :
deg f = 1 ⊎ deg f = -1 := deg f = 1 ⊎ deg f = -1 :=
begin begin
induction H with n, induction H with n,

View file

@ -48,7 +48,7 @@ attribute fwedge.il fwedge.inl [constructor]
namespace fwedge namespace fwedge
definition fwedge_of_pwedge [unfold 3] {A B : Type*} (x : A B) : (bool.rec A B) := definition fwedge_of_wedge [unfold 3] {A B : Type*} (x : A B) : (bool.rec A B) :=
begin begin
induction x with a b, induction x with a b,
{ exact inl ff a }, { exact inl ff a },
@ -56,7 +56,7 @@ namespace fwedge
{ exact glue ff ⬝ (glue tt)⁻¹ } { exact glue ff ⬝ (glue tt)⁻¹ }
end end
definition pwedge_of_fwedge [unfold 3] {A B : Type*} (x : (bool.rec A B)) : A B := definition wedge_of_fwedge [unfold 3] {A B : Type*} (x : (bool.rec A B)) : A B :=
begin begin
induction x with b x b, induction x with b x b,
{ induction b, exact pushout.inl x, exact pushout.inr x }, { induction b, exact pushout.inl x, exact pushout.inr x },
@ -64,24 +64,24 @@ namespace fwedge
{ induction b, exact pushout.glue ⋆, reflexivity } { induction b, exact pushout.glue ⋆, reflexivity }
end end
definition pwedge_pequiv_fwedge [constructor] (A B : Type*) : A B ≃* (bool.rec A B) := definition wedge_pequiv_fwedge [constructor] (A B : Type*) : A B ≃* (bool.rec A B) :=
begin begin
fapply pequiv_of_equiv, fapply pequiv_of_equiv,
{ fapply equiv.MK, { fapply equiv.MK,
{ exact fwedge_of_pwedge }, { exact fwedge_of_wedge },
{ exact pwedge_of_fwedge }, { exact wedge_of_fwedge },
{ exact abstract begin intro x, induction x with b x b, { exact abstract begin intro x, induction x with b x b,
{ induction b: reflexivity }, { induction b: reflexivity },
{ exact glue tt }, { exact glue tt },
{ apply eq_pathover_id_right, { apply eq_pathover_id_right,
refine ap_compose fwedge_of_pwedge _ _ ⬝ ap02 _ !elim_glue ⬝ph _, refine ap_compose fwedge_of_wedge _ _ ⬝ ap02 _ !elim_glue ⬝ph _,
induction b, exact !elim_glue ⬝ph whisker_bl _ hrfl, apply square_of_eq idp } induction b, exact !elim_glue ⬝ph whisker_bl _ hrfl, apply square_of_eq idp }
end end }, end end },
{ exact abstract begin intro x, induction x with a b, { exact abstract begin intro x, induction x with a b,
{ reflexivity }, { reflexivity },
{ reflexivity }, { reflexivity },
{ apply eq_pathover_id_right, { apply eq_pathover_id_right,
refine ap_compose pwedge_of_fwedge _ _ ⬝ ap02 _ !elim_glue ⬝ !ap_con ⬝ refine ap_compose wedge_of_fwedge _ _ ⬝ ap02 _ !elim_glue ⬝ !ap_con ⬝
!elim_glue ◾ (!ap_inv ⬝ !elim_glue⁻²) ⬝ph _, exact hrfl } end end}}, !elim_glue ◾ (!ap_inv ⬝ !elim_glue⁻²) ⬝ph _, exact hrfl } end end}},
{ exact glue ff } { exact glue ff }
end end
@ -104,7 +104,7 @@ namespace fwedge
{ reflexivity } { reflexivity }
end end
definition pwedge_pmap [constructor] {A B : Type*} {X : Type*} (f : A →* X) (g : B →* X) : (A B) →* X := definition wedge_pmap [constructor] {A B : Type*} {X : Type*} (f : A →* X) (g : B →* X) : (A B) →* X :=
begin begin
fapply pmap.mk, fapply pmap.mk,
{ intro x, induction x, exact (f a), exact (g a), exact (respect_pt (f) ⬝ (respect_pt g)⁻¹) }, { intro x, induction x, exact (f a), exact (g a), exact (respect_pt (f) ⬝ (respect_pt g)⁻¹) },
@ -149,9 +149,9 @@ namespace fwedge
{ intro g, apply eq_of_phomotopy, exact fwedge_pmap_eta g } { intro g, apply eq_of_phomotopy, exact fwedge_pmap_eta g }
end end
definition pwedge_pmap_equiv [constructor] (A B X : Type*) : definition wedge_pmap_equiv [constructor] (A B X : Type*) :
((A B) →* X) ≃ ((A →* X) × (B →* X)) := ((A B) →* X) ≃ ((A →* X) × (B →* X)) :=
calc (A B) →* X ≃ (bool.rec A B) →* X : by exact pequiv_ppcompose_right (pwedge_pequiv_fwedge A B)⁻¹ᵉ* calc (A B) →* X ≃ (bool.rec A B) →* X : by exact pequiv_ppcompose_right (wedge_pequiv_fwedge A B)⁻¹ᵉ*
... ≃ Πi, (bool.rec A B) i →* X : by exact fwedge_pmap_equiv (bool.rec A B) X ... ≃ Πi, (bool.rec A B) i →* X : by exact fwedge_pmap_equiv (bool.rec A B) X
... ≃ (A →* X) × (B →* X) : by exact pi_bool_left (λ i, bool.rec A B i →* X) ... ≃ (A →* X) × (B →* X) : by exact pi_bool_left (λ i, bool.rec A B i →* X)
@ -211,16 +211,16 @@ namespace fwedge
end end
-- hsquare 3: -- hsquare 3:
definition fwedge_to_pwedge_nat_square {A B X Y : Type*} (f : X →* Y) : definition fwedge_to_wedge_nat_square {A B X Y : Type*} (f : X →* Y) :
hsquare (pequiv_ppcompose_right (pwedge_pequiv_fwedge A B)) (pequiv_ppcompose_right (pwedge_pequiv_fwedge A B)) (pcompose f) (pcompose f) := hsquare (pequiv_ppcompose_right (wedge_pequiv_fwedge A B)) (pequiv_ppcompose_right (wedge_pequiv_fwedge A B)) (pcompose f) (pcompose f) :=
begin begin
exact sorry exact sorry
end end
definition pwedge_pmap_nat₂ (A B X Y : Type*) (f : X →* Y) (h : A →* X) (k : B →* X) : Π (w : A B), definition wedge_pmap_nat₂ (A B X Y : Type*) (f : X →* Y) (h : A →* X) (k : B →* X) : Π (w : A B),
(f ∘* (pwedge_pmap h k)) w = pwedge_pmap (f ∘* h )(f ∘* k) w := (f ∘* (wedge_pmap h k)) w = wedge_pmap (f ∘* h )(f ∘* k) w :=
have H : _, from have H : _, from
(@prod_to_pi_bool_nat_square A B X Y f) ⬝htyh (fwedge_pmap_nat_square f) ⬝htyh (fwedge_to_pwedge_nat_square f), (@prod_to_pi_bool_nat_square A B X Y f) ⬝htyh (fwedge_pmap_nat_square f) ⬝htyh (fwedge_to_wedge_nat_square f),
sorry sorry
-- SA to here 7/5 -- SA to here 7/5

View file

@ -501,7 +501,7 @@ namespace pushout
/- cofiber of pcod is suspension -/ /- cofiber of pcod is suspension -/
definition pcofiber_pcod {A B : Type*} (f : A →* B) : pcofiber (pcod f) ≃* psusp A := definition pcofiber_pcod {A B : Type*} (f : A →* B) : pcofiber (pcod f) ≃* susp A :=
begin begin
fapply pequiv_of_equiv, fapply pequiv_of_equiv,
{ refine !pushout.symm ⬝e _, { refine !pushout.symm ⬝e _,

View file

@ -4,7 +4,7 @@
import homotopy.join import homotopy.join
open eq nat susp pointed pmap sigma is_equiv equiv fiber is_trunc trunc open eq nat susp pointed pmap sigma is_equiv equiv fiber is_trunc trunc
trunc_index is_conn sphere_index bool unit join pushout trunc_index is_conn bool unit join pushout
definition of_is_contr (A : Type) : is_contr A → A := @center A definition of_is_contr (A : Type) : is_contr A → A := @center A
@ -23,7 +23,7 @@ definition sigma_eq_equiv' {A : Type} (B : A → Type)
: (⟨a₁, b₁⟩ = ⟨a₂, b₂⟩) ≃ (Σ(p : a₁ = a₂), p ▸ b₁ = b₂) := : (⟨a₁, b₁⟩ = ⟨a₂, b₂⟩) ≃ (Σ(p : a₁ = a₂), p ▸ b₁ = b₂) :=
calc (⟨a₁, b₁⟩ = ⟨a₂, b₂⟩) calc (⟨a₁, b₁⟩ = ⟨a₂, b₂⟩)
≃ Σ(p : a₁ = a₂), b₁ =[p] b₂ : sigma_eq_equiv ≃ Σ(p : a₁ = a₂), b₁ =[p] b₂ : sigma_eq_equiv
... ≃ Σ(p : a₁ = a₂), p ▸ b₁ = b₂ ... ≃ Σ(p : a₁ = a₂), p ▸ b₁ = b₂
: by apply sigma_equiv_sigma_right; intro e; apply pathover_equiv_tr_eq : by apply sigma_equiv_sigma_right; intro e; apply pathover_equiv_tr_eq
definition dec_eq_is_prop [instance] (A : Type) : is_prop (decidable_eq A) := definition dec_eq_is_prop [instance] (A : Type) : is_prop (decidable_eq A) :=
@ -88,7 +88,7 @@ calc (A = B)
... ≃ (BoolType.carrier A = BoolType.carrier B) ... ≃ (BoolType.carrier A = BoolType.carrier B)
: begin : begin
induction A with A p, induction B with B q, induction A with A p, induction B with B q,
symmetry, esimp, apply equiv_subtype symmetry, esimp, apply equiv_subtype
end end
... ≃ (A ≃ B) : eq_equiv_equiv A B ... ≃ (A ≃ B) : eq_equiv_equiv A B
@ -134,7 +134,7 @@ begin
induction f with f, induction f, induction x, induction f with f, induction f, induction x,
{ apply is_contr.mk ⟨ equiv_bnot, idp ⟩, { apply is_contr.mk ⟨ equiv_bnot, idp ⟩,
intro w, induction w with e p, symmetry, intro w, induction w with e p, symmetry,
apply to_inv (lemma_II_4 tt ff e equiv_bnot p idp), apply to_inv (lemma_II_4 tt ff e equiv_bnot p idp),
fapply sigma.mk, fapply sigma.mk,
{ intro b, induction b, { intro b, induction b,
{ exact theorem_II_2_lemma_2 e p }, { exact theorem_II_2_lemma_2 e p },
@ -220,19 +220,19 @@ begin
{ intro w, apply is_prop.elimo } } { intro w, apply is_prop.elimo } }
end end
definition realprojective_two_cover : ₋₁ → two_cover := definition realprojective_two_cover : → two_cover :=
sphere_index.rec empty_two_cover (λ x, two_cover_step) nat.rec (two_cover_step empty_two_cover) (λ x, two_cover_step)
definition realprojective : ₋₁ → Type₀ := definition realprojective : → Type₀ :=
λ n, carrier (realprojective_two_cover n) λ n, carrier (realprojective_two_cover n)
definition realprojective_cov [reducible] (n : ₋₁) definition realprojective_cov [reducible] (n : )
: realprojective n → BoolType := : realprojective n → BoolType :=
λ x, BoolType.mk λ x, BoolType.mk
(cov (realprojective_two_cover n) x) (cov (realprojective_two_cover n) x)
(cov_eq (realprojective_two_cover n) x) (cov_eq (realprojective_two_cover n) x)
definition theorem_III_3_u [reducible] (n : ₋₁) definition theorem_III_3_u [reducible] (n : )
: (Σ (w : Σ x, realprojective_cov n x), realprojective_cov n w.1) : (Σ (w : Σ x, realprojective_cov n x), realprojective_cov n w.1)
≃ (Σ x, realprojective_cov n x) × bool := ≃ (Σ x, realprojective_cov n x) × bool :=
calc (Σ (w : Σ x, realprojective_cov n x), realprojective_cov n w.1) calc (Σ (w : Σ x, realprojective_cov n x), realprojective_cov n w.1)
@ -245,14 +245,14 @@ calc (Σ (w : Σ x, realprojective_cov n x), realprojective_cov n w.1)
... ≃ (Σ x, realprojective_cov n x) × bool ... ≃ (Σ x, realprojective_cov n x) × bool
: equiv_prod : equiv_prod
definition theorem_III_3 (n : ₋₁) definition theorem_III_3 (n : )
: sphere n ≃ sigma (realprojective_cov n) := : sphere n ≃ sigma (realprojective_cov n) :=
begin begin
induction n with n IH, induction n with n IH,
{ symmetry, apply sigma_empty_left }, { symmetry, apply sorry /-sigma_empty_left-/ },
{ apply equiv.trans (join.bool (sphere n))⁻¹ᵉ, { apply equiv.trans (join_bool (sphere n))⁻¹ᵉ,
apply equiv.trans (join.equiv_closed erfl IH), apply equiv.trans (join_equiv_join erfl IH),
symmetry, refine equiv.trans _ !join.symm, symmetry, refine equiv.trans _ !join_symm,
apply equiv.trans !pushout.flattening, esimp, apply equiv.trans !pushout.flattening, esimp,
fapply pushout.equiv, fapply pushout.equiv,
{ unfold function.compose, exact theorem_III_3_u n}, { unfold function.compose, exact theorem_III_3_u n},

View file

@ -752,9 +752,9 @@ namespace smash
definition smash_pequiv_right [constructor] (A : Type*) (g : B ≃* D) : A ∧ B ≃* A ∧ D := definition smash_pequiv_right [constructor] (A : Type*) (g : B ≃* D) : A ∧ B ≃* A ∧ D :=
smash_pequiv pequiv.rfl g smash_pequiv pequiv.rfl g
/- A ∧ B ≃* pcofiber (pprod_of_pwedge A B) -/ /- A ∧ B ≃* pcofiber (pprod_of_wedge A B) -/
definition prod_of_wedge [unfold 3] (v : pwedge A B) : A × B := definition prod_of_wedge [unfold 3] (v : wedge A B) : A × B :=
begin begin
induction v with a b , induction v with a b ,
{ exact (a, pt) }, { exact (a, pt) },
@ -762,7 +762,7 @@ namespace smash
{ reflexivity } { reflexivity }
end end
definition wedge_of_sum [unfold 3] (v : A + B) : pwedge A B := definition wedge_of_sum [unfold 3] (v : A + B) : wedge A B :=
begin begin
induction v with a b, induction v with a b,
{ exact pushout.inl a }, { exact pushout.inl a },
@ -780,7 +780,7 @@ end smash open smash
namespace pushout namespace pushout
definition eq_inl_pushout_wedge_of_sum [unfold 3] (v : pwedge A B) : definition eq_inl_pushout_wedge_of_sum [unfold 3] (v : wedge A B) :
inl pt = inl v :> pushout wedge_of_sum bool_of_sum := inl pt = inl v :> pushout wedge_of_sum bool_of_sum :=
begin begin
induction v with a b, induction v with a b,
@ -856,14 +856,14 @@ namespace smash
refine !con.right_inv ⬝pv _, exact square_of_eq idp }, refine !con.right_inv ⬝pv _, exact square_of_eq idp },
end end
definition pprod_of_pwedge [constructor] : pwedge A B →* A ×* B := definition pprod_of_wedge [constructor] : wedge A B →* A ×* B :=
begin begin
fconstructor, fconstructor,
{ exact prod_of_wedge }, { exact prod_of_wedge },
{ reflexivity } { reflexivity }
end end
definition smash_pequiv_pcofiber [constructor] : smash A B ≃* pcofiber (pprod_of_pwedge A B) := definition smash_pequiv_pcofiber [constructor] : smash A B ≃* pcofiber (pprod_of_wedge A B) :=
begin begin
apply pequiv_of_equiv (smash_equiv_cofiber A B), apply pequiv_of_equiv (smash_equiv_cofiber A B),
exact cofiber.glue pt exact cofiber.glue pt

View file

@ -506,77 +506,78 @@ namespace smash
end end
/- Corollary 2: smashing with a suspension -/ /- Corollary 2: smashing with a suspension -/
definition smash_psusp_elim_equiv (A B X : Type*) : definition smash_susp_elim_equiv (A B X : Type*) :
ppmap (A ∧ psusp B) X ≃* ppmap (psusp (A ∧ B)) X := ppmap (A ∧ susp B) X ≃* ppmap (susp (A ∧ B)) X :=
calc calc
ppmap (A ∧ psusp B) X ≃* ppmap (psusp B) (ppmap A X) : smash_adjoint_pmap A (psusp B) X ppmap (A ∧ susp B) X ≃* ppmap (susp B) (ppmap A X) : smash_adjoint_pmap A (susp B) X
... ≃* ppmap B (Ω (ppmap A X)) : psusp_adjoint_loop' B (ppmap A X) ... ≃* ppmap B (Ω (ppmap A X)) : susp_adjoint_loop' B (ppmap A X)
... ≃* ppmap B (ppmap A (Ω X)) : pequiv_ppcompose_left (loop_ppmap_commute A X) ... ≃* ppmap B (ppmap A (Ω X)) : pequiv_ppcompose_left (loop_ppmap_commute A X)
... ≃* ppmap (A ∧ B) (Ω X) : smash_adjoint_pmap A B (Ω X) ... ≃* ppmap (A ∧ B) (Ω X) : smash_adjoint_pmap A B (Ω X)
... ≃* ppmap (psusp (A ∧ B)) X : psusp_adjoint_loop' (A ∧ B) X ... ≃* ppmap (susp (A ∧ B)) X : susp_adjoint_loop' (A ∧ B) X
definition smash_psusp_elim_natural_right (A B : Type*) (f : X →* X') : definition smash_susp_elim_natural_right (A B : Type*) (f : X →* X') :
psquare (smash_psusp_elim_equiv A B X) (smash_psusp_elim_equiv A B X') psquare (smash_susp_elim_equiv A B X) (smash_susp_elim_equiv A B X')
(ppcompose_left f) (ppcompose_left f) := (ppcompose_left f) (ppcompose_left f) :=
smash_adjoint_pmap_natural_right f ⬝h* smash_adjoint_pmap_natural_right f ⬝h*
psusp_adjoint_loop_natural_right (ppcompose_left f) ⬝h* susp_adjoint_loop_natural_right (ppcompose_left f) ⬝h*
ppcompose_left_psquare (loop_pmap_commute_natural_right A f) ⬝h* ppcompose_left_psquare (loop_pmap_commute_natural_right A f) ⬝h*
(smash_adjoint_pmap_natural_right (Ω→ f))⁻¹ʰ* ⬝h* (smash_adjoint_pmap_natural_right (Ω→ f))⁻¹ʰ* ⬝h*
(psusp_adjoint_loop_natural_right f)⁻¹ʰ* (susp_adjoint_loop_natural_right f)⁻¹ʰ*
definition smash_psusp_elim_natural_left (X : Type*) (f : A' →* A) (g : B' →* B) : definition smash_susp_elim_natural_left (X : Type*) (f : A' →* A) (g : B' →* B) :
psquare (smash_psusp_elim_equiv A B X) (smash_psusp_elim_equiv A' B' X) psquare (smash_susp_elim_equiv A B X) (smash_susp_elim_equiv A' B' X)
(ppcompose_right (f ∧→ psusp_functor g)) (ppcompose_right (psusp_functor (f ∧→ g))) := (ppcompose_right (f ∧→ susp_functor g)) (ppcompose_right (susp_functor (f ∧→ g))) :=
begin begin
refine smash_adjoint_pmap_natural_lm X f (psusp_functor g) ⬝h* refine smash_adjoint_pmap_natural_lm X f (susp_functor g) ⬝h*
_ ⬝h* _ ⬝h* _ ⬝h* _ ⬝h*
(smash_adjoint_pmap_natural_lm (Ω X) f g)⁻¹ʰ* ⬝h* (smash_adjoint_pmap_natural_lm (Ω X) f g)⁻¹ʰ* ⬝h*
(psusp_adjoint_loop_natural_left (f ∧→ g))⁻¹ʰ*, (susp_adjoint_loop_natural_left (f ∧→ g))⁻¹ʰ*,
rotate 2, rotate 2,
exact !ppcompose_left_ppcompose_right ⬝v* ppcompose_left_psquare (loop_pmap_commute_natural_left X f), exact !ppcompose_left_ppcompose_right ⬝v* ppcompose_left_psquare (loop_pmap_commute_natural_left X f),
exact psusp_adjoint_loop_natural_left g ⬝v* psusp_adjoint_loop_natural_right (ppcompose_right f) exact susp_adjoint_loop_natural_left g ⬝v* susp_adjoint_loop_natural_right (ppcompose_right f)
end end
definition smash_psusp (A B : Type*) : A ∧ ⅀ B ≃* ⅀(A ∧ B) := definition smash_susp (A B : Type*) : A ∧ ⅀ B ≃* ⅀(A ∧ B) :=
begin begin
fapply pequiv.MK, fapply pequiv.MK,
{ exact !smash_psusp_elim_equiv⁻¹ᵉ* !pid }, { exact !smash_susp_elim_equiv⁻¹ᵉ* !pid },
{ exact !smash_psusp_elim_equiv !pid }, { exact !smash_susp_elim_equiv !pid },
{ refine phomotopy_of_eq (!smash_psusp_elim_natural_right⁻¹ʰ* _) ⬝* _, { refine phomotopy_of_eq (!smash_susp_elim_natural_right⁻¹ʰ* _) ⬝* _,
refine pap !smash_psusp_elim_equiv⁻¹ᵉ* !pcompose_pid ⬝* _, refine pap !smash_susp_elim_equiv⁻¹ᵉ* !pcompose_pid ⬝* _,
apply phomotopy_of_eq, apply to_left_inv !smash_psusp_elim_equiv }, apply phomotopy_of_eq, apply to_left_inv !smash_susp_elim_equiv },
{ refine phomotopy_of_eq (!smash_psusp_elim_natural_right _) ⬝* _, { refine phomotopy_of_eq (!smash_susp_elim_natural_right _) ⬝* _,
refine pap !smash_psusp_elim_equiv !pcompose_pid ⬝* _, refine pap !smash_susp_elim_equiv !pcompose_pid ⬝* _,
apply phomotopy_of_eq, apply to_right_inv !smash_psusp_elim_equiv } apply phomotopy_of_eq, apply to_right_inv !smash_susp_elim_equiv }
end end
definition smash_psusp_natural (f : A →* A') (g : B →* B') : definition smash_susp_natural (f : A →* A') (g : B →* B') :
psquare (smash_psusp A B) (smash_psusp A' B') (f ∧→ (psusp_functor g)) (psusp_functor (f ∧→ g)) := psquare (smash_susp A B) (smash_susp A' B') (f ∧→ (susp_functor g)) (susp_functor (f ∧→ g)) :=
begin begin
refine phomotopy_of_eq (!smash_psusp_elim_natural_right⁻¹ʰ* _) ⬝* _, refine phomotopy_of_eq (!smash_susp_elim_natural_right⁻¹ʰ* _) ⬝* _,
refine pap !smash_psusp_elim_equiv⁻¹ᵉ* (!pcompose_pid ⬝* !pid_pcompose⁻¹*) ⬝* _, refine pap !smash_susp_elim_equiv⁻¹ᵉ* (!pcompose_pid ⬝* !pid_pcompose⁻¹*) ⬝* _,
rexact phomotopy_of_eq ((smash_psusp_elim_natural_left _ f g)⁻¹ʰ* !pid)⁻¹ rexact phomotopy_of_eq ((smash_susp_elim_natural_left _ f g)⁻¹ʰ* !pid)⁻¹
end end
definition smash_iterate_psusp (n : ) (A B : Type*) : A ∧ iterate_psusp n B ≃* iterate_psusp n (A ∧ B) := print axioms smash_susp_natural
definition smash_iterate_susp (n : ) (A B : Type*) : A ∧ iterate_susp n B ≃* iterate_susp n (A ∧ B) :=
begin begin
induction n with n e, induction n with n e,
{ reflexivity }, { reflexivity },
{ exact smash_psusp A (iterate_psusp n B) ⬝e* psusp_pequiv e } { exact smash_susp A (iterate_susp n B) ⬝e* susp_pequiv e }
end end
definition smash_sphere (A : Type*) (n : ) : A ∧ psphere n ≃* iterate_psusp n A := definition smash_sphere (A : Type*) (n : ) : A ∧ sphere n ≃* iterate_susp n A :=
smash_pequiv pequiv.rfl (psphere_pequiv_iterate_psusp n) ⬝e* smash_pequiv pequiv.rfl (sphere_pequiv_iterate_susp n) ⬝e*
smash_iterate_psusp n A pbool ⬝e* smash_iterate_susp n A pbool ⬝e*
iterate_psusp_pequiv n (smash_pbool_pequiv A) iterate_susp_pequiv n (smash_pbool_pequiv A)
definition smash_pcircle (A : Type*) : A ∧ pcircle ≃* psusp A := definition smash_pcircle (A : Type*) : A ∧ pcircle ≃* susp A :=
smash_sphere A 1 smash_sphere A 1
definition sphere_smash_sphere (n m : ) : psphere n ∧ psphere m ≃* psphere (n+m) := definition sphere_smash_sphere (n m : ) : sphere n ∧ sphere m ≃* sphere (n+m) :=
smash_sphere (psphere n) m ⬝e* smash_sphere (sphere n) m ⬝e*
iterate_psusp_pequiv m (psphere_pequiv_iterate_psusp n) ⬝e* iterate_susp_pequiv m (sphere_pequiv_iterate_susp n) ⬝e*
iterate_psusp_iterate_psusp_rev m n pbool ⬝e* iterate_susp_iterate_susp_rev m n pbool ⬝e*
(psphere_pequiv_iterate_psusp (n + m))⁻¹ᵉ* (sphere_pequiv_iterate_susp (n + m))⁻¹ᵉ*
end smash end smash

View file

@ -1,29 +1,29 @@
import homotopy.join homotopy.smash import homotopy.join homotopy.smash types.nat.hott
open eq equiv trunc function bool join sphere sphere_index sphere.ops prod open eq equiv trunc function bool join sphere sphere.ops prod
open pointed sigma smash is_trunc open pointed sigma smash is_trunc nat
namespace spherical_fibrations namespace spherical_fibrations
/- classifying type of spherical fibrations -/ /- classifying type of spherical fibrations -/
definition BG (n : ) : Type₁ := definition BG (n : ) [is_succ n] : Type₁ :=
Σ(X : Type₀), ∥ X ≃ S n..-1 Σ(X : Type₀), ∥ X ≃ S (pred n)
definition pointed_BG [instance] [constructor] (n : ) : pointed (BG n) := definition pointed_BG [instance] [constructor] (n : ) [is_succ n] : pointed (BG n) :=
pointed.mk ⟨ S n..-1 , tr erfl ⟩ pointed.mk ⟨ S (pred n) , tr erfl ⟩
definition pBG [constructor] (n : ) : Type* := pointed.mk' (BG n) definition pBG [constructor] (n : ) [is_succ n] : Type* := pointed.mk' (BG n)
definition G (n : ) : Type₁ := definition G (n : ) [is_succ n] : Type₁ :=
pt = pt :> BG n pt = pt :> BG n
definition G_char (n : ) : G n ≃ (S n..-1 ≃ S n..-1) := definition G_char (n : ) [is_succ n] : G n ≃ (S (pred n) ≃ S (pred n)) :=
calc calc
G n ≃ Σ(p : S n..-1 = S n..-1), _ : sigma_eq_equiv G n ≃ Σ(p : pType.carrier (S (pred n)) = pType.carrier (S (pred n))), _ : sigma_eq_equiv
... ≃ (S n..-1 = S n..-1) : sigma_equiv_of_is_contr_right ... ≃ (pType.carrier (S (pred n)) = pType.carrier (S (pred n))) : sigma_equiv_of_is_contr_right
... ≃ (S n..-1 ≃ S n..-1) : eq_equiv_equiv ... ≃ (S (pred n) ≃ S (pred n)) : eq_equiv_equiv
definition mirror (n : ) : S n..-1 → G n := definition mirror (n : ) [is_succ n] : S (pred n) → G n :=
begin begin
intro v, apply to_inv (G_char n), intro v, apply to_inv (G_char n),
exact sorry exact sorry
@ -35,35 +35,38 @@ namespace spherical_fibrations
Yes, let eval : BG (n+1) → S n be the evaluation map Yes, let eval : BG (n+1) → S n be the evaluation map
-/ -/
definition is_succ_1 [instance] : is_succ 1 := is_succ.mk 0
definition S_of_BG (n : ) : Ω(pBG (n+1)) → S n := definition S_of_BG (n : ) : Ω(pBG (n+1)) → S n :=
λ f, f..1 ▸ base λ f, f..1 ▸ pt
definition BG_succ (n : ) : BG n → BG (n+1) := definition BG_succ (n : ) [H : is_succ n] : BG n → BG (n+1) :=
begin begin
induction H with n,
intro X, cases X with X p, intro X, cases X with X p,
apply sigma.mk (susp X), induction p with f, apply tr, refine sigma.mk (susp X) _, induction p with f, apply tr,
apply susp.equiv f exact susp.equiv f
end end
/- classifying type of pointed spherical fibrations -/ /- classifying type of pointed spherical fibrations -/
definition BF (n : ) : Type₁ := definition BF (n : ) : Type₁ :=
Σ(X : Type*), ∥ X ≃* S* n ∥ Σ(X : Type*), ∥ X ≃* S n ∥
definition pointed_BF [instance] [constructor] (n : ) : pointed (BF n) := definition pointed_BF [instance] [constructor] (n : ) : pointed (BF n) :=
pointed.mk ⟨ S* n , tr pequiv.rfl ⟩ pointed.mk ⟨ S n , tr pequiv.rfl ⟩
definition pBF [constructor] (n : ) : Type* := pointed.mk' (BF n) definition pBF [constructor] (n : ) : Type* := pointed.mk' (BF n)
definition BF_succ (n : ) : BF n → BF (n+1) := definition BF_succ (n : ) : BF n → BF (n+1) :=
begin begin
intro X, cases X with X p, intro X, cases X with X p,
apply sigma.mk (psusp X), induction p with f, apply tr, apply sigma.mk (susp X), induction p with f, apply tr,
apply susp.psusp_pequiv f apply susp.susp_pequiv f
end end
definition BF_of_BG {n : } : BG n → BF n := definition BF_of_BG {n : } [H : is_succ n] : BG n → BF n :=
begin begin
induction H with n,
intro X, cases X with X p, intro X, cases X with X p,
apply sigma.mk (pointed.MK (susp X) susp.north), apply sigma.mk (pointed.MK (susp X) susp.north),
induction p with f, apply tr, induction p with f, apply tr,
@ -78,13 +81,15 @@ namespace spherical_fibrations
apply tr, exact fX apply tr, exact fX
end end
definition BG_mul {n m : } (X : BG n) (Y : BG m) : BG (n + m) := definition BG_mul {n m : } [Hn : is_succ n] [Hm : is_succ m] (X : BG n) (Y : BG m) :
BG (n + m) :=
begin begin
induction Hn with n, induction Hm with m,
cases X with X pX, cases Y with Y pY, cases X with X pX, cases Y with Y pY,
apply sigma.mk (join X Y), apply sigma.mk (join X Y),
induction pX with fX, induction pY with fY, induction pX with fX, induction pY with fY,
apply tr, rewrite add_sub_one, apply tr, rewrite [succ_add],
exact (join.equiv_closed fX fY) ⬝e (join.spheres n..-1 m..-1) exact join_equiv_join fX fY ⬝e join_sphere n m
end end
definition BF_mul {n m : } (X : BF n) (Y : BF m) : BF (n + m) := definition BF_mul {n m : } (X : BF n) (Y : BF m) : BF (n + m) :=
@ -95,7 +100,7 @@ namespace spherical_fibrations
exact sorry -- needs smash.spheres : psmash (S. n) (S. m) ≃ S. (n + m) exact sorry -- needs smash.spheres : psmash (S. n) (S. m) ≃ S. (n + m)
end end
definition BF_of_BG_mul (n m : ) (X : BG n) (Y : BG m) definition BF_of_BG_mul (n m : ) [is_succ n] [is_succ m] (X : BG n) (Y : BG m)
: BF_of_BG (BG_mul X Y) = BF_mul (BF_of_BG X) (BF_of_BG Y) := : BF_of_BG (BG_mul X Y) = BF_mul (BF_of_BG X) (BF_of_BG Y) :=
sorry sorry

View file

@ -5,13 +5,8 @@ open susp eq pointed function is_equiv lift equiv is_trunc nat
namespace susp namespace susp
variables {X X' Y Y' Z : Type*} variables {X X' Y Y' Z : Type*}
/- TODO: remove susp and rename psusp to susp -/ definition susp_functor_pconst_homotopy [unfold 3] {X Y : Type*} (x : susp X) :
definition psuspn : → Type* → Type* susp_functor (pconst X Y) x = pt :=
| psuspn 0 X := X
| psuspn (succ n) X := psusp (psuspn n X)
definition susp_functor_pconst_homotopy [unfold 3] {X Y : Type*} (x : psusp X) :
psusp_functor (pconst X Y) x = pt :=
begin begin
induction x, induction x,
{ reflexivity }, { reflexivity },
@ -19,81 +14,81 @@ namespace susp
{ apply eq_pathover, refine !elim_merid ⬝ph _ ⬝hp !ap_constant⁻¹, exact square_of_eq !con.right_inv⁻¹ } { apply eq_pathover, refine !elim_merid ⬝ph _ ⬝hp !ap_constant⁻¹, exact square_of_eq !con.right_inv⁻¹ }
end end
definition susp_functor_pconst [constructor] (X Y : Type*) : psusp_functor (pconst X Y) ~* pconst (psusp X) (psusp Y) := definition susp_functor_pconst [constructor] (X Y : Type*) : susp_functor (pconst X Y) ~* pconst (susp X) (susp Y) :=
begin begin
fapply phomotopy.mk, fapply phomotopy.mk,
{ exact susp_functor_pconst_homotopy }, { exact susp_functor_pconst_homotopy },
{ reflexivity } { reflexivity }
end end
definition psusp_pfunctor [constructor] (X Y : Type*) : ppmap X Y →* ppmap (psusp X) (psusp Y) := definition susp_pfunctor [constructor] (X Y : Type*) : ppmap X Y →* ppmap (susp X) (susp Y) :=
pmap.mk psusp_functor (eq_of_phomotopy !susp_functor_pconst) pmap.mk susp_functor (eq_of_phomotopy !susp_functor_pconst)
definition psusp_pelim [constructor] (X Y : Type*) : ppmap X (Ω Y) →* ppmap (psusp X) Y := definition susp_pelim [constructor] (X Y : Type*) : ppmap X (Ω Y) →* ppmap (susp X) Y :=
ppcompose_left (loop_psusp_counit Y) ∘* psusp_pfunctor X (Ω Y) ppcompose_left (loop_susp_counit Y) ∘* susp_pfunctor X (Ω Y)
definition loop_psusp_pintro [constructor] (X Y : Type*) : ppmap (psusp X) Y →* ppmap X (Ω Y) := definition loop_susp_pintro [constructor] (X Y : Type*) : ppmap (susp X) Y →* ppmap X (Ω Y) :=
ppcompose_right (loop_psusp_unit X) ∘* pap1 (psusp X) Y ppcompose_right (loop_susp_unit X) ∘* pap1 (susp X) Y
definition loop_psusp_pintro_natural_left (f : X' →* X) : definition loop_susp_pintro_natural_left (f : X' →* X) :
psquare (loop_psusp_pintro X Y) (loop_psusp_pintro X' Y) psquare (loop_susp_pintro X Y) (loop_susp_pintro X' Y)
(ppcompose_right (psusp_functor f)) (ppcompose_right f) := (ppcompose_right (susp_functor f)) (ppcompose_right f) :=
!pap1_natural_left ⬝h* ppcompose_right_psquare (loop_psusp_unit_natural f)⁻¹* !pap1_natural_left ⬝h* ppcompose_right_psquare (loop_susp_unit_natural f)⁻¹*
definition loop_psusp_pintro_natural_right (f : Y →* Y') : definition loop_susp_pintro_natural_right (f : Y →* Y') :
psquare (loop_psusp_pintro X Y) (loop_psusp_pintro X Y') psquare (loop_susp_pintro X Y) (loop_susp_pintro X Y')
(ppcompose_left f) (ppcompose_left (Ω→ f)) := (ppcompose_left f) (ppcompose_left (Ω→ f)) :=
!pap1_natural_right ⬝h* !ppcompose_left_ppcompose_right⁻¹* !pap1_natural_right ⬝h* !ppcompose_left_ppcompose_right⁻¹*
definition is_equiv_loop_psusp_pintro [constructor] (X Y : Type*) : definition is_equiv_loop_susp_pintro [constructor] (X Y : Type*) :
is_equiv (loop_psusp_pintro X Y) := is_equiv (loop_susp_pintro X Y) :=
begin begin
fapply adjointify, fapply adjointify,
{ exact psusp_pelim X Y }, { exact susp_pelim X Y },
{ intro g, apply eq_of_phomotopy, exact psusp_adjoint_loop_right_inv g }, { intro g, apply eq_of_phomotopy, exact susp_adjoint_loop_right_inv g },
{ intro f, apply eq_of_phomotopy, exact psusp_adjoint_loop_left_inv f } { intro f, apply eq_of_phomotopy, exact susp_adjoint_loop_left_inv f }
end end
definition psusp_adjoint_loop' [constructor] (X Y : Type*) : ppmap (psusp X) Y ≃* ppmap X (Ω Y) := definition susp_adjoint_loop' [constructor] (X Y : Type*) : ppmap (susp X) Y ≃* ppmap X (Ω Y) :=
pequiv_of_pmap (loop_psusp_pintro X Y) (is_equiv_loop_psusp_pintro X Y) pequiv_of_pmap (loop_susp_pintro X Y) (is_equiv_loop_susp_pintro X Y)
definition psusp_adjoint_loop_natural_right (f : Y →* Y') : definition susp_adjoint_loop_natural_right (f : Y →* Y') :
psquare (psusp_adjoint_loop' X Y) (psusp_adjoint_loop' X Y') psquare (susp_adjoint_loop' X Y) (susp_adjoint_loop' X Y')
(ppcompose_left f) (ppcompose_left (Ω→ f)) := (ppcompose_left f) (ppcompose_left (Ω→ f)) :=
loop_psusp_pintro_natural_right f loop_susp_pintro_natural_right f
definition psusp_adjoint_loop_natural_left (f : X' →* X) : definition susp_adjoint_loop_natural_left (f : X' →* X) :
psquare (psusp_adjoint_loop' X Y) (psusp_adjoint_loop' X' Y) psquare (susp_adjoint_loop' X Y) (susp_adjoint_loop' X' Y)
(ppcompose_right (psusp_functor f)) (ppcompose_right f) := (ppcompose_right (susp_functor f)) (ppcompose_right f) :=
loop_psusp_pintro_natural_left f loop_susp_pintro_natural_left f
definition iterate_psusp_iterate_psusp_rev (n m : ) (A : Type*) : definition iterate_susp_iterate_susp_rev (n m : ) (A : Type*) :
iterate_psusp n (iterate_psusp m A) ≃* iterate_psusp (m + n) A := iterate_susp n (iterate_susp m A) ≃* iterate_susp (m + n) A :=
begin begin
induction n with n e, induction n with n e,
{ reflexivity }, { reflexivity },
{ exact psusp_pequiv e } { exact susp_pequiv e }
end end
definition iterate_psusp_pequiv [constructor] (n : ) {X Y : Type*} (f : X ≃* Y) : definition iterate_susp_pequiv [constructor] (n : ) {X Y : Type*} (f : X ≃* Y) :
iterate_psusp n X ≃* iterate_psusp n Y := iterate_susp n X ≃* iterate_susp n Y :=
begin begin
induction n with n e, induction n with n e,
{ exact f }, { exact f },
{ exact psusp_pequiv e } { exact susp_pequiv e }
end end
open algebra nat open algebra nat
definition iterate_psusp_iterate_psusp (n m : ) (A : Type*) : definition iterate_susp_iterate_susp (n m : ) (A : Type*) :
iterate_psusp n (iterate_psusp m A) ≃* iterate_psusp (n + m) A := iterate_susp n (iterate_susp m A) ≃* iterate_susp (n + m) A :=
iterate_psusp_iterate_psusp_rev n m A ⬝e* pequiv_of_eq (ap (λk, iterate_psusp k A) (add.comm m n)) iterate_susp_iterate_susp_rev n m A ⬝e* pequiv_of_eq (ap (λk, iterate_susp k A) (add.comm m n))
definition plift_psusp.{u v} : Π(A : Type*), plift.{u v} (psusp A) ≃* psusp (plift.{u v} A) := definition plift_susp.{u v} : Π(A : Type*), plift.{u v} (susp A) ≃* susp (plift.{u v} A) :=
begin begin
intro A, intro A,
calc calc
plift.{u v} (psusp A) ≃* psusp A : by exact (pequiv_plift (psusp A))⁻¹ᵉ* plift.{u v} (susp A) ≃* susp A : by exact (pequiv_plift (susp A))⁻¹ᵉ*
... ≃* psusp (plift.{u v} A) : by exact psusp_pequiv (pequiv_plift.{u v} A) ... ≃* susp (plift.{u v} A) : by exact susp_pequiv (pequiv_plift.{u v} A)
end end
definition is_contr_susp [instance] (A : Type) [H : is_contr A] : is_contr (susp A) := definition is_contr_susp [instance] (A : Type) [H : is_contr A] : is_contr (susp A) :=
@ -106,32 +101,30 @@ namespace susp
exact whisker_left idp (ap merid !eq_of_is_contr) exact whisker_left idp (ap merid !eq_of_is_contr)
end end
definition is_contr_psusp [instance] (A : Type) [H : is_contr A] : is_contr (psusp A) := definition loop_susp_pintro_phomotopy {X Y : Type*} {f g : ⅀ X →* Y} (p : f ~* g) :
is_contr_susp A loop_susp_pintro X Y f ~* loop_susp_pintro X Y g :=
pwhisker_right (loop_susp_unit X) (Ω⇒ p)
definition psusp_pelim2 {X Y : Type*} {f g : ⅀ X →* Y} (p : f ~* g) : ((loop_psusp_pintro X Y) f) ~* ((loop_psusp_pintro X Y) g) :=
pwhisker_right (loop_psusp_unit X) (Ω⇒ p)
variables {A₀₀ A₂₀ A₀₂ A₂₂ : Type*} variables {A₀₀ A₂₀ A₀₂ A₂₂ : Type*}
{f₁₀ : A₀₀ →* A₂₀} {f₁₂ : A₀₂ →* A₂₂} {f₁₀ : A₀₀ →* A₂₀} {f₁₂ : A₀₂ →* A₂₂}
{f₀₁ : A₀₀ →* A₀₂} {f₂₁ : A₂₀ →* A₂₂} {f₀₁ : A₀₀ →* A₀₂} {f₂₁ : A₂₀ →* A₂₂}
-- rename: psusp_functor_psquare -- rename: susp_functor_psquare
definition suspend_psquare (p : psquare f₁₀ f₁₂ f₀₁ f₂₁) : psquare (⅀→ f₁₀) (⅀→ f₁₂) (⅀→ f₀₁) (⅀→ f₂₁) := definition suspend_psquare (p : psquare f₁₀ f₁₂ f₀₁ f₂₁) : psquare (⅀→ f₁₀) (⅀→ f₁₂) (⅀→ f₀₁) (⅀→ f₂₁) :=
sorry sorry
definition susp_to_loop_psquare (f₁₀ : A₀₀ →* A₂₀) (f₁₂ : A₀₂ →* A₂₂) (f₀₁ : psusp A₀₀ →* A₀₂) (f₂₁ : psusp A₂₀ →* A₂₂) : (psquare (⅀→ f₁₀) f₁₂ f₀₁ f₂₁) → (psquare f₁₀ (Ω→ f₁₂) ((loop_psusp_pintro A₀₀ A₀₂) f₀₁) ((loop_psusp_pintro A₂₀ A₂₂) f₂₁)) := definition susp_to_loop_psquare (f₁₀ : A₀₀ →* A₂₀) (f₁₂ : A₀₂ →* A₂₂) (f₀₁ : susp A₀₀ →* A₀₂) (f₂₁ : susp A₂₀ →* A₂₂) : (psquare (⅀→ f₁₀) f₁₂ f₀₁ f₂₁) → (psquare f₁₀ (Ω→ f₁₂) ((loop_susp_pintro A₀₀ A₀₂) f₀₁) ((loop_susp_pintro A₂₀ A₂₂) f₂₁)) :=
begin begin
intro p, intro p,
refine pvconcat _ (ap1_psquare p), refine pvconcat _ (ap1_psquare p),
exact loop_psusp_unit_natural f₁₀ exact loop_susp_unit_natural f₁₀
end end
definition loop_to_susp_square (f₁₀ : A₀₀ →* A₂₀) (f₁₂ : A₀₂ →* A₂₂) (f₀₁ : A₀₀ →* Ω A₀₂) (f₂₁ : A₂₀ →* Ω A₂₂) : (psquare f₁₀ (Ω→ f₁₂) f₀₁ f₂₁) → (psquare (⅀→ f₁₀) f₁₂ ((psusp_pelim A₀₀ A₀₂) f₀₁) ((psusp_pelim A₂₀ A₂₂) f₂₁)) := definition loop_to_susp_square (f₁₀ : A₀₀ →* A₂₀) (f₁₂ : A₀₂ →* A₂₂) (f₀₁ : A₀₀ →* Ω A₀₂) (f₂₁ : A₂₀ →* Ω A₂₂) : (psquare f₁₀ (Ω→ f₁₂) f₀₁ f₂₁) → (psquare (⅀→ f₁₀) f₁₂ ((susp_pelim A₀₀ A₀₂) f₀₁) ((susp_pelim A₂₀ A₂₂) f₂₁)) :=
begin begin
intro p, intro p,
refine pvconcat (suspend_psquare p) _, refine pvconcat (suspend_psquare p) _,
exact psquare_transpose (loop_psusp_counit_natural f₁₂) exact psquare_transpose (loop_susp_counit_natural f₁₂)
end end
end susp end susp

View file

@ -6,7 +6,7 @@ open wedge pushout eq prod sum pointed equiv is_equiv unit lift
namespace wedge namespace wedge
definition wedge_flip [unfold 3] {A B : Type*} (x : A B) : B A := definition wedge_flip' [unfold 3] {A B : Type*} (x : A B) : B A :=
begin begin
induction x, induction x,
{ exact inr a }, { exact inr a },
@ -15,26 +15,29 @@ namespace wedge
end end
-- TODO: fix precedences -- TODO: fix precedences
definition pwedge_flip [constructor] (A B : Type*) : (A B) →* (B A) := definition wedge_flip [constructor] (A B : Type*) : A B →* B A :=
pmap.mk wedge_flip (glue ⋆)⁻¹ pmap.mk wedge_flip' (glue ⋆)⁻¹
definition wedge_flip_wedge_flip {A B : Type*} (x : A B) : wedge_flip (wedge_flip x) = x := definition wedge_flip'_wedge_flip' [unfold 3] {A B : Type*} (x : A B) : wedge_flip' (wedge_flip' x) = x :=
begin begin
induction x, induction x,
{ reflexivity }, { reflexivity },
{ reflexivity }, { reflexivity },
{ apply eq_pathover_id_right, { apply eq_pathover_id_right,
apply hdeg_square, apply hdeg_square,
exact ap_compose wedge_flip _ _ ⬝ ap02 _ !elim_glue ⬝ !ap_inv ⬝ !elim_glue⁻² ⬝ !inv_inv } exact ap_compose wedge_flip' _ _ ⬝ ap02 _ !elim_glue ⬝ !ap_inv ⬝ !elim_glue⁻² ⬝ !inv_inv }
end end
definition pwedge_comm [constructor] (A B : Type*) : A B ≃* B A := definition wedge_flip_wedge_flip (A B : Type*) : wedge_flip B A ∘* wedge_flip A B ~* pid (A B) :=
phomotopy.mk wedge_flip'_wedge_flip' (whisker_right _ (!ap_inv ⬝ !wedge.elim_glue⁻²) ⬝ !con.left_inv)⁻¹
definition wedge_comm [constructor] (A B : Type*) : A B ≃* B A :=
begin begin
fapply pequiv.MK', fapply pequiv.MK,
{ exact pwedge_flip A B }, { exact wedge_flip A B },
{ exact wedge_flip }, { exact wedge_flip B A },
{ exact wedge_flip_wedge_flip }, { exact wedge_flip_wedge_flip A B },
{ exact wedge_flip_wedge_flip } { exact wedge_flip_wedge_flip B A }
end end
-- TODO: wedge is associative -- TODO: wedge is associative
@ -53,15 +56,15 @@ namespace wedge
end end
definition pwedge_pequiv [constructor] {A A' B B' : Type*} (a : A ≃* A') (b : B ≃* B') : A B ≃* A' B' := definition wedge_pequiv [constructor] {A A' B B' : Type*} (a : A ≃* A') (b : B ≃* B') : A B ≃* A' B' :=
begin begin
fapply pequiv_of_equiv, fapply pequiv_of_equiv,
exact pushout.equiv !pconst !pconst !pconst !pconst !pequiv.refl a b (λdummy, respect_pt a) (λdummy, respect_pt b), exact pushout.equiv !pconst !pconst !pconst !pconst !pequiv.refl a b (λdummy, respect_pt a) (λdummy, respect_pt b),
exact ap pushout.inl (respect_pt a) exact ap pushout.inl (respect_pt a)
end end
definition plift_pwedge.{u v} (A B : Type*) : plift.{u v} (A B) ≃* plift.{u v} A plift.{u v} B := definition plift_wedge.{u v} (A B : Type*) : plift.{u v} (A B) ≃* plift.{u v} A plift.{u v} B :=
calc plift.{u v} (A B) ≃* A B : by exact !pequiv_plift⁻¹ᵉ* calc plift.{u v} (A B) ≃* A B : by exact !pequiv_plift⁻¹ᵉ*
... ≃* plift.{u v} A plift.{u v} B : by exact pwedge_pequiv !pequiv_plift !pequiv_plift ... ≃* plift.{u v} A plift.{u v} B : by exact wedge_pequiv !pequiv_plift !pequiv_plift
end wedge end wedge

View file

@ -174,6 +174,10 @@ namespace eq
phomotopy_rec_on_idp phomotopy.rfl H = H := phomotopy_rec_on_idp phomotopy.rfl H = H :=
!phomotopy_rec_on_eq_phomotopy_of_eq !phomotopy_rec_on_eq_phomotopy_of_eq
definition eq_tr_of_pathover_con_tr_eq_of_pathover {A : Type} {B : A → Type}
{a₁ a₂ : A} (p : a₁ = a₂) {b₁ : B a₁} {b₂ : B a₂} (q : b₁ =[p] b₂) :
eq_tr_of_pathover q ⬝ tr_eq_of_pathover q⁻¹ᵒ = idp :=
by induction q; reflexivity
end eq open eq end eq open eq
@ -477,6 +481,11 @@ namespace is_trunc
end is_trunc end is_trunc
namespace sigma namespace sigma
open sigma.ops
definition sigma_eq_equiv_of_is_prop_right [constructor] {A : Type} {B : A → Type} (u v : Σa, B a)
[H : Π a, is_prop (B a)] : u = v ≃ u.1 = v.1 :=
!sigma_eq_equiv ⬝e !sigma_equiv_of_is_contr_right
definition ap_sigma_pr1 {A B : Type} {C : B → Type} {a₁ a₂ : A} (f : A → B) (g : Πa, C (f a)) definition ap_sigma_pr1 {A B : Type} {C : B → Type} {a₁ a₂ : A} (f : A → B) (g : Πa, C (f a))
(p : a₁ = a₂) : (ap (λa, ⟨f a, g a⟩) p)..1 = ap f p := (p : a₁ = a₂) : (ap (λa, ⟨f a, g a⟩) p)..1 = ap f p :=
@ -903,13 +912,13 @@ end category
namespace sphere namespace sphere
-- definition constant_sphere_map_sphere {n m : } (H : n < m) (f : S* n →* S* m) : -- definition constant_sphere_map_sphere {n m : } (H : n < m) (f : S n →* S m) :
-- f ~* pconst (S* n) (S* m) := -- f ~* pconst (S n) (S m) :=
-- begin -- begin
-- assert H : is_contr (Ω[n] (S* m)), -- assert H : is_contr (Ω[n] (S m)),
-- { apply homotopy_group_sphere_le, }, -- { apply homotopy_group_sphere_le, },
-- apply phomotopy_of_eq, -- apply phomotopy_of_eq,
-- apply eq_of_fn_eq_fn !psphere_pmap_pequiv, -- apply eq_of_fn_eq_fn !sphere_pmap_pequiv,
-- apply @is_prop.elim -- apply @is_prop.elim
-- end -- end
@ -948,8 +957,8 @@ end injective_surjective
-- Yuri Sulyma's code from HoTT MRC -- Yuri Sulyma's code from HoTT MRC
notation `⅀→`:(max+5) := psusp_functor notation `⅀→`:(max+5) := susp_functor
notation `⅀⇒`:(max+5) := psusp_functor_phomotopy notation `⅀⇒`:(max+5) := susp_functor_phomotopy
notation `Ω⇒`:(max+5) := ap1_phomotopy notation `Ω⇒`:(max+5) := ap1_phomotopy
definition ap1_phomotopy_symm {A B : Type*} {f g : A →* B} (p : f ~* g) : (Ω⇒ p)⁻¹* = Ω⇒ (p⁻¹*) := definition ap1_phomotopy_symm {A B : Type*} {f g : A →* B} (p : f ~* g) : (Ω⇒ p)⁻¹* = Ω⇒ (p⁻¹*) :=

View file

@ -37,6 +37,7 @@ namespace pointed
pmap_eq (λx, idpath (f x)) !idp_con⁻¹ = idpath f := pmap_eq (λx, idpath (f x)) !idp_con⁻¹ = idpath f :=
ap (λx, eq_of_phomotopy (phomotopy.mk _ x)) !inv_inv ⬝ eq_of_phomotopy_refl f ap (λx, eq_of_phomotopy (phomotopy.mk _ x)) !inv_inv ⬝ eq_of_phomotopy_refl f
/- remove some duplicates: loop_ppmap_commute, loop_ppmap_pequiv, loop_ppmap_pequiv', pfunext -/
definition pfunext (X Y : Type*) : ppmap X (Ω Y) ≃* Ω (ppmap X Y) := definition pfunext (X Y : Type*) : ppmap X (Ω Y) ≃* Ω (ppmap X Y) :=
(loop_ppmap_commute X Y)⁻¹ᵉ* (loop_ppmap_commute X Y)⁻¹ᵉ*

View file

@ -1014,6 +1014,8 @@ namespace pointed
ppmap A₊ B ≃* A →ᵘ* B := ppmap A₊ B ≃* A →ᵘ* B :=
pequiv_of_equiv (pmap_equiv_left A B) idp pequiv_of_equiv (pmap_equiv_left A B) idp
/- There are some lemma's needed to prove the naturality of the equivalence
Ω (Π*a, B a) ≃* Π*(a : A), Ω (B a) -/
definition ppi_eq_equiv_natural_gen_lem {B C : A → Type} {b₀ : B pt} {c₀ : C pt} definition ppi_eq_equiv_natural_gen_lem {B C : A → Type} {b₀ : B pt} {c₀ : C pt}
{f : Π(a : A), B a → C a} {f₀ : f pt b₀ = c₀} {k : ppi_gen B b₀} {k' : ppi_gen C c₀} {f : Π(a : A), B a → C a} {f₀ : f pt b₀ = c₀} {k : ppi_gen B b₀} {k' : ppi_gen C c₀}
(p : pmap_compose_ppi_gen f f₀ k ~~* k') : (p : pmap_compose_ppi_gen f f₀ k ~~* k') :
@ -1086,6 +1088,7 @@ namespace pointed
{ exact !ppi_eq_equiv_natural_gen_refl ◾ (!idp_con ⬝ !ppi_eq_refl) } { exact !ppi_eq_equiv_natural_gen_refl ◾ (!idp_con ⬝ !ppi_eq_refl) }
end end
/- below is an alternate proof strategy for the naturality of loop_pppi_pequiv_natural, /- below is an alternate proof strategy for the naturality of loop_pppi_pequiv_natural,
where we define loop_pppi_pequiv as composite of pointed equivalences, and proved the where we define loop_pppi_pequiv as composite of pointed equivalences, and proved the
naturality individually. That turned out to be harder. naturality individually. That turned out to be harder.

View file

@ -779,7 +779,7 @@ namespace spectrum
-- Suspension prespectra are one that's naturally indexed on the natural numbers -- Suspension prespectra are one that's naturally indexed on the natural numbers
definition psp_susp (X : Type*) : gen_prespectrum + := definition psp_susp (X : Type*) : gen_prespectrum + :=
gen_prespectrum.mk (λn, psuspn n X) (λn, loop_psusp_unit (psuspn n X)) gen_prespectrum.mk (λn, iterate_susp n X) (λn, loop_susp_unit (iterate_susp n X))
-- The sphere prespectrum -- The sphere prespectrum
definition psp_sphere : gen_prespectrum + := definition psp_sphere : gen_prespectrum + :=

View file

@ -7,10 +7,10 @@ namespace spectrum
definition smash_prespectrum (X : Type*) (Y : prespectrum) : prespectrum := definition smash_prespectrum (X : Type*) (Y : prespectrum) : prespectrum :=
prespectrum.mk (λ z, X ∧ Y z) begin prespectrum.mk (λ z, X ∧ Y z) begin
intro n, refine loop_psusp_pintro (X ∧ Y n) (X ∧ Y (n + 1)) _, intro n, refine loop_susp_pintro (X ∧ Y n) (X ∧ Y (n + 1)) _,
refine _ ∘* (smash_psusp X (Y n))⁻¹ᵉ*, refine _ ∘* (smash_susp X (Y n))⁻¹ᵉ*,
refine smash_functor !pid _, refine smash_functor !pid _,
refine psusp_pelim (Y n) (Y (n + 1)) _, refine susp_pelim (Y n) (Y (n + 1)) _,
exact !glue exact !glue
end end
@ -18,11 +18,11 @@ definition smash_prespectrum_fun {X X' : Type*} {Y Y' : prespectrum} (f : X →*
smap.mk (λn, smash_functor f (g n)) begin smap.mk (λn, smash_functor f (g n)) begin
intro n, intro n,
refine susp_to_loop_psquare _ _ _ _ _, refine susp_to_loop_psquare _ _ _ _ _,
refine pvconcat (psquare_transpose (phinverse (smash_psusp_natural f (g n)))) _, refine pvconcat (psquare_transpose (phinverse (smash_susp_natural f (g n)))) _,
refine vconcat_phomotopy _ (smash_functor_split f (g (S n))), refine vconcat_phomotopy _ (smash_functor_split f (g (S n))),
refine phomotopy_vconcat (smash_functor_split f (psusp_functor (g n))) _, refine phomotopy_vconcat (smash_functor_split f (susp_functor (g n))) _,
refine phconcat _ _, refine phconcat _ _,
let glue_adjoint := psusp_pelim (Y n) (Y (S n)) (glue Y n), let glue_adjoint := susp_pelim (Y n) (Y (S n)) (glue Y n),
exact pid X' ∧→ glue_adjoint, exact pid X' ∧→ glue_adjoint,
exact smash_functor_psquare (pvrefl f) (phrefl glue_adjoint), exact smash_functor_psquare (pvrefl f) (phrefl glue_adjoint),
refine smash_functor_psquare (phrefl (pid X')) _, refine smash_functor_psquare (phrefl (pid X')) _,