awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P Q : Cubic R
inst : Semiring R
h : Eq (α := R[X]) P.toPoly Q.toPoly
rw : coeff P.toPoly 0 = Q.d
⊢ P.d = Q.d
have rw₁ : coeff Q.toPoly 0 = Q.d
Tactic: rw [← coeff_eq_d, h, coeff_eq_d]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P Q : Cubic R
inst : Semiring R
h : Eq (α := R[X]) P.toPoly Q.toPoly
rw : coeff P.toPoly 0 = Q.d
rw₁ : coeff Q.toPoly 0 = Q.d
⊢ P.d = Q.d
have rw₂ : Q.d = Q.d
Tactic: rw [← coeff_eq_d, h, coeff_eq_d]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
⊢ P.toPoly =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw : HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.a : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 3) +
        HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [toPoly, ha, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.a : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 3) +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₁ : HAdd.hAdd (β := R[X])
    ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 3 +
        HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [toPoly, ha, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.a : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 3) +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₁ :
  HAdd.hAdd (β := R[X])
      ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 3 +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₂ : HAdd.hAdd (β := R[X])
    (0 * HPow.hPow (α := R[X]) (β := ℕ) X 3 +
        HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [toPoly, ha, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.a : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 3) +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₁ :
  HAdd.hAdd (β := R[X])
      ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 3 +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₂ :
  HAdd.hAdd (β := R[X])
      (0 * HPow.hPow (α := R[X]) (β := ℕ) X 3 +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₃ : HAdd.hAdd (β := R[X])
    (0 + HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [toPoly, ha, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.a : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 3) +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₁ :
  HAdd.hAdd (β := R[X])
      ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 3 +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₂ :
  HAdd.hAdd (β := R[X])
      (0 * HPow.hPow (α := R[X]) (β := ℕ) X 3 +
          HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₃ :
  HAdd.hAdd (β := R[X])
      (0 + HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₄ : HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [toPoly, ha, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
⊢ P.toPoly =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw : HAdd.hAdd (β := R[X])
    (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [of_a_eq_zero ha, hb, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₁ : HAdd.hAdd (β := R[X])
    ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 2 +
      HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [of_a_eq_zero ha, hb, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₁ :
  HAdd.hAdd (β := R[X])
      ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 2 +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₂ : HAdd.hAdd (β := R[X])
    (0 * HPow.hPow (α := R[X]) (β := ℕ) X 2 + HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [of_a_eq_zero ha, hb, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₁ :
  HAdd.hAdd (β := R[X])
      ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 2 +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₂ :
  HAdd.hAdd (β := R[X])
      (0 * HPow.hPow (α := R[X]) (β := ℕ) X 2 + HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₃ : HAdd.hAdd (β := R[X]) (0 + HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [of_a_eq_zero ha, hb, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
rw :
  HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₁ :
  HAdd.hAdd (β := R[X])
      ((C : (a : R) → R[X]) 0 * HPow.hPow (α := R[X]) (β := ℕ) X 2 +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₂ :
  HAdd.hAdd (β := R[X])
      (0 * HPow.hPow (α := R[X]) (β := ℕ) X 2 + HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
rw₃ :
  HAdd.hAdd (β := R[X]) (0 + HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
⊢ P.toPoly =
    HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])
have rw₄ : HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [of_a_eq_zero ha, hb, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
⊢ Eq (α := R[X]) P.toPoly ((C : (a : R) → R[X]) P.d)
have rw : HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
    ((C : (a : R) → R[X]) P.d : R[X]) =
  (C : (a : R) → R[X]) P.d
Tactic: rw [of_b_eq_zero ha hb, hc, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
rw :
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    (C : (a : R) → R[X]) P.d
⊢ Eq (α := R[X]) P.toPoly ((C : (a : R) → R[X]) P.d)
have rw₁ : HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) 0) X) ((C : (a : R) → R[X]) P.d : R[X]) =
  (C : (a : R) → R[X]) P.d
Tactic: rw [of_b_eq_zero ha hb, hc, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
rw :
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    (C : (a : R) → R[X]) P.d
rw₁ :
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) 0) X) ((C : (a : R) → R[X]) P.d : R[X]) =
    (C : (a : R) → R[X]) P.d
⊢ Eq (α := R[X]) P.toPoly ((C : (a : R) → R[X]) P.d)
have rw₂ : HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) 0 X) ((C : (a : R) → R[X]) P.d : R[X]) = (C : (a : R) → R[X]) P.d
Tactic: rw [of_b_eq_zero ha hb, hc, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
rw :
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    (C : (a : R) → R[X]) P.d
rw₁ :
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) 0) X) ((C : (a : R) → R[X]) P.d : R[X]) =
    (C : (a : R) → R[X]) P.d
rw₂ : HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) 0 X) ((C : (a : R) → R[X]) P.d : R[X]) = (C : (a : R) → R[X]) P.d
⊢ Eq (α := R[X]) P.toPoly ((C : (a : R) → R[X]) P.d)
have rw₃ : HAdd.hAdd (α := R[X]) (β := R[X]) (0 : R[X]) ((C : (a : R) → R[X]) P.d : R[X]) = (C : (a : R) → R[X]) P.d
Tactic: rw [of_b_eq_zero ha hb, hc, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
rw :
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X]) =
    (C : (a : R) → R[X]) P.d
rw₁ :
  HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) 0) X) ((C : (a : R) → R[X]) P.d : R[X]) =
    (C : (a : R) → R[X]) P.d
rw₂ : HAdd.hAdd (β := R[X]) (HMul.hMul (α := R[X]) 0 X) ((C : (a : R) → R[X]) P.d : R[X]) = (C : (a : R) → R[X]) P.d
rw₃ : HAdd.hAdd (α := R[X]) (β := R[X]) (0 : R[X]) ((C : (a : R) → R[X]) P.d : R[X]) = (C : (a : R) → R[X]) P.d
⊢ Eq (α := R[X]) P.toPoly ((C : (a : R) → R[X]) P.d)
have rw₄ : Eq (α := R[X]) ((C : (a : R) → R[X]) P.d : R[X]) ((C : (a : R) → R[X]) P.d : R[X])
Tactic: rw [of_b_eq_zero ha hb, hc, C_0, zero_mul, zero_add]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
hd : P.d = 0
⊢ Eq (α := R[X]) P.toPoly 0
have rw : Eq (α := R[X]) ((C : (a : R) → R[X]) P.d : R[X]) (0 : R[X])
Tactic: rw [of_c_eq_zero ha hb hc, hd, C_0]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
hd : P.d = 0
rw : Eq (α := R[X]) ((C : (a : R) → R[X]) P.d : R[X]) (0 : R[X])
⊢ Eq (α := R[X]) P.toPoly 0
have rw₁ : Eq.{u_1 + 1} (α := R[X]) ((C : (a : R) → R[X]) 0) 0
Tactic: rw [of_c_eq_zero ha hb hc, hd, C_0]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
hd : P.d = 0
rw : Eq (α := R[X]) ((C : (a : R) → R[X]) P.d : R[X]) (0 : R[X])
rw₁ : Eq.{u_1 + 1} (α := R[X]) ((C : (a : R) → R[X]) 0) 0
⊢ Eq (α := R[X]) P.toPoly 0
have rw₂ : Eq.{u_1 + 1} (α := R[X]) 0 0
Tactic: rw [of_c_eq_zero ha hb hc, hd, C_0]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
inst : Semiring R
P : Cubic R
⊢ Eq (α := R[X]) P.toPoly 0 ↔ P = 0
have rw : Eq (α := R[X]) P.toPoly (toPoly 0) ↔ P = 0
Tactic: rw [← zero, toPoly_injective]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
inst : Semiring R
P : Cubic R
rw : Eq (α := R[X]) P.toPoly (toPoly 0) ↔ P = 0
⊢ Eq (α := R[X]) P.toPoly 0 ↔ P = 0
have rw₁ : P = 0 ↔ P = 0
Tactic: rw [← zero, toPoly_injective]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
h0 : P.a ≠ 0 ∨ P.b ≠ 0 ∨ P.c ≠ 0 ∨ P.d ≠ 0
⊢ Ne (α := R[X]) P.toPoly 0
have contrapose! : ∀ (h0 : Eq (α := R[X]) P.toPoly 0), P.a = 0 ∧ P.b = 0 ∧ P.c = 0 ∧ P.d = 0
Tactic: contrapose! h0
Cleared hypotheses: h0
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
h0 : Eq (α := R[X]) P.toPoly 0
⊢ P.a = 0 ∧ P.b = 0 ∧ P.c = 0 ∧ P.d = 0
have rw : Eq.{u_1 + 1} (α := R) (a 0) 0 ∧
  Eq.{u_1 + 1} (α := R) (b 0) 0 ∧ Eq.{u_1 + 1} (α := R) (c 0) 0 ∧ Eq.{u_1 + 1} (α := R) (d 0) 0
Tactic: rw [(toPoly_eq_zero_iff P).mp h0]
-- Lean 4 proof step from Mathlib.Algebra.CubicDiscriminant (goal)
Goal:
R : Type u_1
P : Cubic R
inst : Semiring R
ha : P.a = 0
hb : P.b ≠ 0
⊢ leadingCoeff P.toPoly = P.b
have rw : (HAdd.hAdd (β := R[X])
      (HMul.hMul (α := R[X]) ((C : (a : R) → R[X]) P.b : R[X]) (HPow.hPow (α := R[X]) (β := ℕ) X 2) +
        HMul.hMul (α := R[X]) (β := R[X]) ((C : (a : R) → R[X]) P.c : R[X]) X)
      ((C : (a : R) → R[X]) P.d : R[X])).leadingCoeff =
  P.b
Tactic: rw [of_a_eq_zero ha, leadingCoeff_quadratic hb]