Theorem: WeierstrassCurve.Affine.addPolynomial_eq
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y L : R
⊢ W.addPolynomial x y L =
    -{ a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂, c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
          d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.toPoly
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
x y L : R
⊢ eval (C L * (X - C x) + C y)
      (Y ^ 2 + C (C W.a₁ * X + C W.a₃) * Y - C (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆)) =
    -(C
                { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
                    c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
                    d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.a *
              X ^ 3 +
            C
                { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
                    c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
                    d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.b *
              X ^ 2 +
          C
              { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
                  c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
                  d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.c *
            X +
        C
          { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
              c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
              d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.d)
tactic: rw [addPolynomial, linePolynomial, polynomial, Cubic.toPoly]
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y L : R
⊢ eval (C L * (X - C x) + C y)
      (Y ^ 2 + C (C W.a₁ * X + C W.a₃) * Y - C (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆)) =
    -(C
                { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
                    c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
                    d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.a *
              X ^ 3 +
            C
                { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
                    c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
                    d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.b *
              X ^ 2 +
          C
              { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
                  c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
                  d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.c *
            X +
        C
          { a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂,
              c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
              d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.d)
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
x y L : R
⊢ (C L * (X - C x) + C y) ^ 2 + (C W.a₁ * X + C W.a₃) * (C L * (X - C x) + C y) -
      (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆) =
    -(C 1 * X ^ 3 + C (-L ^ 2 - W.a₁ * L + W.a₂) * X ^ 2 +
          C (2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄)) * X +
        C (-x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆)))
tactic: eval_simp
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y L : R
⊢ (C L * (X - C x) + C y) ^ 2 + (C W.a₁ * X + C W.a₃) * (C L * (X - C x) + C y) -
      (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆) =
    -(C 1 * X ^ 3 + C (-L ^ 2 - W.a₁ * L + W.a₂) * X ^ 2 +
          C (2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄)) * X +
        C (-x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆)))
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
x y L : R
⊢ (C L * (X - C x) + C y) ^ 2 + (C W.a₁ * X + C W.a₃) * (C L * (X - C x) + C y) -
      (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆) =
    -(1 * X ^ 3 + (-C L ^ 2 - C W.a₁ * C L + C W.a₂) * X ^ 2 +
          (2 * C x * C L ^ 2 + (C W.a₁ * C x - 2 * C y - C W.a₃) * C L + (-C W.a₁ * C y + C W.a₄)) * X +
        (-C x ^ 2 * C L ^ 2 + (2 * C x * C y + C W.a₃ * C x) * C L - (C y ^ 2 + C W.a₃ * C y - C W.a₆)))
tactic: C_simp
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y L : R
⊢ (C L * (X - C x) + C y) ^ 2 + (C W.a₁ * X + C W.a₃) * (C L * (X - C x) + C y) -
      (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆) =
    -(1 * X ^ 3 + (-C L ^ 2 - C W.a₁ * C L + C W.a₂) * X ^ 2 +
          (2 * C x * C L ^ 2 + (C W.a₁ * C x - 2 * C y - C W.a₃) * C L + (-C W.a₁ * C y + C W.a₄)) * X +
        (-C x ^ 2 * C L ^ 2 + (2 * C x * C y + C W.a₃ * C x) * C L - (C y ^ 2 + C W.a₃ * C y - C W.a₆)))
state_after: no goals
tactic: ring1