Theorem: Polynomial.Monic.eq_X_sub_C_pow_of_natSepDegree_eq_one_of_splits
File: Mathlib/FieldTheory/SeparableDegree.lean

Proof steps:
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
state_after: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
tactic: have h1 := eq_prod_roots_of_monic_of_splits_id hm hs
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
state_after: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
h2 : (f.aroots F).toFinset.card = f.natSepDegree
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
tactic: have h2 := (natSepDegree_eq_of_splits f hs).symm
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
h2 : (f.aroots F).toFinset.card = f.natSepDegree
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
state_after: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
h2 : Multiset.card f.roots ≠ 0 ∧ ∃ a, f.roots = Multiset.card f.roots • {a}
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
tactic: rw [h, aroots_def, Algebra.id.map_eq_id, map_id, Multiset.toFinset_card_eq_one_iff] at h2
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
h2 : Multiset.card f.roots ≠ 0 ∧ ∃ a, f.roots = Multiset.card f.roots • {a}
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
state_after: case intro.intro
F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
h2 : Multiset.card f.roots ≠ 0
y : F
h3 : f.roots = Multiset.card f.roots • {y}
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
tactic: obtain ⟨h2, y, h3⟩ := h2
state_before: case intro.intro
F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
hm : f.Monic
hs : Splits (RingHom.id F) f
h : f.natSepDegree = 1
h1 : f = (Multiset.map (fun a => X - C a) f.roots).prod
h2 : Multiset.card f.roots ≠ 0
y : F
h3 : f.roots = Multiset.card f.roots • {y}
⊢ ∃ m y, m ≠ 0 ∧ f = (X - C y) ^ m
state_after: no goals
tactic: exact ⟨_, y, h2, by rwa [h3, Multiset.map_nsmul, Multiset.map_singleton, Multiset.prod_nsmul,
    Multiset.prod_singleton] at h1⟩