ClassFieldTower.Sawin.discr_natAbs_le_of_sawin_ramification
Published library source ↗Same source in NYLL ↗
theorem discr_natAbs_le_of_sawin_ramification
(L : Type*) [Field L] [NumberField L] [IsGalois ℚ L]
(hP : IsPGroup 2 Gal(L/ℚ))
(hOutside : IsUnramifiedAtFinitePlacesOutside ℚ L sawinRationalPrimeSupport) :
(NumberField.discr L).natAbs ≤ 255255 ^ Module.finrank ℚ LIn-scope Lean context
open scoped NumberField
open NumberField
noncomputable section
namespace ClassFieldTower.SawinFull declaration and proof
/-- The initial tower's arithmetic conditions give a discriminant bound
with one constant for all finite Galois number fields satisfying them. -/
theorem discr_natAbs_le_of_sawin_ramification
(L : Type*) [Field L] [NumberField L] [IsGalois ℚ L]
(hP : IsPGroup 2 Gal(L/ℚ))
(hOutside : IsUnramifiedAtFinitePlacesOutside ℚ L sawinRationalPrimeSupport) :
(NumberField.discr L).natAbs ≤ 255255 ^ Module.finrank ℚ L := by
have : Fact (Nat.Prime 2) := ⟨Nat.prime_two⟩
obtain ⟨a, ha⟩ := hP.exists_card_eq
rw [IsGalois.card_aut_eq_finrank] at ha
apply AlgebraicNumberTheory.Discriminant.natAbs_discr_le_pow_of_coprime_support
L 255255 (by decide)
· rw [ha]
exact Nat.Coprime.pow_right a (by decide : Nat.Coprime 255255 2)
· intro q hq
have hmem := (rationalPrime_mem_sawinRationalPrimeSupport_iff q).mp
((isUnramifiedAtFinitePlacesOutside_rat_iff_discr L sawinRationalPrimeSupport).mp
hOutside q hq)
have hProd : ∏ p ∈ sawinRationalPrimes, p = 255255 := by decide
rw [← hProd]
exact Finset.dvd_prod_of_mem (fun p : ℕ ↦ p) hmemSource credits and license
Copyright (c) 2026 Naganori Yamaguchi (https://github.com/n-yamaguchi-0729). All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Naganori Yamaguchi (assisted by OpenAI Codex)