Naïve-height descent for rational elliptic curves #
This file is a narrow port of the height part of Michael Stoll's
EllipticCurves/MordellWeil.lean, commit
3f8c39c0fc4c0fd0a40e693aa2a9bbda08d9ee1f.
It proves the approximate parallelogram law for the naïve logarithmic
height on affine Weierstrass points. Combined with Northcott and finite
index of the doubling map, this gives finite generation by
AddCommGroup.fg_of_descent'.
The much larger weak Mordell--Weil and Selmer-group layers are deliberately not imported: callers may establish finite index of doubling by a curve-specific descent.
theorem
WeierstrassCurve.Affine.addX_self_of_Y_ne
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[DecidableEq F]
{x y : F}
(h : W.toAffine.Equation x y)
(hn : y ≠ W.toAffine.negY x y)
:
theorem
WeierstrassCurve.Affine.Point.xRep_add_self_of_Y_ne
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[DecidableEq F]
{x y : F}
(h : W.toAffine.Nonsingular x y)
(hn : y ≠ W.toAffine.negY x y)
:
theorem
WeierstrassCurve.Affine.Point.xRep_add_self_of_Y_eq
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[DecidableEq F]
{x y : F}
(h : W.toAffine.Nonsingular x y)
(hn : y = W.toAffine.negY x y)
:
theorem
WeierstrassCurve.Affine.Point.xRep_add_of_X_ne
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[DecidableEq F]
{xP yP xQ yQ : F}
(hP : W.toAffine.Nonsingular xP yP)
(hQ : W.toAffine.Nonsingular xQ yQ)
(hn : xP ≠ xQ)
:
theorem
WeierstrassCurve.Affine.Point.xRep_sub_of_X_ne
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[DecidableEq F]
{xP yP xQ yQ : F}
(hP : W.toAffine.Nonsingular xP yP)
(hQ : W.toAffine.Nonsingular xQ yQ)
(hn : xP ≠ xQ)
:
theorem
WeierstrassCurve.Affine.Point.sym2x_add_sub_eq_addSubMap_sym2x
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[DecidableEq F]
(P Q : W.toAffine.Point)
:
noncomputable def
WeierstrassCurve.Affine.Point.naiveHeight
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[Height.AdmissibleAbsValues F]
(P : W.toAffine.Point)
:
The logarithmic projective height of an affine point's x-coordinates.
Equations
Instances For
theorem
WeierstrassCurve.Affine.Point.naiveHeight_eq_logHeight
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[Height.AdmissibleAbsValues F]
(P : W.toAffine.Point)
:
theorem
WeierstrassCurve.Affine.Point.naiveHeight_eq_logHeight₁
{F : Type u_2}
[Field F]
{W : WeierstrassCurve F}
[Height.AdmissibleAbsValues F]
{P : W.toAffine.Point}
:
theorem
WeierstrassCurve.Affine.abs_logHeight_sym2x_sub_le
{F : Type u_2}
[Field F]
(W : WeierstrassCurve F)
[Height.AdmissibleAbsValues F]
:
∃ (C : ℝ), ∀ (P Q : W.toAffine.Point), |Height.logHeight (P.sym2x Q) - (P.naiveHeight + Q.naiveHeight)| ≤ C
theorem
WeierstrassCurve.Affine.approx_parallelogram_law
{F : Type u_2}
[Field F]
(W : WeierstrassCurve F)
[Height.AdmissibleAbsValues F]
[WeierstrassCurve.IsElliptic W.toAffine]
[DecidableEq F]
:
∃ (C : ℝ),
∀ (P Q : W.toAffine.Point), |(P + Q).naiveHeight + (P - Q).naiveHeight - 2 * (P.naiveHeight + Q.naiveHeight)| ≤ C
theorem
WeierstrassCurve.Affine.fg_point_of_finiteIndex_two
{F : Type u_2}
[Field F]
(W : WeierstrassCurve F)
[Height.AdmissibleAbsValues F]
[WeierstrassCurve.IsElliptic W.toAffine]
[Northcott Height.logHeight₁]
[DecidableEq F]
(hindex : (nsmulAddMonoidHom 2).range.FiniteIndex)
: