FLT/KnownIn1980s/EllipticCurves/ReductionBaseChange.lean

GitHub source file

Explanation legend Lean4 Domain Explanation Language (L4DEL)

L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.

L4DEL
Lean4 Domain Explanation Language

Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.

Project sources: Pinned project documentation, Pinned FLT blueprint introduction

12 declarations, 0 contain sorry, 0 declared as axioms

Reduction theory under base change

Let k β†’ l be a valuative extension of nonarchimedean local fields and let E/k be an elliptic curve with split multiplicative reduction. This file proves that the two reduction instances currently sorried in FLT.KnownIn1980s.EllipticCurves.TateCurve transfer to the base change (stated for an arbitrary such E, not just Tate curves):

Neither is provable by assembling existing declarations: mathlib's reduction API (Mathlib.AlgebraicGeometry.EllipticCurve.Reduction) has no minimality criterion and no base-change results at all, and mathlib's ValuativeExtension provides only the map of value groups mapValueGroupWithZero, not the induced ring map π’ͺ[k] β†’+* π’ͺ[l] of rings of integers. FLT PR #1081 (branch logos2) also leaves both instances sorried.

Mathematical route

The whole point is that minimality by itself is not preserved by base change β€” yΒ² = xΒ³ + p is minimal over β„š_p but not over β„š_p(p^{1/6}) β€” so one cannot argue about minimality abstractly. The multiplicative reduction hypothesis rescues everything through a single mechanism: it forces |cβ‚„| = 1, and "integral with |cβ‚„| = 1" is a property that (i) forces minimality and (ii) is visibly preserved by any valuative extension.

Mathlib phrases HasMultiplicativeReduction at the field level β€” its two non-parent fields are statements about the adic valuation of W.Ξ” and W.cβ‚„ as elements of the field β€” and this branch already has both halves of the translation apparatus:

So everything except the minimality criterion and the splitness clause is a field-level valuation chase along the chain adic over k β†’ canonical over k β†’ canonical over l β†’ adic over l. In detail:

  1. Transfer of the canonical valuation (ValuativeExtension.valuation_algebraMap_le_one, _lt_one, _eq_one β€” proved below, not sorried). A valuative extension preserves |x| ≀ 1, |x| < 1 and |x| = 1, because mapValueGroupWithZero is a strictly monotone monoid-with-zero homomorphism sending valuation k x to valuation l (algebraMap k l x). (The < 1 case duplicates TateCurve.valuation_algebraMap_lt_one from TateCurveBaseChange; when de-blueprinting, consolidate all three next to the bridges in FLT.Mathlib.RingTheory.Valuation.ValuativeRel.Basic.)

  2. Functoriality of the integers (ValuativeExtension.integerMap), needed only for the splitness clause (step 5). By valuation_algebraMap_le_one, algebraMap k l restricts to a map π’ͺ[k] β†’+* π’ͺ[l]; it is a local homomorphism (by valuation_algebraMap_lt_one) and hence induces a map of residue fields (residueMap). The IsMinimal and HasMultiplicativeReduction transfers below do not use any of this.

  3. The minimality criterion (WeierstrassCurve.isMinimal_of_valuation_cβ‚„_eq_one). An integral Weierstrass equation whose cβ‚„ has adic valuation 1 is minimal β€” the unit-cβ‚„ case of the Kraus–Laska criterion "v(cβ‚„) < 4 or v(Ξ”) < 12 implies minimal" (Silverman AEC, Remark VII.1.1). This is the one genuinely new piece of mathematics, and it is mathlib-worthy. It is stated at the field level to match mathlib's HasMultiplicativeReduction.multiplicativeReduction, which is exactly the fact consumers hold.

  4. Base change of the integral model. Integrality transfers coefficientwise: each coefficient of E.baseChange l is algebraMap k l of the corresponding coefficient of E, and valuation_algebraMap_le_one keeps it integral (isIntegral_of_exists_lift). For the splitness clause we also record integralModel_baseChange_map: the integral model of the base change is the integerMap-image of the integral model, by uniqueness of lifts along the injective map π’ͺ[l] β†’ l.

  5. Multiplicative reduction. badReduction and multiplicativeReduction transfer along the chain above: adic |Ξ”| < 1 over k converts to the canonical valuation (adicValuation_lt_one_iff + integralModel_Ξ”_eq), moves along the extension (valuation_algebraMap_lt_one + map_Ξ”), and converts back over l (adicValuation_lt_one_iff again); same for |cβ‚„| = 1 with the eq_one lemmas. Minimality is step 2 applied to the transferred |cβ‚„| = 1. No integerMap, no IsLocalHom. Note multiplicative reduction is preserved by arbitrary extensions of local fields (Silverman AEC, VII.5.4(b)) β€” no unramifiedness is needed, in contrast to good reduction.

  6. Splitness. Mathlib's HasSplitMultiplicativeReduction demands that the explicit quadratic cβ‚„TΒ² + a₁cβ‚„T - (54b₆ - 3bβ‚‚bβ‚„ + aβ‚‚cβ‚„) (tangent directions at the node) split over the residue field. By 3 the quadratic of the l-model is the image of the quadratic of the k-model under the induced map of residue fields (IsLocalRing.ResidueField.map (integerMap k l)), and a split polynomial stays split under any ring map (Polynomial.Splits.map). Splitness can only be gained, never lost, when the residue field grows. This is the only step that uses integerMap, residueMap and integralModel_baseChange_map.

The base-change transfer is packaged as theorems here rather than instances, so that the consuming instances live in FLT.KnownIn1980s.EllipticCurves.TateCurve, where this file is imported: the two sorried instances there are filled by isMinimal_baseChange and hasSplitMultiplicativeReduction_baseChange (which also yields IsMinimal and HasMultiplicativeReduction by class-parent projection).

The k-side adic β†’ canonical conversions of valuation_cβ‚„_baseChange_eq_one and valuation_Ξ”_baseChange_lt_one duplicate the downstream WeierstrassCurve.valuation_cβ‚„_eq_one and valuation_Ξ”_lt_one of TateCurve; they are reduction-theoretic rather than Tate-theoretic, so consider extracting the k-side halves as shared lemmas (or moving those TateCurve lemmas here) when de-blueprinting.

References

Imports (4)
Imported by 2 files
  1. def ValuativeExtension.integerMap Documented declaration: integerMap line 170 source

    Source documentation

    The restriction of algebraMap k l to the rings of integers: π’ͺ[k] is the subring (valuation k).integer of k, and valuation_algebraMap_le_one says algebraMap k l maps it into (valuation l).integer.

    Implementation note: it may be worth defining the Algebra π’ͺ[k] π’ͺ[l] instance directly instead, so that WeierstrassCurve.baseChange (rather than map) can be used on integral models in integralModel_baseChange_map below; whichever is chosen, this is the underlying ring homomorphism.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, Algebra, ValuativeExtension, RingHom, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation

    Proof uses: RingHom.restrict, Algebra.algebraMap

    29 instances, coercions and auxiliary constants left out.

    noncomputable def integerMap : π’ͺ[k] β†’+* π’ͺ[l] :=
    …
  2. theorem ValuativeExtension.integerMap_coe integerMap is the algebra map on underlying elements line 177 source

    Source documentation

    integerMap is the algebra map on underlying elements.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, Algebra, ValuativeExtension, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, Eq, RingHom, ValuativeExtension.integerMap, Algebra.algebraMap

    Proof uses: rfl

    40 instances, coercions and auxiliary constants left out.

    Tactic trace: 5 steps

    Open to load the checked before-and-after goal states.

    theorem integerMap_coe (x : π’ͺ[k]) :
        (integerMap k l x : l) = algebraMap k l (x : k) :=
    …

    Mentions: ValuativeExtension.integerMap

  3. instance ValuativeExtension.(instance at line 186) line 186 source

    Source documentation

    integerMap is a local homomorphism: if integerMap x is a unit then x is a unit. Non-units of the integer subring are exactly the elements of valuation < 1 (Valuation.Integer.not_isUnit_iff_valuation_lt_one), and valuation k x < 1 gives valuation l (integerMap k l x) < 1 by valuation_algebraMap_lt_one. Needed only to make IsLocalRing.ResidueField.map applicable in residueMap.

    instance : IsLocalHom (integerMap k l) where
    …

    Mentions: ValuativeExtension.integerMap

  4. theorem ValuativeExtension.algebraMap_integerMap Documented declaration: algebraMap_integerMap line 198 source

    Source documentation

    The commuting square algebraMap π’ͺ[l] l ∘ integerMap = algebraMap k l ∘ algebraMap π’ͺ[k] k underlying integerMap: on underlying elements both send x to algebraMap k l x (integerMap_coe, and algebraMap π’ͺ[Β·] Β· is the subring inclusion). This is the functoriality used to transfer integral models along the base change.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, Algebra, ValuativeExtension, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, Eq, RingHom, Algebra.algebraMap, ValuativeExtension.integerMap

    Proof uses: ValuativeExtension.integerMap_coe

    32 instances, coercions and auxiliary constants left out.

    theorem algebraMap_integerMap (x : π’ͺ[k]) :
        algebraMap π’ͺ[l] l (integerMap k l x) = algebraMap k l (algebraMap π’ͺ[k] k x) :=
    …

    Mentions: ValuativeExtension.integerMap

  5. def ValuativeExtension.residueMap The induced map of residue fields π’ͺ[k]/𝓂[k] β†’+* π’ͺ[l]/𝓂[l], from the local homomorphism integerMap line 219 source

    Source documentation

    The induced map of residue fields π’ͺ[k]/𝓂[k] β†’+* π’ͺ[l]/𝓂[l], from the local homomorphism integerMap. (An honest definition, not a sorry: it is IsLocalRing.ResidueField.map of integerMap k l.)

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, TopologicalSpace, IsNonarchimedeanLocalField, Algebra, ValuativeExtension, RingHom, IsLocalRing.ResidueField, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation

    Proof uses: IsLocalRing.ResidueField.map, ValuativeExtension.integerMap

    32 instances, coercions and auxiliary constants left out.

    Tactic trace: 10 steps

    Open to load the checked before-and-after goal states.

    noncomputable def residueMap :
        IsLocalRing.ResidueField π’ͺ[k] β†’+* IsLocalRing.ResidueField π’ͺ[l] :=
    …
  6. instance WeierstrassCurve.(instance at line 257) line 257 source

    Source documentation

    Base change along a valuative extension preserves integrality, coefficientwise: each coefficient of E.baseChange l is algebraMap k l of the corresponding coefficient of E (map_a₁, …), which is integral over k (integralModel_a₁_eq, …, and elements of π’ͺ[k] have valuation k Β· ≀ 1), so stays integral over l by valuation_algebraMap_le_one; conclude with isIntegral_of_exists_lift. (No functoriality of map is needed.)

    instance [IsIntegral π’ͺ[k] E] : IsIntegral π’ͺ[l] (E.baseChange l) :=
    …
  7. theorem WeierstrassCurve.integralModel_baseChange_map The integral model of the base change is the base change of the integral model line 277 source

    Source documentation

    The integral model of the base change is the base change of the integral model. Both sides are lifts of E.baseChange l along the injective map π’ͺ[l] β†’ l (injectivity from IsFractionRing), and lifts along an injective map are unique: compare coefficientwise via integralModel_a₁_eq on both sides and the commuting square algebraMap_integerMap. (Only the splitness clause of step 5 consumes this.)

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, Algebra, ValuativeExtension, WeierstrassCurve, WeierstrassCurve.IsIntegral, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, Eq, WeierstrassCurve.integralModel, WeierstrassCurve.baseChange, WeierstrassCurve.map, ValuativeExtension.integerMap

    Proof uses: WeierstrassCurve.map_injective, Algebra.algebraMap, IsFractionRing.injective, id, RingHom, RingHom.comp, RingHom.ext, ValuativeExtension.algebraMap_integerMap, Eq.mpr, congrArg, WeierstrassCurve.map_map, Eq.symm, WeierstrassCurve.baseChange_integralModel_eq

    39 instances, coercions and auxiliary constants left out.

    Tactic trace: 7 steps

    Open to load the checked before-and-after goal states.

    theorem integralModel_baseChange_map [IsIntegral π’ͺ[k] E] :
        integralModel π’ͺ[l] (E.baseChange l) =
          (integralModel π’ͺ[k] E).map (integerMap k l) := by
    …
  8. theorem WeierstrassCurve.valuation_cβ‚„_baseChange_eq_one The cβ‚„ of the base change has adic valuation 1 line 296 source

    Source documentation

    The cβ‚„ of the base change has adic valuation 1. Multiplicative reduction of E makes the canonical valuation |E.cβ‚„| = 1 (via adicValuation_eq_one_iff and integralModel_cβ‚„_eq, as in WeierstrassCurve.valuation_cβ‚„_eq_one); this transfers to l by valuation_algebraMap_eq_one, and converts back to the adic valuation over π’ͺ[l]. Shared by isMinimal_baseChange and multiplicative reduction of the base change.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, TopologicalSpace, IsNonarchimedeanLocalField, Algebra, ValuativeExtension, WeierstrassCurve, WeierstrassCurve.HasMultiplicativeReduction, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, Eq, WithZero, Multiplicative, Int, Valuation, IsDedekindDomain.HeightOneSpectrum.valuation and 4 more

    Proof uses: WeierstrassCurve.HasMultiplicativeReduction.multiplicativeReduction, Eq.mpr, RingHom, Algebra.algebraMap, WeierstrassCurve.integralModel, id, congrArg, Eq.symm, WeierstrassCurve.integralModel_cβ‚„_eq, Iff.mp, ValuativeRel.adicValuation_eq_one_iff, Eq.mp, WeierstrassCurve.map_cβ‚„, ValuativeExtension.valuation_algebraMap_eq_one, Iff.mpr

    96 instances, coercions and auxiliary constants left out.

    Tactic trace: 9 steps

    Open to load the checked before-and-after goal states.

    theorem valuation_cβ‚„_baseChange_eq_one [HasMultiplicativeReduction π’ͺ[k] E] :
        (IsDiscreteValuationRing.maximalIdeal π’ͺ[l]).valuation l (E.baseChange l).cβ‚„ = 1 := by
    …
  9. theorem WeierstrassCurve.valuation_Ξ”_baseChange_lt_one The discriminant of the base change has adic valuation < 1 line 312 source

    Source documentation

    The discriminant of the base change has adic valuation < 1. Multiplicative reduction of E makes |E.Ξ”| < 1 (via adicValuation_lt_one_iff and integralModel_Ξ”_eq, as in WeierstrassCurve.valuation_Ξ”_lt_one); this transfers to l by valuation_algebraMap_lt_one, and converts back to the adic valuation over π’ͺ[l].

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, TopologicalSpace, IsNonarchimedeanLocalField, Algebra, ValuativeExtension, WeierstrassCurve, WeierstrassCurve.HasMultiplicativeReduction, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, LT.lt, WithZero, Multiplicative, Int, Valuation, IsDedekindDomain.HeightOneSpectrum.valuation and 4 more

    Proof uses: WeierstrassCurve.HasMultiplicativeReduction.badReduction, Eq.mpr, RingHom, Algebra.algebraMap, WeierstrassCurve.integralModel, id, Eq, congrArg, Eq.symm, WeierstrassCurve.integralModel_Ξ”_eq, Iff.mp, ValuativeRel.adicValuation_lt_one_iff, Eq.mp, WeierstrassCurve.map_Ξ”, ValuativeExtension.valuation_algebraMap_lt_one, Iff.mpr

    105 instances, coercions and auxiliary constants left out.

    Tactic trace: 9 steps

    Open to load the checked before-and-after goal states.

    theorem valuation_Ξ”_baseChange_lt_one [HasMultiplicativeReduction π’ͺ[k] E] :
        (IsDiscreteValuationRing.maximalIdeal π’ͺ[l]).valuation l (E.baseChange l).Ξ” < 1 := by
    …
  10. theorem WeierstrassCurve.isMinimal_baseChange Documented declaration: isMinimal_baseChange line 334 source

    Source documentation

    Base change along a valuative extension preserves minimality in the presence of multiplicative reduction (minimality alone is not preserved: yΒ² = xΒ³ + p is minimal over β„š_p but not over β„š_p(p^{1/6})): multiplicative reduction makes |cβ‚„| = 1 (valuation_cβ‚„_baseChange_eq_one), and unit cβ‚„ forces minimality (isMinimal_of_valuation_cβ‚„_eq_one).

    A theorem rather than an instance: the HasMultiplicativeReduction instance below yields IsMinimal π’ͺ[l] (E.baseChange l) again by class-parent projection, and a second instance path to it would overlap (cf. the overlappingInstances linter and mathlib#41391).

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, TopologicalSpace, IsNonarchimedeanLocalField, Algebra, ValuativeExtension, WeierstrassCurve, WeierstrassCurve.HasMultiplicativeReduction, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, WeierstrassCurve.IsMinimal, WeierstrassCurve.baseChange

    Proof uses: WeierstrassCurve.isMinimal_of_valuation_cβ‚„_eq_one, WeierstrassCurve.valuation_cβ‚„_baseChange_eq_one

    37 instances, coercions and auxiliary constants left out.

    theorem isMinimal_baseChange [HasMultiplicativeReduction π’ͺ[k] E] :
        IsMinimal π’ͺ[l] (E.baseChange l) :=
    …
  11. theorem WeierstrassCurve.hasMultiplicativeReduction_baseChange Documented declaration: hasMultiplicativeReduction_baseChange line 347 source

    Source documentation

    Base change along a valuative extension preserves multiplicative reduction (Silverman AEC, VII.5.4(b); true for arbitrary extensions of local fields β€” contrast good reduction, which needs unramifiedness): minimality is isMinimal_baseChange, and the badReduction/multiplicativeReduction fields are valuation_Ξ”_baseChange_lt_one and valuation_cβ‚„_baseChange_eq_one.

    Stated as a theorem rather than an instance so that the consuming instance lives in FLT.KnownIn1980s.EllipticCurves.TateCurve; use it there via WeierstrassCurve.hasMultiplicativeReduction_baseChange.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, TopologicalSpace, IsNonarchimedeanLocalField, Algebra, ValuativeExtension, WeierstrassCurve, WeierstrassCurve.HasMultiplicativeReduction, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, WeierstrassCurve.baseChange

    Proof uses: WeierstrassCurve.IsMinimal, WeierstrassCurve.isMinimal_baseChange, WeierstrassCurve.HasMultiplicativeReduction.mk, WeierstrassCurve.valuation_Ξ”_baseChange_lt_one, WeierstrassCurve.valuation_cβ‚„_baseChange_eq_one

    34 instances, coercions and auxiliary constants left out.

    theorem hasMultiplicativeReduction_baseChange [HasMultiplicativeReduction π’ͺ[k] E] :
        HasMultiplicativeReduction π’ͺ[l] (E.baseChange l) where
    …
  12. theorem WeierstrassCurve.hasSplitMultiplicativeReduction_baseChange Base change along a valuative extension preserves split multiplicative reduction: the residue field only grows, and a split quadratic stays split under any ring map line 368 source

    Source documentation

    Base change along a valuative extension preserves split multiplicative reduction: the residue field only grows, and a split quadratic stays split under any ring map.

    Proof: multiplicative reduction is hasMultiplicativeReduction_baseChange. For splitness, by integralModel_baseChange_map the integral model over π’ͺ[l] is integerMap of the one over π’ͺ[k], so the node polynomial transfers as map_nodePoly. The residue square residue π’ͺ[l] ∘ integerMap = residueMap ∘ residue π’ͺ[k] (IsLocalRing.ResidueField.map_residue) and Polynomial.map_map identify the reduced quadratic over 𝓀[l] with the residueMap-image of the reduced quadratic over 𝓀[k], which splits by hypothesis; conclude with Polynomial.Splits.map. This is the only place integerMap, residueMap and integralModel_baseChange_map are used.

    Stated as a theorem rather than an instance so that the consuming instance lives in FLT.KnownIn1980s.EllipticCurves.TateCurve; use it there via WeierstrassCurve.hasSplitMultiplicativeReduction_baseChange.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, ValuativeRel, TopologicalSpace, IsNonarchimedeanLocalField, Algebra, ValuativeExtension, WeierstrassCurve, WeierstrassCurve.HasSplitMultiplicativeReduction, Subtype, Membership.mem, Subring, Valuation.integer, ValuativeRel.ValueGroupWithZero, ValuativeRel.valuation, WeierstrassCurve.baseChange

    Proof uses: WeierstrassCurve.HasMultiplicativeReduction, WeierstrassCurve.hasMultiplicativeReduction_baseChange, WeierstrassCurve.HasSplitMultiplicativeReduction.mk, Polynomial.Splits, IsLocalRing.ResidueField, Polynomial.map, Algebra.algebraMap, WeierstrassCurve.nodePoly, WeierstrassCurve.integralModel, WeierstrassCurve.HasSplitMultiplicativeReduction.splitMultiplicativeReduction, Eq, RingHom, RingHom.comp, IsLocalRing.residue, ValuativeExtension.integerMap, ValuativeExtension.residueMap, RingHom.ext, IsLocalRing.ResidueField.map_residue, id, HSub.hSub and 23 more

    77 instances, coercions and auxiliary constants left out.

    Tactic trace: 5 steps

    Open to load the checked before-and-after goal states.

    theorem hasSplitMultiplicativeReduction_baseChange [HasSplitMultiplicativeReduction π’ͺ[k] E] :
        HasSplitMultiplicativeReduction π’ͺ[l] (E.baseChange l) where
    …