Skip to content

Commit 87d33c4

Browse files
Oliiiiverclaude
andcommitted
refactor(Blichfeldt): extract lemmas, simplify blichfeldt_minkowski proof
Extract three named lemmas from the monolithic blichfeldt_minkowski proof: - norm_eq_zero_of_component_zero: a zero finite-place component forces ‖a‖ = 0 - valued_ne_zero_of_norm_pos: contrapositive; positive norm implies all valuations nonzero - minkowskiBound_mul_absNorm: minkowskiBound K I = absNorm I · minkowskiBound K 1 (Minkowski bound scales linearly with the ideal norm; Mathlib PR candidate) Also un-private absNorm_fractionalIdealOfExps_adeleOrd, which is independently useful and was private without reason. The main proof shrinks from ~120 to ~70 lines. The four nested `have` blocks (h_ne, h_mink_eq, h_absNorm, h_mb) are replaced by calls to the new lemmas. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 96a7149 commit 87d33c4

1 file changed

Lines changed: 83 additions & 97 deletions

File tree

Approximation/Blichfeldt.lean

Lines changed: 83 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,22 @@ lemma valuedAdicCompletion_diag' (x : K) (v : HeightOneSpectrum (𝓞 K)) :
140140
exact @IsDedekindDomain.HeightOneSpectrum.valuedAdicCompletion_eq_valuation'
141141
(𝓞 K) _ _ K _ _ _ v x
142142

143+
/-- If any finite-place component has zero valuation (i.e. the component is zero),
144+
the full adelic norm vanishes. Works over any number field. -/
145+
lemma norm_eq_zero_of_component_zero (a : 𝔸 K)
146+
(h_fin : (Function.mulSupport fun v : HeightOneSpectrum (𝓞 K) => Valued.v (a.2 v)).Finite)
147+
{w : HeightOneSpectrum (𝓞 K)} (hw : Valued.v (a.2 w) = 0) : ‖a‖ = 0 := by
148+
have haw : a.2 w = 0 := (Valuation.zero_iff Valued.v).mp hw
149+
rw [norm_eq_finprod_mul_prod K a h_fin,
150+
finprod_eq_zero _ w (by simp [haw]) (norm_mulSupport_finite_of_valued K h_fin), zero_mul]
151+
152+
/-- For an adele with positive norm, all finite-place valuations are nonzero.
153+
Contrapositively: a zero component forces the norm to zero. -/
154+
lemma valued_ne_zero_of_norm_pos (a : 𝔸 K)
155+
(h_fin : (Function.mulSupport fun v : HeightOneSpectrum (𝓞 K) => Valued.v (a.2 v)).Finite)
156+
(h_pos : 0 < ‖a‖) (v : HeightOneSpectrum (𝓞 K)) : Valued.v (a.2 v) ≠ 0 := fun hv =>
157+
absurd h_pos (by linarith [norm_eq_zero_of_component_zero K a h_fin hv])
158+
143159
/-! ### Blichfeldt-Minkowski and coset decomposition -/
144160

145161
/-- **`absNorm` of the Blichfeldt–Minkowski fractional ideal** — the number-field
@@ -148,7 +164,7 @@ components, the absolute norm of `∏ᶠ v, 𝔭_v ^ adeleOrd a v` is the recipr
148164
`∏ᶠ v, ‖a v‖`. The fractional ideal itself and its membership bound are the shared,
149165
general-Dedekind constructions of `Approximation.IdeleToIdeal` (`fractionalIdealOfExps`,
150166
`adeleOrd`); only this `absNorm` computation needs the number-field structure. -/
151-
private lemma absNorm_fractionalIdealOfExps_adeleOrd (a : FiniteAdeleRing (𝓞 K) K)
167+
lemma absNorm_fractionalIdealOfExps_adeleOrd (a : FiniteAdeleRing (𝓞 K) K)
152168
(hsupp : {v : HeightOneSpectrum (𝓞 K) | FiniteAdeleRing.adeleOrd a v ≠ 0}.Finite)
153169
(h_ne : ∀ v : HeightOneSpectrum (𝓞 K), Valued.v (a v) ≠ 0) :
154170
(FractionalIdeal.absNorm
@@ -193,6 +209,29 @@ private lemma absNorm_fractionalIdealOfExps_adeleOrd (a : FiniteAdeleRing (𝓞
193209
push_cast
194210
rfl
195211

212+
/-- The Minkowski bound scales linearly with the absolute norm of the fractional ideal:
213+
`minkowskiBound K I = absNorm I · minkowskiBound K 1`.
214+
215+
This factoring holds for any invertible fractional ideal `I` of a number field `K`
216+
and follows directly from `volume_fundamentalDomain_fractionalIdealLatticeBasis`.
217+
It isolates the ideal-theoretic scaling from the analytic Minkowski bound. -/
218+
lemma minkowskiBound_mul_absNorm (I : (FractionalIdeal (𝓞 K)⁰ K)ˣ) :
219+
minkowskiBound K I =
220+
ENNReal.ofReal (FractionalIdeal.absNorm I.1 : ℝ) * minkowskiBound K 1 := by
221+
have h_vol : volume (ZSpan.fundamentalDomain (fractionalIdealLatticeBasis K I)) =
222+
ENNReal.ofReal ↑(FractionalIdeal.absNorm I.1) *
223+
volume (ZSpan.fundamentalDomain (latticeBasis K)) :=
224+
volume_fundamentalDomain_fractionalIdealLatticeBasis K I
225+
have h_one : volume (ZSpan.fundamentalDomain (fractionalIdealLatticeBasis K 1)) =
226+
volume (ZSpan.fundamentalDomain (latticeBasis K)) := by
227+
have h := volume_fundamentalDomain_fractionalIdealLatticeBasis K
228+
(1 : (FractionalIdeal (𝓞 K)⁰ K)ˣ)
229+
simp only [Units.val_one, FractionalIdeal.absNorm_one, Rat.cast_one,
230+
ENNReal.ofReal_one, one_mul] at h
231+
exact h
232+
simp only [minkowskiBound, h_vol, h_one]
233+
ring
234+
196235
/-- **Adelic Blichfeldt-Minkowski Lemma** (Lemma 25.14, corrected).
197236
198237
There exists a constant B > 0 such that for any adele a with FINITE mulSupport
@@ -216,129 +255,76 @@ lemma blichfeldt_minkowski :
216255
Valued.v ((diag K x).2 v) ≤ Valued.v (a.2 v)) ∧
217256
(∀ w : InfinitePlace K,
218257
‖(diag K x).1 w‖ ≤ ‖a.1 w‖) := by
219-
-- The Minkowski bound: B = minkowskiBound(𝓞_K) / convexBodyLTFactor(K)
220-
use (minkowskiBound K (1 : (FractionalIdeal (𝓞 K)⁰ K)ˣ) /
221-
(convexBodyLTFactor K : ℝ≥0∞)).toReal
222-
refine ⟨?_, fun a h_fin h_large => ?_⟩
223-
· -- B > 0: ratio of two positive finite quantities
224-
apply ENNReal.toReal_pos
225-
· exact (ENNReal.div_pos (minkowskiBound_pos K 1).ne' ENNReal.coe_ne_top).ne'
226-
· exact ENNReal.div_ne_top (minkowskiBound_lt_top K 1).ne
227-
(ENNReal.coe_ne_zero.mpr (convexBodyLTFactor_ne_zero K))
228-
· -- Main proof: construct x using Blichfeldt-Minkowski / Minkowski's theorem
229-
-- Step 0: The fractional ideal I_a for the finite part of a, built directly from
230-
-- the shared `fractionalIdealOfExps` (no separate `bmIdeal` definition needed; this
231-
-- is the same construction underlying the idele-to-ideal map of `IdeleToIdeal`).
258+
refine ⟨(minkowskiBound K (1 : (FractionalIdeal (𝓞 K)⁰ K)ˣ) /
259+
(convexBodyLTFactor K : ℝ≥0∞)).toReal, ?_, fun a h_fin h_large => ?_⟩
260+
· -- B > 0: ratio of two positive finite ENNReal quantities
261+
exact ENNReal.toReal_pos
262+
(ENNReal.div_pos (minkowskiBound_pos K 1).ne' ENNReal.coe_ne_top).ne'
263+
(ENNReal.div_ne_top (minkowskiBound_lt_top K 1).ne
264+
(ENNReal.coe_ne_zero.mpr (convexBodyLTFactor_ne_zero K)))
265+
· -- Build the Blichfeldt fractional ideal I_a from the valuation exponents of a.2
232266
have hsupp : {v : HeightOneSpectrum (𝓞 K) | FiniteAdeleRing.adeleOrd a.2 v ≠ 0}.Finite :=
233267
h_fin.subset (FiniteAdeleRing.adeleOrd_ne_zero_subset a.2)
234268
let I_a := FiniteAdeleRing.fractionalIdealOfExps (K := K) (FiniteAdeleRing.adeleOrd a.2) hsupp
235-
-- Step 0.5: All finite-place valuations of a.2 are nonzero.
236-
-- Proof: if Valued.v (a.2 w) = 0 for some w, then ‖a.2 w‖ = 0,
237-
-- making ∏ᶠ ‖a.2 v‖ = 0 (by finprod_eq_zero), so ‖a‖ = 0.
238-
-- But h_large says B < 0, while B ≥ 0 (ENNReal.toReal ≥ 0). Contradiction.
239-
have h_ne : ∀ w : HeightOneSpectrum (𝓞 K), Valued.v (a.2 w) ≠ 0 := by
240-
intro w hw
241-
have haw : a.2 w = 0 := by rwa [← Valuation.zero_iff Valued.v]
242-
have h_prod_zero : ∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖ = 0 :=
243-
finprod_eq_zero _ w (by simp [haw]) (norm_mulSupport_finite_of_valued K h_fin)
244-
have h_adelic_zero : ‖a‖ = 0 := by
245-
rw [norm_eq_finprod_mul_prod K a h_fin, h_prod_zero, zero_mul]
246-
rw [h_adelic_zero] at h_large
247-
exact absurd h_large (not_lt.mpr ENNReal.toReal_nonneg)
248-
-- Step 1: Show the Minkowski condition holds
249-
have h_mink : minkowskiBound K I_a <
250-
volume (convexBodyLT K (fun w => ‖a.1 w‖₊)) := by
269+
-- All finite-place valuations are nonzero: B ≥ 0 < ‖a‖ forces ‖a‖ > 0,
270+
-- and a zero component would make ‖a‖ = 0 via norm_eq_zero_of_component_zero.
271+
have h_ne : ∀ v : HeightOneSpectrum (𝓞 K), Valued.v (a.2 v) ≠ 0 :=
272+
fun v => valued_ne_zero_of_norm_pos K a h_fin
273+
(ENNReal.toReal_nonneg.trans_lt h_large) v
274+
-- Step 1: Verify the Minkowski volume condition minkowskiBound K I_a < vol(convexBody)
275+
have h_mink : minkowskiBound K I_a < volume (convexBodyLT K (fun w => ‖a.1 w‖₊)) := by
251276
rw [convexBodyLT_volume]
252-
-- Helper: finite support of norms (from the valuation support hypothesis)
253-
have h_norm_fin : (Function.mulSupport (fun v : HeightOneSpectrum (𝓞 K) =>
254-
‖a.2 v‖)).Finite := norm_mulSupport_finite_of_valued K h_fin
255-
-- F := ∏ᶠ v, ‖a.2 v‖ > 0 (all ‖a.2 v‖ > 0 by h_ne, and finprod is finite)
277+
have h_norm_fin : (Function.mulSupport fun v : HeightOneSpectrum (𝓞 K) =>
278+
‖a.2 v‖).Finite := norm_mulSupport_finite_of_valued K h_fin
279+
-- F := ∏ᶠ v, ‖a.2 v‖ > 0 since each factor is positive
256280
have h_F_pos : 0 < ∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖ := by
257281
rw [finprod_eq_prod _ h_norm_fin]
258-
exact Finset.prod_pos (fun v _ =>
259-
norm_pos_iff.mpr ((Valuation.ne_zero_iff Valued.v).mp (h_ne v)))
260-
-- C := convexBodyLTFactor K > 0 (it is ≥ 1)
282+
exact Finset.prod_pos fun v _ =>
283+
norm_pos_iff.mpr ((Valuation.ne_zero_iff Valued.v).mp (h_ne v))
261284
have h_C_pos : 0 < (convexBodyLTFactor K : ℝ) :=
262285
NNReal.coe_pos.mpr (lt_of_lt_of_le one_pos (one_le_convexBodyLTFactor K))
263-
-- minkowskiBound K I_a = ofReal(absNorm I_a.1) * minkowskiBound K 1
264-
-- Proof: expand both sides via volume_fundamentalDomain_fractionalIdealLatticeBasis.
265-
have h_mink_eq : minkowskiBound K I_a =
266-
ENNReal.ofReal ↑(FractionalIdeal.absNorm I_a.1) * minkowskiBound K 1 := by
267-
have h_vol_Ia : volume (ZSpan.fundamentalDomain (fractionalIdealLatticeBasis K I_a)) =
268-
ENNReal.ofReal ↑(FractionalIdeal.absNorm I_a.1) *
269-
volume (ZSpan.fundamentalDomain (latticeBasis K)) :=
270-
volume_fundamentalDomain_fractionalIdealLatticeBasis K I_a
271-
have h_vol_1 : volume (ZSpan.fundamentalDomain (fractionalIdealLatticeBasis K 1)) =
272-
volume (ZSpan.fundamentalDomain (latticeBasis K)) := by
273-
have h := volume_fundamentalDomain_fractionalIdealLatticeBasis K
274-
(1 : (FractionalIdeal (𝓞 K)⁰ K)ˣ)
275-
simp only [Units.val_one, FractionalIdeal.absNorm_one, Rat.cast_one,
276-
ENNReal.ofReal_one, one_mul] at h
277-
exact h
278-
simp only [minkowskiBound, h_vol_Ia, h_vol_1]
279-
ring
280-
-- absNorm I_a.1 = F⁻¹ (the number-field input lemma)
281-
have h_absNorm : (FractionalIdeal.absNorm I_a.1 : ℝ) =
282-
(∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖)⁻¹ :=
283-
absNorm_fractionalIdealOfExps_adeleOrd K a.2 hsupp h_ne
284-
-- Combine: minkowskiBound K I_a = ofReal(F⁻¹) * minkowskiBound K 1
285-
have h_mb : minkowskiBound K I_a =
286-
ENNReal.ofReal (∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖)⁻¹ *
287-
minkowskiBound K 1 := by rw [h_mink_eq, h_absNorm]
288-
-- Convert ENNReal goal to a real-number inequality
289-
-- RHS = ↑(convexBodyLTFactor K) * ↑(∏ w, ‖a.1 w‖₊ ^ w.mult), which is ≠ ⊤
286+
-- Reduce to a real inequality via ENNReal.toReal
290287
rw [← ENNReal.toReal_lt_toReal (minkowskiBound_lt_top K I_a).ne
291288
(ENNReal.mul_ne_top ENNReal.coe_ne_top ENNReal.coe_ne_top)]
292-
-- Expand LHS: (minkowskiBound K I_a).toReal = F⁻¹ * (minkowskiBound K 1).toReal
289+
-- LHS: minkowskiBound_mul_absNorm + absNorm_fractionalIdealOfExps_adeleOrd
290+
-- give (minkowskiBound K I_a).toReal = F⁻¹ · (minkowskiBound K 1).toReal
293291
have hLHS : (minkowskiBound K I_a).toReal =
294292
(∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖)⁻¹ * (minkowskiBound K 1).toReal := by
295-
rw [h_mb, ENNReal.toReal_mul,
296-
ENNReal.toReal_ofReal (inv_nonneg.mpr h_F_pos.le)]
297-
-- Expand RHS: ↑C * ↑P = C * P as reals
298-
have hRHS : ((↑(convexBodyLTFactor K) * ↑(∏ w : InfinitePlace K, ‖a.1 w‖₊ ^ w.mult) :
299-
ℝ≥0∞)).toReal =
293+
rw [minkowskiBound_mul_absNorm,
294+
absNorm_fractionalIdealOfExps_adeleOrd K a.2 hsupp h_ne,
295+
ENNReal.toReal_mul, ENNReal.toReal_ofReal (inv_nonneg.mpr h_F_pos.le)]
296+
-- RHS: convert NNReal products to ℝ
297+
have hRHS : ((↑(convexBodyLTFactor K) * ↑(∏ w : InfinitePlace K,
298+
‖a.1 w‖₊ ^ w.mult) : ℝ≥0∞)).toReal =
300299
(convexBodyLTFactor K : ℝ) * ∏ w : InfinitePlace K, ‖a.1 w‖ ^ w.mult := by
301300
rw [ENNReal.toReal_mul, ENNReal.coe_toReal, ENNReal.coe_toReal]
302-
congr 1
303-
push_cast [NNReal.coe_prod, NNReal.coe_pow, coe_nnnorm]
304-
rfl
301+
congr 1; push_cast [NNReal.coe_prod, NNReal.coe_pow, coe_nnnorm]; rfl
305302
rw [hLHS, hRHS]
306-
-- Goal: F⁻¹ * M < C * P where h_large : M/C < ‖a‖ = F * P
307-
-- Rewrite h_large to expose M/C < F*P
303+
-- h_large gives M/C < F · P; rearrange to F⁻¹ · M < C · P
308304
have h_large' : (minkowskiBound K 1 : ℝ≥0∞).toReal / (convexBodyLTFactor K : ℝ) <
309305
(∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖) *
310306
∏ w : InfinitePlace K, ‖a.1 w‖ ^ w.mult := by
311-
have := h_large
312-
rw [ENNReal.toReal_div, ENNReal.coe_toReal,
313-
norm_eq_finprod_mul_prod K a h_fin] at this
314-
exact this
315-
-- M/C < F*P ↔ M < C*(F*P) ↔ F⁻¹*M < C*P
307+
rwa [ENNReal.toReal_div, ENNReal.coe_toReal,
308+
norm_eq_finprod_mul_prod K a h_fin] at h_large
316309
rw [div_lt_iff₀ h_C_pos] at h_large'
317310
rw [inv_mul_lt_iff₀ h_F_pos]
318-
linarith [show (convexBodyLTFactor K : ℝ) * ((∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖) *
311+
linarith [show (convexBodyLTFactor K : ℝ) *
312+
((∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖) *
319313
∏ w : InfinitePlace K, ‖a.1 w‖ ^ w.mult) =
320314
(∏ᶠ v : HeightOneSpectrum (𝓞 K), ‖a.2 v‖) *
321315
((convexBodyLTFactor K : ℝ) * ∏ w : InfinitePlace K, ‖a.1 w‖ ^ w.mult) from by ring]
322316
-- Step 2: Apply Minkowski's theorem
323-
obtain ⟨x, hx_mem, hx_ne, hx_bd⟩ :=
324-
exists_ne_zero_mem_ideal_lt K I_a h_mink
325-
-- Step 3: Package the result
326-
refine ⟨x, hx_ne, ?_, ?_⟩
327-
· -- Finite place condition: Valued.v((diag x).2 v) ≤ Valued.v(a.2 v) for all v
328-
intro v
329-
rw [valuedAdicCompletion_diag', FiniteAdeleRing.valued_eq_exp_neg_adeleOrd (h_ne v)]
317+
obtain ⟨x, hx_mem, hx_ne, hx_bd⟩ := exists_ne_zero_mem_ideal_lt K I_a h_mink
318+
-- Step 3: Package finite-place and infinite-place bounds
319+
refine ⟨x, hx_ne, fun v => ?_, fun w => ?_⟩
320+
· rw [valuedAdicCompletion_diag', FiniteAdeleRing.valued_eq_exp_neg_adeleOrd (h_ne v)]
330321
exact FiniteAdeleRing.valuation_le_exp_neg_of_mem_fractionalIdealOfExps
331322
(FiniteAdeleRing.adeleOrd a.2) hsupp hx_ne hx_mem v
332-
· -- Infinite place condition: ‖(diag x).1 w‖ ≤ ‖a.1 w‖ for all w.
333-
intro w
334-
have h_norm : ‖(diag K x).1 w‖ = w x := by
323+
· have h_norm : ‖(diag K x).1 w‖ = w x := by
335324
simp only [NumberField.AdeleRing.algebraMap_fst_apply]
336-
rw [show (x : w.Completion) =
337-
((WithAbs.equiv w.1).symm x : w.Completion) from rfl]
338-
rw [InfinitePlace.Completion.norm_coe, RingEquiv.apply_symm_apply]
339-
rw [h_norm]
340-
have hbd := hx_bd w
341-
exact le_of_lt (lt_of_lt_of_eq hbd (coe_nnnorm _))
325+
rw [show (x : w.Completion) = ((WithAbs.equiv w.1).symm x : w.Completion) from rfl,
326+
InfinitePlace.Completion.norm_coe, RingEquiv.apply_symm_apply]
327+
exact le_of_lt (h_norm ▸ lt_of_lt_of_eq (hx_bd w) (coe_nnnorm _))
342328

343329
end
344330
end StrongApproximation

0 commit comments

Comments
 (0)