The subfield of of degree : abelian, totally ramified at , unramified elsewhere
OpenIsCyclotomicExtension.Rat.exists_intermediateField_finrank_eq_of_dvd_sub_oneLet be an algebraically closed field of characteristic zero, let be a prime number, and let be a divisor of . The statement asserts that there is a subfield such that
- is a finite abelian extension of of degree ,
- embeds into the cyclotomic field ,
- is totally ramified in : the ramification index of in is , and
- each prime is unramified in .
Proof idea. The group is cyclic of order , so it has a subgroup of index . Let be the image in of its fixed field. The prime is totally ramified in , so it is totally ramified in each subfield. The discriminant of is a power of up to sign, so each prime is unramified in and in .
Use. A child of the tame step NumberField.exists_isUnramifiedIn_le_sup_of_prime_ne of the Kronecker-Weber theorem, used with equal to the -part of .
Formalization Note. F is an IntermediateField ℚ Ω; the existential carries FiniteDimensional ℚ F and IsAbelianGalois ℚ F as propositions. The ramification index is (Ideal.span {(q : ℤ)}).ramificationIdxIn (𝓞 F) and "unramified" is Algebra.IsUnramifiedIn. For the only case is and . Mathlib has IsCyclotomicExtension.Rat.galEquivZMod, IsCyclotomicExtension.Rat.ramificationIdxIn_eq_of_prime_pow, ramificationIdxIn_eq_of_not_dvd, and the discriminant of prime cyclotomic fields. The instances IsAbelianGalois ℚ F (through DivisionRing.toRatAlgebra) and Module.finrank ℚ F (through the ℚ-algebra structure of Ω) agree only by Subsingleton.elim.
import Mathlib open NumberField
theorem IsCyclotomicExtension.Rat.exists_intermediateField_finrank_eq_of_dvd_sub_one
{Ω : Type*} [Field Ω] [Algebra ℚ Ω] [IsAlgClosed Ω] (q e : ℕ) (hq : q.Prime)
(he : e ∣ q - 1) :
∃ F : IntermediateField ℚ Ω, FiniteDimensional ℚ F ∧ IsAbelianGalois ℚ F ∧
Module.finrank ℚ F = e ∧
Nonempty (F →ₐ[ℚ] CyclotomicField q ℚ) ∧
(Ideal.span {(q : ℤ)}).ramificationIdxIn (𝓞 F) = e ∧
∀ ℓ : ℕ, ℓ.Prime → ℓ ≠ q → Algebra.IsUnramifiedIn (𝓞 F) (Ideal.span {(ℓ : ℤ)}) := by sorry