Theorem: Cubic.disc_eq_prod_three_roots
File: Mathlib/Algebra/CubicDiscriminant.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
⊢ φ P.disc = (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
state_after: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
tactic: simp only [disc, RingHom.map_add, RingHom.map_sub, RingHom.map_mul, map_pow]
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
state_after: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
tactic: have f4 : φ 4 = 4 := map_natCast φ 4
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
state_after: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
f18 : φ 18 = 18
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
tactic: have f18 : φ 18 = 18 := map_natCast φ 18
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
f18 : φ 18 = 18
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
state_after: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
f18 : φ 18 = 18
f27 : φ 27 = 27
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
tactic: have f27 : φ 27 = 27 := map_natCast φ 27
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
f18 : φ 18 = 18
f27 : φ 27 = 27
⊢ φ P.b ^ 2 * φ P.c ^ 2 - φ 4 * φ P.a * φ P.c ^ 3 - φ 4 * φ P.b ^ 3 * φ P.d - φ 27 * φ P.a ^ 2 * φ P.d ^ 2 +
      φ 18 * φ P.a * φ P.b * φ P.c * φ P.d =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
state_after: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
f18 : φ 18 = 18
f27 : φ 27 = 27
⊢ (φ P.a * -(x + y + z)) ^ 2 * (φ P.a * (x * y + x * z + y * z)) ^ 2 -
            4 * φ P.a * (φ P.a * (x * y + x * z + y * z)) ^ 3 -
          4 * (φ P.a * -(x + y + z)) ^ 3 * (φ P.a * -(x * y * z)) -
        27 * φ P.a ^ 2 * (φ P.a * -(x * y * z)) ^ 2 +
      18 * φ P.a * (φ P.a * -(x + y + z)) * (φ P.a * (x * y + x * z + y * z)) * (φ P.a * -(x * y * z)) =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
tactic: rw [f4, f18, f27, b_eq_three_roots ha h3, c_eq_three_roots ha h3, d_eq_three_roots ha h3]
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
h3 : (map φ P).roots = {x, y, z}
f4 : φ 4 = 4
f18 : φ 18 = 18
f27 : φ 27 = 27
⊢ (φ P.a * -(x + y + z)) ^ 2 * (φ P.a * (x * y + x * z + y * z)) ^ 2 -
            4 * φ P.a * (φ P.a * (x * y + x * z + y * z)) ^ 3 -
          4 * (φ P.a * -(x + y + z)) ^ 3 * (φ P.a * -(x * y * z)) -
        27 * φ P.a ^ 2 * (φ P.a * -(x * y * z)) ^ 2 +
      18 * φ P.a * (φ P.a * -(x + y + z)) * (φ P.a * (x * y + x * z + y * z)) * (φ P.a * -(x * y * z)) =
    (φ P.a * φ P.a * (x - y) * (x - z) * (y - z)) ^ 2
state_after: no goals
tactic: ring1