Module

Basic.lean

Nyll.ValuedFieldTheory.Valuation.Henselian.Factorization.Basic
30 declarations indexed from sourceView source ↗

algebraic input for Hensel's lemma

This file records the residue-polynomial data used at the start of the proof of Hensel's lemma. The analytic convergence step is kept separate; the lemmas here are the initial lifts and congruences.

Declarations

AlgebraicNumberTheory.Valuations.henselFactorization_map_mul_add_mul

Polynomial coefficient maps distribute over the Bezout expression used in the Hensel input.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_mul_add_mul
    {R k : Type*} [CommSemiring R] [CommSemiring k] (φ : R →+* k)
    (a b g h : R[X]) :
    (a * g + b * h).map φ = a.map φ * g.map φ + b.map φ * h.map φ
AlgebraicNumberTheory.Valuations.henselFactorization_map_sub_mul

Polynomial coefficient maps distribute over f - g*h, the first Hensel congruence expression.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_sub_mul
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    (f g h : R[X]) :
    (f - g * h).map φ = f.map φ - g.map φ * h.map φ
AlgebraicNumberTheory.Valuations.henselFactorization_map_mul_sub_self

Polynomial coefficient maps distribute over P*F - F, the normalized Bezout-error expression in the Hensel correction congruence.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_mul_sub_self
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    (P F : R[X]) :
    (P * F - F).map φ = P.map φ * F.map φ - F.map φ
AlgebraicNumberTheory.Valuations.henselFactorization_map_mul_sub

Polynomial coefficient maps distribute over g*q - A, the product congruence used to bound the high coefficients of the quotient.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_mul_sub
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    (g q A : R[X]) :
    (g * q - A).map φ = g.map φ * q.map φ - A.map φ
AlgebraicNumberTheory.Valuations.henselFactorization_map_mul_add_mul_sub

Polynomial coefficient maps distribute over the Hensel correction expression g*q + h*p - fn.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_mul_add_mul_sub
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    (g h q p fn : R[X]) :
    (g * q + h * p - fn).map φ =
      g.map φ * q.map φ + h.map φ * p.map φ - fn.map φ
AlgebraicNumberTheory.Valuations.henselFactorization_generator_mem_maximalIdeal_of_eq

If the maximal ideal is generated by π, then π is in it.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_generator_mem_maximalIdeal_of_eq
    {R : Type*} [CommRing R] [IsLocalRing R] {π : R}
    (hπ : IsLocalRing.maximalIdeal R = Ideal.span ({π} : Set R)) :
    π ∈ IsLocalRing.maximalIdeal R
AlgebraicNumberTheory.Valuations.henselFactorization_maximalIdeal_le_span_of_eq

Equality with the principal ideal gives the weakened containment form used by the recursive construction.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_maximalIdeal_le_span_of_eq
    {R : Type*} [CommRing R] [IsLocalRing R] {π : R}
    (hπ : IsLocalRing.maximalIdeal R = Ideal.span ({π} : Set R)) :
    IsLocalRing.maximalIdeal R ≤ Ideal.span ({π} : Set R)
AlgebraicNumberTheory.Valuations.henselFactorization_principal_maximal_mem_le_of_eq

The two principal-maximal-ideal facts used throughout the proof of the factorization form of Hensel's lemma.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_principal_maximal_mem_le_of_eq
    {R : Type*} [CommRing R] [IsLocalRing R] {π : R}
    (hπ : IsLocalRing.maximalIdeal R = Ideal.span ({π} : Set R)) :
    π ∈ IsLocalRing.maximalIdeal R ∧
      IsLocalRing.maximalIdeal R ≤ Ideal.span ({π} : Set R)
AlgebraicNumberTheory.Valuations.henselFactorization_exists_polynomial_lift_degree_eq

lift input: a residue polynomial can be lifted along a surjective coefficient map with the same polynomial degree.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_exists_polynomial_lift_degree_eq
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    (hφ : Function.Surjective φ) (fbar : k[X]) :
    ∃ f : R[X], f.map φ = fbar ∧ f.degree = fbar.degree
AlgebraicNumberTheory.Valuations.henselFactorization_exists_polynomial_lift_natDegree_eq

lift input: a residue polynomial can be lifted along a surjective coefficient map with the same natural degree.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_exists_polynomial_lift_natDegree_eq
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    (hφ : Function.Surjective φ) (fbar : k[X]) :
    ∃ f : R[X], f.map φ = fbar ∧ f.natDegree = fbar.natDegree
AlgebraicNumberTheory.Valuations.henselFactorization_lift_leadingCoeff_isUnit_of_natDegree_eq

unit-leading input: a lift with the same natural degree as a nonzero residual polynomial has unit leading coefficient.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_lift_leadingCoeff_isUnit_of_natDegree_eq
    {R : Type*} [CommRing R] [IsLocalRing R]
    {g0 : R[X]} {gbar : (IsLocalRing.ResidueField R)[X]}
    (hg0 : g0.map (IsLocalRing.residue R) = gbar)
    (hdegree : g0.natDegree = gbar.natDegree)
    (hlead : gbar.leadingCoeff ≠ 0) :
    IsUnit g0.leadingCoeff
AlgebraicNumberTheory.Valuations.henselFactorization_monic_normalization_of_unit_leadingCoeff

unit-leading normalization: a polynomial whose leading coefficient is a unit becomes monic after multiplying by the inverse leading coefficient, and this normalization preserves degree.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_monic_normalization_of_unit_leadingCoeff
    {R : Type*} [CommRing R] {g : R[X]} (hunit : IsUnit g.leadingCoeff) :
    ∃ u : Rˣ,
      (u : R) = g.leadingCoeff ∧
        (Polynomial.C ((u⁻¹ : Rˣ) : R) * g).Monic ∧
          (Polynomial.C ((u⁻¹ : Rˣ) : R) * g).degree = g.degree ∧
            (Polynomial.C ((u⁻¹ : Rˣ) : R) * g).natDegree = g.natDegree
AlgebraicNumberTheory.Valuations.henselFactorization_exists_bezout_lifts

Bezout lift input: if the two residual factors are coprime, then after choosing arbitrary lifts g0, h0, the Bezout coefficients can also be lifted so that a g0 + b h0 reduces to 1.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_exists_bezout_lifts
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    (hφ : Function.Surjective φ)
    {gbar hbar : k[X]} (hcop : IsCoprime gbar hbar)
    {g0 h0 : R[X]} (hg0 : g0.map φ = gbar) (hh0 : h0.map φ = hbar) :
    ∃ a b : R[X], (a * g0 + b * h0).map φ = 1
AlgebraicNumberTheory.Valuations.henselFactorization_map_eq_zero_iff_coeff_mem_ker

A polynomial maps to zero iff all of its coefficients lie in the kernel of the coefficient map. This is the coefficientwise form used by the Hensel correction congruences.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_eq_zero_iff_coeff_mem_ker
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k) (P : R[X]) :
    P.map φ = 0 ↔ ∀ n : ℕ, P.coeff n ∈ RingHom.ker φ
AlgebraicNumberTheory.Valuations.henselFactorization_map_eq_iff_sub_coeff_mem_ker

Polynomial coefficient maps are equal iff every coefficient of the difference lies in the kernel.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_eq_iff_sub_coeff_mem_ker
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k) (P Q : R[X]) :
    P.map φ = Q.map φ ↔ ∀ n : ℕ, (P - Q).coeff n ∈ RingHom.ker φ
AlgebraicNumberTheory.Valuations.henselFactorization_mem_ker_quotient_mk_iff

The kernel of the quotient map R -> R/I is exactly I.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_mem_ker_quotient_mk_iff
    {R : Type*} [CommRing R] (I : Ideal R) (x : R) :
    x ∈ RingHom.ker (Ideal.Quotient.mk I) ↔ x ∈ I
AlgebraicNumberTheory.Valuations.henselFactorization_map_quotient_eq_zero_iff_coeff_mem

Specialization of the coefficientwise zero criterion to quotient maps: a polynomial maps to zero in (R/I)[X] iff all of its coefficients lie in I.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_quotient_eq_zero_iff_coeff_mem
    {R : Type*} [CommRing R] (I : Ideal R) (P : R[X]) :
    P.map (Ideal.Quotient.mk I) = 0 ↔ ∀ n : ℕ, P.coeff n ∈ I
AlgebraicNumberTheory.Valuations.henselFactorization_quotient_map_coeff_eq_zero_iff_coeff_mem

Coefficientwise form of henselFactorization_map_quotient_eq_zero_iff_coeff_mem.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_quotient_map_coeff_eq_zero_iff_coeff_mem
    {R : Type*} [CommRing R] (I : Ideal R) (P : R[X]) (n : ℕ) :
    (P.map (Ideal.Quotient.mk I)).coeff n = 0 ↔ P.coeff n ∈ I
AlgebraicNumberTheory.Valuations.henselFactorization_map_quotient_eq_iff_sub_coeff_mem

Equality after quotienting coefficients is the same as coefficientwise membership of the difference in the quotient ideal.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_map_quotient_eq_iff_sub_coeff_mem
    {R : Type*} [CommRing R] (I : Ideal R) (P Q : R[X]) :
    P.map (Ideal.Quotient.mk I) = Q.map (Ideal.Quotient.mk I) ↔
      ∀ n : ℕ, (P - Q).coeff n ∈ I
AlgebraicNumberTheory.Valuations.henselFactorization_coeff_mem_ker_sub_mul_of_lifts

first congruence input: if f reduces to the product of the residual factors and g0, h0 lift those factors, then every coefficient of f - g0 h0 lies in the kernel of the coefficient map.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_coeff_mem_ker_sub_mul_of_lifts
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    {f g0 h0 : R[X]} {gbar hbar : k[X]}
    (hfbar : f.map φ = gbar * hbar)
    (hg0 : g0.map φ = gbar) (hh0 : h0.map φ = hbar) :
    ∀ n : ℕ, (f - g0 * h0).coeff n ∈ RingHom.ker φ
AlgebraicNumberTheory.Valuations.henselFactorization_coeff_mem_maximalIdeal_sub_mul_of_residue_lifts

local-ring form of the first congruence input for the residue map.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_coeff_mem_maximalIdeal_sub_mul_of_residue_lifts
    {R : Type*} [CommRing R] [IsLocalRing R]
    {f g0 h0 : R[X]} {gbar hbar : (IsLocalRing.ResidueField R)[X]}
    (hfbar : f.map (IsLocalRing.residue R) = gbar * hbar)
    (hg0 : g0.map (IsLocalRing.residue R) = gbar)
    (hh0 : h0.map (IsLocalRing.residue R) = hbar) :
    ∀ n : ℕ, (f - g0 * h0).coeff n ∈ IsLocalRing.maximalIdeal R
AlgebraicNumberTheory.Valuations.henselFactorization_coeff_mem_ker_sub_one_of_map_eq_one

if a polynomial maps to 1, then subtracting 1 gives coefficients in the kernel of the coefficient map.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_coeff_mem_ker_sub_one_of_map_eq_one
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    {P : R[X]} (hP : P.map φ = 1) :
    ∀ n : ℕ, (P - 1).coeff n ∈ RingHom.ker φ
AlgebraicNumberTheory.Valuations.henselFactorization_coeff_mem_maximalIdeal_sub_one_of_bezout_lift

local-ring form of the lifted Bezout congruence: a*g0 + b*h0 ≡ 1 modulo the residue map means every coefficient of a*g0 + b*h0 - 1 lies in the maximal ideal.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_coeff_mem_maximalIdeal_sub_one_of_bezout_lift
    {R : Type*} [CommRing R] [IsLocalRing R]
    {a b g0 h0 : R[X]}
    (hbez : (a * g0 + b * h0).map (IsLocalRing.residue R) = 1) :
    ∀ n : ℕ, (a * g0 + b * h0 - 1).coeff n ∈
      IsLocalRing.maximalIdeal R
AlgebraicNumberTheory.Valuations.henselFactorization_division_by_monic_degree_lt

division step: division by a monic polynomial gives the quotient and remainder used in the correction construction, with remainder degree strictly smaller than the divisor degree.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_division_by_monic_degree_lt
    {R : Type*} [CommRing R] [Nontrivial R] (F g : R[X]) (hg : g.Monic) :
    ∃ q p : R[X], F = g * q + p ∧ p.degree < g.degree
AlgebraicNumberTheory.Valuations.henselFactorization_division_by_unit_leading_degree_lt

division by a unit-leading divisor: the division step used in the Hensel correction construction does not require the chosen lift g0 to be monic; a unit leading coefficient is enough.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_division_by_unit_leading_degree_lt
    {R : Type*} [CommRing R] [Nontrivial R] (F g : R[X])
    (hunit : IsUnit g.leadingCoeff) :
    ∃ q p : R[X], F = g * q + p ∧ p.degree < g.degree
AlgebraicNumberTheory.Valuations.henselFactorization_division_by_lifted_factor_degree_lt

division by a lifted residual factor: if g0 lifts gbar with the same degree and gbar is nonzero in leading coefficient, then the construction division step F = g0 q + p, deg p < deg g0, is available in the valuation ring.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_division_by_lifted_factor_degree_lt
    {R : Type*} [CommRing R] [IsLocalRing R]
    {g0 : R[X]} {gbar : (IsLocalRing.ResidueField R)[X]}
    (hg0 : g0.map (IsLocalRing.residue R) = gbar)
    (hdegree : g0.natDegree = gbar.natDegree)
    (hlead : gbar.leadingCoeff ≠ 0) (F : R[X]) :
    ∃ q p : R[X], F = g0 * q + p ∧ p.degree < g0.degree
AlgebraicNumberTheory.Valuations.henselFactorization_correction_identity_after_division

Algebra identity behind the Hensel correction step after the division b * fn = g0 * q + p.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_correction_identity_after_division
    {R : Type*} [CommSemiring R] {a b g0 h0 fn q p : R[X]}
    (hdiv : b * fn = g0 * q + p) :
    g0 * (a * fn + h0 * q) + h0 * p = (a * g0 + b * h0) * fn
AlgebraicNumberTheory.Valuations.henselFactorization_correction_congruence_after_division

correction congruence after the division step. If a g0 + b h0 is 1 modulo the coefficient map and b fn = g0 q + p, then the divided correction still represents fn modulo the same kernel.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_correction_congruence_after_division
    {R k : Type*} [CommRing R] [CommRing k] (φ : R →+* k)
    {a b g0 h0 fn q p : R[X]}
    (hbez : (a * g0 + b * h0).map φ = 1)
    (hdiv : b * fn = g0 * q + p) :
    ∀ n : ℕ,
      (g0 * (a * fn + h0 * q) + h0 * p - fn).coeff n ∈ RingHom.ker φ
AlgebraicNumberTheory.Valuations.henselFactorization_correction_congruence_span_singleton_after_division

correction congruence after division, read directly modulo the principal ideal (π): if the lifted Bezout error has a displayed C π factor, then the divided correction represents fn modulo (π).

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_correction_congruence_span_singleton_after_division
    {R : Type*} [CommRing R] {π : R}
    {a b g0 h0 fn q p e : R[X]}
    (hbez : a * g0 + b * h0 - 1 = Polynomial.C π * e)
    (hdiv : b * fn = g0 * q + p) :
    ∀ n : ℕ,
      (g0 * (a * fn + h0 * q) + h0 * p - fn).coeff n ∈
        Ideal.span ({π} : Set R)
AlgebraicNumberTheory.Valuations.henselFactorization_correction_mem_maximalIdeal_after_division

local-ring form of the correction congruence after the division step.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
open scoped Polynomial
namespace AlgebraicNumberTheory
namespace Valuations
theorem henselFactorization_correction_mem_maximalIdeal_after_division
    {R : Type*} [CommRing R] [IsLocalRing R]
    {a b g0 h0 fn q p : R[X]}
    (hbez : (a * g0 + b * h0).map (IsLocalRing.residue R) = 1)
    (hdiv : b * fn = g0 * q + p) :
    ∀ n : ℕ,
      (g0 * (a * fn + h0 * q) + h0 * p - fn).coeff n ∈
        IsLocalRing.maximalIdeal R