Documentation

LeanPool.FLTEichlerShimura.Definitions.Def_WeierstrassCurve_TorsionIntegral

Valuation estimates for Weierstrass points with non-integral coordinates #

Definition: WeierstrassCurve_TorsionIntegral (85e72084-5eb9-57ab-91cc-e3a8d633f02a), by Claude, 2026-09-05.

The module works with a field $L$, a valuation subring $A \subseteq L$ and a Weierstrass curve $W$ over $A$, whose base change along the inclusion $A \hookrightarrow L$ is the curve $W.map A.subtype$ over $L$ and whose reduction is $W.map (residue A)$ over the residue field. Two kinds of statements are proved. First, arithmetic of $A$ and its set of nonunits $A.nonunits$ (the elements of valuation $<1$): the sum of a non-element and an element, the product of two non-elements, and a quotient $a/b$ with $a \notin A.nonunits$ and $b \ne 0$ a nonunit all lie outside $A$ (add_notMem, mul_notMem, div_notMem); membership in $A.nonunits$ of an element of $A$ is equivalent to vanishing of its residue, and for a natural number $n$ to $(n : \mathrm{ResidueField}\,A) = 0$; inverses of nonunits of $A$, of non-elements and of units are located (inv_mem_of_notMem_nonunits, inv_mem_nonunits_of_notMem, mul_notMem_nonunits, one_add_notMem_nonunits).

Second, estimates for affine points. For an affine point $(x,y)$ with $x \in A$ and $\Delta$ of the reduced curve nonzero, if $y - \mathrm{negY}(x,y)$ is a nonunit then the partial derivative $3x^2 + 2a_2x + a_4 - a_1y$ is a unit; consequently, for two points $(x_1,y_1)$, $(x_2,y_2)$ with $x_1, x_2 \in A$ such that $x_1 - x_2$ and $y_1 - \mathrm{negY}(x_2,y_2)$ are nonunits while $(x_1,y_1) \ne (x_2,\mathrm{negY}(x_2,y_2))$, the slope and the resulting $\mathrm{addX}$ lie outside $A$ (slope_notMem_of_sub_mem_nonunits, addX_notMem_of_sub_mem_nonunits). For $x \notin A$ one gets $y \neq 0$, $y \notin A$, $x/y \in A.nonunits$ and $x^3/y^2$ a unit of $A$; the formal parameter $t = -x/y$ satisfies $t(-P) \equiv -t(P)$ and, via Vieta relations for $\mathrm{addX}$ and explicit secant and tangent identities, $t(P \oplus Q) - t(P) - t(Q)$ lies in $\tau\cdot A.nonunits$ whenever $t(P), t(Q) \in \tau A$ for a nonunit $\tau \neq 0$ (add_formal_param_estimate). Iterating, formal_param_nsmul shows for each $j$ that $j \cdot P = 0$ forces $(j : L)$ to be a nonunit, and that $j \cdot P = P'$ forces $x' \notin A$ and $t(P')/t(P) \equiv j$. Hence X_mem_of_nsmul_eq_zero': if $n$ is invertible in the residue field and $P = (x,y)$ satisfies $n \cdot P = 0$, then $x \in A$. Finally, some_eq_of_mem_inertia_of_nsmul_eq_zero' and fixed_of_mem_inertia_of_nsmul_eq_zero state that an element $\sigma$ of the decomposition group of $A$ over a base field $K$ lying in the inertia subgroup fixes such an $n$-torsion point when the reduced discriminant is nonzero and $(\sigma x, \sigma y)$ is again $n$-torsion: $\sigma x = x$ and $\sigma y = y$.

Relation to Mathlib. Mathlib supplies Weierstrass curves, their affine points with the chord–tangent group law, slope, addX, addY, negY, valuation subrings with their nonunits and residue field, and decomposition and inertia subgroups; the valuation estimates for points with non-integral coordinates, the formal-parameter congruences and the integrality of prime-to-residue-characteristic torsion proved here are the project's own.

Where it is used. These estimates support the reduction map on points of a Weierstrass curve over a valuation subring: integrality of $n$-torsion when $n$ is invertible in the residue field, and the resulting triviality of the inertia action on such torsion, are what makes the mod-$p$ Galois representation attached to the Frey curve unramified away from the relevant primes.

<!-- Generated by add_prove2me_provenance.py -->

theorem ValuationSubring.add_notMem {L : Type u_1} [Field L] (A : ValuationSubring L) {x a : L} (hx : x ∉ A) (ha : a ∈ A) :
x + a ∉ A
theorem ValuationSubring.mul_notMem {L : Type u_1} [Field L] (A : ValuationSubring L) {x y : L} (hx : x ∉ A) (hy : y ∉ A) :
x * y ∉ A
theorem ValuationSubring.div_notMem {L : Type u_1} [Field L] (A : ValuationSubring L) {a b : L} (ha' : a ∉ A.nonunits) (hb : b ∈ A.nonunits) (hb0 : b ≠ 0) :
a / b ∉ A
theorem WeierstrassCurve.Affine.sub_mul_sub_negY {R : Type u_1} [CommRing R] {V : Affine R} {x₁ x₂ y₁ y₂ : R} (h₁ : V.Equation x₁ y₁) (h₂ : V.Equation x₂ y₂) :
(y₁ - y₂) * (y₁ - V.negY x₂ y₂) = (x₁ - x₂) * (x₁ ^ 2 + x₁ * x₂ + x₂ ^ 2 + V.a₂ * (x₁ + x₂) + V.a₄ - V.a₁ * y₁)
theorem WeierstrassCurve.Affine.notMem_nonunits_of_sub_negY_mem_nonunits {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) (hΔ : (W.map (IsLocalRing.residue ↥A)).Δ ≠ 0) {x y : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∈ A) (hY : y - (W.map A.subtype).toAffine.negY x y ∈ A.nonunits) :
3 * x ^ 2 + 2 * (W.map A.subtype).toAffine.a₂ * x + (W.map A.subtype).toAffine.a₄ - (W.map A.subtype).toAffine.a₁ * y ∉ A.nonunits
theorem WeierstrassCurve.Affine.slope_notMem_of_sub_mem_nonunits {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) [DecidableEq L] (hΔ : (W.map (IsLocalRing.residue ↥A)).Δ ≠ 0) {x₁ x₂ y₁ y₂ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) (h₂ : (W.map A.subtype).toAffine.Equation x₂ y₂) (hx₁ : x₁ ∈ A) (hx₂ : x₂ ∈ A) (hPQ : ¬(x₁ = x₂ ∧ y₁ = (W.map A.subtype).toAffine.negY x₂ y₂)) (hxx : x₁ - x₂ ∈ A.nonunits) (hyy : y₁ - (W.map A.subtype).toAffine.negY x₂ y₂ ∈ A.nonunits) :
(W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ ∉ A
theorem WeierstrassCurve.Affine.addX_notMem_of_sub_mem_nonunits {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) [DecidableEq L] (hΔ : (W.map (IsLocalRing.residue ↥A)).Δ ≠ 0) {x₁ x₂ y₁ y₂ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) (h₂ : (W.map A.subtype).toAffine.Equation x₂ y₂) (hx₁ : x₁ ∈ A) (hx₂ : x₂ ∈ A) (hPQ : ¬(x₁ = x₂ ∧ y₁ = (W.map A.subtype).toAffine.negY x₂ y₂)) (hxx : x₁ - x₂ ∈ A.nonunits) (hyy : y₁ - (W.map A.subtype).toAffine.negY x₂ y₂ ∈ A.nonunits) :
(W.map A.subtype).toAffine.addX x₁ x₂ ((W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂) ∉ A
theorem ValuationSubring.ne_zero_of_notMem_nonunits {L : Type u_1} [Field L] (A : ValuationSubring L) {a : L} (ha : a ∉ A.nonunits) :
a ≠ 0
theorem ValuationSubring.inv_mem_of_notMem_nonunits {L : Type u_1} [Field L] (A : ValuationSubring L) {a : L} (ha : a ∉ A.nonunits) :
theorem ValuationSubring.inv_mem_nonunits_of_notMem {L : Type u_1} [Field L] (A : ValuationSubring L) {a : L} (ha : a ∉ A) :
theorem ValuationSubring.inv_mem_of_notMem {L : Type u_1} [Field L] (A : ValuationSubring L) {a : L} (ha : a ∉ A) :
theorem ValuationSubring.add_notMem_nonunits {L : Type u_1} [Field L] (A : ValuationSubring L) {a b : L} (ha : a ∉ A.nonunits) (hb : b ∈ A.nonunits) :
a + b ∉ A.nonunits
theorem ValuationSubring.mul_notMem_nonunits {L : Type u_1} [Field L] (A : ValuationSubring L) {a b : L} (ha : a ∉ A.nonunits) (hb : b ∉ A.nonunits) :
a * b ∉ A.nonunits
theorem ValuationSubring.inv_notMem_nonunits_of_notMem_nonunits {L : Type u_1} [Field L] (A : ValuationSubring L) {a : L} (ha : a ∈ A) (ha' : a ∉ A.nonunits) :
theorem ValuationSubring.one_add_notMem_nonunits {L : Type u_1} [Field L] (A : ValuationSubring L) {a : L} (ha : a ∈ A.nonunits) :
1 + a ∉ A.nonunits
theorem WeierstrassCurve.Affine.rhs_eq_cubic_mul {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) {x : L} (hx : x ∉ A) :
theorem WeierstrassCurve.Affine.Y_ne_zero_of_X_notMem {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) {x y : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∉ A) :
y ≠ 0
theorem WeierstrassCurve.Affine.X_div_Y_mem_nonunits {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) {x y : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∉ A) :
x / y ∈ A.nonunits
theorem WeierstrassCurve.Affine.Y_notMem_of_X_notMem {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) {x y : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∉ A) :
y ∉ A
theorem WeierstrassCurve.Affine.X_cubed_div_Y_sq_notMem_nonunits {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) {x y : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∉ A) :
x ^ 3 / y ^ 2 ∈ A ∧ x ^ 3 / y ^ 2 ∉ A.nonunits
theorem WeierstrassCurve.Affine.inv_Y_div_mem_nonunits {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x y τ : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∉ A) (ht : x / y / τ ∈ A) :
1 / y / τ ∈ A.nonunits
theorem WeierstrassCurve.Affine.inv_X_mul_div_mem_nonunits {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x y τ : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∉ A) (hτ0 : τ ≠ 0) (ht : x / y / τ ∈ A) :
theorem WeierstrassCurve.Affine.neg_formal_param_add {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x y : L} (hy0 : y ≠ 0) (hy'0 : (W.map A.subtype).toAffine.negY x y ≠ 0) :
-(x / y) + -(x / (W.map A.subtype).toAffine.negY x y) = (W.map A.subtype).toAffine.a₁ * (x / y) * (x / (W.map A.subtype).toAffine.negY x y) + (W.map A.subtype).toAffine.a₃ * (x / y) * (1 / (W.map A.subtype).toAffine.negY x y)
theorem WeierstrassCurve.Affine.neg_formal_param_estimate {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x y τ : L} (h : (W.map A.subtype).toAffine.Equation x y) (hx : x ∉ A) (ht : x / y / τ ∈ A) :
(-(x / y) + -(x / (W.map A.subtype).toAffine.negY x y)) / τ ∈ A.nonunits
theorem WeierstrassCurve.Affine.sub_eq_slope_mul_sub {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} [DecidableEq L] {x₁ y₁ x₂ y₂ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) (h₂ : (W.map A.subtype).toAffine.Equation x₂ y₂) (hxy : ¬(x₁ = x₂ ∧ y₁ = (W.map A.subtype).toAffine.negY x₂ y₂)) :
y₁ - y₂ = (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ * (x₁ - x₂)
theorem WeierstrassCurve.Affine.vieta_addX {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} [DecidableEq L] {x₁ y₁ x₂ y₂ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) (h₂ : (W.map A.subtype).toAffine.Equation x₂ y₂) (hxy : ¬(x₁ = x₂ ∧ y₁ = (W.map A.subtype).toAffine.negY x₂ y₂)) :
x₁ * x₂ + x₁ * (W.map A.subtype).toAffine.addX x₁ x₂ ((W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂) + x₂ * (W.map A.subtype).toAffine.addX x₁ x₂ ((W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂) = 2 * x₁ * (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ ^ 2 + ((W.map A.subtype).toAffine.a₁ * x₁ - 2 * y₁ - (W.map A.subtype).toAffine.a₃) * (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ + (-(W.map A.subtype).toAffine.a₁ * y₁ + (W.map A.subtype).toAffine.a₄) ∧ x₁ * x₂ * (W.map A.subtype).toAffine.addX x₁ x₂ ((W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂) = x₁ ^ 2 * (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ ^ 2 - (2 * x₁ * y₁ + (W.map A.subtype).toAffine.a₃ * x₁) * (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ + (y₁ ^ 2 + (W.map A.subtype).toAffine.a₃ * y₁ - (W.map A.subtype).toAffine.a₆)
theorem WeierstrassCurve.Affine.secant_slope_identity {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x₁ y₁ x₂ y₂ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) (h₂ : (W.map A.subtype).toAffine.Equation x₂ y₂) :
(y₁ - y₂) * (y₁ ^ 2 * y₂ ^ 2 + (W.map A.subtype).toAffine.a₁ * x₁ * y₁ * y₂ ^ 2 - (W.map A.subtype).toAffine.a₂ * x₁ ^ 2 * y₂ ^ 2 + (W.map A.subtype).toAffine.a₃ * (y₁ * y₂ ^ 2 + y₁ ^ 2 * y₂) - (W.map A.subtype).toAffine.a₄ * x₁ * (y₂ ^ 2 + y₁ * y₂) - (W.map A.subtype).toAffine.a₆ * (y₂ ^ 2 + y₁ * y₂ + y₁ ^ 2)) = (x₂ * y₁ - x₁ * y₂) * (-(W.map A.subtype).toAffine.a₁ * y₁ ^ 2 * y₂ + (W.map A.subtype).toAffine.a₂ * x₁ * y₁ * y₂ + (W.map A.subtype).toAffine.a₂ * x₂ * y₁ ^ 2 + (W.map A.subtype).toAffine.a₄ * y₁ ^ 2 + x₁ ^ 2 * y₂ ^ 2 + x₁ * x₂ * y₁ * y₂ + x₂ ^ 2 * y₁ ^ 2)
theorem WeierstrassCurve.Affine.tangent_slope_identity {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x₁ y₁ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) :
-(3 * x₁ ^ 2 + 2 * (W.map A.subtype).toAffine.a₂ * x₁ + (W.map A.subtype).toAffine.a₄ - (W.map A.subtype).toAffine.a₁ * y₁) * ((W.map A.subtype).toAffine.a₁ * x₁ * y₁ - (W.map A.subtype).toAffine.a₂ * x₁ ^ 2 + 2 * (W.map A.subtype).toAffine.a₃ * y₁ - 2 * (W.map A.subtype).toAffine.a₄ * x₁ - 3 * (W.map A.subtype).toAffine.a₆ + y₁ ^ 2) = (y₁ * (2 * y₁ + (W.map A.subtype).toAffine.a₁ * x₁ + (W.map A.subtype).toAffine.a₃) - x₁ * (3 * x₁ ^ 2 + 2 * (W.map A.subtype).toAffine.a₂ * x₁ + (W.map A.subtype).toAffine.a₄ - (W.map A.subtype).toAffine.a₁ * y₁)) * (3 * x₁ ^ 2 + 2 * (W.map A.subtype).toAffine.a₂ * x₁ + (W.map A.subtype).toAffine.a₄ - (W.map A.subtype).toAffine.a₁ * y₁)
theorem WeierstrassCurve.Affine.tangent_intercept_identity {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x₁ y₁ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) :
y₁ * (2 * y₁ + (W.map A.subtype).toAffine.a₁ * x₁ + (W.map A.subtype).toAffine.a₃) - x₁ * (3 * x₁ ^ 2 + 2 * (W.map A.subtype).toAffine.a₂ * x₁ + (W.map A.subtype).toAffine.a₄ - (W.map A.subtype).toAffine.a₁ * y₁) = -(x₁ ^ 3 - (W.map A.subtype).toAffine.a₄ * x₁ - 2 * (W.map A.subtype).toAffine.a₆ + (W.map A.subtype).toAffine.a₃ * y₁)
theorem WeierstrassCurve.Affine.slope_div_intercept_estimate {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} [DecidableEq L] {x₁ y₁ x₂ y₂ τ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) (h₂ : (W.map A.subtype).toAffine.Equation x₂ y₂) (hx₁ : x₁ ∉ A) (hx₂ : x₂ ∉ A) (hxy : ¬(x₁ = x₂ ∧ y₁ = (W.map A.subtype).toAffine.negY x₂ y₂)) (hτ : τ ∈ A.nonunits) (hτ0 : τ ≠ 0) (ht₁ : x₁ / y₁ / τ ∈ A) (ht₂ : x₂ / y₂ / τ ∈ A) :
y₁ - (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ * x₁ ≠ 0 ∧ (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ / (y₁ - (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ * x₁) / τ ∈ A.nonunits ∧ 1 / (y₁ - (W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂ * x₁) / τ ∈ A.nonunits
theorem WeierstrassCurve.Affine.collinear_prod_sum {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} {x₁ y₁ x₂ y₂ x₃ y₃ ℓ ν : L} (he₁ : x₁ + x₂ + x₃ = ℓ ^ 2 + (W.map A.subtype).toAffine.a₁ * ℓ - (W.map A.subtype).toAffine.a₂) (he₂ : x₁ * x₂ + x₁ * x₃ + x₂ * x₃ = 2 * x₁ * ℓ ^ 2 + ((W.map A.subtype).toAffine.a₁ * x₁ - 2 * y₁ - (W.map A.subtype).toAffine.a₃) * ℓ + (-(W.map A.subtype).toAffine.a₁ * y₁ + (W.map A.subtype).toAffine.a₄)) (he₃ : x₁ * x₂ * x₃ = x₁ ^ 2 * ℓ ^ 2 - (2 * x₁ * y₁ + (W.map A.subtype).toAffine.a₃ * x₁) * ℓ + (y₁ ^ 2 + (W.map A.subtype).toAffine.a₃ * y₁ - (W.map A.subtype).toAffine.a₆)) (hν : ν = y₁ - ℓ * x₁) (hy₂ : y₂ = ℓ * x₂ + ν) (hy₃ : y₃ = ℓ * x₃ + ν) :
y₁ * y₂ * y₃ = ν ^ 3 - (W.map A.subtype).toAffine.a₂ * ℓ * ν ^ 2 + (W.map A.subtype).toAffine.a₄ * ℓ ^ 2 * ν - (W.map A.subtype).toAffine.a₆ * ℓ ^ 3 ∧ x₁ * y₂ * y₃ + x₂ * y₁ * y₃ + x₃ * y₁ * y₂ = -((W.map A.subtype).toAffine.a₁ * ℓ * ν ^ 2) - (W.map A.subtype).toAffine.a₂ * ν ^ 2 + (W.map A.subtype).toAffine.a₃ * ℓ ^ 2 * ν + ((W.map A.subtype).toAffine.a₄ + (W.map A.subtype).toAffine.a₄) * ℓ * ν - ((W.map A.subtype).toAffine.a₆ + (W.map A.subtype).toAffine.a₆ + (W.map A.subtype).toAffine.a₆) * ℓ ^ 2
theorem WeierstrassCurve.Affine.add_formal_param_estimate {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} [DecidableEq L] {x₁ y₁ x₂ y₂ τ : L} (h₁ : (W.map A.subtype).toAffine.Equation x₁ y₁) (h₂ : (W.map A.subtype).toAffine.Equation x₂ y₂) (hx₁ : x₁ ∉ A) (hx₂ : x₂ ∉ A) (hxy : ¬(x₁ = x₂ ∧ y₁ = (W.map A.subtype).toAffine.negY x₂ y₂)) (hτ : τ ∈ A.nonunits) (hτ0 : τ ≠ 0) (ht₁ : x₁ / y₁ / τ ∈ A) (ht₂ : x₂ / y₂ / τ ∈ A) :
(W.map A.subtype).toAffine.addX x₁ x₂ ((W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂) ∉ A ∧ (-((W.map A.subtype).toAffine.addX x₁ x₂ ((W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂) / (W.map A.subtype).toAffine.addY x₁ x₂ y₁ ((W.map A.subtype).toAffine.slope x₁ x₂ y₁ y₂)) - -(x₁ / y₁) - -(x₂ / y₂)) / τ ∈ A.nonunits
theorem WeierstrassCurve.Affine.formal_param_nsmul {L : Type u_1} [Field L] {A : ValuationSubring L} {W : WeierstrassCurve ↥A} [DecidableEq L] {x y : L} (h : (W.map A.subtype).toAffine.Nonsingular x y) (hx : x ∉ A) (j : ℕ) :
(j • Point.some x y h = 0 → ↑j ∈ A.nonunits) ∧ ∀ (x' y' : L) (h' : (W.map A.subtype).toAffine.Nonsingular x' y'), j • Point.some x y h = Point.some x' y' h' → x' ∉ A ∧ -(x' / y') / -(x / y) - ↑j ∈ A.nonunits
theorem WeierstrassCurve.X_mem_of_nsmul_eq_zero' {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) [DecidableEq L] {n : ℕ} (hn : ↑n ≠ 0) {x y : L} (h : (W.map A.subtype).toAffine.Nonsingular x y) (hP : n • Affine.Point.some x y h = 0) :
x ∈ A
theorem WeierstrassCurve.X_mem_of_nsmul_eq_zero'' {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) [DecidableEq L] {n : ℕ} (hn : ↑n ≠ 0) {x y : L} (h : (W.map A.subtype).toAffine.Nonsingular x y) (hP : n • Affine.Point.some x y h = 0) :
x ∈ A
theorem WeierstrassCurve.some_eq_of_mem_inertia_of_nsmul_eq_zero' {L : Type u_1} [Field L] {A : ValuationSubring L} (W : WeierstrassCurve ↥A) [DecidableEq L] (hΔ : (W.map (IsLocalRing.residue ↥A)).Δ ≠ 0) {K : Type u_2} [Field K] [Algebra K L] {σ : Gal(L/K)} (hσ : σ ∈ ValuationSubring.decompositionSubgroup K A) (hσI : ⟨σ, hσ⟩ ∈ ValuationSubring.inertiaSubgroup K A) {n : ℕ} (hn : ↑n ≠ 0) {x y : L} (h : (W.map A.subtype).toAffine.Nonsingular x y) (h' : (W.map A.subtype).toAffine.Nonsingular (σ x) (σ y)) (hP : n • Affine.Point.some x y h = 0) (hP' : n • Affine.Point.some (σ x) (σ y) h' = 0) :
Affine.Point.some (σ x) (σ y) h' = Affine.Point.some x y h
theorem WeierstrassCurve.fixed_of_mem_inertia_of_nsmul_eq_zero {L : Type u_1} [Field L] {A : ValuationSubring L} [DecidableEq L] {V : WeierstrassCurve L} (W : WeierstrassCurve ↥A) (hVW : W.map A.subtype = V) (hΔ : (W.map (IsLocalRing.residue ↥A)).Δ ≠ 0) {K : Type u_2} [Field K] [Algebra K L] {σ : Gal(L/K)} (hσ : σ ∈ ValuationSubring.decompositionSubgroup K A) (hσI : ⟨σ, hσ⟩ ∈ ValuationSubring.inertiaSubgroup K A) {n : ℕ} (hn : ↑n ≠ 0) {x y : L} (h : V.toAffine.Nonsingular x y) (h' : V.toAffine.Nonsingular (σ x) (σ y)) (hP : n • Affine.Point.some x y h = 0) (hP' : n • Affine.Point.some (σ x) (σ y) h' = 0) :
σ x = x ∧ σ y = y