ModuleUniqueExtensionReduction.lean
Nyll.ValuedFieldTheory.Valuation.Henselian.UniqueExtensionReduction
8 declarations indexed from sourceView source ↗ Module documentation
reduction of irreducible factors
This file develops the Galois/residue input in the converse direction. A monic polynomial over the base valuation ring whose roots lie in a splitting field in fact splits over every extension valuation ring: its roots are integral over the base and hence belong to that ring.
Declarations
AlgebraicNumberTheory.Valuations.monic_splits_in_extension_valuationSubring
DocumentationA monic polynomial over the base valuation ring that splits in the extension field already splits over any extension valuation ring.
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
open ValuationTheory.DiscreteValuationField.Valuation
(integralClosure_mem_valuationSubring_of_hasExtension) in
AlgebraicNumberTheory.Valuations.monic_eq_prod_monic_irreducible_map_factors
DocumentationA monic polynomial over a valuation ring is a product of monic factors whose images in the fraction field are irreducible. Integrally closedness of the valuation ring is what brings the normalized fraction-field factors back to the valuation ring.
Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
AlgebraicNumberTheory.Valuations.residueFieldMapOfHasExtension_residue
DocumentationThe canonical residue-field map sends the residue of a base-ring element to the residue of its image in the extension valuation ring.
Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
AlgebraicNumberTheory.Valuations.monic_reduction_splits_in_extension_residueField
DocumentationReducing a monic split polynomial along an extension valuation ring gives a split polynomial over the extension residue field.
Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
AlgebraicNumberTheory.Valuations.residues_of_irreducible_roots_are_conjugate
DocumentationIn a normal extension with a unique extension valuation ring, reductions of two roots of one irreducible ground-field polynomial are conjugate under the induced residue-field automorphism.
Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
AlgebraicNumberTheory.Valuations.irreducible_monic_reduction_coprime_factor_degree_zero
DocumentationA monic irreducible factor over the ground field cannot acquire two coprime positive-degree factors after reduction when the extension valuation ring on its splitting field is unique. This is the precise primary-reduction input used in the proof of the unique-extension criterion.
Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
AlgebraicNumberTheory.Valuations.irreducible_monic_reduction_dvd_left_or_right_of_coprime
DocumentationA reduced monic irreducible factor divides exactly one side of any coprime residual product that it divides.
Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
AlgebraicNumberTheory.Valuations.partition_monic_irreducible_factors_along_coprime_reduction
DocumentationPartition a multiset of monic irreducible ground-field factors according to a coprime factorization of the product of their reductions. Unique extendability supplies the all-or-nothing divisibility of each individual reduced factor.
Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open Polynomial
open UniqueFactorizationMonoid
namespace AlgebraicNumberTheory
namespace Valuations
open ValuationTheory.Valuations
universe u
Lean source · full declarationtheorem partition_monic_irreducible_factors_along_coprime_reduction
{K : Type u} [Field K] (V : ValuationSubring K)
(hunique : ∀ (E : Type u) [Field E] [Algebra K E]
[Algebra.IsAlgebraic K E],
∃! W : ValuationSubring E,
V.valuation.HasExtension W.valuation)
(factors : Multiset (Polynomial V))
(hfactors : ∀ Q ∈ factors,
Q.Monic ∧ Irreducible (Q.map V.subtype))
(gbar hbar : Polynomial (IsLocalRing.ResidueField V))
(hgmonic : gbar.Monic) (hhmonic : hbar.Monic)
(hproduct :
(factors.map (fun Q => Q.map (IsLocalRing.residue V))).prod =
gbar * hbar)
(hcoprime : IsCoprime gbar hbar) :
∃ G H : Polynomial V,
G.Monic ∧ H.Monic ∧ factors.prod = G * H ∧
G.map (IsLocalRing.residue V) = gbar ∧
H.map (IsLocalRing.residue V) = hbar := by
classical
induction factors using Multiset.induction_on generalizing gbar hbar with
| empty =>
have hgh : gbar * hbar = 1 := by simpa using hproduct.symm
have hgunit : IsUnit gbar :=
isUnit_iff_exists_inv'.2 ⟨hbar, by simpa [mul_comm] using hgh⟩
have hhunit : IsUnit hbar :=
isUnit_iff_exists_inv'.2 ⟨gbar, hgh⟩
have hg : gbar = 1 := hgmonic.isUnit_iff.1 hgunit
have hh : hbar = 1 := hhmonic.isUnit_iff.1 hhunit
subst gbar
subst hbar
exact ⟨1, 1, Polynomial.monic_one, Polynomial.monic_one, by simp, by simp, by simp⟩
| cons Q factors ih =>
have hQdata : Q.Monic ∧ Irreducible (Q.map V.subtype) :=
hfactors Q (by simp)
have htail : ∀ R ∈ factors,
R.Monic ∧ Irreducible (R.map V.subtype) := by
intro R hR
exact hfactors R (by simp [hR])
let qbar : Polynomial (IsLocalRing.ResidueField V) :=
Q.map (IsLocalRing.residue V)
have hQbarMonic : qbar.Monic := hQdata.1.map (IsLocalRing.residue V)
have hproduct' :
qbar * (factors.map
(fun R => R.map (IsLocalRing.residue V))).prod = gbar * hbar := by
simpa [qbar] using hproduct
have hQdvd : qbar ∣ gbar * hbar := by
rw [← hproduct']
exact dvd_mul_right _ _
let E : Type u := (Q.map V.subtype).SplittingField
obtain ⟨W, hW, hWuniq⟩ := hunique E
let : V.valuation.HasExtension W.valuation := hW
have hside : qbar ∣ gbar ∨ qbar ∣ hbar :=
irreducible_monic_reduction_dvd_left_or_right_of_coprime
V W hWuniq Q hQdata.1 hQdata.2 gbar hbar hcoprime hQdvd
rcases hside with hQg | hQh
· obtain ⟨g', hg'⟩ := hQg
have hg'monic : g'.Monic := by
apply hQbarMonic.of_mul_monic_left
rw [← hg']
exact hgmonic
have hg'coprime : IsCoprime g' hbar := by
rcases hcoprime with ⟨A, B, hbez⟩
refine ⟨A * qbar, B, ?_⟩
calc
(A * qbar) * g' + B * hbar =
A * (qbar * g') + B * hbar := by ring
_ = A * gbar + B * hbar := by rw [← hg']
_ = 1 := hbez
have hrest :
(factors.map
(fun R => R.map (IsLocalRing.residue V))).prod =
g' * hbar := by
apply mul_left_cancel₀ hQbarMonic.ne_zero
calc
qbar * (factors.map
(fun R => R.map (IsLocalRing.residue V))).prod =
gbar * hbar := hproduct'
_ = (qbar * g') * hbar := by rw [← hg']
_ = qbar * (g' * hbar) := by ring
obtain ⟨G, H, hGmonic, hHmonic, hfactorGH, hGbar, hHbar⟩ :=
ih htail g' hbar hg'monic hhmonic hrest hg'coprime
refine ⟨Q * G, H, hQdata.1.mul hGmonic, hHmonic, ?_, ?_, hHbar⟩
· simp only [Multiset.prod_cons, hfactorGH]
ring
· rw [Polynomial.map_mul, hGbar]
exact hg'.symm
· obtain ⟨h', hh'⟩ := hQh
have hh'monic : h'.Monic := by
apply hQbarMonic.of_mul_monic_left
rw [← hh']
exact hhmonic
have hh'coprime : IsCoprime gbar h' := by
rcases hcoprime with ⟨A, B, hbez⟩
refine ⟨A, B * qbar, ?_⟩
calc
A * gbar + (B * qbar) * h' =
A * gbar + B * (qbar * h') := by ring
_ = A * gbar + B * hbar := by rw [← hh']
_ = 1 := hbez
have hrest :
(factors.map
(fun R => R.map (IsLocalRing.residue V))).prod =
gbar * h' := by
apply mul_left_cancel₀ hQbarMonic.ne_zero
calc
qbar * (factors.map
(fun R => R.map (IsLocalRing.residue V))).prod =
gbar * hbar := hproduct'
_ = gbar * (qbar * h') := by rw [← hh']
_ = qbar * (gbar * h') := by ring
obtain ⟨G, H, hGmonic, hHmonic, hfactorGH, hGbar, hHbar⟩ :=
ih htail gbar h' hgmonic hh'monic hrest hh'coprime
refine ⟨G, Q * H, hGmonic, hQdata.1.mul hHmonic, ?_, hGbar, ?_⟩
· simp only [Multiset.prod_cons, hfactorGH]
ring
· rw [Polynomial.map_mul, hHbar]
exact hh'.symm