|
| 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