@@ -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,
149165general-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
343329end
344330end StrongApproximation
0 commit comments