Theorem: WeierstrassCurve.Projective.equation_smul_iff
File: Mathlib/AlgebraicGeometry/EllipticCurve/Projective.lean

tactic: rw [equation_iff] at h ⊢
state_before: R : Type u
inst✝ : CommRing R
W : Projective R
P✝ : Fin 3 → R
u✝ u : Rˣ
P : Fin 3 → R
h : W.Equation P
⊢ W.Equation (u • P)
state_after: R : Type u
inst✝ : CommRing R
W : Projective R
P✝ : Fin 3 → R
u✝ u : Rˣ
P : Fin 3 → R
h :
  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
⊢ (u • P) 1 ^ 2 * (u • P) 2 + W.a₁ * (u • P) 0 * (u • P) 1 * (u • P) 2 + W.a₃ * (u • P) 1 * (u • P) 2 ^ 2 =
    (u • P) 0 ^ 3 + W.a₂ * (u • P) 0 ^ 2 * (u • P) 2 + W.a₄ * (u • P) 0 * (u • P) 2 ^ 2 + W.a₆ * (u • P) 2 ^ 3

tactic: linear_combination (norm := (simp only [smul_fin3_ext]; ring1)) (u : R) ^ 3 * h
state_before: R : Type u
inst✝ : CommRing R
W : Projective R
P✝ : Fin 3 → R
u✝ u : Rˣ
P : Fin 3 → R
h :
  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
⊢ (u • P) 1 ^ 2 * (u • P) 2 + W.a₁ * (u • P) 0 * (u • P) 1 * (u • P) 2 + W.a₃ * (u • P) 1 * (u • P) 2 ^ 2 =
    (u • P) 0 ^ 3 + W.a₂ * (u • P) 0 ^ 2 * (u • P) 2 + W.a₄ * (u • P) 0 * (u • P) 2 ^ 2 + W.a₆ * (u • P) 2 ^ 3
state_after: no goals

tactic: simp only [smul_fin3_ext]
state_before: case a
R : Type u
inst✝ : CommRing R
W : Projective R
P✝ : Fin 3 → R
u✝ u : Rˣ
P : Fin 3 → R
h :
  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
⊢ (u • P) 1 ^ 2 * (u • P) 2 + W.a₁ * (u • P) 0 * (u • P) 1 * (u • P) 2 + W.a₃ * (u • P) 1 * (u • P) 2 ^ 2 -
        ((u • P) 0 ^ 3 + W.a₂ * (u • P) 0 ^ 2 * (u • P) 2 + W.a₄ * (u • P) 0 * (u • P) 2 ^ 2 + W.a₆ * (u • P) 2 ^ 3) -
      (↑u ^ 3 * (P 1 ^ 2 * P 2 + W.a₁ * P 0 * P 1 * P 2 + W.a₃ * P 1 * P 2 ^ 2) -
        ↑u ^ 3 * (P 0 ^ 3 + W.a₂ * P 0 ^ 2 * P 2 + W.a₄ * P 0 * P 2 ^ 2 + W.a₆ * P 2 ^ 3)) =
    0
state_after: case a
R : Type u
inst✝ : CommRing R
W : Projective R
P✝ : Fin 3 → R
u✝ u : Rˣ
P : Fin 3 → R
h :
  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
⊢ (↑u * P 1) ^ 2 * (↑u * P 2) + W.a₁ * (↑u * P 0) * (↑u * P 1) * (↑u * P 2) + W.a₃ * (↑u * P 1) * (↑u * P 2) ^ 2 -
        ((↑u * P 0) ^ 3 + W.a₂ * (↑u * P 0) ^ 2 * (↑u * P 2) + W.a₄ * (↑u * P 0) * (↑u * P 2) ^ 2 +
          W.a₆ * (↑u * P 2) ^ 3) -
      (↑u ^ 3 * (P 1 ^ 2 * P 2 + W.a₁ * P 0 * P 1 * P 2 + W.a₃ * P 1 * P 2 ^ 2) -
        ↑u ^ 3 * (P 0 ^ 3 + W.a₂ * P 0 ^ 2 * P 2 + W.a₄ * P 0 * P 2 ^ 2 + W.a₆ * P 2 ^ 3)) =
    0

tactic: ring1
state_before: case a
R : Type u
inst✝ : CommRing R
W : Projective R
P✝ : Fin 3 → R
u✝ u : Rˣ
P : Fin 3 → R
h :
  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
⊢ (↑u * P 1) ^ 2 * (↑u * P 2) + W.a₁ * (↑u * P 0) * (↑u * P 1) * (↑u * P 2) + W.a₃ * (↑u * P 1) * (↑u * P 2) ^ 2 -
        ((↑u * P 0) ^ 3 + W.a₂ * (↑u * P 0) ^ 2 * (↑u * P 2) + W.a₄ * (↑u * P 0) * (↑u * P 2) ^ 2 +
          W.a₆ * (↑u * P 2) ^ 3) -
      (↑u ^ 3 * (P 1 ^ 2 * P 2 + W.a₁ * P 0 * P 1 * P 2 + W.a₃ * P 1 * P 2 ^ 2) -
        ↑u ^ 3 * (P 0 ^ 3 + W.a₂ * P 0 ^ 2 * P 2 + W.a₄ * P 0 * P 2 ^ 2 + W.a₆ * P 2 ^ 3)) =
    0
state_after: no goals

tactic: convert this u⁻¹ h
state_before: R : Type u
inst✝ : CommRing R
W : Projective R
P : Fin 3 → R
u : Rˣ
this : ∀ (u : Rˣ) {P : Fin 3 → R}, W.Equation P → W.Equation (u • P)
h : W.Equation (u • P)
⊢ W.Equation P
state_after: case h.e'_4
R : Type u
inst✝ : CommRing R
W : Projective R
P : Fin 3 → R
u : Rˣ
this : ∀ (u : Rˣ) {P : Fin 3 → R}, W.Equation P → W.Equation (u • P)
h : W.Equation (u • P)
⊢ P = u⁻¹ • u • P

tactic: rw [inv_smul_smul]
state_before: case h.e'_4
R : Type u
inst✝ : CommRing R
W : Projective R
P : Fin 3 → R
u : Rˣ
this : ∀ (u : Rˣ) {P : Fin 3 → R}, W.Equation P → W.Equation (u • P)
h : W.Equation (u • P)
⊢ P = u⁻¹ • u • P
state_after: no goals