Skip to content

Commit

Permalink
chore: replace open scoped Classical with `open scoped Classical in…
Browse files Browse the repository at this point in the history
…` or `classical` in a tactic proof (#21220)

reduces some technical debt by replacing `open scoped classical` with `open scoped classical in` or adding a `classical` tactic to a tactic proof.
  • Loading branch information
kvanvels committed Jan 29, 2025
1 parent 3cbf001 commit fb2efae
Show file tree
Hide file tree
Showing 16 changed files with 102 additions and 31 deletions.
3 changes: 1 addition & 2 deletions Mathlib/NumberTheory/ClassNumber/FunctionField.lean
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,11 @@ variable [Algebra Fq[X] F] [Algebra (RatFunc Fq) F]
variable [IsScalarTower Fq[X] (RatFunc Fq) F]
variable [FunctionField Fq F] [Algebra.IsSeparable (RatFunc Fq) F]

open scoped Classical

namespace RingOfIntegers

open FunctionField

open scoped Classical in
noncomputable instance : Fintype (ClassGroup (ringOfIntegers Fq F)) :=
ClassGroup.fintypeOfAdmissibleOfFinite (RatFunc Fq) F
(Polynomial.cardPowDegreeIsAdmissible :
Expand Down
5 changes: 4 additions & 1 deletion Mathlib/NumberTheory/LSeries/DirichletContinuation.lean
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ All definitions and theorems are in the `DirichletCharacter` namespace.
`completedLFunction χ s = N ^ (s - 1 / 2) * rootNumber χ * completedLFunction χ⁻¹ s`.
-/

open HurwitzZeta Complex Finset Classical ZMod Filter
open HurwitzZeta Complex Finset ZMod Filter

open scoped Real Topology

Expand Down Expand Up @@ -198,6 +198,7 @@ section gammaFactor

omit [NeZero N] -- not required for these declarations

open scoped Classical in
/-- The Archimedean Gamma factor: `Gammaℝ s` if `χ` is even, and `Gammaℝ (s + 1)` otherwise. -/
noncomputable def gammaFactor (χ : DirichletCharacter ℂ N) (s : ℂ) :=
if χ.Even then Gammaℝ s else Gammaℝ (s + 1)
Expand Down Expand Up @@ -258,6 +259,7 @@ lemma LFunction_eq_completed_div_gammaFactor (χ : DirichletCharacter ℂ N) (s
· exact LFunction_eq_completed_div_gammaFactor_even hχ.to_fun _ (h.imp_right χ.map_zero')
· apply LFunction_eq_completed_div_gammaFactor_odd hχ.to_fun

open scoped Classical in
/--
Global root number of `χ` (for `χ` primitive; junk otherwise). Defined as
`gaussSum χ stdAddChar / I ^ a / N ^ (1 / 2)`, where `a = 0` if even, `a = 1` if odd. (The factor
Expand All @@ -277,6 +279,7 @@ namespace IsPrimitive
/-- **Functional equation** for primitive Dirichlet L-functions. -/
theorem completedLFunction_one_sub {χ : DirichletCharacter ℂ N} (hχ : IsPrimitive χ) (s : ℂ) :
completedLFunction χ (1 - s) = N ^ (s - 1 / 2) * rootNumber χ * completedLFunction χ⁻¹ s := by
classical
-- First handle special case of Riemann zeta
rcases eq_or_ne N 1 with rfl | hN
· simp only [completedLFunction_modOne_eq, completedRiemannZeta_one_sub, Nat.cast_one, one_cpow,
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ multiples of `1 / s` and `1 / (1 - s)`.
-/
noncomputable section

open Complex Filter Topology Asymptotics Real Set Classical MeasureTheory
open Complex Filter Topology Asymptotics Real Set MeasureTheory

namespace HurwitzZeta

Expand Down
2 changes: 1 addition & 1 deletion Mathlib/NumberTheory/LSeries/ZMod.lean
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Results for completed L-functions:
the functional equation relating `completedLFunction Φ (1 - s)` to `completedLFunction (𝓕 Φ) s`.
-/

open HurwitzZeta Complex ZMod Finset Classical Topology Filter Set
open HurwitzZeta Complex ZMod Finset Topology Filter Set

open scoped Real

Expand Down
2 changes: 1 addition & 1 deletion Mathlib/NumberTheory/ModularForms/JacobiTheta/Bounds.lean
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ hence Dirichlet L-functions, etc).
`∞`.
-/

open Set Filter Topology Asymptotics Real Classical
open Set Filter Topology Asymptotics Real

noncomputable section

Expand Down
3 changes: 1 addition & 2 deletions Mathlib/NumberTheory/NumberField/AdeleRing.lean
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,6 @@ namespace NumberField

open InfinitePlace AbsoluteValue.Completion InfinitePlace.Completion DedekindDomain IsDedekindDomain

open scoped Classical

/-! ## The infinite adele ring
The infinite adele ring is the finite product of completions of a number field over its
Expand Down Expand Up @@ -76,6 +74,7 @@ theorem algebraMap_apply (x : K) (v : InfinitePlace K) :
instance locallyCompactSpace [NumberField K] : LocallyCompactSpace (InfiniteAdeleRing K) :=
Pi.locallyCompactSpace_of_finite

open scoped Classical in
/-- The ring isomorphism between the infinite adele ring of a number field and the
space `ℝ ^ r₁ × ℂ ^ r₂`, where `(r₁, r₂)` is the signature of the number field. -/
abbrev ringEquiv_mixedSpace :
Expand Down
14 changes: 10 additions & 4 deletions Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -309,10 +309,9 @@ end commMap

noncomputable section norm

open scoped Classical

variable {K}

open scoped Classical in
/-- The norm at the infinite place `w` of an element of the mixed space. --/
def normAtPlace (w : InfinitePlace K) : (mixedSpace K) →*₀ ℝ where
toFun x := if hw : IsReal w then ‖x.1 ⟨w, hw⟩‖ else ‖x.2 ⟨w, not_isReal_iff_isComplex.mp hw⟩‖
Expand Down Expand Up @@ -380,6 +379,7 @@ theorem exists_normAtPlace_ne_zero_iff {x : mixedSpace K} :

variable [NumberField K]

open scoped Classical in
theorem nnnorm_eq_sup_normAtPlace (x : mixedSpace K) :
‖x‖₊ = univ.sup fun w ↦ ⟨normAtPlace w x, normAtPlace_nonneg w x⟩ := by
have :
Expand All @@ -395,6 +395,7 @@ theorem nnnorm_eq_sup_normAtPlace (x : mixedSpace K) :
· ext w
simp [normAtPlace_apply_isComplex w.prop]

open scoped Classical in
theorem norm_eq_sup'_normAtPlace (x : mixedSpace K) :
‖x‖ = univ.sup' univ_nonempty fun w ↦ normAtPlace w x := by
rw [← coe_nnnorm, nnnorm_eq_sup_normAtPlace, ← sup'_eq_sup univ_nonempty, ← NNReal.val_eq_coe,
Expand Down Expand Up @@ -460,15 +461,14 @@ end norm

noncomputable section stdBasis

open scoped Classical

open Complex MeasureTheory MeasureTheory.Measure ZSpan Matrix ComplexConjugate

variable [NumberField K]

/-- The type indexing the basis `stdBasis`. -/
abbrev index := {w : InfinitePlace K // IsReal w} ⊕ ({w : InfinitePlace K // IsComplex w}) × (Fin 2)

open scoped Classical in
/-- The `ℝ`-basis of the mixed space of `K` formed by the vector equal to `1` at `w` and `0`
elsewhere for `IsReal w` and by the couple of vectors equal to `1` (resp. `I`) at `w` and `0`
elsewhere for `IsComplex w`. -/
Expand All @@ -494,20 +494,23 @@ theorem stdBasis_apply_ofIsComplex_snd (x : mixedSpace K)

variable (K)

open scoped Classical in
theorem fundamentalDomain_stdBasis :
fundamentalDomain (stdBasis K) =
(Set.univ.pi fun _ => Set.Ico 0 1) ×ˢ
(Set.univ.pi fun _ => Complex.measurableEquivPi⁻¹' (Set.univ.pi fun _ => Set.Ico 0 1)) := by
ext
simp [stdBasis, mem_fundamentalDomain, Complex.measurableEquivPi]

open scoped Classical in
theorem volume_fundamentalDomain_stdBasis :
volume (fundamentalDomain (stdBasis K)) = 1 := by
rw [fundamentalDomain_stdBasis, volume_eq_prod, prod_prod, volume_pi, volume_pi, pi_pi, pi_pi,
Complex.volume_preserving_equiv_pi.measure_preimage ?_, volume_pi, pi_pi, Real.volume_Ico,
sub_zero, ENNReal.ofReal_one, prod_const_one, prod_const_one, prod_const_one, one_mul]
exact (MeasurableSet.pi Set.countable_univ (fun _ _ => measurableSet_Ico)).nullMeasurableSet

open scoped Classical in
/-- The `Equiv` between `index K` and `K →+* ℂ` defined by sending a real infinite place `w` to
the unique corresponding embedding `w.embedding`, and the pair `⟨w, 0⟩` (resp. `⟨w, 1⟩`) for a
complex infinite place `w` to `w.embedding` (resp. `conjugate w.embedding`). -/
Expand Down Expand Up @@ -544,13 +547,15 @@ theorem indexEquiv_apply_ofIsComplex_snd (w : {w : InfinitePlace K // IsComplex

variable (K)

open scoped Classical in
/-- The matrix that gives the representation on `stdBasis` of the image by `commMap` of an
element `x` of `(K →+* ℂ) → ℂ` fixed by the map `x_φ ↦ conj x_(conjugate φ)`,
see `stdBasis_repr_eq_matrixToStdBasis_mul`. -/
def matrixToStdBasis : Matrix (index K) (index K) ℂ :=
fromBlocks (diagonal fun _ => 1) 0 0 <| reindex (Equiv.prodComm _ _) (Equiv.prodComm _ _)
(blockDiagonal (fun _ => (2 : ℂ)⁻¹ • !![1, 1; - I, I]))

open scoped Classical in
theorem det_matrixToStdBasis :
(matrixToStdBasis K).det = (2⁻¹ * I) ^ nrComplexPlaces K :=
calc
Expand All @@ -563,6 +568,7 @@ theorem det_matrixToStdBasis :
_ = (2⁻¹ * Complex.I) ^ Fintype.card {w : InfinitePlace K // IsComplex w} := by
rw [prod_const, Fintype.card]

open scoped Classical in
/-- Let `x : (K →+* ℂ) → ℂ` such that `x_φ = conj x_(conj φ)` for all `φ : K →+* ℂ`, then the
representation of `commMap K x` on `stdBasis` is given (up to reindexing) by the product of
`matrixToStdBasis` by `x`. -/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@ theorem convexBodyLT_convex : Convex ℝ (convexBodyLT K f) :=

open Fintype MeasureTheory MeasureTheory.Measure ENNReal

open scoped Classical

variable [NumberField K]

/-- The fudge factor that appears in the formula for the volume of `convexBodyLT`. -/
Expand All @@ -88,6 +86,7 @@ theorem convexBodyLTFactor_ne_zero : convexBodyLTFactor K ≠ 0 :=
theorem one_le_convexBodyLTFactor : 1 ≤ convexBodyLTFactor K :=
one_le_mul (one_le_pow₀ one_le_two) (one_le_pow₀ (one_le_two.trans Real.two_le_pi))

open scoped Classical in
/-- The volume of `(ConvexBodyLt K f)` where `convexBodyLT K f` is the set of points `x`
such that `‖x w‖ < f w` for all infinite places `w`. -/
theorem convexBodyLT_volume :
Expand Down Expand Up @@ -122,6 +121,7 @@ but one and choose the value at the remaining place so that we can apply
`exists_ne_zero_mem_ringOfIntegers_lt`. -/
theorem adjust_f {w₁ : InfinitePlace K} (B : ℝ≥0) (hf : ∀ w, w ≠ w₁ → f w ≠ 0) :
∃ g : InfinitePlace K → ℝ≥0, (∀ w, w ≠ w₁ → g w = f w) ∧ ∏ w, (g w) ^ mult w = B := by
classical
let S := ∏ w ∈ Finset.univ.erase w₁, (f w) ^ mult w
refine ⟨Function.update f w₁ ((B * S⁻¹) ^ (mult w₁ : ℝ)⁻¹), ?_, ?_⟩
· exact fun w hw => Function.update_of_ne hw _ f
Expand All @@ -139,10 +139,9 @@ section convexBodyLT'

open Metric ENNReal NNReal

open scoped Classical

variable (f : InfinitePlace K → ℝ≥0) (w₀ : {w : InfinitePlace K // IsComplex w})

open scoped Classical in
/-- A version of `convexBodyLT` with an additional condition at a fixed complex place. This is
needed to ensure the element constructed is not real, see for example
`exists_primitive_element_lt_of_isComplex`.
Expand Down Expand Up @@ -191,8 +190,6 @@ theorem convexBodyLT'_convex : Convex ℝ (convexBodyLT' K f w₀) := by

open MeasureTheory MeasureTheory.Measure

open scoped Classical

variable [NumberField K]

/-- The fudge factor that appears in the formula for the volume of `convexBodyLT'`. -/
Expand All @@ -205,6 +202,7 @@ theorem convexBodyLT'Factor_ne_zero : convexBodyLT'Factor K ≠ 0 :=
theorem one_le_convexBodyLT'Factor : 1 ≤ convexBodyLT'Factor K :=
one_le_mul (one_le_pow₀ one_le_two) (one_le_pow₀ (one_le_two.trans Real.two_le_pi))

open scoped Classical in
theorem convexBodyLT'_volume :
volume (convexBodyLT' K f w₀) = convexBodyLT'Factor K * ∏ w, (f w) ^ (mult w) := by
have vol_box : ∀ B : ℝ≥0, volume {x : ℂ | |x.re| < 1 ∧ |x.im| < B^2} = 4*B^2 := by
Expand Down Expand Up @@ -258,7 +256,7 @@ section convexBodySum

open ENNReal MeasureTheory Fintype

open scoped Real Classical NNReal
open scoped Real NNReal

variable [NumberField K] (B : ℝ)
variable {K}
Expand All @@ -270,6 +268,7 @@ noncomputable abbrev convexBodySumFun (x : mixedSpace K) : ℝ := ∑ w, mult w
theorem convexBodySumFun_apply (x : mixedSpace K) :
convexBodySumFun x = ∑ w, mult w * normAtPlace w x := rfl

open scoped Classical in
theorem convexBodySumFun_apply' (x : mixedSpace K) :
convexBodySumFun x = ∑ w, ‖x.1 w‖ + 2 * ∑ w, ‖x.2 w‖ := by
simp_rw [convexBodySumFun_apply, ← Finset.sum_add_sum_compl {w | IsReal w}.toFinset,
Expand Down Expand Up @@ -310,6 +309,7 @@ theorem convexBodySumFun_eq_zero_iff (x : mixedSpace K) :
(mem_nonZeroDivisors_iff_ne_zero.mpr <| Nat.cast_ne_zero.mpr mult_ne_zero)]
simp_rw [Finset.mem_univ, true_implies]

open scoped Classical in
theorem norm_le_convexBodySumFun (x : mixedSpace K) : ‖x‖ ≤ convexBodySumFun x := by
rw [norm_eq_sup'_normAtPlace]
refine (Finset.sup'_le_iff _ _).mpr fun w _ ↦ ?_
Expand All @@ -333,6 +333,7 @@ theorem convexBodySumFun_continuous :
`∑ w real, ‖x w‖ + 2 * ∑ w complex, ‖x w‖ ≤ B`. -/
abbrev convexBodySum : Set (mixedSpace K) := { x | convexBodySumFun x ≤ B }

open scoped Classical in
theorem convexBodySum_volume_eq_zero_of_le_zero {B} (hB : B ≤ 0) :
volume (convexBodySum K B) = 0 := by
obtain hB | hB := lt_or_eq_of_le hB
Expand Down Expand Up @@ -363,12 +364,14 @@ theorem convexBodySum_convex : Convex ℝ (convexBodySum K B) := by
exact (abs_eq_self.mpr h).symm

theorem convexBodySum_isBounded : Bornology.IsBounded (convexBodySum K B) := by
classical
refine Metric.isBounded_iff.mpr ⟨B + B, fun x hx y hy => ?_⟩
refine le_trans (norm_sub_le x y) (add_le_add ?_ ?_)
· exact le_trans (norm_le_convexBodySumFun x) hx
· exact le_trans (norm_le_convexBodySumFun y) hy

theorem convexBodySum_compact : IsCompact (convexBodySum K B) := by
classical
rw [Metric.isCompact_iff_isClosed_bounded]
refine ⟨?_, convexBodySum_isBounded K B⟩
convert IsClosed.preimage (convexBodySumFun_continuous K) (isClosed_Icc : IsClosed (Set.Icc 0 B))
Expand All @@ -385,6 +388,7 @@ theorem convexBodySumFactor_ne_zero : convexBodySumFactor K ≠ 0 := by
(pow_ne_zero _ (div_ne_zero NNReal.pi_ne_zero two_ne_zero))

open MeasureTheory MeasureTheory.Measure Real in
open scoped Classical in
theorem convexBodySum_volume :
volume (convexBodySum K B) = (convexBodySumFactor K) * (.ofReal B) ^ (finrank ℚ K) := by
obtain hB | hB := le_or_lt B 0
Expand Down Expand Up @@ -440,13 +444,13 @@ end convexBodySum

section minkowski

open scoped Classical
open MeasureTheory MeasureTheory.Measure Module ZSpan Real Submodule

open scoped ENNReal NNReal nonZeroDivisors IntermediateField

variable [NumberField K] (I : (FractionalIdeal (𝓞 K)⁰ K)ˣ)

open scoped Classical in
/-- The bound that appears in **Minkowski Convex Body theorem**, see
`MeasureTheory.exists_ne_zero_mem_lattice_of_measure_mul_two_pow_lt_measure`. See
`NumberField.mixedEmbedding.volume_fundamentalDomain_idealLatticeBasis_eq` and
Expand All @@ -456,6 +460,7 @@ noncomputable def minkowskiBound : ℝ≥0∞ :=
volume (fundamentalDomain (fractionalIdealLatticeBasis K I)) *
(2 : ℝ≥0∞) ^ (finrank ℝ (mixedSpace K))

open scoped Classical in
theorem volume_fundamentalDomain_fractionalIdealLatticeBasis :
volume (fundamentalDomain (fractionalIdealLatticeBasis K I)) =
.ofReal (FractionalIdeal.absNorm I.1) * volume (fundamentalDomain (latticeBasis K)) := by
Expand All @@ -471,17 +476,20 @@ theorem volume_fundamentalDomain_fractionalIdealLatticeBasis :
rw [mixedEmbedding.det_basisOfFractionalIdeal_eq_norm]

theorem minkowskiBound_lt_top : minkowskiBound K I < ⊤ := by
classical
refine ENNReal.mul_lt_top ?_ ?_
· exact (fundamentalDomain_isBounded _).measure_lt_top
· exact ENNReal.pow_lt_top (lt_top_iff_ne_top.mpr ENNReal.two_ne_top) _

theorem minkowskiBound_pos : 0 < minkowskiBound K I := by
classical
refine zero_lt_iff.mpr (mul_ne_zero ?_ ?_)
· exact ZSpan.measure_fundamentalDomain_ne_zero _
· exact ENNReal.pow_ne_zero two_ne_zero _

variable {f : InfinitePlace K → ℝ≥0} (I : (FractionalIdeal (𝓞 K)⁰ K)ˣ)

open scoped Classical in
/-- Let `I` be a fractional ideal of `K`. Assume that `f : InfinitePlace K → ℝ≥0` is such that
`minkowskiBound K I < volume (convexBodyLT K f)` where `convexBodyLT K f` is the set of
points `x` such that `‖x w‖ < f w` for all infinite places `w` (see `convexBodyLT_volume` for
Expand All @@ -499,6 +507,7 @@ theorem exists_ne_zero_mem_ideal_lt (h : minkowskiBound K I < volume (convexBody
obtain ⟨a, ha, rfl⟩ := hx
exact ⟨a, ha, by simpa using h_nz, (convexBodyLT_mem K f).mp h_mem⟩

open scoped Classical in
/-- A version of `exists_ne_zero_mem_ideal_lt` where the absolute value of the real part of `a` is
smaller than `1` at some fixed complex place. This is useful to ensure that `a` is not real. -/
theorem exists_ne_zero_mem_ideal_lt' (w₀ : {w : InfinitePlace K // IsComplex w})
Expand All @@ -515,13 +524,15 @@ theorem exists_ne_zero_mem_ideal_lt' (w₀ : {w : InfinitePlace K // IsComplex w
obtain ⟨a, ha, rfl⟩ := hx
exact ⟨a, ha, by simpa using h_nz, (convexBodyLT'_mem K f w₀).mp h_mem⟩

open scoped Classical in
/-- A version of `exists_ne_zero_mem_ideal_lt` for the ring of integers of `K`. -/
theorem exists_ne_zero_mem_ringOfIntegers_lt (h : minkowskiBound K ↑1 < volume (convexBodyLT K f)) :
∃ a : 𝓞 K, a ≠ 0 ∧ ∀ w : InfinitePlace K, w a < f w := by
obtain ⟨_, h_mem, h_nz, h_bd⟩ := exists_ne_zero_mem_ideal_lt K ↑1 h
obtain ⟨a, rfl⟩ := (FractionalIdeal.mem_one_iff _).mp h_mem
exact ⟨a, RingOfIntegers.coe_ne_zero_iff.mp h_nz, h_bd⟩

open scoped Classical in
/-- A version of `exists_ne_zero_mem_ideal_lt'` for the ring of integers of `K`. -/
theorem exists_ne_zero_mem_ringOfIntegers_lt' (w₀ : {w : InfinitePlace K // IsComplex w})
(h : minkowskiBound K ↑1 < volume (convexBodyLT' K f w₀)) :
Expand All @@ -535,6 +546,7 @@ theorem exists_primitive_element_lt_of_isReal {w₀ : InfinitePlace K} (hw₀ :
(hB : minkowskiBound K ↑1 < convexBodyLTFactor K * B) :
∃ a : 𝓞 K, ℚ⟮(a : K)⟯ = ⊤ ∧
∀ w : InfinitePlace K, w a < max B 1 := by
classical
have : minkowskiBound K ↑1 < volume (convexBodyLT K (fun w ↦ if w = w₀ then B else 1)) := by
rw [convexBodyLT_volume, ← Finset.prod_erase_mul _ _ (Finset.mem_univ w₀)]
simp_rw [ite_pow, one_pow]
Expand All @@ -551,6 +563,7 @@ theorem exists_primitive_element_lt_of_isComplex {w₀ : InfinitePlace K} (hw₀
{B : ℝ≥0} (hB : minkowskiBound K ↑1 < convexBodyLT'Factor K * B) :
∃ a : 𝓞 K, ℚ⟮(a : K)⟯ = ⊤ ∧
∀ w : InfinitePlace K, w a < Real.sqrt (1 + B ^ 2) := by
classical
have : minkowskiBound K ↑1 <
volume (convexBodyLT' K (fun w ↦ if w = w₀ then NNReal.sqrt B else 1) ⟨w₀, hw₀⟩) := by
rw [convexBodyLT'_volume, ← Finset.prod_erase_mul _ _ (Finset.mem_univ w₀)]
Expand All @@ -577,6 +590,7 @@ theorem exists_primitive_element_lt_of_isComplex {w₀ : InfinitePlace K} (hw₀
rw [NNReal.coe_one, Real.le_sqrt' zero_lt_one, one_pow]
norm_num

open scoped Classical in
/-- Let `I` be a fractional ideal of `K`. Assume that `B : ℝ` is such that
`minkowskiBound K I < volume (convexBodySum K B)` where `convexBodySum K B` is the set of points
`x` such that `∑ w real, ‖x w‖ + 2 * ∑ w complex, ‖x w‖ ≤ B` (see `convexBodySum_volume` for
Expand Down Expand Up @@ -615,6 +629,7 @@ theorem exists_ne_zero_mem_ideal_of_norm_le {B : ℝ}
· rw [← Nat.cast_sum, sum_mult_eq, Nat.cast_pos]
exact finrank_pos

open scoped Classical in
theorem exists_ne_zero_mem_ringOfIntegers_of_norm_le {B : ℝ}
(h : (minkowskiBound K ↑1) ≤ volume (convexBodySum K B)) :
∃ a : 𝓞 K, a ≠ 0 ∧ |Algebra.norm ℚ (a : K)| ≤ (B / finrank ℚ K) ^ finrank ℚ K := by
Expand Down
Loading

0 comments on commit fb2efae

Please sign in to comment.