Loogle!
Result
Found 86 declarations mentioning WeierstrassCurve.Projective.Equation.
- WeierstrassCurve.Projective.Equation š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] (W' : WeierstrassCurve.Projective R) (P : Fin 3 ā R) : Prop - WeierstrassCurve.Projective.equation_of_equiv š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P Q : Fin 3 ā R} (h : P ā Q) : W'.Equation P ā W'.Equation Q - WeierstrassCurve.Projective.equation_some š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} (a b : R) : W'.Equation ![a, b, 1] ā W'.toAffine.Equation a b - WeierstrassCurve.Projective.equation_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} : W'.Equation ![0, 1, 0] - WeierstrassCurve.Projective.equation_smul š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} (P : Fin 3 ā R) {u : R} (hu : IsUnit u) : W'.Equation (u ⢠P) ā W'.Equation P - WeierstrassCurve.Projective.Equation.map š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {S : Type s} [CommRing S] (f : R ā+* S) {P : Fin 3 ā R} (h : W'.Equation P) : (W'.map f).Equation (āf ā P) - WeierstrassCurve.Projective.X_eq_zero_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : P 0 = 0 - WeierstrassCurve.Projective.equation_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P : Fin 3 ā R} (hPz : P 2 = 0) : W'.Equation P ā P 0 ^ 3 = 0 - WeierstrassCurve.Projective.map_equation š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] (W' : WeierstrassCurve.Projective R) {S : Type s} [CommRing S] {f : R ā+* S} (hf : Function.Injective āf) (P : Fin 3 ā R) : (W'.map f).Equation (āf ā P) ā W'.Equation P - WeierstrassCurve.Projective.equation_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 ā F} (hPz : P 2 ā 0) : W.Equation P ā W.toAffine.Equation (P 0 / P 2) (P 1 / P 2) - WeierstrassCurve.Projective.Equation.baseChange š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {S : Type s} [CommRing S] {A : Type u} [CommRing A] {B : Type v} [CommRing B] [Algebra R S] [Algebra R A] [Algebra S A] [IsScalarTower R S A] [Algebra R B] [Algebra S B] [IsScalarTower R S B] (f : A āā[S] B) {P : Fin 3 ā A} (h : (W'.baseChange A).Equation P) : (W'.baseChange B).Equation (āf ā P) - WeierstrassCurve.Projective.baseChange_equation š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] (W' : WeierstrassCurve.Projective R) {S : Type s} [CommRing S] {A : Type u} [CommRing A] {B : Type v} [CommRing B] [Algebra R S] [Algebra R A] [Algebra S A] [IsScalarTower R S A] [Algebra R B] [Algebra S B] [IsScalarTower R S B] {f : A āā[S] B} (hf : Function.Injective āf) (P : Fin 3 ā A) : (W'.baseChange B).Equation (āf ā P) ā (W'.baseChange A).Equation P - WeierstrassCurve.Projective.nonsingular_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P : Fin 3 ā R} (hPz : P 2 = 0) : W'.Nonsingular P ā W'.Equation P ā§ (3 * P 0 ^ 2 ā 0 ⨠P 1 ^ 2 + W'.aā * P 0 * P 1 - W'.aā * P 0 ^ 2 ā 0) - WeierstrassCurve.Projective.nonsingular_iff_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 ā F} (hPz : P 2 ā 0) : W.Nonsingular P ā W.Equation P ā§ ((MvPolynomial.eval P) W.polynomialX ā 0 ⨠(MvPolynomial.eval P) W.polynomialY ā 0) - WeierstrassCurve.Projective.equation_iff š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} (P : Fin 3 ā R) : W'.Equation P ā P 1 ^ 2 * P 2 + W'.aā * P 0 * P 1 * P 2 + W'.aā * P 1 * P 2 ^ 2 - (P 0 ^ 3 + W'.aā * P 0 ^ 2 * P 2 + W'.aā * P 0 * P 2 ^ 2 + W'.aā * P 2 ^ 3) = 0 - WeierstrassCurve.Projective.nonsingular_iff š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Basic
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} (P : Fin 3 ā R) : W'.Nonsingular P ā W'.Equation P ā§ (W'.aā * P 1 * P 2 - (3 * P 0 ^ 2 + 2 * W'.aā * P 0 * P 2 + W'.aā * P 2 ^ 2) ā 0 ⨠2 * P 1 * P 2 + W'.aā * P 0 * P 2 + W'.aā * P 2 ^ 2 ā 0 ⨠P 1 ^ 2 + W'.aā * P 0 * P 1 + 2 * W'.aā * P 1 * P 2 - (W'.aā * P 0 ^ 2 + 2 * W'.aā * P 0 * P 2 + 3 * W'.aā * P 2 ^ 2) ā 0) - WeierstrassCurve.Projective.dblX_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.dblX P = 0 - WeierstrassCurve.Projective.negY_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.negY P = -P 1 - WeierstrassCurve.Projective.dblY_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.dblY P = P 1 ^ 4 - WeierstrassCurve.Projective.negDblY_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.negDblY P = -P 1 ^ 4 - WeierstrassCurve.Projective.isUnit_addZ_of_X_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hx : P 0 * Q 2 ā Q 0 * P 2) : IsUnit (W.addZ P Q) - WeierstrassCurve.Projective.addZ_ne_zero_of_X_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hx : P 0 * Q 2 ā Q 0 * P 2) : W'.addZ P Q ā 0 - WeierstrassCurve.Projective.negAddY_of_Z_eq_zero_left š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.negAddY P Q = P 1 ^ 2 * Q 2 * W'.negY Q - WeierstrassCurve.Projective.addX_of_Z_eq_zero_left š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.addX P Q = P 1 ^ 2 * Q 2 * Q 0 - WeierstrassCurve.Projective.addY_of_Z_eq_zero_left š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.addY P Q = P 1 ^ 2 * Q 2 * Q 1 - WeierstrassCurve.Projective.addZ_of_Z_eq_zero_left š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.addZ P Q = P 1 ^ 2 * Q 2 * Q 2 - WeierstrassCurve.Projective.negAddY_of_Z_eq_zero_right š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hQ : W'.Equation Q) (hQz : Q 2 = 0) : W'.negAddY P Q = -(Q 1 ^ 2 * P 2) * W'.negY P - WeierstrassCurve.Projective.addXYZ_of_Z_eq_zero_left š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.addXYZ P Q = (P 1 ^ 2 * Q 2) ⢠Q - WeierstrassCurve.Projective.addX_of_Z_eq_zero_right š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hQ : W'.Equation Q) (hQz : Q 2 = 0) : W'.addX P Q = -(Q 1 ^ 2 * P 2) * P 0 - WeierstrassCurve.Projective.addY_of_Z_eq_zero_right š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hQ : W'.Equation Q) (hQz : Q 2 = 0) : W'.addY P Q = -(Q 1 ^ 2 * P 2) * P 1 - WeierstrassCurve.Projective.addZ_of_Z_eq_zero_right š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hQ : W'.Equation Q) (hQz : Q 2 = 0) : W'.addZ P Q = -(Q 1 ^ 2 * P 2) * P 2 - WeierstrassCurve.Projective.addXYZ_of_Z_eq_zero_right š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hQ : W'.Equation Q) (hQz : Q 2 = 0) : W'.addXYZ P Q = -(Q 1 ^ 2 * P 2) ⢠P - WeierstrassCurve.Projective.addY_of_X_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) : W.addY P Q = WeierstrassCurve.Projective.addU P Q - WeierstrassCurve.Projective.dblXYZ_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.dblXYZ P = P 1 ^ 4 ⢠![0, 1, 0] - WeierstrassCurve.Projective.addX_of_X_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) : W'.addX P Q = 0 - WeierstrassCurve.Projective.addZ_of_X_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) : W'.addZ P Q = 0 - WeierstrassCurve.Projective.addZ_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) : W'.addZ P Q * (P 2 * Q 2) = (P 0 * Q 2 - Q 0 * P 2) ^ 3 - WeierstrassCurve.Projective.negAddY_of_X_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) : W.negAddY P Q = -WeierstrassCurve.Projective.addU P Q - WeierstrassCurve.Projective.nonsingular_iff_of_Y_eq_negY š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 ā F} (hPz : P 2 ā 0) (hy : P 1 = W.negY P) : W.Nonsingular P ā W.Equation P ā§ (MvPolynomial.eval P) W.polynomialX ā 0 - WeierstrassCurve.Projective.addZ_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) : W.addZ P Q = (P 0 * Q 2 - Q 0 * P 2) ^ 3 / (P 2 * Q 2) - WeierstrassCurve.Projective.isUnit_dblZ_of_Y_ne' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W.negY Q * P 2) : IsUnit (W.dblZ P) - WeierstrassCurve.Projective.dblZ_ne_zero_of_Y_ne' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W'.negY Q * P 2) : W'.dblZ P ā 0 - WeierstrassCurve.Projective.Y_ne_negY_of_Y_ne' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W'.negY Q * P 2) : P 1 ā W'.negY P - WeierstrassCurve.Projective.isUnit_dblZ_of_Y_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā Q 1 * P 2) : IsUnit (W.dblZ P) - WeierstrassCurve.Projective.dblZ_ne_zero_of_Y_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā Q 1 * P 2) : W'.dblZ P ā 0 - WeierstrassCurve.Projective.addXYZ_of_X_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) : W.addXYZ P Q = WeierstrassCurve.Projective.addU P Q ⢠![0, 1, 0] - WeierstrassCurve.Projective.Y_ne_negY_of_Y_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā Q 1 * P 2) : P 1 ā W'.negY P - WeierstrassCurve.Projective.Y_eq_of_Y_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā Q 1 * P 2) : P 1 * Q 2 = W'.negY Q * P 2 - WeierstrassCurve.Projective.Y_eq_of_Y_ne' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W'.negY Q * P 2) : P 1 * Q 2 = Q 1 * P 2 - WeierstrassCurve.Projective.dblY_of_Y_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 = Q 1 * P 2) (hy' : P 1 * Q 2 = W.negY Q * P 2) : W.dblY P = W.dblU P - WeierstrassCurve.Projective.dblX_of_Y_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 = Q 1 * P 2) (hy' : P 1 * Q 2 = W'.negY Q * P 2) : W'.dblX P = 0 - WeierstrassCurve.Projective.negAddY_of_X_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hx : P 0 * Q 2 = Q 0 * P 2) : W'.negAddY P Q * (P 2 * Q 2) ^ 2 = (P 1 * Q 2 - Q 1 * P 2) ^ 3 * (P 2 * Q 2) - WeierstrassCurve.Projective.negDblY_of_Y_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 = Q 1 * P 2) (hy' : P 1 * Q 2 = W.negY Q * P 2) : W.negDblY P = -W.dblU P - WeierstrassCurve.Projective.Y_sub_Y_mul_Y_sub_negY š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hx : P 0 * Q 2 = Q 0 * P 2) : P 2 * Q 2 * (P 1 * Q 2 - Q 1 * P 2) * (P 1 * Q 2 - W'.negY Q * P 2) = 0 - WeierstrassCurve.Projective.dblXYZ_of_Y_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 = Q 1 * P 2) (hy' : P 1 * Q 2 = W.negY Q * P 2) : W.dblXYZ P = W.dblU P ⢠![0, 1, 0] - WeierstrassCurve.Projective.addY_of_X_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) : W'.addY P Q * (P 2 * Q 2) ^ 3 = -(P 1 * Q 2 - Q 1 * P 2) ^ 3 * (P 2 * Q 2) ^ 2 - WeierstrassCurve.Projective.addX_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 ā Q 0 * P 2) : W.addX P Q / W.addZ P Q = W.toAffine.addX (P 0 / P 2) (Q 0 / Q 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)) - WeierstrassCurve.Projective.negDblY_of_Y_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 = Q 1 * P 2) (hy' : P 1 * Q 2 = W'.negY Q * P 2) : W'.negDblY P * P 2 ^ 2 = -(MvPolynomial.eval P) W'.polynomialX ^ 3 - WeierstrassCurve.Projective.addY_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 ā Q 0 * P 2) : W.addY P Q / W.addZ P Q = W.toAffine.addY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)) - WeierstrassCurve.Projective.negAddY_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 ā Q 0 * P 2) : W.negAddY P Q / W.addZ P Q = W.toAffine.negAddY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)) - WeierstrassCurve.Projective.dblY_of_Y_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 = Q 1 * P 2) (hy' : P 1 * Q 2 = W'.negY Q * P 2) : W'.dblY P * P 2 ^ 2 = (MvPolynomial.eval P) W'.polynomialX ^ 3 - WeierstrassCurve.Projective.dblX_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W.negY Q * P 2) : W.dblX P / W.dblZ P = W.toAffine.addX (P 0 / P 2) (Q 0 / Q 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)) - WeierstrassCurve.Projective.dblY_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W.negY Q * P 2) : W.dblY P / W.dblZ P = W.toAffine.addY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)) - WeierstrassCurve.Projective.negDblY_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W.negY Q * P 2) : W.negDblY P / W.dblZ P = W.toAffine.negAddY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)) - WeierstrassCurve.Projective.dblX_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P : Fin 3 ā R} (hP : W'.Equation P) : W'.dblX P * P 2 = ((MvPolynomial.eval P) W'.polynomialX ^ 2 - W'.aā * (MvPolynomial.eval P) W'.polynomialX * P 2 * (P 1 - W'.negY P) - W'.aā * P 2 ^ 2 * (P 1 - W'.negY P) ^ 2 - 2 * P 0 * P 2 * (P 1 - W'.negY P) ^ 2) * (P 1 - W'.negY P) - WeierstrassCurve.Projective.dblX_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 ā F} (hP : W.Equation P) (hPz : P 2 ā 0) : W.dblX P = ((MvPolynomial.eval P) W.polynomialX ^ 2 - W.aā * (MvPolynomial.eval P) W.polynomialX * P 2 * (P 1 - W.negY P) - W.aā * P 2 ^ 2 * (P 1 - W.negY P) ^ 2 - 2 * P 0 * P 2 * (P 1 - W.negY P) ^ 2) * (P 1 - W.negY P) / P 2 - WeierstrassCurve.Projective.addXYZ_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 ā Q 0 * P 2) : W.addXYZ P Q = W.addZ P Q ⢠![W.toAffine.addX (P 0 / P 2) (Q 0 / Q 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), W.toAffine.addY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), 1] - WeierstrassCurve.Projective.dblXYZ_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W.negY Q * P 2) : W.dblXYZ P = W.dblZ P ⢠![W.toAffine.addX (P 0 / P 2) (Q 0 / Q 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), W.toAffine.addY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), 1] - WeierstrassCurve.Projective.negDblY_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P : Fin 3 ā R} (hP : W'.Equation P) : W'.negDblY P * P 2 ^ 2 = -(MvPolynomial.eval P) W'.polynomialX * ((MvPolynomial.eval P) W'.polynomialX ^ 2 - W'.aā * (MvPolynomial.eval P) W'.polynomialX * P 2 * (P 1 - W'.negY P) - W'.aā * P 2 ^ 2 * (P 1 - W'.negY P) ^ 2 - 2 * P 0 * P 2 * (P 1 - W'.negY P) ^ 2 - P 0 * P 2 * (P 1 - W'.negY P) ^ 2) + P 1 * P 2 ^ 2 * (P 1 - W'.negY P) ^ 3 - WeierstrassCurve.Projective.negDblY_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 ā F} (hP : W.Equation P) (hPz : P 2 ā 0) : W.negDblY P = (-(MvPolynomial.eval P) W.polynomialX * ((MvPolynomial.eval P) W.polynomialX ^ 2 - W.aā * (MvPolynomial.eval P) W.polynomialX * P 2 * (P 1 - W.negY P) - W.aā * P 2 ^ 2 * (P 1 - W.negY P) ^ 2 - 2 * P 0 * P 2 * (P 1 - W.negY P) ^ 2 - P 0 * P 2 * (P 1 - W.negY P) ^ 2) + P 1 * P 2 ^ 2 * (P 1 - W.negY P) ^ 3) / P 2 ^ 2 - WeierstrassCurve.Projective.addX_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) : W'.addX P Q * (P 2 * Q 2) ^ 2 = ((P 1 * Q 2 - Q 1 * P 2) ^ 2 * P 2 * Q 2 + W'.aā * (P 1 * Q 2 - Q 1 * P 2) * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) - W'.aā * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - P 0 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - Q 0 * P 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2) * (P 0 * Q 2 - Q 0 * P 2) - WeierstrassCurve.Projective.addX_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) : W.addX P Q = ((P 1 * Q 2 - Q 1 * P 2) ^ 2 * P 2 * Q 2 + W.aā * (P 1 * Q 2 - Q 1 * P 2) * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) - W.aā * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - P 0 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - Q 0 * P 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2) * (P 0 * Q 2 - Q 0 * P 2) / (P 2 * Q 2) ^ 2 - WeierstrassCurve.Projective.negAddY_eq' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P Q : Fin 3 ā R} (hP : W'.Equation P) (hQ : W'.Equation Q) : W'.negAddY P Q * (P 2 * Q 2) ^ 2 = (P 1 * Q 2 - Q 1 * P 2) * ((P 1 * Q 2 - Q 1 * P 2) ^ 2 * P 2 * Q 2 + W'.aā * (P 1 * Q 2 - Q 1 * P 2) * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) - W'.aā * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - P 0 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - Q 0 * P 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - P 0 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2) + P 1 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 3 - WeierstrassCurve.Projective.negAddY_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) : W.negAddY P Q = ((P 1 * Q 2 - Q 1 * P 2) * ((P 1 * Q 2 - Q 1 * P 2) ^ 2 * P 2 * Q 2 + W.aā * (P 1 * Q 2 - Q 1 * P 2) * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) - W.aā * P 2 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - P 0 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - Q 0 * P 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2 - P 0 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 2) + P 1 * Q 2 * (P 0 * Q 2 - Q 0 * P 2) ^ 3) / (P 2 * Q 2) ^ 2 - WeierstrassCurve.Projective.negAddY_neg š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P : Fin 3 ā R} (hP : W'.Equation P) : W'.negAddY P (W'.neg P) = W'.dblZ P - WeierstrassCurve.Projective.addY_neg š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P : Fin 3 ā R} (hP : W'.Equation P) : W'.addY P (W'.neg P) = -W'.dblZ P - WeierstrassCurve.Projective.addXYZ_neg š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} {P : Fin 3 ā R} (hP : W'.Equation P) : W'.addXYZ P (W'.neg P) = -W'.dblZ P ⢠![0, 1, 0] - WeierstrassCurve.Projective.neg_of_Z_eq_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) : W'.neg P = -P 1 ⢠![0, 1, 0] - WeierstrassCurve.Projective.add_of_Z_eq_zero_left š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hP : W'.Equation P) (hPz : P 2 = 0) (hQz : Q 2 ā 0) : W'.add P Q = (P 1 ^ 2 * Q 2) ⢠Q - WeierstrassCurve.Projective.add_of_Z_eq_zero_right š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{R : Type r} [CommRing R] {W' : WeierstrassCurve.Projective R} [NoZeroDivisors R] {P Q : Fin 3 ā R} (hQ : W'.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 = 0) : W'.add P Q = -(Q 1 ^ 2 * P 2) ⢠P - WeierstrassCurve.Projective.add_of_Y_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā Q 1 * P 2) : W.add P Q = WeierstrassCurve.Projective.addU P Q ⢠![0, 1, 0] - WeierstrassCurve.Projective.add_of_Y_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Equation P) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 = Q 1 * P 2) (hy' : P 1 * Q 2 = W.negY Q * P 2) : W.add P Q = W.dblU P ⢠![0, 1, 0] - WeierstrassCurve.Projective.addMap_of_Y_eq š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 ā F} (hP : W.Nonsingular P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy' : P 1 * Q 2 = W.negY Q * P 2) : W.addMap ā¦Pā§ ā¦Qā§ = ā¦![0, 1, 0]ā§ - WeierstrassCurve.Projective.add_of_X_ne š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 ā Q 0 * P 2) : W.add P Q = W.addZ P Q ⢠![W.toAffine.addX (P 0 / P 2) (Q 0 / Q 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), W.toAffine.addY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), 1] - WeierstrassCurve.Projective.add_of_Y_ne' š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hx : P 0 * Q 2 = Q 0 * P 2) (hy : P 1 * Q 2 ā W.negY Q * P 2) : W.add P Q = W.dblZ P ⢠![W.toAffine.addX (P 0 / P 2) (Q 0 / Q 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), W.toAffine.addY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), 1] - WeierstrassCurve.Projective.addMap_of_Z_ne_zero š Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Point
{F : Type u} [Field F] {W : WeierstrassCurve.Projective F} [DecidableEq F] {P Q : Fin 3 ā F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 2 ā 0) (hQz : Q 2 ā 0) (hxy : ¬(P 0 * Q 2 = Q 0 * P 2 ā§ P 1 * Q 2 = W.negY Q * P 2)) : W.addMap ā¦Pā§ ā¦Qā§ = ā¦![W.toAffine.addX (P 0 / P 2) (Q 0 / Q 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), W.toAffine.addY (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (W.toAffine.slope (P 0 / P 2) (Q 0 / Q 2) (P 1 / P 2) (Q 1 / Q 2)), 1]ā§
About
Loogle searches Lean and Mathlib definitions and theorems.
You can use Loogle from within the Lean4 VSCode language extension
using the Loogle command from the command palette. You can also try the
#loogle command from LeanSearchClient,
the CLI version, the Loogle
VS Code extension, the lean.nvim
integration or the Zulip bot.
Usage
Loogle finds definitions and lemmas in various ways:
By constant:
šReal.sin
finds all lemmas whose statement somehow mentions the sine function.By lemma name substring:
š"differ"
finds all lemmas that have"differ"somewhere in their lemma name.By subexpression:
š_ * (_ ^ _)
finds all lemmas whose statements somewhere include a product where the second argument is raised to some power.The pattern can also be non-linear, as in
šReal.sqrt ?a * Real.sqrt ?aIf the pattern has parameters, they are matched in any order. Both of these will find
List.map:
š(?a -> ?b) -> List ?a -> List ?b
šList ?a -> (?a -> ?b) -> List ?bBy main conclusion:
š|- tsum _ = _ * tsum _
finds all lemmas where the conclusion (the subexpression to the right of allāandā) has the given shape.As before, if the pattern has parameters, they are matched against the hypotheses of the lemma in any order; for example,
š|- _ < _ ā tsum _ < tsum _
will findtsum_lt_tsumeven though the hypothesisf i < g iis not the last.You can filter for definitions vs theorems: Using
⢠(_ : Type _)finds all definitions which provide data while⢠(_ : Prop)finds all theorems (and definitions of proofs).
If you pass more than one such search filter, separated by commas
Loogle will return lemmas which match all of them. The
search
š Real.sin, "two", tsum, _ * _, _ ^ _, |- _ < _ ā _
would find all lemmas which mention the constants Real.sin
and tsum, have "two" as a substring of the
lemma name, include a product and a power somewhere in the type,
and have a hypothesis of the form _ < _ (if
there were any such lemmas). Metavariables (?a) are
assigned independently in each filter.
The #lucky button will directly send you to the
documentation of the first hit.
Source code
You can find the source code for this service at https://github.com/nomeata/loogle. The https://loogle.lean-lang.org/ service is provided by the Lean FRO. Please review the Lean FRO Terms of Use and Privacy Policy.
This is Loogle revision 9f11169 serving mathlib revision ce5dd8c