2016-02-17 20:39:37 +00:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2016 Floris van Doorn. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
Authors: Floris van Doorn
|
|
|
|
|
|
|
|
|
|
We define the fiber sequence of a pointed map f : X →* Y. We follow the proof in section 8.4 of
|
|
|
|
|
the book closely. First we define a sequence fiber_sequence as in Definition 8.4.3.
|
|
|
|
|
It has types X(n) : Type*
|
|
|
|
|
X(0) := Y,
|
|
|
|
|
X(1) := X,
|
|
|
|
|
X(n+1) := pfiber (f(n))
|
|
|
|
|
with functions f(n) : X(n+1) →* X(n)
|
|
|
|
|
f(0) := f
|
|
|
|
|
f(n+1) := ppoint f(n)
|
|
|
|
|
We prove that this is an exact sequence.
|
|
|
|
|
Then we prove Lemma 8.4.3, by showing that X(n+3) ≃* Ω(X(n)) and that this equivalence sends
|
|
|
|
|
the map f(n+3) to -Ω(f(n)), i.e. the composition of Ω(f(n)) with path inversion.
|
|
|
|
|
This is the hardest part of this formalization, because we need to show that they are the same
|
|
|
|
|
as pointed maps (we define a pointed homotopy between them).
|
|
|
|
|
|
|
|
|
|
Using this equivalence we get a boundary_map : Ω(Y) → pfiber f and we can define a new
|
|
|
|
|
fiber sequence X'(n) : Type*
|
|
|
|
|
X'(0) := Y,
|
|
|
|
|
X'(1) := X,
|
|
|
|
|
X'(2) := pfiber f
|
|
|
|
|
X'(n+3) := Ω(X'(n))
|
|
|
|
|
and maps f'(n) : X'(n+1) →* X'(n)
|
|
|
|
|
f'(0) := f
|
|
|
|
|
f'(1) := ppoint f
|
|
|
|
|
f'(2) := boundary_map f
|
|
|
|
|
f'(3) := -Ω(f)
|
|
|
|
|
f'(4) := -Ω(ppoint f)
|
|
|
|
|
f'(5) := -Ω(boundary_map f)
|
|
|
|
|
f'(n+6) := Ω²(f'(n))
|
|
|
|
|
|
|
|
|
|
We can show that these sequences are equivalent, hence the sequence (X',f') is an exact
|
|
|
|
|
sequence. Now we get the fiber sequence by taking the set-truncation of this sequence.
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
import .chain_complex algebra.homotopy_group
|
|
|
|
|
|
2016-03-03 16:56:56 +00:00
|
|
|
|
open eq pointed sigma fiber equiv is_equiv sigma.ops is_trunc nat trunc algebra function
|
2016-02-17 23:27:26 +00:00
|
|
|
|
|
|
|
|
|
/--------------
|
|
|
|
|
PART 1
|
|
|
|
|
--------------/
|
2016-02-17 20:39:37 +00:00
|
|
|
|
|
|
|
|
|
namespace chain_complex
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_helper [constructor] (v : Σ(X Y : Type*), X →* Y)
|
|
|
|
|
: Σ(Z X : Type*), Z →* X :=
|
|
|
|
|
⟨pfiber v.2.2, v.1, ppoint v.2.2⟩
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_helpern (v : Σ(X Y : Type*), X →* Y) (n : ℕ)
|
|
|
|
|
: Σ(Z X : Type*), Z →* X :=
|
|
|
|
|
iterate fiber_sequence_helper n v
|
|
|
|
|
|
|
|
|
|
universe variable u
|
|
|
|
|
variables {X Y : pType.{u}} (f : X →* Y) (n : ℕ)
|
|
|
|
|
include f
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_carrier : Type* :=
|
|
|
|
|
(fiber_sequence_helpern ⟨X, Y, f⟩ n).2.1
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_fun
|
|
|
|
|
: fiber_sequence_carrier f (n + 1) →* fiber_sequence_carrier f n :=
|
|
|
|
|
(fiber_sequence_helpern ⟨X, Y, f⟩ n).2.2
|
|
|
|
|
|
|
|
|
|
/- Definition 8.4.3 -/
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition fiber_sequence : type_chain_complex.{0 u} +ℕ :=
|
2016-02-17 20:39:37 +00:00
|
|
|
|
begin
|
|
|
|
|
fconstructor,
|
|
|
|
|
{ exact fiber_sequence_carrier f},
|
|
|
|
|
{ exact fiber_sequence_fun f},
|
|
|
|
|
{ intro n x, cases n with n,
|
|
|
|
|
{ exact point_eq x},
|
|
|
|
|
{ exact point_eq x}}
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition is_exact_fiber_sequence : is_exact_t (fiber_sequence f) :=
|
2016-02-17 20:39:37 +00:00
|
|
|
|
λn x p, fiber.mk (fiber.mk x p) rfl
|
|
|
|
|
|
|
|
|
|
/- (generalization of) Lemma 8.4.4(i)(ii) -/
|
|
|
|
|
definition fiber_sequence_carrier_equiv
|
|
|
|
|
: fiber_sequence_carrier f (n+3) ≃ Ω(fiber_sequence_carrier f n) :=
|
|
|
|
|
calc
|
|
|
|
|
fiber_sequence_carrier f (n+3) ≃ fiber (fiber_sequence_fun f (n+1)) pt : erfl
|
|
|
|
|
... ≃ Σ(x : fiber_sequence_carrier f _), fiber_sequence_fun f (n+1) x = pt
|
|
|
|
|
: fiber.sigma_char
|
|
|
|
|
... ≃ Σ(x : fiber (fiber_sequence_fun f n) pt), fiber_sequence_fun f _ x = pt
|
|
|
|
|
: erfl
|
|
|
|
|
... ≃ Σ(v : Σ(x : fiber_sequence_carrier f _), fiber_sequence_fun f _ x = pt),
|
|
|
|
|
fiber_sequence_fun f _ (fiber.mk v.1 v.2) = pt
|
|
|
|
|
: by exact sigma_equiv_sigma !fiber.sigma_char (λa, erfl)
|
|
|
|
|
... ≃ Σ(v : Σ(x : fiber_sequence_carrier f _), fiber_sequence_fun f _ x = pt),
|
|
|
|
|
v.1 = pt
|
|
|
|
|
: erfl
|
|
|
|
|
... ≃ Σ(v : Σ(x : fiber_sequence_carrier f _), x = pt),
|
|
|
|
|
fiber_sequence_fun f _ v.1 = pt
|
|
|
|
|
: sigma_assoc_comm_equiv
|
|
|
|
|
... ≃ fiber_sequence_fun f _ !center.1 = pt
|
|
|
|
|
: @(sigma_equiv_of_is_contr_left _) !is_contr_sigma_eq'
|
|
|
|
|
... ≃ fiber_sequence_fun f _ pt = pt
|
|
|
|
|
: erfl
|
|
|
|
|
... ≃ pt = pt
|
|
|
|
|
: by exact !equiv_eq_closed_left !respect_pt
|
|
|
|
|
... ≃ Ω(fiber_sequence_carrier f n) : erfl
|
|
|
|
|
|
|
|
|
|
/- computation rule -/
|
|
|
|
|
definition fiber_sequence_carrier_equiv_eq
|
|
|
|
|
(x : fiber_sequence_carrier f (n+1)) (p : fiber_sequence_fun f n x = pt)
|
|
|
|
|
(q : fiber_sequence_fun f (n+1) (fiber.mk x p) = pt)
|
|
|
|
|
: fiber_sequence_carrier_equiv f n (fiber.mk (fiber.mk x p) q)
|
|
|
|
|
= !respect_pt⁻¹ ⬝ ap (fiber_sequence_fun f n) q⁻¹ ⬝ p :=
|
|
|
|
|
begin
|
|
|
|
|
refine _ ⬝ !con.assoc⁻¹,
|
|
|
|
|
apply whisker_left,
|
|
|
|
|
refine transport_eq_Fl _ _ ⬝ _,
|
|
|
|
|
apply whisker_right,
|
|
|
|
|
refine inverse2 !ap_inv ⬝ !inv_inv ⬝ _,
|
|
|
|
|
refine ap_compose (fiber_sequence_fun f n) pr₁ _ ⬝
|
|
|
|
|
ap02 (fiber_sequence_fun f n) !ap_pr1_center_eq_sigma_eq',
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_carrier_equiv_inv_eq
|
|
|
|
|
(p : Ω(fiber_sequence_carrier f n)) : (fiber_sequence_carrier_equiv f n)⁻¹ᵉ p =
|
|
|
|
|
fiber.mk (fiber.mk pt (respect_pt (fiber_sequence_fun f n) ⬝ p)) idp :=
|
|
|
|
|
begin
|
|
|
|
|
apply inv_eq_of_eq,
|
|
|
|
|
refine _ ⬝ !fiber_sequence_carrier_equiv_eq⁻¹, esimp,
|
|
|
|
|
exact !inv_con_cancel_left⁻¹
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_carrier_pequiv
|
|
|
|
|
: fiber_sequence_carrier f (n+3) ≃* Ω(fiber_sequence_carrier f n) :=
|
|
|
|
|
pequiv_of_equiv (fiber_sequence_carrier_equiv f n)
|
|
|
|
|
begin
|
|
|
|
|
esimp,
|
|
|
|
|
apply con.left_inv
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_carrier_pequiv_eq
|
|
|
|
|
(x : fiber_sequence_carrier f (n+1)) (p : fiber_sequence_fun f n x = pt)
|
|
|
|
|
(q : fiber_sequence_fun f (n+1) (fiber.mk x p) = pt)
|
|
|
|
|
: fiber_sequence_carrier_pequiv f n (fiber.mk (fiber.mk x p) q)
|
|
|
|
|
= !respect_pt⁻¹ ⬝ ap (fiber_sequence_fun f n) q⁻¹ ⬝ p :=
|
|
|
|
|
fiber_sequence_carrier_equiv_eq f n x p q
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_carrier_pequiv_inv_eq
|
|
|
|
|
(p : Ω(fiber_sequence_carrier f n)) : (fiber_sequence_carrier_pequiv f n)⁻¹ᵉ* p =
|
|
|
|
|
fiber.mk (fiber.mk pt (respect_pt (fiber_sequence_fun f n) ⬝ p)) idp :=
|
|
|
|
|
fiber_sequence_carrier_equiv_inv_eq f n p
|
|
|
|
|
|
|
|
|
|
attribute pequiv._trans_of_to_pmap [unfold 3]
|
|
|
|
|
|
|
|
|
|
/- Lemma 8.4.4(iii) -/
|
|
|
|
|
definition fiber_sequence_fun_eq_helper
|
|
|
|
|
(p : Ω(fiber_sequence_carrier f (n + 1))) :
|
|
|
|
|
fiber_sequence_carrier_pequiv f n
|
|
|
|
|
(fiber_sequence_fun f (n + 3)
|
|
|
|
|
((fiber_sequence_carrier_pequiv f (n + 1))⁻¹ᵉ* p)) =
|
|
|
|
|
ap1 (fiber_sequence_fun f n) p⁻¹ :=
|
|
|
|
|
begin
|
|
|
|
|
refine ap (λx, fiber_sequence_carrier_pequiv f n (fiber_sequence_fun f (n + 3) x))
|
|
|
|
|
(fiber_sequence_carrier_pequiv_inv_eq f (n+1) p) ⬝ _,
|
|
|
|
|
/- the following three lines are rewriting some reflexivities: -/
|
|
|
|
|
-- replace (n + 3) with (n + 2 + 1),
|
|
|
|
|
-- refine ap (fiber_sequence_carrier_pequiv f n)
|
|
|
|
|
-- (fiber_sequence_fun_eq1 f (n+2) _ idp) ⬝ _,
|
|
|
|
|
refine fiber_sequence_carrier_pequiv_eq f n pt (respect_pt (fiber_sequence_fun f n)) _ ⬝ _,
|
|
|
|
|
esimp,
|
|
|
|
|
apply whisker_right,
|
|
|
|
|
apply whisker_left,
|
|
|
|
|
apply ap02, apply inverse2, apply idp_con,
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
theorem fiber_sequence_carrier_pequiv_eq_point_eq_idp :
|
|
|
|
|
fiber_sequence_carrier_pequiv_eq f n
|
|
|
|
|
(Point (fiber_sequence_carrier f (n+1)))
|
|
|
|
|
(respect_pt (fiber_sequence_fun f n))
|
|
|
|
|
(respect_pt (fiber_sequence_fun f (n + 1))) = idp :=
|
|
|
|
|
begin
|
|
|
|
|
apply con_inv_eq_idp,
|
|
|
|
|
refine ap (λx, whisker_left _ (_ ⬝ x)) _ ⬝ _,
|
|
|
|
|
{ reflexivity},
|
|
|
|
|
{ reflexivity},
|
|
|
|
|
esimp,
|
|
|
|
|
refine ap (whisker_left _)
|
|
|
|
|
(transport_eq_Fl_idp_left (fiber_sequence_fun f n)
|
|
|
|
|
(respect_pt (fiber_sequence_fun f n))) ⬝ _,
|
|
|
|
|
apply whisker_left_idp_con_eq_assoc
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
theorem fiber_sequence_fun_phomotopy_helper :
|
|
|
|
|
(fiber_sequence_carrier_pequiv f n ∘*
|
|
|
|
|
fiber_sequence_fun f (n + 3)) ∘*
|
|
|
|
|
(fiber_sequence_carrier_pequiv f (n + 1))⁻¹ᵉ* ~*
|
|
|
|
|
ap1 (fiber_sequence_fun f n) ∘* pinverse :=
|
|
|
|
|
begin
|
|
|
|
|
fapply phomotopy.mk,
|
|
|
|
|
{ exact (fiber_sequence_fun_eq_helper f n)},
|
|
|
|
|
{ esimp, rewrite [idp_con], refine _ ⬝ whisker_left _ !idp_con⁻¹,
|
|
|
|
|
apply whisker_right,
|
|
|
|
|
apply whisker_left,
|
|
|
|
|
exact fiber_sequence_carrier_pequiv_eq_point_eq_idp f n}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
theorem fiber_sequence_fun_eq : Π(x : fiber_sequence_carrier f (n + 4)),
|
|
|
|
|
fiber_sequence_carrier_pequiv f n (fiber_sequence_fun f (n + 3) x) =
|
|
|
|
|
ap1 (fiber_sequence_fun f n) (fiber_sequence_carrier_pequiv f (n + 1) x)⁻¹ :=
|
|
|
|
|
homotopy_of_inv_homotopy
|
|
|
|
|
(pequiv.to_equiv (fiber_sequence_carrier_pequiv f (n + 1)))
|
|
|
|
|
(fiber_sequence_fun_eq_helper f n)
|
|
|
|
|
|
|
|
|
|
theorem fiber_sequence_fun_phomotopy :
|
|
|
|
|
fiber_sequence_carrier_pequiv f n ∘*
|
|
|
|
|
fiber_sequence_fun f (n + 3) ~*
|
|
|
|
|
(ap1 (fiber_sequence_fun f n) ∘* pinverse) ∘* fiber_sequence_carrier_pequiv f (n + 1) :=
|
|
|
|
|
begin
|
|
|
|
|
apply phomotopy_of_pinv_right_phomotopy,
|
|
|
|
|
apply fiber_sequence_fun_phomotopy_helper
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition boundary_map : Ω Y →* pfiber f :=
|
|
|
|
|
fiber_sequence_fun f 2 ∘* (fiber_sequence_carrier_pequiv f 0)⁻¹ᵉ*
|
|
|
|
|
|
2016-02-17 23:27:26 +00:00
|
|
|
|
/--------------
|
|
|
|
|
PART 2
|
|
|
|
|
--------------/
|
|
|
|
|
|
2016-02-17 20:39:37 +00:00
|
|
|
|
/- Now we are ready to define the long exact sequence of homotopy groups.
|
|
|
|
|
First we define its carrier -/
|
|
|
|
|
definition homotopy_groups : ℕ → Type*
|
|
|
|
|
| 0 := Y
|
|
|
|
|
| 1 := X
|
|
|
|
|
| 2 := pfiber f
|
|
|
|
|
| (k+3) := Ω (homotopy_groups k)
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_add3 [unfold_full] :
|
|
|
|
|
homotopy_groups f (n+3) = Ω (homotopy_groups f n) :=
|
2016-02-17 23:27:26 +00:00
|
|
|
|
by reflexivity
|
2016-02-17 20:39:37 +00:00
|
|
|
|
|
|
|
|
|
definition homotopy_groups_mul3
|
|
|
|
|
: Πn, homotopy_groups f (3 * n) = Ω[n] Y :> Type*
|
|
|
|
|
| 0 := proof rfl qed
|
|
|
|
|
| (k+1) := proof ap (λX, Ω X) (homotopy_groups_mul3 k) qed
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_mul3add1
|
|
|
|
|
: Πn, homotopy_groups f (3 * n + 1) = Ω[n] X :> Type*
|
2016-02-17 23:27:26 +00:00
|
|
|
|
| 0 := by reflexivity
|
2016-02-17 20:39:37 +00:00
|
|
|
|
| (k+1) := proof ap (λX, Ω X) (homotopy_groups_mul3add1 k) qed
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_mul3add2
|
|
|
|
|
: Πn, homotopy_groups f (3 * n + 2) = Ω[n] (pfiber f) :> Type*
|
2016-02-17 23:27:26 +00:00
|
|
|
|
| 0 := by reflexivity
|
2016-02-17 20:39:37 +00:00
|
|
|
|
| (k+1) := proof ap (λX, Ω X) (homotopy_groups_mul3add2 k) qed
|
|
|
|
|
|
|
|
|
|
/- The maps between the homotopy groups -/
|
|
|
|
|
definition homotopy_groups_fun
|
|
|
|
|
: Π(n : ℕ), homotopy_groups f (n+1) →* homotopy_groups f n
|
|
|
|
|
| 0 := proof f qed
|
|
|
|
|
| 1 := proof ppoint f qed
|
|
|
|
|
| 2 := proof boundary_map f qed
|
|
|
|
|
| 3 := proof ap1 f ∘* pinverse qed
|
|
|
|
|
| 4 := proof ap1 (ppoint f) ∘* pinverse qed
|
|
|
|
|
| 5 := proof ap1 (boundary_map f) ∘* pinverse qed
|
|
|
|
|
| (k+6) := proof ap1 (ap1 (homotopy_groups_fun k)) qed
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun_add6 [unfold_full] :
|
|
|
|
|
homotopy_groups_fun f (n + 6) = ap1 (ap1 (homotopy_groups_fun f n)) :=
|
|
|
|
|
proof idp qed
|
|
|
|
|
|
|
|
|
|
/- this is a simpler defintion of the functions, but which are the same as the previous ones
|
|
|
|
|
(there is a pointed homotopy) -/
|
|
|
|
|
definition homotopy_groups_fun'
|
|
|
|
|
: Π(n : ℕ), homotopy_groups f (n+1) →* homotopy_groups f n
|
|
|
|
|
| 0 := proof f qed
|
|
|
|
|
| 1 := proof ppoint f qed
|
|
|
|
|
| 2 := proof boundary_map f qed
|
|
|
|
|
| (k+3) := proof ap1 (homotopy_groups_fun' k) ∘* pinverse qed
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun'_add3 [unfold_full] :
|
|
|
|
|
homotopy_groups_fun' f (n+3) = ap1 (homotopy_groups_fun' f n) ∘* pinverse :=
|
|
|
|
|
proof idp qed
|
|
|
|
|
|
|
|
|
|
theorem homotopy_groups_fun_eq
|
|
|
|
|
: Π(n : ℕ), homotopy_groups_fun f n ~* homotopy_groups_fun' f n
|
2016-02-17 23:27:26 +00:00
|
|
|
|
| 0 := by reflexivity
|
|
|
|
|
| 1 := by reflexivity
|
|
|
|
|
| 2 := by reflexivity
|
|
|
|
|
| 3 := by reflexivity
|
|
|
|
|
| 4 := by reflexivity
|
|
|
|
|
| 5 := by reflexivity
|
2016-02-17 20:39:37 +00:00
|
|
|
|
| (k+6) :=
|
|
|
|
|
begin
|
|
|
|
|
rewrite [homotopy_groups_fun_add6 f k],
|
|
|
|
|
replace (k + 6) with (k + 3 + 3),
|
|
|
|
|
rewrite [homotopy_groups_fun'_add3 f (k+3)],
|
|
|
|
|
rewrite [homotopy_groups_fun'_add3 f k],
|
|
|
|
|
refine _ ⬝* pwhisker_right _ !ap1_compose⁻¹*,
|
|
|
|
|
refine _ ⬝* !passoc⁻¹*,
|
|
|
|
|
refine !comp_pid⁻¹* ⬝* _,
|
|
|
|
|
refine pconcat2 _ _,
|
|
|
|
|
/- Currently ap1_phomotopy is defined using function extensionality -/
|
|
|
|
|
{ apply ap1_phomotopy, apply pap ap1, apply homotopy_groups_fun_eq},
|
|
|
|
|
{ refine _ ⬝* (pwhisker_right _ ap1_pinverse)⁻¹*, fapply phomotopy.mk,
|
|
|
|
|
{ intro q, esimp, exact !inv_inv⁻¹},
|
|
|
|
|
{ reflexivity}}
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition homotopy_groups_fun_add3 :
|
|
|
|
|
homotopy_groups_fun f (n + 3) ~* ap1 (homotopy_groups_fun f n) ∘* pinverse :=
|
|
|
|
|
begin
|
|
|
|
|
refine homotopy_groups_fun_eq f (n+3) ⬝* _,
|
|
|
|
|
exact pwhisker_right _ (ap1_phomotopy (homotopy_groups_fun_eq f n)⁻¹*),
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 20:39:37 +00:00
|
|
|
|
definition fiber_sequence_pequiv_homotopy_groups :
|
|
|
|
|
Πn, fiber_sequence_carrier f n ≃* homotopy_groups f n
|
2016-02-17 23:27:26 +00:00
|
|
|
|
| 0 := by reflexivity
|
|
|
|
|
| 1 := by reflexivity
|
|
|
|
|
| 2 := by reflexivity
|
2016-02-17 20:39:37 +00:00
|
|
|
|
| (k+3) :=
|
|
|
|
|
begin
|
|
|
|
|
refine fiber_sequence_carrier_pequiv f k ⬝e* _,
|
|
|
|
|
apply loop_space_pequiv,
|
|
|
|
|
exact fiber_sequence_pequiv_homotopy_groups k
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_pequiv_homotopy_groups_add3
|
|
|
|
|
: fiber_sequence_pequiv_homotopy_groups f (n + 3) =
|
|
|
|
|
ap1 (fiber_sequence_pequiv_homotopy_groups f n) ∘* fiber_sequence_carrier_pequiv f n :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
|
|
|
|
|
definition fiber_sequence_pequiv_homotopy_groups_3_phomotopy
|
|
|
|
|
: fiber_sequence_pequiv_homotopy_groups f 3 ~* fiber_sequence_carrier_pequiv f 0 :=
|
|
|
|
|
begin
|
|
|
|
|
refine fiber_sequence_pequiv_homotopy_groups_add3 f 0 ⬝p* _,
|
|
|
|
|
refine pwhisker_right _ ap1_id ⬝* _,
|
|
|
|
|
apply pid_comp
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
theorem fiber_sequence_phomotopy_homotopy_groups' :
|
|
|
|
|
Π(n : ℕ),
|
|
|
|
|
fiber_sequence_pequiv_homotopy_groups f n ∘* fiber_sequence_fun f n ~*
|
|
|
|
|
homotopy_groups_fun' f n ∘* fiber_sequence_pequiv_homotopy_groups f (n + 1)
|
|
|
|
|
| 0 := by reflexivity
|
|
|
|
|
| 1 := by reflexivity
|
|
|
|
|
| 2 :=
|
|
|
|
|
begin
|
|
|
|
|
refine !pid_comp ⬝* _,
|
|
|
|
|
replace homotopy_groups_fun' f 2 with boundary_map f,
|
|
|
|
|
refine _ ⬝* pwhisker_left _ (fiber_sequence_pequiv_homotopy_groups_3_phomotopy f)⁻¹*,
|
|
|
|
|
apply phomotopy_of_pinv_right_phomotopy,
|
|
|
|
|
reflexivity
|
|
|
|
|
end
|
|
|
|
|
| (k+3) :=
|
|
|
|
|
begin
|
|
|
|
|
replace (k + 3 + 1) with (k + 1 + 3),
|
|
|
|
|
rewrite [fiber_sequence_pequiv_homotopy_groups_add3 f k,
|
|
|
|
|
fiber_sequence_pequiv_homotopy_groups_add3 f (k+1)],
|
|
|
|
|
refine !passoc ⬝* _,
|
|
|
|
|
refine pwhisker_left _ (fiber_sequence_fun_phomotopy f k) ⬝* _,
|
|
|
|
|
refine !passoc⁻¹* ⬝* _ ⬝* !passoc,
|
|
|
|
|
apply pwhisker_right,
|
|
|
|
|
rewrite [homotopy_groups_fun'_add3],
|
|
|
|
|
refine _ ⬝* !passoc⁻¹*,
|
|
|
|
|
refine _ ⬝* pwhisker_left _ !ap1_compose_pinverse,
|
|
|
|
|
refine !passoc⁻¹* ⬝* _ ⬝* !passoc,
|
|
|
|
|
apply pwhisker_right,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose,
|
|
|
|
|
apply ap1_phomotopy,
|
|
|
|
|
exact fiber_sequence_phomotopy_homotopy_groups' k
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
theorem fiber_sequence_phomotopy_homotopy_groups (n : ℕ)
|
|
|
|
|
(x : fiber_sequence_carrier f (n + 1)) :
|
|
|
|
|
fiber_sequence_pequiv_homotopy_groups f n (fiber_sequence_fun f n x) =
|
|
|
|
|
homotopy_groups_fun f n (fiber_sequence_pequiv_homotopy_groups f (n + 1) x) :=
|
|
|
|
|
begin
|
|
|
|
|
refine fiber_sequence_phomotopy_homotopy_groups' f n x ⬝ _,
|
|
|
|
|
exact (homotopy_groups_fun_eq f n _)⁻¹
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition type_LES_of_homotopy_groups [constructor] : type_chain_complex +ℕ :=
|
|
|
|
|
transfer_type_chain_complex
|
|
|
|
|
(fiber_sequence f)
|
|
|
|
|
(homotopy_groups_fun f)
|
|
|
|
|
(fiber_sequence_pequiv_homotopy_groups f)
|
|
|
|
|
(fiber_sequence_phomotopy_homotopy_groups f)
|
|
|
|
|
|
|
|
|
|
definition is_exact_type_LES_of_homotopy_groups : is_exact_t (type_LES_of_homotopy_groups f) :=
|
|
|
|
|
begin
|
|
|
|
|
intro n,
|
|
|
|
|
apply is_exact_at_t_transfer,
|
|
|
|
|
apply is_exact_fiber_sequence
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 20:39:37 +00:00
|
|
|
|
/- the long exact sequence of homotopy groups -/
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition LES_of_homotopy_groups [constructor] : chain_complex +ℕ :=
|
|
|
|
|
trunc_chain_complex
|
|
|
|
|
(transfer_type_chain_complex
|
2016-02-17 20:39:37 +00:00
|
|
|
|
(fiber_sequence f)
|
|
|
|
|
(homotopy_groups_fun f)
|
|
|
|
|
(fiber_sequence_pequiv_homotopy_groups f)
|
|
|
|
|
(fiber_sequence_phomotopy_homotopy_groups f))
|
|
|
|
|
|
|
|
|
|
/- the fiber sequence is exact -/
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition is_exact_LES_of_homotopy_groups : is_exact (LES_of_homotopy_groups f) :=
|
2016-02-17 20:39:37 +00:00
|
|
|
|
begin
|
|
|
|
|
intro n,
|
2016-02-17 23:27:26 +00:00
|
|
|
|
apply is_exact_at_trunc,
|
|
|
|
|
apply is_exact_type_LES_of_homotopy_groups
|
2016-02-17 20:39:37 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
/- for a numeral, the carrier of the fiber sequence is definitionally what we want
|
|
|
|
|
(as pointed sets) -/
|
|
|
|
|
example : LES_of_homotopy_groups f 6 = π*[2] Y :> Set* := by reflexivity
|
|
|
|
|
example : LES_of_homotopy_groups f 7 = π*[2] X :> Set* := by reflexivity
|
|
|
|
|
example : LES_of_homotopy_groups f 8 = π*[2] (pfiber f) :> Set* := by reflexivity
|
|
|
|
|
|
|
|
|
|
/- for a numeral, the functions of the fiber sequence is definitionally what we want
|
|
|
|
|
(as pointed function). All these functions have at most one "pinverse" in them, and these
|
|
|
|
|
inverses are inside the π→*[2*k].
|
|
|
|
|
-/
|
2016-02-17 23:27:26 +00:00
|
|
|
|
example : cc_to_fn (LES_of_homotopy_groups f) 6 = π→*[2] f
|
2016-02-17 20:39:37 +00:00
|
|
|
|
:> (_ →* _) := by reflexivity
|
2016-02-17 23:27:26 +00:00
|
|
|
|
example : cc_to_fn (LES_of_homotopy_groups f) 7 = π→*[2] (ppoint f)
|
2016-02-17 20:39:37 +00:00
|
|
|
|
:> (_ →* _) := by reflexivity
|
2016-02-17 23:27:26 +00:00
|
|
|
|
example : cc_to_fn (LES_of_homotopy_groups f) 8 = π→*[2] (boundary_map f)
|
2016-02-17 20:39:37 +00:00
|
|
|
|
:> (_ →* _) := by reflexivity
|
2016-02-17 23:27:26 +00:00
|
|
|
|
example : cc_to_fn (LES_of_homotopy_groups f) 9 = π→*[2] (ap1 f ∘* pinverse)
|
2016-02-17 20:39:37 +00:00
|
|
|
|
:> (_ →* _) := by reflexivity
|
2016-02-17 23:27:26 +00:00
|
|
|
|
example : cc_to_fn (LES_of_homotopy_groups f) 10 = π→*[2] (ap1 (ppoint f) ∘* pinverse)
|
2016-02-17 20:39:37 +00:00
|
|
|
|
:> (_ →* _) := by reflexivity
|
2016-02-17 23:27:26 +00:00
|
|
|
|
example : cc_to_fn (LES_of_homotopy_groups f) 11 = π→*[2] (ap1 (boundary_map f) ∘* pinverse)
|
2016-02-17 20:39:37 +00:00
|
|
|
|
:> (_ →* _) := by reflexivity
|
2016-02-17 23:27:26 +00:00
|
|
|
|
example : cc_to_fn (LES_of_homotopy_groups f) 12 = π→*[4] f
|
2016-02-17 20:39:37 +00:00
|
|
|
|
:> (_ →* _) := by reflexivity
|
|
|
|
|
|
|
|
|
|
/- the carrier of the fiber sequence is what we want for natural numbers of the form
|
|
|
|
|
3n, 3n+1 and 3n+2 -/
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition LES_of_homotopy_groups_mul3 (n : ℕ)
|
|
|
|
|
: LES_of_homotopy_groups f (3 * n) = π*[n] Y :> Set* :=
|
2016-02-17 20:39:37 +00:00
|
|
|
|
begin
|
|
|
|
|
apply ptrunctype_eq_of_pType_eq,
|
|
|
|
|
exact ap (ptrunc 0) (homotopy_groups_mul3 f n)
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition LES_of_homotopy_groups_mul3add1 (n : ℕ)
|
|
|
|
|
: LES_of_homotopy_groups f (3 * n + 1) = π*[n] X :> Set* :=
|
2016-02-17 20:39:37 +00:00
|
|
|
|
begin
|
|
|
|
|
apply ptrunctype_eq_of_pType_eq,
|
|
|
|
|
exact ap (ptrunc 0) (homotopy_groups_mul3add1 f n)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition LES_of_homotopy_groups_mul3add2 (n : ℕ)
|
|
|
|
|
: LES_of_homotopy_groups f (3 * n + 2) = π*[n] (pfiber f) :> Set* :=
|
|
|
|
|
begin
|
|
|
|
|
apply ptrunctype_eq_of_pType_eq,
|
|
|
|
|
exact ap (ptrunc 0) (homotopy_groups_mul3add2 f n)
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 23:27:26 +00:00
|
|
|
|
definition LES_of_homotopy_groups_mul3' (n : ℕ)
|
|
|
|
|
: LES_of_homotopy_groups f (3 * n) = π*[n] Y :> Type :=
|
|
|
|
|
begin
|
|
|
|
|
exact ap (ptrunc 0) (homotopy_groups_mul3 f n)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition LES_of_homotopy_groups_mul3add1' (n : ℕ)
|
|
|
|
|
: LES_of_homotopy_groups f (3 * n + 1) = π*[n] X :> Type :=
|
|
|
|
|
begin
|
|
|
|
|
exact ap (ptrunc 0) (homotopy_groups_mul3add1 f n)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition LES_of_homotopy_groups_mul3add2' (n : ℕ)
|
|
|
|
|
: LES_of_homotopy_groups f (3 * n + 2) = π*[n] (pfiber f) :> Type :=
|
|
|
|
|
begin
|
|
|
|
|
exact ap (ptrunc 0) (homotopy_groups_mul3add2 f n)
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-17 20:39:37 +00:00
|
|
|
|
definition group_LES_of_homotopy_groups (n : ℕ) : group (LES_of_homotopy_groups f (n + 3)) :=
|
|
|
|
|
group_homotopy_group 0 (homotopy_groups f n)
|
|
|
|
|
|
|
|
|
|
definition comm_group_LES_of_homotopy_groups (n : ℕ) : comm_group (LES_of_homotopy_groups f (n + 6)) :=
|
|
|
|
|
comm_group_homotopy_group 0 (homotopy_groups f n)
|
|
|
|
|
|
2016-02-17 23:27:26 +00:00
|
|
|
|
end chain_complex
|
|
|
|
|
|
|
|
|
|
open group prod succ_str fin
|
|
|
|
|
|
|
|
|
|
/--------------
|
|
|
|
|
PART 3
|
|
|
|
|
--------------/
|
|
|
|
|
|
|
|
|
|
namespace chain_complex
|
|
|
|
|
|
|
|
|
|
--TODO: move
|
|
|
|
|
definition tr_mul_tr {A : Type*} (n : ℕ) (p q : Ω[n + 1] A) :
|
|
|
|
|
tr p *[πg[n+1] A] tr q = tr (p ⬝ q) :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
|
|
|
|
|
definition is_homomorphism_cast_loop_space_succ_eq_in {A : Type*} (n : ℕ) :
|
|
|
|
|
is_homomorphism
|
|
|
|
|
(cast (ap (trunc 0 ∘ pointed.carrier) (loop_space_succ_eq_in A (succ n)))
|
|
|
|
|
: πg[n+1+1] A → πg[n+1] Ω A) :=
|
|
|
|
|
begin
|
|
|
|
|
intro g h, induction g with g, induction h with h,
|
|
|
|
|
xrewrite [tr_mul_tr, - + fn_cast_eq_cast_fn _ (λn, tr), tr_mul_tr, ↑cast, -tr_compose,
|
|
|
|
|
loop_space_succ_eq_in_concat, - + tr_compose],
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition is_homomorphism_inverse (A : Type*) (n : ℕ)
|
|
|
|
|
: is_homomorphism (λp, p⁻¹ : πag[n+2] A → πag[n+2] A) :=
|
|
|
|
|
begin
|
|
|
|
|
intro g h, rewrite mul.comm,
|
|
|
|
|
induction g with g, induction h with h,
|
|
|
|
|
exact ap tr !con_inv
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
section
|
|
|
|
|
universe variable u
|
|
|
|
|
parameters {X Y : pType.{u}} (f : X →* Y)
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups2 [reducible] : +6ℕ → Type*
|
|
|
|
|
| (n, fin.mk 0 H) := Ω[2*n] Y
|
|
|
|
|
| (n, fin.mk 1 H) := Ω[2*n] X
|
|
|
|
|
| (n, fin.mk 2 H) := Ω[2*n] (pfiber f)
|
|
|
|
|
| (n, fin.mk 3 H) := Ω[2*n + 1] Y
|
|
|
|
|
| (n, fin.mk 4 H) := Ω[2*n + 1] X
|
|
|
|
|
| (n, fin.mk k H) := Ω[2*n + 1] (pfiber f)
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups2_add1 (n : ℕ) : Π(x : fin (succ 5)),
|
|
|
|
|
homotopy_groups2 (n+1, x) = Ω Ω(homotopy_groups2 (n, x))
|
|
|
|
|
| (fin.mk 0 H) := by reflexivity
|
|
|
|
|
| (fin.mk 1 H) := by reflexivity
|
|
|
|
|
| (fin.mk 2 H) := by reflexivity
|
|
|
|
|
| (fin.mk 3 H) := by reflexivity
|
|
|
|
|
| (fin.mk 4 H) := by reflexivity
|
|
|
|
|
| (fin.mk 5 H) := by reflexivity
|
|
|
|
|
| (fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun2 : Π(n : +6ℕ), homotopy_groups2 (S n) →* homotopy_groups2 n
|
|
|
|
|
| (n, fin.mk 0 H) := proof Ω→[2*n] f qed
|
|
|
|
|
| (n, fin.mk 1 H) := proof Ω→[2*n] (ppoint f) qed
|
|
|
|
|
| (n, fin.mk 2 H) :=
|
|
|
|
|
proof Ω→[2*n] (boundary_map f) ∘* pcast (loop_space_succ_eq_in Y (2*n)) qed
|
|
|
|
|
| (n, fin.mk 3 H) := proof Ω→[2*n + 1] f ∘* pinverse qed
|
|
|
|
|
| (n, fin.mk 4 H) := proof Ω→[2*n + 1] (ppoint f) ∘* pinverse qed
|
|
|
|
|
| (n, fin.mk 5 H) :=
|
|
|
|
|
proof (Ω→[2*n + 1] (boundary_map f) ∘* pinverse) ∘* pcast (loop_space_succ_eq_in Y (2*n+1)) qed
|
|
|
|
|
| (n, fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun2_add1_0 (n : ℕ) (H : 0 < succ 5)
|
|
|
|
|
: homotopy_groups_fun2 (n+1, fin.mk 0 H) ~*
|
|
|
|
|
cast proof idp qed ap1 (ap1 (homotopy_groups_fun2 (n, fin.mk 0 H))) :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun2_add1_1 (n : ℕ) (H : 1 < succ 5)
|
|
|
|
|
: homotopy_groups_fun2 (n+1, fin.mk 1 H) ~*
|
|
|
|
|
cast proof idp qed ap1 (ap1 (homotopy_groups_fun2 (n, fin.mk 1 H))) :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun2_add1_2 (n : ℕ) (H : 2 < succ 5)
|
|
|
|
|
: homotopy_groups_fun2 (n+1, fin.mk 2 H) ~*
|
|
|
|
|
cast proof idp qed ap1 (ap1 (homotopy_groups_fun2 (n, fin.mk 2 H))) :=
|
|
|
|
|
begin
|
|
|
|
|
esimp, refine _ ⬝* (ap1_phomotopy !ap1_compose)⁻¹*, refine _ ⬝* !ap1_compose⁻¹*,
|
|
|
|
|
apply pwhisker_left,
|
|
|
|
|
refine !pcast_ap_loop_space ⬝* ap1_phomotopy !pcast_ap_loop_space,
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun2_add1_3 (n : ℕ) (H : 3 < succ 5)
|
|
|
|
|
: homotopy_groups_fun2 (n+1, fin.mk 3 H) ~*
|
|
|
|
|
cast proof idp qed ap1 (ap1 (homotopy_groups_fun2 (n, fin.mk 3 H))) :=
|
|
|
|
|
begin
|
|
|
|
|
esimp, refine _ ⬝* (ap1_phomotopy !ap1_compose)⁻¹*, refine _ ⬝* !ap1_compose⁻¹*,
|
|
|
|
|
apply pwhisker_left,
|
|
|
|
|
exact ap1_pinverse⁻¹* ⬝* ap1_phomotopy !ap1_pinverse⁻¹*
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun2_add1_4 (n : ℕ) (H : 4 < succ 5)
|
|
|
|
|
: homotopy_groups_fun2 (n+1, fin.mk 4 H) ~*
|
|
|
|
|
cast proof idp qed ap1 (ap1 (homotopy_groups_fun2 (n, fin.mk 4 H))) :=
|
|
|
|
|
begin
|
|
|
|
|
esimp, refine _ ⬝* (ap1_phomotopy !ap1_compose)⁻¹*, refine _ ⬝* !ap1_compose⁻¹*,
|
|
|
|
|
apply pwhisker_left,
|
|
|
|
|
exact ap1_pinverse⁻¹* ⬝* ap1_phomotopy !ap1_pinverse⁻¹*
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun2_add1_5 (n : ℕ) (H : 5 < succ 5)
|
|
|
|
|
: homotopy_groups_fun2 (n+1, fin.mk 5 H) ~*
|
|
|
|
|
cast proof idp qed ap1 (ap1 (homotopy_groups_fun2 (n, fin.mk 5 H))) :=
|
|
|
|
|
begin
|
|
|
|
|
esimp, refine _ ⬝* (ap1_phomotopy !ap1_compose)⁻¹*, refine _ ⬝* !ap1_compose⁻¹*,
|
|
|
|
|
apply pconcat2,
|
|
|
|
|
{ esimp, refine _ ⬝* (ap1_phomotopy !ap1_compose)⁻¹*, refine _ ⬝* !ap1_compose⁻¹*,
|
|
|
|
|
apply pwhisker_left,
|
|
|
|
|
exact ap1_pinverse⁻¹* ⬝* ap1_phomotopy !ap1_pinverse⁻¹*},
|
|
|
|
|
{ refine !pcast_ap_loop_space ⬝* ap1_phomotopy !pcast_ap_loop_space}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition nat_of_str [unfold 2] [reducible] {n : ℕ} : ℕ × fin (succ n) → ℕ :=
|
|
|
|
|
λx, succ n * pr1 x + val (pr2 x)
|
|
|
|
|
|
|
|
|
|
definition str_of_nat {n : ℕ} : ℕ → ℕ × fin (succ n) :=
|
|
|
|
|
λm, (m / (succ n), mk_mod n m)
|
|
|
|
|
|
|
|
|
|
definition nat_of_str_6S [unfold 2] [reducible]
|
|
|
|
|
: Π(x : stratified +ℕ 5), nat_of_str x + 1 = nat_of_str (@S (stratified +ℕ 5) x)
|
|
|
|
|
| (n, fin.mk 0 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 1 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 2 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 3 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 4 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 5 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition fin_prod_nat_equiv_nat [constructor] (n : ℕ) : ℕ × fin (succ n) ≃ ℕ :=
|
|
|
|
|
equiv.MK nat_of_str str_of_nat
|
|
|
|
|
abstract begin
|
|
|
|
|
intro m, unfold [nat_of_str, str_of_nat, mk_mod],
|
|
|
|
|
refine _ ⬝ (eq_div_mul_add_mod m (succ n))⁻¹,
|
|
|
|
|
rewrite [mul.comm]
|
|
|
|
|
end end
|
|
|
|
|
abstract begin
|
|
|
|
|
intro x, cases x with m k,
|
|
|
|
|
cases k with k H,
|
|
|
|
|
apply prod_eq: esimp [str_of_nat],
|
|
|
|
|
{ rewrite [add.comm, add_mul_div_self_left _ _ (!zero_lt_succ),
|
|
|
|
|
div_eq_zero_of_lt H, zero_add]},
|
|
|
|
|
{ apply eq_of_veq, esimp [mk_mod],
|
|
|
|
|
rewrite [add.comm, add_mul_mod_self_left, mod_eq_of_lt H]}
|
|
|
|
|
end end
|
|
|
|
|
|
|
|
|
|
/-
|
|
|
|
|
note: in the following theorem the (n+1) case is 6 times the same,
|
|
|
|
|
so maybe this can be simplified
|
|
|
|
|
-/
|
|
|
|
|
definition homotopy_groups2_pequiv' : Π(n : ℕ) (x : fin (nat.succ 5)),
|
|
|
|
|
homotopy_groups f (nat_of_str (n, x)) ≃* homotopy_groups2 (n, x)
|
|
|
|
|
| 0 (fin.mk 0 H) := by reflexivity
|
|
|
|
|
| 0 (fin.mk 1 H) := by reflexivity
|
|
|
|
|
| 0 (fin.mk 2 H) := by reflexivity
|
|
|
|
|
| 0 (fin.mk 3 H) := by reflexivity
|
|
|
|
|
| 0 (fin.mk 4 H) := by reflexivity
|
|
|
|
|
| 0 (fin.mk 5 H) := by reflexivity
|
|
|
|
|
| (n+1) (fin.mk 0 H) :=
|
|
|
|
|
begin
|
|
|
|
|
-- uncomment the next two lines to have prettier subgoals
|
|
|
|
|
-- esimp, replace (succ 5 * (n + 1) + 0) with (6*n+3+3),
|
|
|
|
|
-- rewrite [+homotopy_groups_add3, homotopy_groups2_add1],
|
|
|
|
|
apply loop_space_pequiv, apply loop_space_pequiv,
|
|
|
|
|
rexact homotopy_groups2_pequiv' n (fin.mk 0 H)
|
|
|
|
|
end
|
|
|
|
|
| (n+1) (fin.mk 1 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply loop_space_pequiv, apply loop_space_pequiv,
|
|
|
|
|
rexact homotopy_groups2_pequiv' n (fin.mk 1 H)
|
|
|
|
|
end
|
|
|
|
|
| (n+1) (fin.mk 2 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply loop_space_pequiv, apply loop_space_pequiv,
|
|
|
|
|
rexact homotopy_groups2_pequiv' n (fin.mk 2 H)
|
|
|
|
|
end
|
|
|
|
|
| (n+1) (fin.mk 3 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply loop_space_pequiv, apply loop_space_pequiv,
|
|
|
|
|
rexact homotopy_groups2_pequiv' n (fin.mk 3 H)
|
|
|
|
|
end
|
|
|
|
|
| (n+1) (fin.mk 4 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply loop_space_pequiv, apply loop_space_pequiv,
|
|
|
|
|
rexact homotopy_groups2_pequiv' n (fin.mk 4 H)
|
|
|
|
|
end
|
|
|
|
|
| (n+1) (fin.mk 5 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply loop_space_pequiv, apply loop_space_pequiv,
|
|
|
|
|
rexact homotopy_groups2_pequiv' n (fin.mk 5 H)
|
|
|
|
|
end
|
|
|
|
|
| n (fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups2_pequiv : Π(x : +6ℕ),
|
|
|
|
|
homotopy_groups f (nat_of_str x) ≃* homotopy_groups2 x
|
|
|
|
|
| (n, x) := homotopy_groups2_pequiv' n x
|
|
|
|
|
|
|
|
|
|
/- all cases where n>0 are basically the same -/
|
|
|
|
|
definition homotopy_groups_fun2_phomotopy (x : +6ℕ) :
|
|
|
|
|
homotopy_groups2_pequiv x ∘* homotopy_groups_fun f (nat_of_str x) ~*
|
|
|
|
|
(homotopy_groups_fun2 x ∘* homotopy_groups2_pequiv (S x))
|
|
|
|
|
∘* pcast (ap (homotopy_groups f) (nat_of_str_6S x)) :=
|
|
|
|
|
begin
|
|
|
|
|
cases x with n x, cases x with k H,
|
|
|
|
|
cases k with k, rotate 1, cases k with k, rotate 1, cases k with k, rotate 1,
|
|
|
|
|
cases k with k, rotate 1, cases k with k, rotate 1, cases k with k, rotate 2,
|
|
|
|
|
{ /-k=0-/
|
|
|
|
|
induction n with n IH,
|
|
|
|
|
{ refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹* ⬝* !comp_pid⁻¹*,
|
|
|
|
|
reflexivity},
|
|
|
|
|
{ refine _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine _ ⬝* pwhisker_right _ (!homotopy_groups_fun2_add1_0)⁻¹*,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
exact IH ⬝* !comp_pid}},
|
|
|
|
|
{ /-k=1-/
|
|
|
|
|
induction n with n IH,
|
|
|
|
|
{ refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹* ⬝* !comp_pid⁻¹*,
|
|
|
|
|
reflexivity},
|
|
|
|
|
{ refine _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine _ ⬝* pwhisker_right _ (!homotopy_groups_fun2_add1_1)⁻¹*,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
exact IH ⬝* !comp_pid}},
|
|
|
|
|
{ /-k=2-/
|
|
|
|
|
induction n with n IH,
|
|
|
|
|
{ refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹* ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
reflexivity},
|
|
|
|
|
{ refine _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine _ ⬝* pwhisker_right _ (!homotopy_groups_fun2_add1_2)⁻¹*,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
exact IH ⬝* !comp_pid}},
|
|
|
|
|
{ /-k=3-/
|
|
|
|
|
induction n with n IH,
|
|
|
|
|
{ refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹* ⬝* !comp_pid⁻¹*,
|
|
|
|
|
reflexivity},
|
|
|
|
|
{ refine _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine _ ⬝* pwhisker_right _ (!homotopy_groups_fun2_add1_3)⁻¹*,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
exact IH ⬝* !comp_pid}},
|
|
|
|
|
{ /-k=4-/
|
|
|
|
|
induction n with n IH,
|
|
|
|
|
{ refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹* ⬝* !comp_pid⁻¹*,
|
|
|
|
|
reflexivity},
|
|
|
|
|
{ refine _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine _ ⬝* pwhisker_right _ (!homotopy_groups_fun2_add1_4)⁻¹*,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
exact IH ⬝* !comp_pid}},
|
|
|
|
|
{ /-k=5-/
|
|
|
|
|
induction n with n IH,
|
|
|
|
|
{ refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine !comp_pid⁻¹* ⬝* pconcat2 _ _,
|
|
|
|
|
{ exact !comp_pid⁻¹*},
|
|
|
|
|
{ refine cast (ap (λx, _ ~* loop_space_pequiv x) !loop_space_pequiv_rfl)⁻¹ _,
|
|
|
|
|
refine cast (ap (λx, _ ~* x) !loop_space_pequiv_rfl)⁻¹ _, reflexivity}},
|
|
|
|
|
{ refine _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine _ ⬝* pwhisker_right _ (!homotopy_groups_fun2_add1_5)⁻¹*,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
refine !ap1_compose⁻¹* ⬝* _ ⬝* !ap1_compose, apply ap1_phomotopy,
|
|
|
|
|
exact IH ⬝* !comp_pid}},
|
|
|
|
|
{ /-k=k'+6-/ exfalso, apply lt_le_antisymm H, apply le_add_left}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition type_LES_of_homotopy_groups2 [constructor] : type_chain_complex +6ℕ :=
|
|
|
|
|
transfer_type_chain_complex2
|
|
|
|
|
(type_LES_of_homotopy_groups f)
|
|
|
|
|
!fin_prod_nat_equiv_nat
|
|
|
|
|
nat_of_str_6S
|
|
|
|
|
@homotopy_groups_fun2
|
|
|
|
|
@homotopy_groups2_pequiv
|
|
|
|
|
begin
|
|
|
|
|
intro m x,
|
|
|
|
|
refine homotopy_groups_fun2_phomotopy m x ⬝ _,
|
|
|
|
|
apply ap (homotopy_groups_fun2 m), apply ap (homotopy_groups2_pequiv (S m)),
|
|
|
|
|
esimp, exact ap010 cast !ap_compose⁻¹ x
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition is_exact_type_LES_of_homotopy_groups2 : is_exact_t (type_LES_of_homotopy_groups2) :=
|
|
|
|
|
begin
|
|
|
|
|
intro n,
|
|
|
|
|
apply is_exact_at_transfer2,
|
|
|
|
|
apply is_exact_type_LES_of_homotopy_groups
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition LES_of_homotopy_groups2 [constructor] : chain_complex +6ℕ :=
|
|
|
|
|
trunc_chain_complex type_LES_of_homotopy_groups2
|
|
|
|
|
|
|
|
|
|
/--------------
|
|
|
|
|
PART 4
|
|
|
|
|
--------------/
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups3 [reducible] : +6ℕ → Set*
|
|
|
|
|
| (n, fin.mk 0 H) := π*[2*n] Y
|
|
|
|
|
| (n, fin.mk 1 H) := π*[2*n] X
|
|
|
|
|
| (n, fin.mk 2 H) := π*[2*n] (pfiber f)
|
|
|
|
|
| (n, fin.mk 3 H) := π*[2*n + 1] Y
|
|
|
|
|
| (n, fin.mk 4 H) := π*[2*n + 1] X
|
|
|
|
|
| (n, fin.mk k H) := π*[2*n + 1] (pfiber f)
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups3eq2 [reducible]
|
|
|
|
|
: Π(n : +6ℕ), ptrunc 0 (homotopy_groups2 n) ≃* homotopy_groups3 n
|
|
|
|
|
| (n, fin.mk 0 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 1 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 2 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 3 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 4 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 5 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun3 : Π(n : +6ℕ), homotopy_groups3 (S n) →* homotopy_groups3 n
|
|
|
|
|
| (n, fin.mk 0 H) := proof π→*[2*n] f qed
|
|
|
|
|
| (n, fin.mk 1 H) := proof π→*[2*n] (ppoint f) qed
|
|
|
|
|
| (n, fin.mk 2 H) :=
|
|
|
|
|
proof π→*[2*n] (boundary_map f) ∘* pcast (ap (ptrunc 0) (loop_space_succ_eq_in Y (2*n))) qed
|
|
|
|
|
| (n, fin.mk 3 H) := proof π→*[2*n + 1] f ∘* tinverse qed
|
|
|
|
|
| (n, fin.mk 4 H) := proof π→*[2*n + 1] (ppoint f) ∘* tinverse qed
|
|
|
|
|
| (n, fin.mk 5 H) :=
|
|
|
|
|
proof (π→*[2*n + 1] (boundary_map f) ∘* tinverse)
|
|
|
|
|
∘* pcast (ap (ptrunc 0) (loop_space_succ_eq_in Y (2*n+1))) qed
|
|
|
|
|
| (n, fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition homotopy_groups_fun3eq2 [reducible]
|
|
|
|
|
: Π(n : +6ℕ), homotopy_groups3eq2 n ∘* ptrunc_functor 0 (homotopy_groups_fun2 n) ~*
|
|
|
|
|
homotopy_groups_fun3 n ∘* homotopy_groups3eq2 (S n)
|
|
|
|
|
| (n, fin.mk 0 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 1 H) := by reflexivity
|
|
|
|
|
| (n, fin.mk 2 H) :=
|
|
|
|
|
begin
|
|
|
|
|
refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine !ptrunc_functor_pcompose ⬝* _,
|
|
|
|
|
apply pwhisker_left, apply ptrunc_functor_pcast,
|
|
|
|
|
end
|
|
|
|
|
| (n, fin.mk 3 H) :=
|
|
|
|
|
begin
|
|
|
|
|
refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine !ptrunc_functor_pcompose ⬝* _,
|
|
|
|
|
apply pwhisker_left, apply ptrunc_functor_pinverse
|
|
|
|
|
end
|
|
|
|
|
| (n, fin.mk 4 H) :=
|
|
|
|
|
begin
|
|
|
|
|
refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine !ptrunc_functor_pcompose ⬝* _,
|
|
|
|
|
apply pwhisker_left, apply ptrunc_functor_pinverse
|
|
|
|
|
end
|
|
|
|
|
| (n, fin.mk 5 H) :=
|
|
|
|
|
begin
|
|
|
|
|
refine !pid_comp ⬝* _ ⬝* !comp_pid⁻¹*,
|
|
|
|
|
refine !ptrunc_functor_pcompose ⬝* _,
|
|
|
|
|
apply pconcat2,
|
|
|
|
|
{ refine !ptrunc_functor_pcompose ⬝* _,
|
|
|
|
|
apply pwhisker_left, apply ptrunc_functor_pinverse},
|
|
|
|
|
{ apply ptrunc_functor_pcast}
|
|
|
|
|
end
|
|
|
|
|
| (n, fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition LES_of_homotopy_groups3 [constructor] : chain_complex +6ℕ :=
|
|
|
|
|
transfer_chain_complex
|
|
|
|
|
LES_of_homotopy_groups2
|
|
|
|
|
homotopy_groups_fun3
|
|
|
|
|
homotopy_groups3eq2
|
|
|
|
|
homotopy_groups_fun3eq2
|
|
|
|
|
|
|
|
|
|
definition is_exact_LES_of_homotopy_groups3 : is_exact (LES_of_homotopy_groups3) :=
|
|
|
|
|
begin
|
|
|
|
|
intro n,
|
|
|
|
|
apply is_exact_at_transfer,
|
|
|
|
|
apply is_exact_at_trunc,
|
|
|
|
|
apply is_exact_type_LES_of_homotopy_groups2
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
open is_trunc
|
|
|
|
|
universe variable u
|
|
|
|
|
variables {X Y : pType.{u}} (f : X →* Y) (n : ℕ)
|
|
|
|
|
include f
|
|
|
|
|
|
|
|
|
|
/- the carrier of the fiber sequence is definitionally what we want (as pointed sets) -/
|
|
|
|
|
example : LES_of_homotopy_groups3 f (str_of_nat 6) = π*[2] Y :> Set* := by reflexivity
|
|
|
|
|
example : LES_of_homotopy_groups3 f (str_of_nat 7) = π*[2] X :> Set* := by reflexivity
|
|
|
|
|
example : LES_of_homotopy_groups3 f (str_of_nat 8) = π*[2] (pfiber f) :> Set* := by reflexivity
|
|
|
|
|
example : LES_of_homotopy_groups3 f (str_of_nat 9) = π*[3] Y :> Set* := by reflexivity
|
|
|
|
|
example : LES_of_homotopy_groups3 f (str_of_nat 10) = π*[3] X :> Set* := by reflexivity
|
|
|
|
|
example : LES_of_homotopy_groups3 f (str_of_nat 11) = π*[3] (pfiber f) :> Set* := by reflexivity
|
|
|
|
|
|
|
|
|
|
definition LES_of_homotopy_groups3_0 : LES_of_homotopy_groups3 f (n, 0) = π*[2*n] Y :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups3_1 : LES_of_homotopy_groups3 f (n, 1) = π*[2*n] X :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups3_2 : LES_of_homotopy_groups3 f (n, 2) = π*[2*n] (pfiber f) :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups3_3 : LES_of_homotopy_groups3 f (n, 3) = π*[2*n + 1] Y :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups3_4 : LES_of_homotopy_groups3 f (n, 4) = π*[2*n + 1] X :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups3_5 : LES_of_homotopy_groups3 f (n, 5) = π*[2*n + 1] (pfiber f):=
|
|
|
|
|
by reflexivity
|
|
|
|
|
|
|
|
|
|
/- the functions of the fiber sequence is definitionally what we want (as pointed function).
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
definition LES_of_homotopy_groups_fun3_0 :
|
|
|
|
|
cc_to_fn (LES_of_homotopy_groups3 f) (n, 0) = π→*[2*n] f :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups_fun3_1 :
|
|
|
|
|
cc_to_fn (LES_of_homotopy_groups3 f) (n, 1) = π→*[2*n] (ppoint f) :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups_fun3_2 : cc_to_fn (LES_of_homotopy_groups3 f) (n, 2) =
|
|
|
|
|
π→*[2*n] (boundary_map f) ∘* pcast (ap (ptrunc 0) (loop_space_succ_eq_in Y (2*n))) :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups_fun3_3 :
|
|
|
|
|
cc_to_fn (LES_of_homotopy_groups3 f) (n, 3) = π→*[2*n + 1] f ∘* tinverse :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups_fun3_4 :
|
|
|
|
|
cc_to_fn (LES_of_homotopy_groups3 f) (n, 4) = π→*[2*n + 1] (ppoint f) ∘* tinverse :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
definition LES_of_homotopy_groups_fun3_5 : cc_to_fn (LES_of_homotopy_groups3 f) (n, 5) =
|
|
|
|
|
(π→*[2*n + 1] (boundary_map f) ∘* tinverse) ∘*
|
|
|
|
|
pcast (ap (ptrunc 0) (loop_space_succ_eq_in Y (2*n+1))) :=
|
|
|
|
|
by reflexivity
|
|
|
|
|
|
2016-03-03 03:14:32 +00:00
|
|
|
|
definition group_LES_of_homotopy_groups3_0 :
|
2016-02-17 23:27:26 +00:00
|
|
|
|
Π(k : ℕ) (H : k + 3 < succ 5), group (LES_of_homotopy_groups3 f (0, fin.mk (k+3) H))
|
|
|
|
|
| 0 H := begin rexact group_homotopy_group 0 Y end
|
|
|
|
|
| 1 H := begin rexact group_homotopy_group 0 X end
|
|
|
|
|
| 2 H := begin rexact group_homotopy_group 0 (pfiber f) end
|
|
|
|
|
| (k+3) H := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition comm_group_LES_of_homotopy_groups3 (n : ℕ) : Π(x : fin (succ 5)),
|
|
|
|
|
comm_group (LES_of_homotopy_groups3 f (n + 1, x))
|
|
|
|
|
| (fin.mk 0 H) := proof comm_group_homotopy_group (2*n) Y qed
|
|
|
|
|
| (fin.mk 1 H) := proof comm_group_homotopy_group (2*n) X qed
|
|
|
|
|
| (fin.mk 2 H) := proof comm_group_homotopy_group (2*n) (pfiber f) qed
|
|
|
|
|
| (fin.mk 3 H) := proof comm_group_homotopy_group (2*n+1) Y qed
|
|
|
|
|
| (fin.mk 4 H) := proof comm_group_homotopy_group (2*n+1) X qed
|
|
|
|
|
| (fin.mk 5 H) := proof comm_group_homotopy_group (2*n+1) (pfiber f) qed
|
|
|
|
|
| (fin.mk (k+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
definition CommGroup_LES_of_homotopy_groups3 (n : +6ℕ) : CommGroup.{u} :=
|
|
|
|
|
CommGroup.mk (LES_of_homotopy_groups3 f (pr1 n + 1, pr2 n))
|
|
|
|
|
(comm_group_LES_of_homotopy_groups3 f (pr1 n) (pr2 n))
|
|
|
|
|
|
|
|
|
|
definition homomorphism_LES_of_homotopy_groups_fun3 : Π(k : +6ℕ),
|
|
|
|
|
CommGroup_LES_of_homotopy_groups3 f (S k) →g CommGroup_LES_of_homotopy_groups3 f k
|
|
|
|
|
| (k, fin.mk 0 H) :=
|
|
|
|
|
proof homomorphism.mk (cc_to_fn (LES_of_homotopy_groups3 f) (k + 1, 0))
|
|
|
|
|
(phomotopy_group_functor_mul _ _) qed
|
|
|
|
|
| (k, fin.mk 1 H) :=
|
|
|
|
|
proof homomorphism.mk (cc_to_fn (LES_of_homotopy_groups3 f) (k + 1, 1))
|
|
|
|
|
(phomotopy_group_functor_mul _ _) qed
|
|
|
|
|
| (k, fin.mk 2 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply homomorphism.mk (cc_to_fn (LES_of_homotopy_groups3 f) (k + 1, 2)),
|
|
|
|
|
exact abstract begin rewrite [LES_of_homotopy_groups_fun3_2],
|
|
|
|
|
refine @is_homomorphism_compose _ _ _ _ _ _ (π→*[2 * (k + 1)] boundary_map f) _ _ _,
|
|
|
|
|
{ apply group_homotopy_group ((2 * k) + 1)},
|
|
|
|
|
{ apply phomotopy_group_functor_mul},
|
|
|
|
|
{ rewrite [▸*, -ap_compose', ▸*],
|
|
|
|
|
apply is_homomorphism_cast_loop_space_succ_eq_in} end end
|
|
|
|
|
end
|
|
|
|
|
| (k, fin.mk 3 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply homomorphism.mk (cc_to_fn (LES_of_homotopy_groups3 f) (k + 1, 3)),
|
|
|
|
|
exact abstract begin rewrite [LES_of_homotopy_groups_fun3_3],
|
|
|
|
|
refine @is_homomorphism_compose _ _ _ _ _ _ (π→*[2 * (k + 1) + 1] f) tinverse _ _,
|
|
|
|
|
{ apply group_homotopy_group (2 * (k+1))},
|
|
|
|
|
{ apply phomotopy_group_functor_mul},
|
|
|
|
|
{ apply is_homomorphism_inverse} end end
|
|
|
|
|
end
|
|
|
|
|
| (k, fin.mk 4 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply homomorphism.mk (cc_to_fn (LES_of_homotopy_groups3 f) (k + 1, 4)),
|
|
|
|
|
exact abstract begin rewrite [LES_of_homotopy_groups_fun3_4],
|
|
|
|
|
refine @is_homomorphism_compose _ _ _ _ _ _ (π→*[2 * (k + 1) + 1] (ppoint f)) tinverse _ _,
|
|
|
|
|
{ apply group_homotopy_group (2 * (k+1))},
|
|
|
|
|
{ apply phomotopy_group_functor_mul},
|
|
|
|
|
{ apply is_homomorphism_inverse} end end
|
|
|
|
|
end
|
|
|
|
|
| (k, fin.mk 5 H) :=
|
|
|
|
|
begin
|
|
|
|
|
apply homomorphism.mk (cc_to_fn (LES_of_homotopy_groups3 f) (k + 1, 5)),
|
|
|
|
|
exact abstract begin rewrite [LES_of_homotopy_groups_fun3_5],
|
|
|
|
|
refine @is_homomorphism_compose _ _ _ _ _ _
|
|
|
|
|
(π→*[2 * (k + 1) + 1] (boundary_map f) ∘ tinverse) _ _ _,
|
|
|
|
|
{ refine @is_homomorphism_compose _ _ _ _ _ _
|
|
|
|
|
(π→*[2 * (k + 1) + 1] (boundary_map f)) tinverse _ _,
|
|
|
|
|
{ apply group_homotopy_group (2 * (k+1))},
|
|
|
|
|
{ apply phomotopy_group_functor_mul},
|
|
|
|
|
{ apply is_homomorphism_inverse}},
|
|
|
|
|
{ rewrite [▸*, -ap_compose', ▸*],
|
|
|
|
|
apply is_homomorphism_cast_loop_space_succ_eq_in} end end
|
|
|
|
|
end
|
|
|
|
|
| (k, fin.mk (l+6) H) := begin exfalso, apply lt_le_antisymm H, apply le_add_left end
|
|
|
|
|
|
|
|
|
|
--TODO: the maps 3, 4 and 5 are anti-homomorphisms.
|
|
|
|
|
|
2016-02-17 20:39:37 +00:00
|
|
|
|
end chain_complex
|