Skip to content

Commit c3bd83c

Browse files
committed
feat: final lemmas needed for showing gaussNorm on MvPowerSeries is an absolute value (#40997)
We finish our section on showing that the gaussNorm on MvRestricted power series will be an absolute value by giving the neg and mul_eq_mul lemmas. Co-authored-by: WilliamCoram <williamecoram@gmail.com>
1 parent 50a4417 commit c3bd83c

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

Mathlib/RingTheory/MvPowerSeries/GaussNorm.lean

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ the set of all values of `v (coeff t f) * ∏ i : t.support, c i` for all `t :
3333
* `MvPowerSeries.gaussNorm_add_le_max`: if `v` is a non-negative non-archimedean function and the
3434
set of values `v (coeff t f) * ∏ i : t.support, c i` is bounded above (similarly for `g`), then
3535
the Gauss norm has the non-archimedean property.
36+
37+
* `MvPowerSeries.AchievesGaussNorm`: a type `i` is said to achieve gauss norm if
38+
`v (coeff i f) * i.prod (c · ^ ·) = gaussNorm v c f`.
39+
40+
* `MvPowerSeries.gaussNorm_neg`: if `v` has the property that `∀ i, v i = v (-i)` then
41+
`gaussNorm v c (-f) = gaussNorm v c f `.
42+
3643
-/
3744

3845
@[expose] public section
@@ -164,6 +171,12 @@ variable [Ring R]
164171
abbrev AchievesGaussNorm (i : σ →₀ ℕ) : Prop :=
165172
v (coeff i f) * i.prod (c · ^ ·) = gaussNorm v c f
166173

174+
lemma gaussNorm_neg (vNeg : ∀ x, v (-x) = v x) (f : MvPowerSeries σ R) :
175+
gaussNorm v c (-f) = gaussNorm v c f := by
176+
simp_rw [gaussNorm]
177+
have (t : σ →₀ ℕ) : (coeff t) (-f) = - (coeff t) f := by rfl
178+
simp_rw [this, vNeg]
179+
167180
section absoluteValue
168181

169182
variable {α S : Type*} [LinearOrder S] [AddCommGroup α] (f : α → S)
@@ -226,6 +239,30 @@ lemma gaussNorm_le_mul (vMulEq : ∀ a b, v (a * b) = v a * v b)
226239
rw [antidiagonal_dominant v f g i₀ j₀ vna vMulEq vNeg hdom']
227240
_ ≤ gaussNorm v c (f * g) := le_gaussNorm v c (f * g) hbfg (i₀ + j₀)
228241

242+
lemma gaussNorm_mul_eq_mul (f g : MvPowerSeries σ R) (hf : HasGaussNorm v c f)
243+
(hg : HasGaussNorm v c g) (hfg : HasGaussNorm v c (f * g))
244+
(vNonneg : ∀ a, v a ≥ 0) (vZero : v 0 = 0) (vNA : IsNonarchimedean v)
245+
(vMulEq : ∀ (a b : R), v (a * b) = v a * v b) (vNeg : ∀ (a : R), v (-a) = v a)
246+
(h_eq_zero : ∀ (x : R), v x = 0 → x = 0) (hc : ∀ (i : σ), 0 < c i)
247+
(hdom : ∃ i j, AchievesGaussNorm v c f i ∧ AchievesGaussNorm v c g j ∧
248+
∀ p ∈ Finset.antidiagonal (i + j), p ≠ (i, j) → v (coeff p.1 f * coeff p.2 g) <
249+
v (coeff i f) * v (coeff j g)) :
250+
gaussNorm v c (f * g) = gaussNorm v c f * gaussNorm v c g := by
251+
by_cases hf' : f = 0
252+
· simp [hf', gaussNorm_zero v c vZero]
253+
by_cases hg' : g = 0
254+
· simp [hg', gaussNorm_zero v c vZero]
255+
have hf1 : gaussNorm v c f ≠ 0 := by
256+
convert gaussNorm_eq_zero_iff v c f vZero vNonneg h_eq_zero hc hf
257+
grind
258+
have hg1 : gaussNorm v c g ≠ 0 := by
259+
convert gaussNorm_eq_zero_iff v c g vZero vNonneg h_eq_zero hc hg
260+
grind
261+
apply ge_antisymm_iff.mpr
262+
constructor
263+
· exact gaussNorm_le_mul v c f g vMulEq vNA (by grind) hfg hdom
264+
· exact gaussNorm_mul_le v c f g (StrongLT.le hc) vNonneg (by grind) vNA vZero hf hg
265+
229266
end absoluteValue
230267

231268
end MvPowerSeries

0 commit comments

Comments
 (0)