Theorem: Polynomial.prod_roots_eq_coeff_zero_of_monic_of_split
File: Mathlib/Algebra/Polynomial/Splits.lean

Proof steps:
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ P.coeff 0 = (-1) ^ P.natDegree * P.roots.prod
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun a => X - C a) P.roots).prod.coeff 0 = (-1) ^ P.natDegree * P.roots.prod
tactic: nth_rw 1 [eq_prod_roots_of_monic_of_splits_id hmo hP]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun a => X - C a) P.roots).prod.coeff 0 = (-1) ^ P.natDegree * P.roots.prod
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (eval 0 ∘ fun a => X - C a) P.roots).prod = (-1) ^ P.natDegree * P.roots.prod
tactic: rw [coeff_zero_eq_eval_zero, eval_multiset_prod, Multiset.map_map]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (eval 0 ∘ fun a => X - C a) P.roots).prod = (-1) ^ P.natDegree * P.roots.prod
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun x => -x) P.roots).prod = (-1) ^ P.natDegree * P.roots.prod
tactic: simp_rw [Function.comp_apply, eval_sub, eval_X, zero_sub, eval_C]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun x => -x) P.roots).prod = (-1) ^ P.natDegree * P.roots.prod
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (HMul.hMul (-1)) P.roots).prod = (-1) ^ P.natDegree * P.roots.prod
tactic: conv_lhs =>
    congr
    congr
    ext
    rw [neg_eq_neg_one_mul]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (HMul.hMul (-1)) P.roots).prod = (-1) ^ P.natDegree * P.roots.prod
state_after: no goals
tactic: simp only [splits_iff_card_roots.1 hP, neg_mul, one_mul, Multiset.prod_map_neg]