Spectral/algebra/spectral_sequence.hlean

190 lines
8.5 KiB
Text
Raw Normal View History

/- Spectral sequences
- basic properties of spectral sequences
- currently, we only construct an spectral sequence from an exact couple
-/
-- Author: Floris van Doorn
import .exact_couple
open algebra is_trunc left_module is_equiv equiv eq function nat sigma set_quotient group
left_module group int prod prod.ops
open exact_couple (Z2)
structure convergent_spectral_sequence.{u v w} {R : Ring} (E' : → LeftModule.{u v} R)
(Dinf : → LeftModule.{u w} R) : Type.{max u (v+1) (w+1)} :=
(E : → graded_module.{u 0 v} R Z2)
(d : Π(r : ), E r →gm E r)
(deg_d : → Z2)
(deg_d_eq0 : Π(r : ), deg (d r) 0 = deg_d r)
(α : Π(r : ) (x : Z2), E (r+1) x ≃lm graded_homology (d r) (d r) x)
(e : Π(x : Z2), E 0 x ≃lm E' x.1 x.2)
(s₀ : Z2 → )
(f : Π{r : } {x : Z2} (h : s₀ x ≤ r), E (s₀ x) x ≃lm E r x)
(lb : )
(HDinf : Π(n : ), is_built_from (Dinf n)
(λ(k : ), (λx, E (s₀ x) x) (n - (k + lb n), k + lb n)))
/- todo: the current definition doesn't say that E (s₀ x) x is contractible for x.1 + x.2 = n and x.2 < lb n -/
definition convergent_spectral_sequence_g [reducible] (E' : → AbGroup)
(Dinf : → AbGroup) : Type :=
convergent_spectral_sequence (λn s, LeftModule_int_of_AbGroup (E' n s))
(λn, LeftModule_int_of_AbGroup (Dinf n))
section exact_couple
open exact_couple exact_couple.exact_couple exact_couple.convergent_exact_couple
exact_couple.convergence_theorem exact_couple.derived_couple
definition convergent_spectral_sequence_of_exact_couple {R : Ring} {E' : → LeftModule R}
{Dinf : → LeftModule R} (c : convergent_exact_couple E' Dinf)
2018-10-03 21:14:37 +00:00
(st_eq : Πn, (st c n).1 + (st c n).2 = n) (deg_i_eq : deg (i (X c)) 0 = (- 1, 1)) :
convergent_spectral_sequence E' Dinf :=
convergent_spectral_sequence.mk (λr, E (page (X c) r)) (λr, d (page (X c) r))
(deg_d c) (deg_d_eq0 c)
(λr ns, by reflexivity) (e c) (B3 (HH c)) (λr ns Hr, Einfstable (HH c) Hr idp)
(λn, (st c n).2)
begin
intro n,
refine is_built_from_isomorphism (f c n) _ (is_built_from_infpage (HH c) (st c n) (HB c n)),
intro p, apply isomorphism_of_eq, apply ap (λx, E (page (X c) (B3 (HH c) x)) x),
induction p with p IH,
{ exact !prod.eta⁻¹ ⬝ prod_eq (eq_sub_of_add_eq (ap (add _) !zero_add ⬝ st_eq n))
(zero_add (st c n).2)⁻¹ },
2018-10-03 21:14:37 +00:00
{ assert H1 : Π(a : ), n - (p + a) - 1 = n - (succ p + a),
exact λa, !sub_add_eq_sub_sub⁻¹ ⬝ ap (sub n) (add_comm_middle p a 1 ⬝ proof idp qed),
assert H2 : Π(a : ), p + a + 1 = succ p + a,
exact λa, add_comm_middle p a 1,
refine ap (deg (i (X c))) IH ⬝ !deg_eq ⬝ ap (add _) deg_i_eq ⬝ prod_eq !H1 !H2 }
end
end exact_couple
namespace spectral_sequence
open convergent_spectral_sequence
variables {R : Ring} {E' : → LeftModule R} {Dinf : → LeftModule R}
(c : convergent_spectral_sequence E' Dinf)
-- (E : → graded_module.{u 0 v} R Z2)
-- (d : Π(r : ), E r →gm E r)
-- (deg_d : → Z2)
-- (deg_d_eq0 : Π(r : ), deg (d r) 0 = deg_d r)
-- (α : Π(r : ) (x : Z2), E (r+1) x ≃lm graded_homology (d r) (d r) x)
-- (e : Π(x : Z2), E 0 x ≃lm E' x.1 x.2)
-- (s₀ : Z2 → )
-- (f : Π{r : } {x : Z2} (h : s₀ x ≤ r), E (s₀ x) x ≃lm E r x)
-- (lb : )
-- (HDinf : Π(n : ), is_built_from (Dinf n)
-- (λ(k : ), (λx, E (s₀ x) x) (n - (k + lb n), k + lb n)))
definition Einf (x : Z2) : LeftModule R := E c (s₀ c x) x
definition is_contr_E_succ (r : ) (x : Z2) (h : is_contr (E c r x)) : is_contr (E c (r+1) x) :=
is_contr_equiv_closed_rev (equiv_of_isomorphism (α c r x)) (is_contr_homology _ _ _)
definition deg_d_eq (r : ) (x : Z2) : deg (d c r) x = x + deg_d c r :=
!deg_eq ⬝ ap (add _) !deg_d_eq0
definition deg_d_inv_eq (r : ) (x : Z2) : (deg (d c r))⁻¹ᵉ x = x - deg_d c r :=
inv_eq_of_eq (!deg_d_eq ⬝ !neg_add_cancel_right)⁻¹
definition is_contr_E_of_le {r₁ r₂ : } (H : r₁ ≤ r₂) (x : Z2) (h : is_contr (E c r₁ x)) :
is_contr (E c r₂ x) :=
begin
induction H with r₂ H IH,
{ exact h },
{ apply is_contr_E_succ, exact IH }
end
definition is_contr_E (r : ) (x : Z2) (h : is_contr (E' x.1 x.2)) : is_contr (E c r x) :=
is_contr_E_of_le c !zero_le x (is_contr_equiv_closed_rev (equiv_of_isomorphism (e c x)) h)
definition is_contr_Einf (x : Z2) (h : is_contr (E' x.1 x.2)) : is_contr (Einf c x) :=
is_contr_E c (s₀ c x) x h
definition E_isomorphism {r₁ r₂ : } {ns : Z2} (H : r₁ ≤ r₂)
(H1 : Π⦃r⦄, r₁ ≤ r → r < r₂ → is_contr (E c r (ns - deg_d c r)))
(H2 : Π⦃r⦄, r₁ ≤ r → r < r₂ → is_contr (E c r (ns + deg_d c r))) :
E c r₂ ns ≃lm E c r₁ ns :=
begin
assert H3 : Π⦃r⦄, r₁ ≤ r → r ≤ r₂ → E c r ns ≃lm E c r₁ ns,
{ intro r Hr₁ Hr₂,
induction Hr₁ with r Hr₁ IH, reflexivity,
let Hr₂' := le_of_succ_le Hr₂,
refine α c r ns ⬝lm homology_isomorphism _ _ _ _ ⬝lm IH Hr₂',
exact is_contr_equiv_closed (equiv_ap (E c r) !deg_d_inv_eq⁻¹) (H1 Hr₁ Hr₂),
exact is_contr_equiv_closed (equiv_ap (E c r) !deg_d_eq⁻¹) (H2 Hr₁ Hr₂) },
exact H3 H (le.refl _)
end
definition E_isomorphism0 {r : } {n s : }
(H1 : Πr', r' < r → is_contr (E' (n - (deg_d c r').1) (s - (deg_d c r').2)))
(H2 : Πr', r' < r → is_contr (E' (n + (deg_d c r').1) (s + (deg_d c r').2))) :
E c r (n, s) ≃lm E' n s :=
E_isomorphism c !zero_le (λr' Hr₁ Hr₂, is_contr_E c r' _ (H1 r' Hr₂))
(λr' Hr₁ Hr₂, is_contr_E c r' _ (H2 r' Hr₂)) ⬝lm
e c (n, s)
definition Einf_isomorphism (r₁ : ) {ns : Z2}
(H1 : Π⦃r⦄, r₁ ≤ r → is_contr (E c r (ns - deg_d c r)))
(H2 : Π⦃r⦄, r₁ ≤ r → is_contr (E c r (ns + deg_d c r))) :
Einf c ns ≃lm E c r₁ ns :=
begin
cases le.total r₁ (s₀ c ns) with Hr Hr,
exact E_isomorphism c Hr (λr Hr₁ Hr₂, H1 Hr₁) (λr Hr₁ Hr₂, H2 Hr₁),
exact f c Hr
end
definition Einf_isomorphism0 {n s : }
(H1 : Πr, is_contr (E' (n - (deg_d c r).1) (s - (deg_d c r).2)))
(H2 : Πr, is_contr (E' (n + (deg_d c r).1) (s + (deg_d c r).2))) :
Einf c (n, s) ≃lm E' n s :=
E_isomorphism0 c (λr Hr, H1 r) (λr Hr, H2 r)
2018-10-10 01:27:37 +00:00
definition convergence_0 (n : ) (H : Πm, lb c m = 0) :
is_built_from (Dinf n) (λ(k : ), Einf c (n - k, k)) :=
is_built_from_isomorphism isomorphism.rfl
(λk, left_module.isomorphism_of_eq (ap (Einf c)
(prod_eq (ap (sub n) (ap (add _) !H ⬝ add_zero _)) (ap (add _) !H ⬝ add_zero _))))
(HDinf c n)
/- we call a spectral sequence normal if it is a first-quadrant spectral sequence and
the degree of d on page r (for r ≥ 2) is (r, -(r-1)).
The indexing is different, because we start counting pages at 2. -/
include c
structure is_normal : Type :=
(normal1 : Π{n} s, n < 0 → is_contr (E' n s))
(normal2 : Πn {s}, s < 0 → is_contr (E' n s))
(normal3 : Π(r : ), deg_d c r = (r+2, -(r+1)))
open is_normal
variable {c}
2018-10-25 01:19:26 +00:00
variable (nc : is_normal c)
include nc
definition deg_d_normal_pr1 (r : ) : (deg_d c r).1 = r+2 := ap pr1 (normal3 nc r)
definition deg_d_normal_pr2 (r : ) : (deg_d c r).2 = -(r+1) := ap pr2 (normal3 nc r)
definition stable_range {n s : } {r : } (H1 : n < r + 2) (H2 : s < r + 1) :
Einf c (n, s) ≃lm E c r (n, s) :=
begin
fapply Einf_isomorphism,
2018-10-25 01:19:26 +00:00
{ intro r' Hr', apply is_contr_E, apply normal1 nc,
refine lt_of_le_of_lt (le_of_eq (ap (λx, n - x.1) (normal3 nc r'))) _,
apply sub_lt_left_of_lt_add,
refine lt_of_lt_of_le H1 (le.trans _ (le_of_eq !add_zero⁻¹)),
exact add_le_add_right (of_nat_le_of_nat_of_le Hr') 2 },
2018-10-25 01:19:26 +00:00
{ intro r' Hr', apply is_contr_E, apply normal2 nc,
refine lt_of_le_of_lt (le_of_eq (ap (λx, s + x.2) (normal3 nc r'))) _,
change s - (r' + 1) < 0,
apply sub_lt_left_of_lt_add,
refine lt_of_lt_of_le H2 (le.trans _ (le_of_eq !add_zero⁻¹)),
exact add_le_add_right (of_nat_le_of_nat_of_le Hr') 1 },
end
2018-10-25 01:19:26 +00:00
definition deg_d_normal_eq (r : ) (x : Z2) : deg (d c r) x = x + (r+2, -(r+1)) :=
deg_d_eq c r x ⬝ ap (add x) (is_normal.normal3 nc r)
omit nc
end spectral_sequence