@@ -3,10 +3,10 @@ Copyright (c) 2023 María Inés de Frutos-Fernández. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
44Authors: María Inés de Frutos-Fernández
55-/
6- import LocalClassFieldTheory.FromMathlib.SpectralNorm
76import Mathlib.Analysis.Normed.Operator.BoundedLinearMaps
87import Mathlib.Analysis.Normed.Unbundled.IsPowMulFaithful
98import Mathlib.Analysis.Normed.Unbundled.SeminormFromConst
9+ import Mathlib.Analysis.Normed.Unbundled.SpectralNorm
1010import Mathlib.Topology.Algebra.Module.FiniteDimension
1111
1212/-!
@@ -49,35 +49,39 @@ section Prelim
4949def 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
6767end Prelim
6868
6969open scoped NNReal IntermediateField
70+ section NontriviallyNormedField
71+
72+ open IntermediateField
7073
7174universe u v
75+
7276variable {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. -/
178166theorem 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 1 ≤ 1 ) {x : L} (hx : x ≠ 0 ) : AlgebraNorm K L :=
199- have hx' : spectralAlgNorm hna x ≠ 0 :=
185+ def algNormFromConst (h1 : (spectralAlgNorm K L).toRingSeminorm 1 ≤ 1 ) {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 1 ≤ 1 ) {x y : L} ( hx : x ≠ 0 ) :
215- algNormFromConst hna h1 hx y =
201+ theorem algNormFromConst_def (h1 : (spectralAlgNorm K L).toRingSeminorm 1 ≤ 1 ) {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) 1 ≤ 1 := 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) 1 ≤ 1 := 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
244232namespace 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
304287end spectralNorm
288+
289+ end NontriviallyNormedField
0 commit comments