Theorem: IntermediateField.AdjoinSimple.trace_gen_eq_sum_roots
File: Mathlib/RingTheory/Trace/Basic.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum
state_after: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum
tactic: have injKxL := (algebraMap K⟮x⟯ L).injective
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum
state_after: case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : IsIntegral K x
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum

case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : ¬IsIntegral K x
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum
tactic: by_cases hx : IsIntegral K x
state_before: case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : IsIntegral K x
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum

case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : ¬IsIntegral K x
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum
state_after: case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : ¬IsIntegral K x
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum

case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : IsIntegral K x
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum
tactic: swap
state_before: case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : IsIntegral K x
⊢ (algebraMap K F) ((Algebra.trace K ↥K⟮x⟯) (gen K x)) = ((minpoly K x).aroots F).sum
state_after: case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : IsIntegral K x
⊢ Splits (algebraMap K F) (minpoly K x)
tactic: rw [← adjoin.powerBasis_gen hx, (adjoin.powerBasis hx).trace_gen_eq_sum_roots] <;>
    rw [adjoin.powerBasis_gen hx, ← minpoly.algebraMap_eq injKxL] <;>
    try simp only [AdjoinSimple.algebraMap_gen _ _]
state_before: case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ⇑(algebraMap (↥K⟮x⟯) L)
hx : IsIntegral K x
⊢ Splits (algebraMap K F) (minpoly K x)
state_after: no goals
tactic: exact hf