Skip to content

Commit bddbe1b

Browse files
committed
feat(Algebra/Homology/SpectralObject): SpectralSequenceDataCore (leanprover-community#35372)
In this file, we introduce a structure `SpectralSequenceDataCore` which contains a recipe for the construction of the pages of the spectral sequence attached to a spectral object.
1 parent 18100d9 commit bddbe1b

2 files changed

Lines changed: 152 additions & 0 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,7 @@ public import Mathlib.Algebra.Homology.Single
663663
public import Mathlib.Algebra.Homology.SingleHomology
664664
public import Mathlib.Algebra.Homology.SpectralObject.Basic
665665
public import Mathlib.Algebra.Homology.SpectralObject.Cycles
666+
public import Mathlib.Algebra.Homology.SpectralObject.HasSpectralSequence
666667
public import Mathlib.Algebra.Homology.SpectralSequence.Basic
667668
public import Mathlib.Algebra.Homology.SpectralSequence.ComplexShape
668669
public import Mathlib.Algebra.Homology.Square
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
/-
2+
Copyright (c) 2026 Joël Riou. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Joël Riou
5+
-/
6+
module
7+
8+
public import Mathlib.Algebra.Homology.ComplexShape
9+
public import Mathlib.Algebra.Homology.SpectralObject.Basic
10+
public import Mathlib.Order.WithBotTop
11+
12+
/-!
13+
# Shapes of spectral sequences obtained from a spectral object
14+
15+
This file prepares for the construction of the spectral sequence
16+
of a spectral object in an abelian category which shall be conducted
17+
in the file `Mathlib/Algebra/Homology/SpectralObject/SpectralSequence.lean` (TODO).
18+
19+
In this file, we introduce a structure `SpectralSequenceDataCore` which
20+
contains a recipe for the construction of the pages of the spectral sequence.
21+
For example, from a spectral object `X` indexed by `EInt` the definition
22+
`coreE₂Cohomological` will allow to construct an `E₂` cohomological
23+
spectral sequence such that the object on position `(p, q)` on the `r`th
24+
page is `E^{p + q}(q - r + 2 ≤ q ≤ q + 1 ≤ q + r - 1)`.
25+
The data (and properties) in the structure `SpectralSequenceDataCore` shall allow
26+
to define the pages and the differentials directly from the `SpectralObject` API (TODO).
27+
28+
-/
29+
30+
@[expose] public section
31+
32+
namespace CategoryTheory
33+
34+
open Category Limits ComposableArrows
35+
36+
namespace Abelian
37+
38+
namespace SpectralObject
39+
40+
variable {C ι κ : Type*} [Category* C] [Abelian C] [Preorder ι]
41+
{c : ℤ → ComplexShape κ} {r₀ : ℤ}
42+
43+
variable (ι c r₀) in
44+
/-- This data is a recipe in order to produce a spectral sequence starting on
45+
page `r₀` (where the `r`th page is of shape `c r`) from a spectral object
46+
indexed by `ι`. The object on page `r` at the position `pq : κ` shall be
47+
`E^(deg pq)(i₀ ≤ i₁ ≤ i₂ ≤ i₃)`, where `i₀ ≤ i₁ ≤ i₂ ≤ i₃` are elements in the
48+
index type `ι` of the spectral object and `deg pq : ℤ` is a cohomological degree.
49+
The indices `i₀` and `i₃` depend on `r` and `pq`, but `i₁`, `i₂` only depend on `pq`.
50+
Various conditions are added in order to construct the differentials on the pages
51+
and show that the homology of a page identifies to the next page; in certain
52+
cases, additional conditions may be required on the spectral object. -/
53+
structure SpectralSequenceDataCore where
54+
/-- The cohomological degree of objects in the pages -/
55+
deg : κ → ℤ
56+
/-- The zeroth index -/
57+
i₀ (r : ℤ) (pq : κ) (hr : r₀ ≤ r := by lia) : ι
58+
/-- The first index -/
59+
i₁ (pq : κ) : ι
60+
/-- The second index -/
61+
i₂ (pq : κ) : ι
62+
/-- The third index -/
63+
i₃ (r : ℤ) (pq : κ) (hr : r₀ ≤ r := by lia) : ι
64+
le₀₁ (r : ℤ) (pq : κ) (hr : r₀ ≤ r := by lia) : i₀ r pq ≤ i₁ pq
65+
le₁₂ (pq : κ) : i₁ pq ≤ i₂ pq
66+
le₂₃ (r : ℤ) (pq : κ) (hr : r₀ ≤ r := by lia) : i₂ pq ≤ i₃ r pq
67+
hc (r : ℤ) (pq pq' : κ) (hpq : (c r).Rel pq pq') (hr : r₀ ≤ r := by lia) : deg pq + 1 = deg pq'
68+
hc₀₂ (r : ℤ) (pq pq' : κ) (hpq : (c r).Rel pq pq') (hr : r₀ ≤ r := by lia) : i₀ r pq = i₂ pq'
69+
hc₁₃ (r : ℤ) (pq pq' : κ) (hpq : (c r).Rel pq pq') (hr : r₀ ≤ r := by lia) : i₁ pq = i₃ r pq'
70+
antitone_i₀ (r r' : ℤ) (pq : κ) (hr : r₀ ≤ r := by lia) (hrr' : r ≤ r' := by lia) :
71+
i₀ r' pq ≤ i₀ r pq
72+
monotone_i₃ (r r' : ℤ) (pq : κ) (hr : r₀ ≤ r := by lia) (hrr' : r ≤ r' := by lia) :
73+
i₃ r pq ≤ i₃ r' pq
74+
i₀_prev (r r' : ℤ) (pq pq' : κ) (hpq : (c r).Rel pq pq') (hrr' : r + 1 = r' := by lia)
75+
(hr : r₀ ≤ r := by lia) :
76+
i₀ r' pq = i₁ pq'
77+
i₃_next (r r' : ℤ) (pq pq' : κ) (hpq : (c r).Rel pq pq') (hrr' : r + 1 = r' := by lia)
78+
(hr : r₀ ≤ r := by lia) :
79+
i₃ r' pq' = i₂ pq
80+
81+
namespace SpectralSequenceDataCore
82+
83+
variable (data : SpectralSequenceDataCore ι c r₀)
84+
85+
lemma i₀_le (r r' : ℤ) (pq : κ) (hrr' : r + 1 = r' := by lia) (hr : r₀ ≤ r := by lia) :
86+
data.i₀ r' pq ≤ data.i₀ r pq :=
87+
data.antitone_i₀ r r' pq
88+
89+
lemma i₃_le (r r' : ℤ) (pq : κ) (hrr' : r + 1 = r' := by lia) (hr : r₀ ≤ r := by lia) :
90+
data.i₃ r pq ≤ data.i₃ r' pq :=
91+
data.monotone_i₃ r r' pq
92+
93+
lemma i₀_le' {r r' : ℤ} (hrr' : r + 1 = r') (hr : r₀ ≤ r) (pq' : κ)
94+
{i₀' i₀ : ι} (hi₀' : i₀' = data.i₀ r' pq') (hi₀ : i₀ = data.i₀ r pq') :
95+
i₀' ≤ i₀ := by
96+
rw [hi₀', hi₀]
97+
exact data.antitone_i₀ r r' pq'
98+
99+
lemma le₀₁' (r : ℤ) (hr : r₀ ≤ r) (pq' : κ) {i₀ i₁ : ι}
100+
(hi₀ : i₀ = data.i₀ r pq')
101+
(hi₁ : i₁ = data.i₁ pq') :
102+
i₀ ≤ i₁ := by
103+
have := data.le₀₁ r pq'
104+
simpa only [hi₀, hi₁] using data.le₀₁ r pq'
105+
106+
lemma le₁₂' (pq' : κ) {i₁ i₂ : ι} (hi₁ : i₁ = data.i₁ pq') (hi₂ : i₂ = data.i₂ pq') :
107+
i₁ ≤ i₂ := by
108+
simpa only [hi₁, hi₂] using data.le₁₂ pq'
109+
110+
lemma le₂₃' (r : ℤ) (hr : r₀ ≤ r) (pq' : κ)
111+
{i₂ i₃ : ι}
112+
(hi₂ : i₂ = data.i₂ pq')
113+
(hi₃ : i₃ = data.i₃ r pq') :
114+
i₂ ≤ i₃ := by
115+
simpa only [hi₂, hi₃] using data.le₂₃ r pq'
116+
117+
lemma le₃₃' {r r' : ℤ} (hrr' : r + 1 = r') (hr : r₀ ≤ r) (pq' : κ)
118+
{i₃ i₃' : ι}
119+
(hi₃ : i₃ = data.i₃ r pq')
120+
(hi₃' : i₃' = data.i₃ r' pq') :
121+
i₃ ≤ i₃' := by
122+
simpa only [hi₃, hi₃'] using data.monotone_i₃ r r' pq'
123+
124+
end SpectralSequenceDataCore
125+
126+
/-- The data which allows to construct an `E₂`-cohomological spectral sequence
127+
indexed by `ℤ × ℤ` from a spectral object indexed by `EInt`. -/
128+
@[simps!]
129+
def coreE₂Cohomological :
130+
SpectralSequenceDataCore EInt (fun r ↦ ComplexShape.up' (⟨r, 1 - r⟩ : ℤ × ℤ)) 2 where
131+
deg pq := pq.1 + pq.2
132+
i₀ r pq hr := (pq.2 - r + 2 :)
133+
i₁ pq := pq.2
134+
i₂ pq := (pq.2 + 1 :)
135+
i₃ r pq hr := (pq.2 + r - 1 :)
136+
le₀₁ r pq hr := by simp; lia
137+
le₁₂ pq := by simp
138+
le₂₃ r pq hr := by simp; lia
139+
hc := by rintro r pq _ rfl _; dsimp; lia
140+
hc₀₂ := by rintro r pq hr rfl _; simp; lia
141+
hc₁₃ := by rintro r pq hr rfl _; simp; lia
142+
antitone_i₀ r r' pq hr hrr' := by simp; lia
143+
monotone_i₃ r r' pq hr hrr' := by simp; lia
144+
i₀_prev := by rintro r r' hr pq rfl _ _; dsimp; lia
145+
i₃_next := by rintro r r' hr pq rfl _ _; dsimp; lia
146+
147+
end SpectralObject
148+
149+
end Abelian
150+
151+
end CategoryTheory

0 commit comments

Comments
 (0)