Theorem: trace_eq_sum_embeddings_gen
File: Mathlib/RingTheory/Trace.lean

tactic: letI := Classical.decEq E
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
⊢ (algebraMap K E) ((Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, σ pb.gen
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this : DecidableEq E := Classical.decEq E
⊢ (algebraMap K E) ((Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, σ pb.gen

tactic: letI : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this : DecidableEq E := Classical.decEq E
⊢ (algebraMap K E) ((Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, σ pb.gen
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ (algebraMap K E) ((Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, σ pb.gen

tactic: rw [pb.trace_gen_eq_sum_roots hE, Fintype.sum_equiv pb.liftEquiv', Finset.sum_mem_multiset,
  Finset.sum_eq_multiset_sum, Multiset.toFinset_val, Multiset.dedup_eq_self.mpr _,
  Multiset.map_id]
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ (algebraMap K E) ((Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, σ pb.gen
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ((minpoly K pb.gen).aroots E).Nodup

case f
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ { x // x ∈ (minpoly K pb.gen).aroots E } → E

case hfg
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∀ (x : { x // x ∈ (minpoly K pb.gen).aroots E }), ?f x = _root_.id ↑x

case h
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∀ (x : L →ₐ[K] E), x pb.gen = ?f (pb.liftEquiv' x)

tactic: exact nodup_roots ((separable_map _).mpr hfx)
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ((minpoly K pb.gen).aroots E).Nodup
state_after: no goals

tactic: exact (fun x => x.1)
state_before: case f
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ { x // x ∈ (minpoly K pb.gen).aroots E } → E
state_after: no goals

tactic: intro x
state_before: case hfg
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∀ (x : { x // x ∈ (minpoly K pb.gen).aroots E }), ↑x = _root_.id ↑x
state_after: case hfg
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
x : { x // x ∈ (minpoly K pb.gen).aroots E }
⊢ ↑x = _root_.id ↑x

tactic: rfl
state_before: case hfg
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
x : { x // x ∈ (minpoly K pb.gen).aroots E }
⊢ ↑x = _root_.id ↑x
state_after: no goals

tactic: intro σ
state_before: case h
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∀ (x : L →ₐ[K] E), x pb.gen = ↑(pb.liftEquiv' x)
state_after: case h
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
σ : L →ₐ[K] E
⊢ σ pb.gen = ↑(pb.liftEquiv' σ)

tactic: rw [PowerBasis.liftEquiv'_apply_coe]
state_before: case h
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 R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : (minpoly K pb.gen).Separable
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
σ : L →ₐ[K] E
⊢ σ pb.gen = ↑(pb.liftEquiv' σ)
state_after: no goals