Theorem: Field.FiniteDimensional.of_finite_intermediateField
File: Mathlib/FieldTheory/PrimitiveElement.lean

Proof steps:
state_before: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
⊢ FiniteDimensional F E
state_after: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
⊢ FiniteDimensional F E
tactic: let IF := { K : IntermediateField F E // ∃ x, K = F⟮x⟯ }
state_before: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
⊢ FiniteDimensional F E
state_after: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this : Algebra.IsAlgebraic F E
⊢ FiniteDimensional F E
tactic: have := isAlgebraic_of_finite_intermediateField F E
state_before: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this : Algebra.IsAlgebraic F E
⊢ FiniteDimensional F E
state_after: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
⊢ FiniteDimensional F E
tactic: haveI : ∀ K : IF, FiniteDimensional F K.1 := fun ⟨_, x, rfl⟩ ↦ adjoin.finiteDimensional
    (Algebra.IsIntegral.isIntegral _)
state_before: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
⊢ FiniteDimensional F E
state_after: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
hfin : FiniteDimensional F ↥(⨆ i, ↑i)
⊢ FiniteDimensional F E
tactic: have hfin := finiteDimensional_iSup_of_finite (t := fun K : IF ↦ K.1)
state_before: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
hfin : FiniteDimensional F ↥(⨆ i, ↑i)
⊢ FiniteDimensional F E
state_after: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
hfin : FiniteDimensional F ↥(⨆ i, ↑i)
htop : ⨆ K, ↑K = ⊤
⊢ FiniteDimensional F E
tactic: have htop : ⨆ K : IF, K.1 = ⊤ := le_top.antisymm fun x _ ↦
    le_iSup (fun K : IF ↦ K.1) ⟨F⟮x⟯, x, rfl⟩ <| mem_adjoin_simple_self F x
state_before: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
hfin : FiniteDimensional F ↥(⨆ i, ↑i)
htop : ⨆ K, ↑K = ⊤
⊢ FiniteDimensional F E
state_after: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
hfin : FiniteDimensional F ↥⊤
htop : ⨆ K, ↑K = ⊤
⊢ FiniteDimensional F E
tactic: rw [htop] at hfin
state_before: F : Type u_1
E : Type u_2
inst✝³ : Field F
inst✝² : Field E
inst✝¹ : Algebra F E
inst✝ : Finite (IntermediateField F E)
IF : Type u_2 := { K // ∃ x, K = F⟮x⟯ }
this✝ : Algebra.IsAlgebraic F E
this : ∀ (K : IF), FiniteDimensional F ↥↑K
hfin : FiniteDimensional F ↥⊤
htop : ⨆ K, ↑K = ⊤
⊢ FiniteDimensional F E
state_after: no goals
tactic: exact topEquiv.toLinearEquiv.finiteDimensional