Definitions/Def_AlgebraicGeometry_DoubleComplex.lean
Bounded double complexes: total complex and weak convergence
For a commutative ring R, DoubleComplex.Bounded R is a hand-built structure packaging a first-quadrant double complex of R-modules: modules C^{p,q} for p,q\in\mathbb N (with their additive and module structures as fields), R-linear maps d_H\colon C^{p,q}\to C^{p+1,q} and d_V\colon C^{p,q}\to C^{p,q+1}, the relations d_H\circ d_H=0, d_V\circ d_V=0 and the commuting (not anticommuting) square d_V\circ d_H=d_H\circ d_V, together with a bound N and the requirement that C^{p,q} be a subsingleton (hence zero) whenever N\le p or N\le q. On such a D, Diag n is the set of pairs with p+q=n, Tot D n the product \prod_{p+q=n}C^{p,q}, and dTot the map whose component at (p,q) is d_H applied to the (p-1,q) entry plus (-1)^p\,d_V applied to the (p,q-1) entry (the missing terms being 0 at the edges); the helper lemmas dTot_apply_zero_succ, dTot_apply_succ_zero, dTot_apply_succ_succ record these components and dTot_comp_dTot proves d^{n+1}\circ d^n=0. HTot D n is \ker d^{\,n} modulo the submodule HTotB D n, which is \bot for n=0 and the preimage of \operatorname{im} d^{\,n-1} otherwise. Columnwise, colH D p q is \ker d_V modulo the image of the previous d_V (again \bot in degree 0), colHdH the map induced by d_H, and E₂I D p q the quotient of \ker(\mathrm{colHdH}) by the preimage of the image of the preceding colHdH, i.e. {}'E_2^{p,q}=H^p_h H^q_v; transpose swaps the two indices and differentials, and E₂II D p q is E₂I (transpose D) q p.
SubQuot R M is a pair of submodules B\le Z of M, with carrier Z/B. Convergence R E₂ H N is a structure recording, for families E_2^{p,q} and H^n of R-modules, a deliberately partial convergence statement as data: subquotients E_\infty^{p,q}\subseteq E_2^{p,q} with Z_\infty^{p,0}=\top; for each p a monotone filtration indexed by Fin (N+1) of E_2^{p,0} from \bot to B_\infty^{p,0} each of whose graded pieces admits a linear isomorphism onto the carrier of some subquotient of some E_2^{p',q'} with q'\ge 1; and for each n a monotone filtration indexed by Fin (N+2) of H^n from \bot to \top such that, for p\le N, the p-th graded piece of the filtration of H^p is isomorphic to E_\infty^{p,0}. Nothing is asserted about the other graded pieces of H^n. BoundedSpectralSequence is the proposition that every bounded double complex over every commutative ring admits such convergence data for ({}'E_2, H^\bullet(\mathrm{Tot}), N).
Relation to Mathlib
These are the project's own notions: the double complex, its total complex and the two spectral-sequence pages are set up directly on \mathbb N-indexed families of modules with explicit kernels and quotients, rather than through Mathlib's HomologicalComplex machinery, and Convergence axiomatises the convergence conclusion as a structure.
Where it is used
The convergence data are used to transfer finiteness from the abutment H^\bullet(\mathrm{Tot}\,C) and from the rows q\ge 1 to the bottom row q=0, which is how Serre–Grothendieck finiteness of coherent cohomology on projective schemes is obtained in this development; the module is imported throughout the algebraic-geometry layer of the proof.
References
- C. A. Weibel, An Introduction to Homological Algebra, Cambridge Studies in Advanced Mathematics 38, Cambridge University Press, 1994, Theorem 5.6.1
- H. Cartan and S. Eilenberg, Homological Algebra, Princeton University Press, 1956, Chapter XV
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 231 lines
- 54 declarations
- used in the statements of 35 theorems and imported by 39 proofs
- imports 0 definition modules
Source file: Definitions/Def_AlgebraicGeometry_DoubleComplex.lean
Imports
- only Mathlib
Declarations
- structure
DoubleComplex.Bounded - field
DoubleComplex.Bounded.C - field
DoubleComplex.Bounded.dH - field
DoubleComplex.Bounded.dV - field
DoubleComplex.Bounded.dH_sq - field
DoubleComplex.Bounded.dV_sq - field
DoubleComplex.Bounded.dHV_comm - field
DoubleComplex.Bounded.N - field
DoubleComplex.Bounded.hBound - abbrev
DoubleComplex.Diag - abbrev
DoubleComplex.Tot - def
DoubleComplex.dTotH - def
DoubleComplex.dTotV - def
DoubleComplex.dTot - def
DoubleComplex.HTotB - abbrev
DoubleComplex.HTot - theorem
DoubleComplex.dTot_apply_zero_succ - theorem
DoubleComplex.dTot_apply_succ_zero - theorem
DoubleComplex.dTot_apply_succ_succ - theorem
DoubleComplex.dTot_comp_dTot - def
DoubleComplex.colB - abbrev
DoubleComplex.colH - def
DoubleComplex.colHdH - def
DoubleComplex.E₂IB - abbrev
DoubleComplex.E₂I - def
DoubleComplex.transpose - abbrev
DoubleComplex.E₂II - structure
DoubleComplex.SubQuot - field
DoubleComplex.SubQuot.Z - field
DoubleComplex.SubQuot.B - field
DoubleComplex.SubQuot.hBZ - abbrev
DoubleComplex.SubQuot.carrier - structure
DoubleComplex.Convergence - field
DoubleComplex.Convergence.E₂ - field
DoubleComplex.Convergence.H - field
DoubleComplex.Convergence.Einf - field
DoubleComplex.Convergence.hZ0 - field
DoubleComplex.Convergence.Bfilt - field
DoubleComplex.Convergence.Bfilt_mono - field
DoubleComplex.Convergence.Bfilt_bot - field
DoubleComplex.Convergence.Bfilt_top - field
DoubleComplex.Convergence.Bfilt_gr - field
DoubleComplex.Convergence.Nonempty - field
DoubleComplex.Convergence.Hfilt - field
DoubleComplex.Convergence.Hfilt_mono - field
DoubleComplex.Convergence.Hfilt_bot - field
DoubleComplex.Convergence.Hfilt_top - field
DoubleComplex.Convergence.Hfilt_gr - field
DoubleComplex.Convergence.Nonempty - def
DoubleComplex.BoundedSpectralSequence
Source
import Mathlib set_option autoImplicit false noncomputable section universe u namespace DoubleComplex structure Bounded (R : Type u) [CommRing R] where C : ℕ → ℕ → Type u [abGrp : ∀ p q, AddCommGroup (C p q)] [modR : ∀ p q, Module R (C p q)] dH : ∀ p q, C p q →ₗ[R] C (p + 1) q dV : ∀ p q, C p q →ₗ[R] C p (q + 1) dH_sq : ∀ p q, dH (p + 1) q ∘ₗ dH p q = 0 dV_sq : ∀ p q, dV p (q + 1) ∘ₗ dV p q = 0 dHV_comm : ∀ p q, dV (p + 1) q ∘ₗ dH p q = dH p (q + 1) ∘ₗ dV p q N : ℕ hBound : ∀ p q, N ≤ p ∨ N ≤ q → Subsingleton (C p q) attribute [instance] Bounded.abGrp Bounded.modR section Tot variable {R : Type u} [CommRing R] (D : Bounded R) abbrev Diag (n : ℕ) : Type := {pq : ℕ × ℕ // pq.1 + pq.2 = n} abbrev Tot (n : ℕ) : Type u := ∀ i : Diag n, D.C i.1.1 i.1.2 def dTotH {n : ℕ} (i : Diag (n + 1)) : Tot D n →ₗ[R] D.C i.1.1 i.1.2 := match i with | ⟨(0, _), _⟩ => 0 | ⟨(p' + 1, q), h⟩ => (D.dH p' q).comp (LinearMap.proj (R := R) (φ := fun j : Diag n => D.C j.1.1 j.1.2) ⟨(p', q), by omega⟩) def dTotV {n : ℕ} (i : Diag (n + 1)) : Tot D n →ₗ[R] D.C i.1.1 i.1.2 := match i with | ⟨(_, 0), _⟩ => 0 | ⟨(p, q' + 1), h⟩ => (D.dV p q').comp (LinearMap.proj (R := R) (φ := fun j : Diag n => D.C j.1.1 j.1.2) ⟨(p, q'), by omega⟩) def dTot (n : ℕ) : Tot D n →ₗ[R] Tot D (n + 1) := LinearMap.pi fun i => dTotH D i + ((-1 : ℤ) ^ i.1.1) • dTotV D i def HTotB : (n : ℕ) → Submodule R (LinearMap.ker (dTot D n)) | 0 => ⊥ | n' + 1 => (LinearMap.range (dTot D n')).comap (LinearMap.ker (dTot D (n' + 1))).subtype abbrev HTot (n : ℕ) : Type u := LinearMap.ker (dTot D n) ⧸ HTotB D n end Tot section DTotGeneric variable {R : Type u} [CommRing R] {D : Bounded R} theorem dTot_apply_zero_succ {n q' : ℕ} (h : 0 + (q' + 1) = n + 1) (c : Tot D n) : dTot D n c ⟨(0, q' + 1), h⟩ = D.dV 0 q' (c ⟨(0, q'), by omega⟩) := by simp only [dTot, LinearMap.pi_apply, LinearMap.add_apply, LinearMap.smul_apply, dTotH, dTotV, LinearMap.zero_apply, LinearMap.comp_apply, LinearMap.proj_apply, pow_zero, one_smul, zero_add] theorem dTot_apply_succ_zero {n p' : ℕ} (h : p' + 1 + 0 = n + 1) (c : Tot D n) : dTot D n c ⟨(p' + 1, 0), h⟩ = D.dH p' 0 (c ⟨(p', 0), by omega⟩) := by simp only [dTot, LinearMap.pi_apply, LinearMap.add_apply, LinearMap.smul_apply, dTotH, dTotV, LinearMap.zero_apply, LinearMap.comp_apply, LinearMap.proj_apply, smul_zero, add_zero] theorem dTot_apply_succ_succ {n p' q' : ℕ} (h : p' + 1 + (q' + 1) = n + 1) (c : Tot D n) : dTot D n c ⟨(p' + 1, q' + 1), h⟩ = D.dH p' (q' + 1) (c ⟨(p', q' + 1), by omega⟩) + ((-1 : ℤ) ^ (p' + 1)) • D.dV (p' + 1) q' (c ⟨(p' + 1, q'), by omega⟩) := by rfl theorem dTot_comp_dTot (D : Bounded R) (n : ℕ) : dTot D (n + 1) ∘ₗ dTot D n = 0 := by refine LinearMap.ext fun c => funext fun ⟨⟨pp, q⟩, h⟩ => ?_ simp only [LinearMap.comp_apply, LinearMap.zero_apply, Pi.zero_apply] match pp, q, h with | 0, 0, h => omega | 0, q' + 1, h => obtain ⟨q'', rfl⟩ : ∃ q'', q' = q'' + 1 := ⟨q' - 1, by omega⟩ rw [dTot_apply_zero_succ, dTot_apply_zero_succ, ← LinearMap.comp_apply, D.dV_sq, LinearMap.zero_apply] | p' + 1, 0, h => obtain ⟨p'', rfl⟩ : ∃ p'', p' = p'' + 1 := ⟨p' - 1, by omega⟩ rw [dTot_apply_succ_zero, dTot_apply_succ_zero, ← LinearMap.comp_apply, D.dH_sq, LinearMap.zero_apply] | p' + 1, q' + 1, h => rw [dTot_apply_succ_succ] have hH : D.dH p' (q' + 1) (dTot D n c ⟨(p', q' + 1), by omega⟩) = ((-1 : ℤ) ^ p') • D.dH p' (q' + 1) (D.dV p' q' (c ⟨(p', q'), by omega⟩)) := by rcases p' with _ | p'' · rw [dTot_apply_zero_succ, pow_zero, one_smul] · rw [dTot_apply_succ_succ, map_add, map_zsmul, ← LinearMap.comp_apply, D.dH_sq, LinearMap.zero_apply, zero_add] have hV : D.dV (p' + 1) q' (dTot D n c ⟨(p' + 1, q'), by omega⟩) = D.dV (p' + 1) q' (D.dH p' q' (c ⟨(p', q'), by omega⟩)) := by rcases q' with _ | q'' · rw [dTot_apply_succ_zero] · rw [dTot_apply_succ_succ, map_add, map_zsmul, show D.dV (p' + 1) (q'' + 1) (D.dV (p' + 1) q'' (c ⟨(p' + 1, q''), by omega⟩)) = 0 from LinearMap.congr_fun (D.dV_sq (p' + 1) q'') _, smul_zero, add_zero] rw [hH, hV, show D.dV (p' + 1) q' (D.dH p' q' (c ⟨(p', q'), by omega⟩)) = D.dH p' (q' + 1) (D.dV p' q' (c ⟨(p', q'), by omega⟩)) from LinearMap.congr_fun (D.dHV_comm p' q') _, ← add_smul, show ((-1:ℤ)^p' + (-1)^(p'+1)) = 0 from by ring, zero_smul] end DTotGeneric section E2 variable {R : Type u} [CommRing R] (D : Bounded R) def colB (p : ℕ) : (q : ℕ) → Submodule R (LinearMap.ker (D.dV p q)) | 0 => ⊥ | q' + 1 => (LinearMap.range (D.dV p q')).comap (LinearMap.ker (D.dV p (q' + 1))).subtype abbrev colH (p q : ℕ) : Type u := LinearMap.ker (D.dV p q) ⧸ colB D p q def colHdH (p q : ℕ) : colH D p q →ₗ[R] colH D (p + 1) q := Submodule.mapQ _ _ ((D.dH p q).restrict fun x hx => LinearMap.mem_ker.mpr <| by rw [← LinearMap.comp_apply, D.dHV_comm, LinearMap.comp_apply, LinearMap.mem_ker.mp hx, map_zero]) (by rcases q with _ | q' · simp only [colB]; exact bot_le · rintro x ⟨y, hy⟩ exact ⟨D.dH p q' y, by show D.dV (p + 1) q' (D.dH p q' y) = D.dH p (q' + 1) x.1 rw [← LinearMap.comp_apply, D.dHV_comm, LinearMap.comp_apply, hy]; rfl⟩) def E₂IB : (p q : ℕ) → Submodule R (LinearMap.ker (colHdH D p q)) | 0, _ => ⊥ | p' + 1, q => (LinearMap.range (colHdH D p' q)).comap (LinearMap.ker (colHdH D (p' + 1) q)).subtype abbrev E₂I (p q : ℕ) : Type u := LinearMap.ker (colHdH D p q) ⧸ E₂IB D p q def transpose : Bounded R where C a b := D.C b a dH a b := D.dV b a dV a b := D.dH b a dH_sq a b := D.dV_sq b a dV_sq a b := D.dH_sq b a dHV_comm a b := (D.dHV_comm b a).symm N := D.N hBound a b h := D.hBound b a h.symm abbrev E₂II (p q : ℕ) : Type u := E₂I (transpose D) q p instance (p q : ℕ) : AddCommGroup (E₂I D p q) := inferInstanceAs (AddCommGroup (_ ⧸ _)) instance (p q : ℕ) : Module R (E₂I D p q) := inferInstanceAs (Module R (_ ⧸ _)) instance (p q : ℕ) : AddCommGroup (E₂II D p q) := inferInstanceAs (AddCommGroup (_ ⧸ _)) instance (p q : ℕ) : Module R (E₂II D p q) := inferInstanceAs (Module R (_ ⧸ _)) end E2 structure SubQuot (R : Type u) [CommRing R] (M : Type u) [AddCommGroup M] [Module R M] where Z : Submodule R M B : Submodule R M hBZ : B ≤ Z abbrev SubQuot.carrier {R : Type u} [CommRing R] {M : Type u} [AddCommGroup M] [Module R M] (s : SubQuot R M) : Type u := s.Z ⧸ s.B.comap s.Z.subtype structure Convergence (R : Type u) [CommRing R] (E₂ : ℕ → ℕ → Type u) [∀ p q, AddCommGroup (E₂ p q)] [∀ p q, Module R (E₂ p q)] (H : ℕ → Type u) [∀ n, AddCommGroup (H n)] [∀ n, Module R (H n)] (N : ℕ) where Einf : ∀ p q, SubQuot R (E₂ p q) hZ0 : ∀ p, (Einf p 0).Z = ⊤ Bfilt : ∀ p, Fin (N + 1) → Submodule R (E₂ p 0) Bfilt_mono : ∀ p, Monotone (Bfilt p) Bfilt_bot : ∀ p, Bfilt p 0 = ⊥ Bfilt_top : ∀ p, Bfilt p (Fin.last N) = (Einf p 0).B Bfilt_gr : ∀ p (i : Fin N), ∃ p' q', 1 ≤ q' ∧ ∃ (s : SubQuot R (E₂ p' q')), Nonempty (((Bfilt p i.succ) ⧸ (Bfilt p i.castSucc).comap (Bfilt p i.succ).subtype) ≃ₗ[R] s.carrier) Hfilt : ∀ n, Fin (N + 2) → Submodule R (H n) Hfilt_mono : ∀ n, Monotone (Hfilt n) Hfilt_bot : ∀ n, Hfilt n 0 = ⊥ Hfilt_top : ∀ n, Hfilt n (Fin.last (N + 1)) = ⊤ Hfilt_gr : ∀ (p : Fin (N + 1)), Nonempty (((Hfilt (↑p) p.succ) ⧸ (Hfilt (↑p) p.castSucc).comap (Hfilt (↑p) p.succ).subtype) ≃ₗ[R] (Einf p 0).carrier) def BoundedSpectralSequence : Prop := ∀ (R : Type u) [CommRing R] (D : Bounded R), Nonempty (Convergence R (E₂I D) (HTot D) D.N) end DoubleComplex end
Statements phrased using this module (35)
- Finiteness of E₂^{p,0} from finite Hⁿ and finite higher rows
DoubleComplex.Convergence.finite_E2_q00 below · depth 18 - Convergence data for bounded double complexes
DoubleComplex.boundedSpectralSequence0 below · depth 18 - Refinement induces isomorphisms on Čech cohomology of mathcal O_X
AlgebraicGeometry.OModulePresheaf.exists_HSucc_equiv_unitPullback_id_of_isSeparated16 below · depth 32 - Čech acyclicity on V from acyclicity of the glued cover
AlgebraicGeometry.OModulePresheaf.H0_eq_bot_and_forall_subsingleton_HSucc_restrict_of_subsingleton_HTot_biCech1 below · depth 33 - Refinement pull-back and edge augmentations differ by a total coboundary
AlgebraicGeometry.OModulePresheaf.Leray.exists_dTot_eq_single_biAug_unitPullback_sub_single_id5 below · depth 33 - Transposing the Čech–Leray double complex of id_X
AlgebraicGeometry.OModulePresheaf.Leray.exists_levelwise_equiv_transpose_id0 below · depth 33 - Per-degree Künneth injectivity for Čech classes
AlgebraicGeometry.OModulePresheaf.kunneth_toModule_diag_injective_of_cls_unitPullback57 below · depth 33 - Bi-Čech total cohomology computes Čech cohomology of the product cover
AlgebraicGeometry.OModulePresheaf.nonempty_HTot_biCech_equiv_prodCover_of_isQuasicoherent10 below · depth 33 - Acyclicity of the mixed bi-Čech complex on U∩ V
AlgebraicGeometry.OModulePresheaf.subsingleton_HTot_biCech_imageFamily_of_forall_subsingleton_HSucc19 below · depth 33 - Bidegreewise injectivity from injectivity on each anti-diagonal
DirectSum.toModule_injective_of_forall_diag_injective_of_isInternal0 below · depth 33 - Pinned edge isomorphism Hⁿ(A) ≅ Hⁿ(Tot D)
DoubleComplex.exists_HTot_equiv_mk_eq_mk_single_of_rows_exact_of_augmentation0 below · depth 33 - Pinned functoriality of total cohomology of double complexes
DoubleComplex.exists_HTot_equiv_of_levelwise_equiv_pinned0 below · depth 33 - Signed transposition on total cohomology of a bounded double complex
DoubleComplex.exists_HTot_transpose_equiv_mk_eq_mk_swap0 below · depth 33 - Bounded double complex with exact columns has acyclic total complex
DoubleComplex.subsingleton_HTot_of_forall_subsingleton_colH0 below · depth 33 - Künneth comparison for the box cover, pinned on cup products
AlgebraicGeometry.OModulePresheaf.exists_HTot_biCech_equiv_prodCover_cup_pinned29 below · depth 34 - Bi-Čech complex of X×_k Y as a tensor double complex
AlgebraicGeometry.OModulePresheaf.exists_biCech_preimageFamily_equiv_tensor_cochain_pinned1 below · depth 34 - Exactness of the columns of the iterated Čech complex
AlgebraicGeometry.OModulePresheaf.iterCech_cols_exact_of_isQuasicoherent7 below · depth 34 - Exact augmented rows of the iterated Čech complex
AlgebraicGeometry.OModulePresheaf.iterCech_rows_exact_of_isQuasicoherent3 below · depth 34 - Cochain-level Künneth for bi-Čech complexes of box products
AlgebraicGeometry.OModulePresheaf.nonempty_HTot_biCech_strips_equiv_HTot_tensor_ofCech19 below · depth 34 - Refining the box-cover cup product, up to a coboundary
AlgebraicGeometry.OModulePresheaf.unitPullback_prodCover_cup_sub_cup_unitPullback_mem24 below · depth 34 - Injective Künneth map into total cohomology over a field
CochainCx.Bounded.exists_kunneth_toModule_HTot_tensor_injective0 below · depth 34 - Künneth dimension formula over a field for bounded cochain complexes
CochainCx.Bounded.finrank_HTot_tensor_eq_sum_mul5 below · depth 34 - Levelwise isomorphic bounded double complexes have isomorphic total cohomology
DoubleComplex.nonempty_HTot_equiv_of_levelwise_equiv0 below · depth 34 - Augmented staircase lemma for bounded double complexes
DoubleComplex.nonempty_HTot_equiv_of_rows_exact_of_augmentation2 below · depth 34 - Transposing a bounded double complex preserves total cohomology
DoubleComplex.nonempty_HTot_transpose_equiv0 below · depth 34 - Augmented box product and cup product agree in Hⁿ
AlgebraicGeometry.OModulePresheaf.IterCech.exists_mk_single_augTot_eq_mk_single_augCech_cup6 below · depth 35 - Levelwise splitting of a bounded complex over a field
CochainCx.Bounded.exists_contractible_levelwise_equiv_prod0 below · depth 35 - Euler characteristic of a bounded double complex via columns
DoubleComplex.finite_HTot_and_sum_finrank_HTot_eq_sum_finrank_colH4 below · depth 35 - Total cohomology equals ''E₂^{0,n} for rows exact in positive degree
DoubleComplex.nonempty_HTot_equiv_E2II_zero_of_forall_subsingleton_colH_transpose0 below · depth 35 - Total cohomology of a bounded double complex is additive
DoubleComplex.nonempty_HTot_equiv_prod_of_levelwise_equiv_prod1 below · depth 35 - Total complex acyclic from a horizontal-equivariant vertical contraction
DoubleComplex.subsingleton_HTot_of_colContraction0 below · depth 35 - Row contraction kills total cohomology of a bounded double complex
DoubleComplex.subsingleton_HTot_of_rowContraction0 below · depth 35 - Degree zero: augmented external product equals augmented cup product
AlgebraicGeometry.OModulePresheaf.IterCech.augTot_single_eq_augCech_cup_zero4 below · depth 36 - Product zig-zag in the iterated Čech complex
AlgebraicGeometry.OModulePresheaf.IterCech.exists_dTot_eq_single_augTot_sub_single_augCech_cup4 below · depth 36 - Peeling off the bottom row of a bounded double complex
DoubleComplex.finite_HTot_and_sum_finrank_HTot_eq_sub_of_rowShift1 below · depth 36