Theorem: Field.finSepDegree_eq_finrank_of_isSeparable
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
inst✝ : Algebra.IsSeparable F E
⊢ finSepDegree F E = finrank F E
state_after: case inr
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
inst✝ : Algebra.IsSeparable F E
H :
  ∀ (E : Type v) [inst : Field E] [inst_1 : Algebra F E] [inst_2 : Algebra.IsSeparable F E],
    FiniteDimensional F E → finSepDegree F E = finrank F E
hfd : ¬FiniteDimensional F E
⊢ finSepDegree F E = finrank F E

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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
⊢ finSepDegree F E = finrank F E
tactic: wlog hfd : FiniteDimensional F E generalizing E with H
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
⊢ finSepDegree F E = finrank F E
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
⊢ finSepDegree F ↥⊤ = finrank F ↥⊤
tactic: rw [← finSepDegree_top F, ← finrank_top F E]
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
⊢ finSepDegree F ↥⊤ = finrank F ↥⊤
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : (fun K => finSepDegree F ↥K = finrank F ↥K) L
⊢ (fun K => finSepDegree F ↥K = finrank F ↥K) (restrictScalars F (↥L)⟮x⟯)
tactic: refine induction_on_adjoin (fun K : IntermediateField F E ↦ finSepDegree F K = finrank F K)
    (by simp_rw [finSepDegree_bot, IntermediateField.finrank_bot]) (fun L x h ↦ ?_) ⊤
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : (fun K => finSepDegree F ↥K = finrank F ↥K) L
⊢ (fun K => finSepDegree F ↥K = finrank F ↥K) (restrictScalars F (↥L)⟮x⟯)
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L = finrank F ↥L
⊢ finSepDegree F ↥(restrictScalars F (↥L)⟮x⟯) = finrank F ↥(restrictScalars F (↥L)⟮x⟯)
tactic: simp only at h ⊢
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L = finrank F ↥L
heq : finSepDegree F ↥L * finSepDegree ↥L ↥(↥L)⟮x⟯ = finrank F ↥L * finrank ↥L ↥(↥L)⟮x⟯
⊢ finSepDegree F ↥(restrictScalars F (↥L)⟮x⟯) = finrank F ↥(restrictScalars F (↥L)⟮x⟯)
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L = finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
heq : finSepDegree F ↥L * finSepDegree ↥L ↥M = finrank F ↥L * finrank ↥L ↥M
⊢ finSepDegree F ↥(restrictScalars F M) = finrank F ↥(restrictScalars F M)
tactic: set M := L⟮x⟯
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L = finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
heq : finSepDegree F ↥L * finSepDegree ↥L ↥M = finrank F ↥L * finrank ↥L ↥M
⊢ finSepDegree F ↥(restrictScalars F M) = finrank F ↥(restrictScalars F 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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L = finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
heq : finSepDegree F ↥L * finSepDegree ↥L ↥M = finrank F ↥L * finrank ↥L ↥M
this : Algebra.IsAlgebraic ↥L ↥M
⊢ finSepDegree F ↥(restrictScalars F M) = finrank F ↥(restrictScalars F M)
tactic: have := Algebra.IsAlgebraic.of_finite L M
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
E : Type v
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Algebra.IsSeparable F E
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L = finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
heq : finSepDegree F ↥L * finSepDegree ↥L ↥M = finrank F ↥L * finrank ↥L ↥M
this : Algebra.IsAlgebraic ↥L ↥M
⊢ finSepDegree F ↥(restrictScalars F M) = finrank F ↥(restrictScalars F M)
state_after: no goals
tactic: rwa [finSepDegree_mul_finSepDegree_of_isAlgebraic F L M,
    FiniteDimensional.finrank_mul_finrank F L M] at heq