Theorem: Field.finSepDegree_dvd_finrank
File: Mathlib/FieldTheory/SeparableDegree.lean

tactic: by_cases hfd : FiniteDimensional 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
⊢ finSepDegree F E ∣ finrank F E
state_after: case pos
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
hfd : FiniteDimensional F E
⊢ finSepDegree F E ∣ finrank F E

case neg
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
hfd : ¬FiniteDimensional F E
⊢ finSepDegree F E ∣ finrank F E

tactic: rw [finrank_of_infinite_dimensional hfd]
state_before: case neg
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
hfd : ¬FiniteDimensional F E
⊢ finSepDegree F E ∣ finrank F E
state_after: case neg
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
hfd : ¬FiniteDimensional F E
⊢ finSepDegree F E ∣ 0

tactic: exact dvd_zero _
state_before: case neg
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
hfd : ¬FiniteDimensional F E
⊢ finSepDegree F E ∣ 0
state_after: no goals

tactic: rw [← finSepDegree_top F, ← finrank_top F E]
state_before: case pos
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
hfd : FiniteDimensional F E
⊢ finSepDegree F E ∣ finrank F E
state_after: case pos
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
hfd : FiniteDimensional F E
⊢ finSepDegree F ↥⊤ ∣ finrank F ↥⊤

tactic: refine induction_on_adjoin (fun K : IntermediateField F E ↦ finSepDegree F K ∣ finrank F K)
  (by simp_rw [finSepDegree_bot, IntermediateField.finrank_bot, one_dvd]) (fun L x h ↦ ?_) ⊤
state_before: case pos
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
hfd : FiniteDimensional F E
⊢ finSepDegree F ↥⊤ ∣ finrank F ↥⊤
state_after: case pos
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
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: simp only at h ⊢
state_before: case pos
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
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: case pos
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
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: have hdvd := mul_dvd_mul h <| finSepDegree_adjoin_simple_dvd_finrank L E x
state_before: case pos
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
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⟯)
state_after: case pos
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
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L ∣ finrank F ↥L
hdvd : 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⟯)

tactic: set M := L⟮x⟯
state_before: case pos
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
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L ∣ finrank F ↥L
hdvd : 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: case pos
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
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L ∣ finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
hdvd : finSepDegree F ↥L * finSepDegree ↥L ↥M ∣ finrank F ↥L * finrank ↥L ↥M
⊢ finSepDegree F ↥(restrictScalars F M) ∣ finrank F ↥(restrictScalars F M)

tactic: have := Algebra.IsAlgebraic.of_finite L M
state_before: case pos
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
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L ∣ finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
hdvd : finSepDegree F ↥L * finSepDegree ↥L ↥M ∣ finrank F ↥L * finrank ↥L ↥M
⊢ finSepDegree F ↥(restrictScalars F M) ∣ finrank F ↥(restrictScalars F M)
state_after: case pos
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
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L ∣ finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
hdvd : 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: rwa [finSepDegree_mul_finSepDegree_of_isAlgebraic F L M,
  FiniteDimensional.finrank_mul_finrank F L M] at hdvd
state_before: case pos
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
hfd : FiniteDimensional F E
L : IntermediateField F E
x : E
h : finSepDegree F ↥L ∣ finrank F ↥L
M : IntermediateField (↥L) E := (↥L)⟮x⟯
hdvd : 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: simp_rw [finSepDegree_bot, IntermediateField.finrank_bot, one_dvd]
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
hfd : FiniteDimensional F E
⊢ (fun K => finSepDegree F ↥K ∣ finrank F ↥K) ⊥
state_after: no goals