Paper XII · Lean source
HeckeCarriers.lean
Inherited / related evidence Coverage and evidence
The edition relies on earlier or related formal evidence. That evidence is not a fresh full-edition replay.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
Local imports (3)
PaperXII/HeckeCarriers.lean237 lines
Original source path
core/publication/source/lean_guide/formal_release/lean/PaperXII/HeckeCarriers.leanSkip declarations and read code
1 import PaperXII.DerivedHeckeAction
2 import PaperXII.PerfectCohomology
3 import PaperXII.BaseChangeSupport
4
5 /-!
6 # Ordinary and derived Hecke carriers
7
8 The two carriers are an actual finite module and an actual perfect derived
9 object. Their fibers and operators are the tensor module and the specialized
10 derived cohomology, with operators induced by the original multiplication.
11 Support comparisons are literal inclusions of subsets of prime spectra.
12 -/
13
14 noncomputable section
15
16 open CategoryTheory CategoryTheory.Limits
17 open scoped TensorProduct
18
19 universe u
20
21 attribute [local instance] HasDerivedCategory.standard
22
23 namespace PaperXII.HeckeCarriers
24
25 /-- An ordinary carrier is an actual finite module. -/
26 structure FiniteModule (R : Type u) [CommRing R] where
27 object : ModuleCat.{u} R
28 finite : Module.Finite R object
29
30 attribute [instance] FiniteModule.finite
31
32 /-- The ordinary and perfect derived alternatives retain their actual objects. -/
33 def Carrier (R : Type u) [CommRing R] :=
34 FiniteModule R ⊕ PerfectDerivedSupport.PerfectComplex R
35
36 variable {R S T E : Type u} [CommRing R] [CommRing S] [CommRing T] [Field E]
37
38 /-- Ordinary fibers have one degree; derived fibers have integer degrees. -/
39 def Carrier.Degree : Carrier R → Type
40 | .inl _ => PUnit
41 | .inr _ => ℤ
42
43 /-- The actual support of the underlying ordinary or perfect derived object. -/
44 def support : Carrier R → Set (PrimeSpectrum R)
45 | .inl M => Module.support R M.object
46 | .inr C => PerfectDerivedSupport.support C
47
48 /-- Full support is equality with the entire prime spectrum. -/
49 def FullSupport (C : Carrier R) : Prop := support C = Set.univ
50
51 /-- Ordinary tensor fibers and actual derived cohomology of specialized objects. -/
52 def fiberSpace (C : Carrier R) (y : R →+* E) : C.Degree → ModuleCat.{u} E :=
53 match C with
54 | .inl M => fun _ => (ModuleCat.extendScalars y).obj M.object
55 | .inr P => fun n => PerfectCohomology.cohomology (P.baseChange y) n
56
57 /-- Literal nonvanishing of the tensor module or the specialized derived object. -/
58 def FiberNonzero (C : Carrier R) (y : R →+* E) : Prop :=
59 match C with
60 | .inl M => ¬IsZero ((ModuleCat.extendScalars y).obj M.object)
61 | .inr P => ¬IsZero (P.baseChange y).object
62
63 /-- The operator is induced from multiplication on the original module or complex. -/
64 def heckeOperator (C : Carrier R) (y : R →+* E) :
65 (n : C.Degree) → R → (fiberSpace C y n ⟶ fiberSpace C y n) :=
66 match C with
67 | .inl M => fun _ r => (ModuleCat.extendScalars y).map (r • 𝟙 M.object)
68 | .inr P => fun n r => DerivedHeckeAction.perfectCohomologyOperator P y n r
69
70 /-- Both actual constructions satisfy the tensor scalar identity. -/
71 theorem heckeOperator_eq_scalar (C : Carrier R) (y : R →+* E)
72 (n : C.Degree) (r : R) :
73 heckeOperator C y n r = y r • 𝟙 (fiberSpace C y n) := by
74 cases C with
75 | inl M => exact DerivedHeckeAction.extendScalars_smul_id y M.object r
76 | inr P => exact DerivedHeckeAction.perfectCohomologyOperator_eq_scalar P y n r
77
78 /-- The tensor scalar identity on each actual vector. -/
79 theorem heckeOperator_apply (C : Carrier R) (y : R →+* E)
80 (n : C.Degree) (r : R) (z : fiberSpace C y n) :
81 heckeOperator C y n r z = y r • z := by
82 rw [heckeOperator_eq_scalar]
83 rfl
84
85 /-- A common eigenvector is a nonzero vector with all prescribed eigenvalues. -/
86 def IsEigenvector (C : Carrier R) (y : R →+* E) (n : C.Degree)
87 (z : fiberSpace C y n) : Prop :=
88 z ≠ 0 ∧ ∀ r : R, heckeOperator C y n r z = y r • z
89
90 /-- Every nonzero vector has the eigenvalues of the specialized point. -/
91 theorem isEigenvector_of_ne_zero (C : Carrier R) (y : R →+* E)
92 (n : C.Degree) (z : fiberSpace C y n) (hz : z ≠ 0) :
93 IsEigenvector C y n z :=
94 ⟨hz, fun r => heckeOperator_apply C y n r z⟩
95
96 /-- The actual bounded model interval, with the sole ordinary degree allowed. -/
97 def DegreeRange (C : Carrier R) : C.Degree → Prop :=
98 match C with
99 | .inl _ => fun _ => True
100 | .inr P => fun (n : ℤ) => P.model.lower ≤ n ∧ n ≤ P.model.upper
101
102 /-- A supported point supplies a nonzero actual eigensystem in the model range. -/
103 theorem supported_point_eigensystem_in_range (C : Carrier R) (y : R →+* E)
104 (hy : FieldFibers.pointPrime y ∈ support C) :
105 ∃ n : C.Degree, DegreeRange C n ∧
106 ∃ z : fiberSpace C y n, IsEigenvector C y n z := by
107 cases C with
108 | inl M =>
109 let : Algebra R E := y.toAlgebra
110 have : Nontrivial (E ⊗[R] M.object) :=
111 (FieldFibers.nontrivial_fiber_iff_support (M := M.object) y).mpr hy
112 obtain ⟨z, hz⟩ := exists_ne (0 : E ⊗[R] M.object)
113 exact ⟨PUnit.unit, trivial, z, isEigenvector_of_ne_zero (.inl M) y _ z hz⟩
114 | inr P =>
115 have hP := (PerfectDerivedSupport.nonzero_fiber_iff_support P y).mpr hy
116 obtain ⟨n, hlo, hhi, z, hz⟩ :=
117 PerfectCohomology.exists_nonzero_vector_in_range P y hP
118 exact ⟨n, ⟨hlo, hhi⟩, z, isEigenvector_of_ne_zero (.inr P) y n z hz⟩
119
120 /-- A supported point supplies an actual nonzero eigenvector. -/
121 theorem supported_point_eigensystem (C : Carrier R) (y : R →+* E)
122 (hy : FieldFibers.pointPrime y ∈ support C) :
123 ∃ n : C.Degree, ∃ z : fiberSpace C y n, IsEigenvector C y n z := by
124 obtain ⟨n, _, z, hz⟩ := supported_point_eigensystem_in_range C y hy
125 exact ⟨n, z, hz⟩
126
127 /-- Support implies literal nonvanishing of the actual ordinary or derived fiber. -/
128 theorem supported_point_fiber_nonzero (C : Carrier R) (y : R →+* E)
129 (hy : FieldFibers.pointPrime y ∈ support C) : FiberNonzero C y := by
130 cases C with
131 | inl M =>
132 obtain ⟨n, z, hz⟩ := supported_point_eigensystem (.inl M) y hy
133 intro hzero
134 have hsub : Subsingleton ((ModuleCat.extendScalars y).obj M.object) :=
135 ModuleCat.isZero_iff_subsingleton.mp hzero
136 exact hz.1 (hsub.elim z 0)
137 | inr P => exact (PerfectDerivedSupport.nonzero_fiber_iff_support P y).mpr hy
138
139 /-- Full support provides an eigensystem at every field-valued point. -/
140 theorem fullSupport_eigensystem_in_range (C : Carrier R) (y : R →+* E)
141 (hC : FullSupport C) :
142 ∃ n : C.Degree, DegreeRange C n ∧
143 ∃ z : fiberSpace C y n, IsEigenvector C y n z := by
144 apply supported_point_eigensystem_in_range C y
145 rw [hC]
146 trivial
147
148 /-- The comparison hypothesis is the actual inverse-image support inclusion. -/
149 def SupportComparison (f : R →+* T) (M : Carrier R) (H : Carrier T) : Prop :=
150 PrimeSpectrum.comap f ⁻¹' support M ⊆ support H
151
152 /-- Pullback of the prime kernel agrees with composition of field-valued points. -/
153 theorem pointPrime_comp (f : R →+* T) (y : T →+* E) :
154 PrimeSpectrum.comap f (FieldFibers.pointPrime y) =
155 FieldFibers.pointPrime (y.comp f) := by
156 ext r
157 rfl
158
159 /-- A compatible point inherits support through the literal support comparison. -/
160 theorem supportComparison_pointwise (f : R →+* T) (M : Carrier R) (H : Carrier T)
161 (comparison : SupportComparison f M H) (x : R →+* E) (y : T →+* E)
162 (hcomp : y.comp f = x) (hx : FieldFibers.pointPrime x ∈ support M) :
163 FieldFibers.pointPrime y ∈ support H := by
164 apply comparison
165 change PrimeSpectrum.comap f (FieldFibers.pointPrime y) ∈ support M
166 rw [pointPrime_comp, hcomp]
167 exact hx
168
169 /-- The actual support inclusion transports literal fiber nonvanishing. -/
170 theorem supportComparison_pointwise_fiber_nonzero
171 (f : R →+* T) (M : Carrier R) (H : Carrier T)
172 (comparison : SupportComparison f M H) (x : R →+* E) (y : T →+* E)
173 (hcomp : y.comp f = x) (hx : FieldFibers.pointPrime x ∈ support M) :
174 FiberNonzero H y :=
175 supported_point_fiber_nonzero H y
176 (supportComparison_pointwise f M H comparison x y hcomp hx)
177
178 /-- Full support transports through the actual comparison. -/
179 theorem supportComparison_fullSupport (f : R →+* T) (M : Carrier R) (H : Carrier T)
180 (comparison : SupportComparison f M H) (hM : FullSupport M) : FullSupport H := by
181 apply Set.eq_univ_of_forall
182 intro q
183 apply comparison
184 change PrimeSpectrum.comap f q ∈ support M
185 rw [hM]
186 trivial
187
188 /-- The comparison gives a nonzero actual Hecke eigenvector at every compatible point. -/
189 theorem supportComparison_pointwise_eigensystem
190 (f : R →+* T) (M : Carrier R) (H : Carrier T)
191 (comparison : SupportComparison f M H) (x : R →+* E) (y : T →+* E)
192 (hcomp : y.comp f = x) (hx : FieldFibers.pointPrime x ∈ support M) :
193 ∃ n : H.Degree, DegreeRange H n ∧
194 ∃ z : fiberSpace H y n, IsEigenvector H y n z :=
195 supported_point_eigensystem_in_range H y
196 (supportComparison_pointwise f M H comparison x y hcomp hx)
197
198 /-- Actual scalar extension of a finite ordinary module. -/
199 def FiniteModule.baseChange (M : FiniteModule R) (f : R →+* S) : FiniteModule S :=
200 ⟨(ModuleCat.extendScalars f).obj M.object,
201 PerfectModels.finite_extendScalars f M.object⟩
202
203 /-- Actual ordinary or derived scalar extension, preserving the carrier kind. -/
204 def Carrier.baseChange (C : Carrier R) (f : R →+* S) : Carrier S :=
205 match C with
206 | .inl M => .inl (M.baseChange f)
207 | .inr P => .inr (P.baseChange f)
208
209 /-- Both actual scalar extensions have exactly the spectral inverse-image support. -/
210 theorem support_baseChange (C : Carrier R) (f : R →+* S) :
211 support (C.baseChange f) = PrimeSpectrum.comap f ⁻¹' support C := by
212 cases C with
213 | inl M =>
214 let : Algebra R S := f.toAlgebra
215 exact BaseChangeSupport.support_baseChange (R := R) (S := S) (M := M.object)
216 | inr P => exact PerfectDerivedSupport.support_baseChange P f
217
218 /-- Actual scalar extension constructs the required support comparison. -/
219 theorem supportComparison_baseChange (C : Carrier R) (f : R →+* S) :
220 SupportComparison f C (C.baseChange f) := by
221 unfold SupportComparison
222 rw [support_baseChange]
223
224 /-- Full support is preserved by either actual scalar extension. -/
225 theorem fullSupport_baseChange (C : Carrier R) (f : R →+* S) (hC : FullSupport C) :
226 FullSupport (C.baseChange f) :=
227 supportComparison_fullSupport f C (C.baseChange f) (supportComparison_baseChange C f) hC
228
229 /-- Ring identification transports the actual support by its induced spectrum map. -/
230 theorem support_ringEquiv (C : Carrier R) (e : R ≃+* S) :
231 PrimeSpectrum.comap e.toRingHom '' support (C.baseChange e.toRingHom) = support C := by
232 rw [support_baseChange, Set.image_preimage_eq_inter_range]
233 have hsurj : Function.Surjective (PrimeSpectrum.comap e.toRingHom) :=
234 (PrimeSpectrum.isHomeomorph_comap_of_bijective e.bijective).surjective
235 rw [Set.range_eq_univ.mpr hsurj, Set.inter_univ]
236
237 end PaperXII.HeckeCarriers
Original file and source record
This copy matches the recorded source file. Its publication here does not change the work’s review status.
SHA-256: dd3bdac5d81c73a6d28bb62b88b628ef10edc60554d87b2c62595343a0375c49
Back to Paper XII: Patching Support, Hecke Packets, and Conditional Automorphic Completion