Skip to content

Commit f6d8230

Browse files
committed
update spectral norm files
1 parent e856a6a commit f6d8230

2 files changed

Lines changed: 92 additions & 109 deletions

File tree

LocalClassFieldTheory/FromMathlib/SpectralNormUnique.lean

Lines changed: 77 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ Copyright (c) 2023 María Inés de Frutos-Fernández. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: María Inés de Frutos-Fernández
55
-/
6-
import LocalClassFieldTheory.FromMathlib.SpectralNorm
76
import Mathlib.Analysis.Normed.Operator.BoundedLinearMaps
87
import Mathlib.Analysis.Normed.Unbundled.IsPowMulFaithful
98
import Mathlib.Analysis.Normed.Unbundled.SeminormFromConst
9+
import Mathlib.Analysis.Normed.Unbundled.SpectralNorm
1010
import Mathlib.Topology.Algebra.Module.FiniteDimension
1111

1212
/-!
@@ -49,35 +49,39 @@ section Prelim
4949
def RingNorm.to_normedRing {A : Type*} [Ring A] (f : RingNorm A) : NormedRing A where
5050
norm x := f x
5151
dist x y := f (x - y)
52-
dist_self x := by simp only [sub_self, AddGroupSeminorm.toFun_eq_coe, _root_.map_zero]
52+
dist_self x := by simp only [sub_self, _root_.map_zero]
5353
dist_comm x y := by
5454
rw [← neg_sub x y, map_neg_eq_map]
5555
dist_triangle x y z := by
5656
have hxyz : x - z = x - y + (y - z) := by abel
57-
simp only [AddGroupSeminorm.toFun_eq_coe, hxyz, map_add_le_add]
57+
simp only [hxyz, map_add_le_add]
5858
dist_eq x y := rfl
5959
norm_mul_le x y := by
60-
simp only [AddGroupSeminorm.toFun_eq_coe, RingSeminorm.toFun_eq_coe, map_mul_le_mul]
60+
simp only [map_mul_le_mul]
6161
edist_dist x y := by
62-
simp only [AddGroupSeminorm.toFun_eq_coe, RingSeminorm.toFun_eq_coe]
62+
simp only
6363
rw [eq_comm, ENNReal.ofReal_eq_coe_nnreal]
6464
eq_of_dist_eq_zero hxy := by
6565
exact eq_of_sub_eq_zero (RingNorm.eq_zero_of_map_eq_zero' _ _ hxy)
6666

6767
end Prelim
6868

6969
open scoped NNReal IntermediateField
70+
section NontriviallyNormedField
71+
72+
open IntermediateField
7073

7174
universe u v
75+
7276
variable {K : Type u} [NontriviallyNormedField K] {L : Type v} [Field L] [Algebra K L]
73-
[Algebra.IsAlgebraic K L]
77+
[Algebra.IsAlgebraic K L] [hu : IsUltrametricDist K]
7478

7579
/-- If `K` is a field complete with respect to a nontrivial nonarchimedean multiplicative norm and
7680
`L/K` is an algebraic extension, then any power-multiplicative `K`-algebra norm on `L` coincides
7781
with the spectral norm. -/
78-
theorem spectralNorm_unique [CompleteSpace K] {f : AlgebraNorm K L} (hf_pm : IsPowMul f)
79-
(hna : IsNonarchimedean (norm : K → ℝ)) : f = spectralAlgNorm hna := by
80-
apply eq_of_powMul_faithful f hf_pm _ (spectralAlgNorm_isPowMul hna)
82+
theorem spectralNorm_unique [CompleteSpace K] {f : AlgebraNorm K L} (hf_pm : IsPowMul f) :
83+
f = spectralAlgNorm K L := by
84+
apply eq_of_powMul_faithful f hf_pm _ spectralAlgNorm_isPowMul
8185
intro x
8286
set E : Type v := id K⟮x⟯ with hEdef
8387
letI hE : Field E := by rw [hEdef, id_eq]; infer_instance
@@ -95,31 +99,27 @@ theorem spectralNorm_unique [CompleteSpace K] {f : AlgebraNorm K L} (hf_pm : IsP
9599
{ toFun := fun y : E => spectralNorm K L (id2 y : L)
96100
map_zero' := by simp [map_zero, spectralNorm_zero, ZeroMemClass.coe_zero]
97101
add_le' := fun a b => by
98-
simp only [← spectralAlgNorm_def hna, Subfield.coe_add]
102+
simp only [← spectralAlgNorm_def]
99103
exact map_add_le_add _ _ _
100104
neg' := fun a => by
101-
simp only [id_eq, eq_mpr_eq_cast, cast_eq, map_neg, LinearMap.coe_mk,
102-
NegMemClass.coe_neg, ← spectralAlgNorm_def hna, map_neg_eq_map]
105+
simp only [map_neg, NegMemClass.coe_neg, ← spectralAlgNorm_def, map_neg_eq_map]
103106
mul_le' := fun a b => by
104-
simp only [← spectralAlgNorm_def hna, Subfield.coe_mul]
107+
simp only [← spectralAlgNorm_def]
105108
exact map_mul_le_mul _ _ _
106109
eq_zero_of_map_eq_zero' := fun a ha => by
107-
simpa [id_eq, eq_mpr_eq_cast, cast_eq, LinearMap.coe_mk, ← spectralAlgNorm_def hna,
110+
simpa [id_eq, eq_mpr_eq_cast, cast_eq, LinearMap.coe_mk, ← spectralAlgNorm_def,
108111
map_eq_zero_iff_eq_zero, ZeroMemClass.coe_eq_zero] using ha }
109-
letI n1 : NormedRing E := RingNorm.to_normedRing hs_norm
112+
letI n1 : NormedRing E := RingNorm.toNormedRing hs_norm
110113
letI N1 : NormedSpace K E :=
111114
{ one_smul := fun e => by simp only [one_smul]
112-
mul_smul := fun k1 k2 e => by
113-
simp only [id_eq, eq_mpr_eq_cast, cast_eq, mul_smul]
114-
smul_zero := fun e => by simp only [id_eq, smul_eq_zero, or_true]
115-
smul_add := fun k e_1 e_2 => by
116-
simp only [id_eq, eq_mpr_eq_cast, cast_eq, LinearMap.coe_mk, smul_add]
117-
add_smul := fun k_1 k_2 e => by
118-
simp only [id_eq, eq_mpr_eq_cast, cast_eq, LinearMap.coe_mk, add_smul]
115+
mul_smul := fun k1 k2 e => by simp only [mul_smul]
116+
smul_zero := fun e => by simp only [smul_eq_zero, or_true]
117+
smul_add := fun k e_1 e_2 => by simp only [smul_add]
118+
add_smul := fun k_1 k_2 e => by simp only [add_smul]
119119
zero_smul := fun e => by simp only [id_eq, zero_smul]
120120
norm_smul_le := fun k y => by
121-
change (spectralAlgNorm hna (id2 (k • y) : L) : ℝ) ≤
122-
‖k‖ * spectralAlgNorm hna (id2 y : L)
121+
change (spectralAlgNorm K L (id2 (k • y) : L) : ℝ) ≤
122+
‖k‖ * spectralAlgNorm K L (id2 y : L)
123123
simp only [id_eq, eq_mpr_eq_cast, cast_eq, map_smul, LinearMap.coe_mk]
124124
rw [IntermediateField.coe_smul, map_smul_eq_mul] }
125125
set hf_norm : RingNorm K⟮x⟯ :=
@@ -131,7 +131,7 @@ theorem spectralNorm_unique [CompleteSpace K] {f : AlgebraNorm K L} (hf_pm : IsP
131131
mul_le' := fun a b => map_mul_le_mul _ _ _
132132
eq_zero_of_map_eq_zero' := fun a ha => by
133133
simpa [map_eq_zero_iff_eq_zero, map_eq_zero] using ha }
134-
letI n2 : NormedRing K⟮x⟯ := RingNorm.to_normedRing hf_norm
134+
letI n2 : NormedRing K⟮x⟯ := RingNorm.toNormedRing hf_norm
135135
letI N2 : NormedSpace K K⟮x⟯ :=
136136
{ one_smul := fun e => by simp only [one_smul]
137137
mul_smul := fun k1 k2 e => by
@@ -160,26 +160,14 @@ theorem spectralNorm_unique [CompleteSpace K] {f : AlgebraNorm K L} (hf_pm : IsP
160160
forall_and.mpr ⟨fun y ↦ hC2 ⟨y, (IntermediateField.algebra_adjoin_le_adjoin K _) y.2⟩,
161161
fun y ↦ hC1 ⟨y, (IntermediateField.algebra_adjoin_le_adjoin K _) y.2⟩⟩⟩
162162

163-
-- [Mathlib.Analysis.Normed.Unbundled.RingSeminorm]
164-
/-- We regard an `AbsoluteValue R ℝ` as a `MulRingNorm R`. -/
165-
def AbsoluteValue.toMulRingNorm {R : Type*} [Ring R] [Nontrivial R] (a : AbsoluteValue R ℝ) :
166-
MulRingNorm R where
167-
toFun := a
168-
map_zero' := a.map_zero
169-
add_le' := a.add_le
170-
neg' := a.map_neg
171-
map_one' := a.map_one
172-
map_mul' := a.map_mul
173-
eq_zero_of_map_eq_zero' := by simp [AbsoluteValue.eq_zero, imp_self, implies_true]
174-
175163
/-- If `K` is a field complete with respect to a nontrivial nonarchimedean multiplicative norm and
176164
`L/K` is an algebraic extension, then any multiplicative ring norm on `L` extending the norm on
177165
`K` coincides with the spectral norm. -/
178166
theorem spectralNorm_unique_field_norm_ext [CompleteSpace K]
179-
{f : AbsoluteValue L ℝ} (hf_ext : ∀ (x : K), f (algebraMap K L x) = ‖x‖)
180-
(hna : IsNonarchimedean (norm : K → ℝ)) (x : L) : f x = spectralNorm K L x := by
167+
{f : AbsoluteValue L ℝ} (hf_ext : ∀ (x : K), f (algebraMap K L x) = ‖x‖) (x : L) :
168+
f x = spectralNorm K L x := by
181169
set g : AlgebraNorm K L :=
182-
{ f.toMulRingNorm with
170+
{ MulRingNorm.mulRingNormEquivAbsoluteValue.invFun f with
183171
smul' := fun k x => by
184172
simp only [AddGroupSeminorm.toFun_eq_coe, MulRingSeminorm.toFun_eq_coe]
185173
rw [Algebra.smul_def, map_mul]
@@ -190,115 +178,112 @@ theorem spectralNorm_unique_field_norm_ext [CompleteSpace K]
190178
simp [AddGroupSeminorm.toFun_eq_coe, MulRingSeminorm.toFun_eq_coe, map_mul_le_mul] }
191179
have hg_pow : IsPowMul g := MulRingNorm.isPowMul _
192180
have hgx : f x = g x := rfl
193-
rw [hgx, spectralNorm_unique hg_pow hna, spectralAlgNorm_def]
181+
rw [hgx, spectralNorm_unique hg_pow, spectralAlgNorm_def]
194182

195183
/-- Given a nonzero `x : L`, the corresponding `seminormFromConst` can be regarded as an algebra
196184
norm, when one assumes that `(spectralAlgNorm h_alg hna) 1 ≤ 1`. -/
197-
def algNormFromConst (hna : IsNonarchimedean (norm : K → ℝ))
198-
(h1 : (spectralAlgNorm (L := L) hna).toRingSeminorm 11) {x : L} (hx : x ≠ 0) : AlgebraNorm K L :=
199-
have hx' : spectralAlgNorm hna x ≠ 0 :=
185+
def algNormFromConst (h1 : (spectralAlgNorm K L).toRingSeminorm 11) {x : L} (hx : x ≠ 0) :
186+
AlgebraNorm K L :=
187+
have hx' : spectralAlgNorm K L x ≠ 0 :=
200188
ne_of_gt (spectralNorm_zero_lt hx (Algebra.IsAlgebraic.isAlgebraic x))
201-
{ normFromConst h1 hx' (spectralAlgNorm_isPowMul hna) with
189+
{ normFromConst h1 hx' spectralAlgNorm_isPowMul with
202190
smul' := fun k y => by
203191
have h_mul : ∀ y : L, spectralNorm K L (algebraMap K L k * y) =
204192
spectralNorm K L (algebraMap K L k) * spectralNorm K L y := fun y ↦ by
205-
rw [spectralNorm_extends, ← Algebra.smul_def, ← spectralAlgNorm_def hna,
193+
rw [spectralNorm_extends, ← Algebra.smul_def, ← spectralAlgNorm_def,
206194
map_smul_eq_mul _ _ _, spectralAlgNorm_def]
207195
have h : spectralNorm K L (algebraMap K L k) =
208-
seminormFromConst' h1 hx' (isPowMul_spectralNorm hna) (algebraMap K L k) := by
196+
seminormFromConst' h1 hx' isPowMul_spectralNorm (algebraMap K L k) := by
209197
rw [seminormFromConst_apply_of_isMul h1 hx' _ h_mul]; rfl
210198
rw [← @spectralNorm_extends K _ L _ _ k, Algebra.smul_def, h]
211199
exact seminormFromConst_isMul_of_isMul _ _ _ h_mul _ }
212200

213-
theorem algNormFromConst_def (hna : IsNonarchimedean (norm : K → ℝ))
214-
(h1 : (spectralAlgNorm (L := L) hna).toRingSeminorm 11) {x y : L} (hx : x ≠ 0) :
215-
algNormFromConst hna h1 hx y =
201+
theorem algNormFromConst_def (h1 : (spectralAlgNorm K L).toRingSeminorm 11) {x y : L}
202+
(hx : x ≠ 0) :
203+
algNormFromConst h1 hx y =
216204
seminormFromConst h1 (ne_of_gt (spectralNorm_zero_lt hx (Algebra.IsAlgebraic.isAlgebraic x)))
217-
(isPowMul_spectralNorm hna) y := rfl
205+
isPowMul_spectralNorm y := rfl
218206

219207
/-- If `K` is a field complete with respect to a nontrivial nonarchimedean multiplicative norm and
220208
`L/K` is an algebraic extension, then the spectral norm on `L` is multiplicative. -/
221-
theorem spectralAlgNorm_mul [CompleteSpace K] (hna : IsNonarchimedean (norm : K → ℝ)) (x y : L) :
222-
spectralAlgNorm hna (x * y) = spectralAlgNorm hna x * spectralAlgNorm hna y := by
209+
theorem spectralAlgNorm_mul [CompleteSpace K] (x y : L) :
210+
spectralAlgNorm K L (x * y) = spectralAlgNorm K L x * spectralAlgNorm K L y := by
223211
by_cases hx : x = 0
224212
· simp only [hx, zero_mul, map_zero]
225-
· have hx' : spectralAlgNorm hna x ≠ 0 :=
213+
· have hx' : spectralAlgNorm K L x ≠ 0 :=
226214
ne_of_gt (spectralNorm_zero_lt hx (Algebra.IsAlgebraic.isAlgebraic x))
227-
have hf1 : (spectralAlgNorm (L := L) hna) 11 := le_of_eq (spectralAlgNorm_one hna)
228-
set f : AlgebraNorm K L := algNormFromConst hna hf1 hx with hf
229-
have hf_pow : IsPowMul f := seminormFromConst_isPowMul hf1 hx' (isPowMul_spectralNorm hna)
215+
have hf1 : (spectralAlgNorm K L) 11 := le_of_eq spectralAlgNorm_one
216+
set f : AlgebraNorm K L := algNormFromConst hf1 hx with hf
217+
have hf_pow : IsPowMul f := seminormFromConst_isPowMul hf1 hx' isPowMul_spectralNorm
230218
rw [← spectralNorm_unique hf_pow, hf]
231219
simp only [algNormFromConst_def]
232-
exact seminormFromConst_const_mul hf1 hx' (isPowMul_spectralNorm hna) _
220+
exact seminormFromConst_const_mul hf1 hx' isPowMul_spectralNorm _
233221

234-
/-- The spectral norm is a multiplicative `K`-algebra norm on `L`.-/
235-
def spectralMulAlgNorm [CompleteSpace K] (hna : IsNonarchimedean (norm : K → ℝ)) :
236-
MulAlgebraNorm K L :=
237-
{ spectralAlgNorm hna with
238-
map_one' := spectralAlgNorm_one hna
239-
map_mul' := spectralAlgNorm_mul hna }
222+
variable (K L) in
223+
/-- The spectral norm is a multiplicative `K`-algebra norm on `L`. -/
224+
def spectralMulAlgNorm [CompleteSpace K] : MulAlgebraNorm K L :=
225+
{ spectralAlgNorm K L with
226+
map_one' := spectralAlgNorm_one
227+
map_mul' := spectralAlgNorm_mul }
240228

241-
theorem spectralMulAlgNorm_def [CompleteSpace K] (hna : IsNonarchimedean (norm : K → ℝ))
242-
(x : L) : spectralMulAlgNorm hna x = spectralNorm K L x := rfl
229+
theorem spectralMulAlgNorm_def [CompleteSpace K]
230+
(x : L) : spectralMulAlgNorm K L x = spectralNorm K L x := rfl
243231

244232
namespace spectralNorm
245233

234+
variable (K L)
235+
246236
/-- `L` with the spectral norm is a `NormedField`. -/
247-
def normedField [CompleteSpace K] (h : IsNonarchimedean (norm : K → ℝ)) : NormedField L :=
237+
def normedField [CompleteSpace K] : NormedField L :=
248238
{ (inferInstance : Field L) with
249239
norm := fun x : L => (spectralNorm K L x : ℝ)
250240
dist := fun x y : L => (spectralNorm K L (x - y) : ℝ)
251241
dist_self := fun x => by simp [sub_self, spectralNorm_zero]
252242
dist_comm := fun x y => by
253-
rw [← neg_sub, spectralNorm_neg h (Algebra.IsAlgebraic.isAlgebraic _)]
254-
dist_triangle := fun x y z => by
255-
exact sub_add_sub_cancel x y z ▸ (isNonarchimedean_spectralNorm h).add_le spectralNorm_nonneg
243+
rw [← neg_sub, spectralNorm_neg (Algebra.IsAlgebraic.isAlgebraic _)]
244+
dist_triangle := fun x y z =>
245+
sub_add_sub_cancel x y z ▸ isNonarchimedean_spectralNorm.add_le spectralNorm_nonneg
256246
eq_of_dist_eq_zero := fun hxy => by
257-
simp only [← spectralMulAlgNorm_def h] at hxy
258247
rw [← sub_eq_zero]
259-
exact (map_eq_zero_iff_eq_zero (spectralMulAlgNorm h)).mp hxy
248+
exact (map_eq_zero_iff_eq_zero (spectralMulAlgNorm K L)).mp hxy
260249
dist_eq := fun x y => by rfl
261-
norm_mul := fun x y => by simp [← spectralMulAlgNorm_def h, map_mul]
250+
norm_mul := fun x y => by simp [← spectralMulAlgNorm_def, map_mul]
262251
edist_dist := fun x y => by
263252
simp only [AddGroupSeminorm.toFun_eq_coe, RingSeminorm.toFun_eq_coe]
264253
rw [ENNReal.ofReal_eq_coe_nnreal] }
265254

266255
/-- `L` with the spectral norm is a `normed_add_comm_group`. -/
267-
def normedAddCommGroup [CompleteSpace K] (h : IsNonarchimedean (norm : K → ℝ)) :
268-
NormedAddCommGroup L := by
269-
haveI : NormedField L := normedField h
256+
def normedAddCommGroup [CompleteSpace K] : NormedAddCommGroup L := by
257+
haveI : NormedField L := normedField K L
270258
infer_instance
271259

272260
/-- `L` with the spectral norm is a `seminormed_add_comm_group`. -/
273-
def seminormedAddCommGroup [CompleteSpace K] (h : IsNonarchimedean (norm : K → ℝ)) :
274-
SeminormedAddCommGroup L := by
275-
have : NormedField L := normedField h
261+
def seminormedAddCommGroup [CompleteSpace K] : SeminormedAddCommGroup L := by
262+
have : NormedField L := normedField K L
276263
infer_instance
277264

278265
/-- `L` with the spectral norm is a `normed_space` over `K`. -/
279-
def normedSpace [CompleteSpace K] (h : IsNonarchimedean (norm : K → ℝ)) :
280-
@NormedSpace K L _ (seminormedAddCommGroup h) :=
281-
letI _ := seminormedAddCommGroup (L := L) h
266+
def normedSpace [CompleteSpace K] : @NormedSpace K L _ (seminormedAddCommGroup K L) :=
267+
letI _ := seminormedAddCommGroup K L
282268
{(inferInstance : Module K L) with
283269
norm_smul_le := fun r x => by
284-
change spectralAlgNorm h (r • x) ≤ ‖r‖ * spectralAlgNorm h x
270+
change spectralAlgNorm K L (r • x) ≤ ‖r‖ * spectralAlgNorm K L x
285271
exact le_of_eq (map_smul_eq_mul _ _ _)}
286272

287273
/-- The metric space structure on `L` induced by the spectral norm. -/
288-
def metricSpace [CompleteSpace K] (h : IsNonarchimedean (norm : K → ℝ)) :
289-
MetricSpace L := (normedField h).toMetricSpace
274+
def metricSpace [CompleteSpace K] : MetricSpace L := (normedField K L).toMetricSpace
290275

291276
/-- The uniform space structure on `L` induced by the spectral norm. -/
292-
def uniformSpace [CompleteSpace K] (h : IsNonarchimedean (norm : K → ℝ)) :
293-
UniformSpace L := (metricSpace h).toUniformSpace
277+
def uniformSpace [CompleteSpace K] : UniformSpace L := (metricSpace K L).toUniformSpace
294278

295279
/-- If `L/K` is finite dimensional, then `L` is a complete space with respect to topology induced
296280
by the spectral norm. -/
297-
instance (priority := 100) completeSpace [CompleteSpace K]
298-
(h : IsNonarchimedean (norm : K → ℝ)) [h_fin : FiniteDimensional K L] :
299-
@CompleteSpace L (uniformSpace h) := by
300-
letI := (normedAddCommGroup (L := L) h)
301-
letI := (normedSpace (L := L) h)
281+
instance (priority := 100) completeSpace [CompleteSpace K] [h_fin : FiniteDimensional K L] :
282+
@CompleteSpace L (uniformSpace K L) := by
283+
letI := (normedAddCommGroup K L)
284+
letI := (normedSpace K L)
302285
exact FiniteDimensional.complete K L
303286

304287
end spectralNorm
288+
289+
end NontriviallyNormedField

0 commit comments

Comments
 (0)