Theorem: Polynomial.aeval_root_derivative_of_splits
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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
hmo : P.Monic
hP : Splits (algebraMap K L) P
r : L
hr : r ∈ P.aroots L
⊢ (aeval r) (derivative P) = (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
hP : Splits (algebraMap K L) P
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
⊢ (aeval r) (derivative P) = (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).prod
tactic: replace hmo := hmo.map (algebraMap K L)
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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
hP : Splits (algebraMap K L) P
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
⊢ (aeval r) (derivative P) = (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
hP : Splits (RingHom.id L) (map (algebraMap K L) P)
⊢ (aeval r) (derivative P) = (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).prod
tactic: replace hP := (splits_id_iff_splits (algebraMap K L)).2 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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
hP : Splits (RingHom.id L) (map (algebraMap K L) P)
⊢ (aeval r) (derivative P) = (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
hP : Splits (RingHom.id L) (map (algebraMap K L) P)
⊢ eval r (derivative (map (algebraMap K L) P)) = (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).prod
tactic: rw [aeval_def, ← eval_map, ← derivative_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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
hP : Splits (RingHom.id L) (map (algebraMap K L) P)
⊢ eval r (derivative (map (algebraMap K L) P)) = (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
hP : Splits (RingHom.id L) (map (algebraMap K L) P)
⊢ eval r (derivative (Multiset.map (fun a => X - C a) (map (algebraMap K L) P).roots).prod) =
    (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).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
inst✝¹ : Algebra K L
inst✝ : DecidableEq L
P : K[X]
r : L
hr : r ∈ P.aroots L
hmo : (map (algebraMap K L) P).Monic
hP : Splits (RingHom.id L) (map (algebraMap K L) P)
⊢ eval r (derivative (Multiset.map (fun a => X - C a) (map (algebraMap K L) P).roots).prod) =
    (Multiset.map (fun a => r - a) ((P.aroots L).erase r)).prod
state_after: no goals
tactic: rw [eval_multiset_prod_X_sub_C_derivative hr]