Theorem: IntermediateField.exists_lt_finrank_of_infinite_dimensional
File: Mathlib/FieldTheory/Adjoin.lean

tactic: induction' n with n ih
state_before: F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L : Type u_3
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
⊢ ∃ L, FiniteDimensional F ↥L ∧ n < finrank F ↥L
state_after: case zero
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L : Type u_3
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
⊢ ∃ L, FiniteDimensional F ↥L ∧ 0 < finrank F ↥L

case succ
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L : Type u_3
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
ih : ∃ L, FiniteDimensional F ↥L ∧ n < finrank F ↥L
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L

tactic: obtain ⟨L, fin, hn⟩ := ih
state_before: case succ
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L : Type u_3
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
ih : ∃ L, FiniteDimensional F ↥L ∧ n < finrank F ↥L
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L
state_after: case succ.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L

tactic: obtain ⟨x, hx⟩ : ∃ x : E, x ∉ L := by
  contrapose! hnfd
  rw [show L = ⊤ from eq_top_iff.2 fun x _ ↦ hnfd x] at fin
  exact topEquiv.toLinearEquiv.finiteDimensional
state_before: case succ.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L
state_after: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L

tactic: let L' := L ⊔ F⟮x⟯
state_before: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L
state_after: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L

tactic: haveI := adjoin.finiteDimensional (Algebra.IsIntegral.isIntegral (R := F) x)
state_before: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L
state_after: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L

tactic: refine ⟨L', inferInstance, by_contra fun h ↦ ?_⟩
state_before: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
⊢ ∃ L, FiniteDimensional F ↥L ∧ n + 1 < finrank F ↥L
state_after: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
h : ¬n + 1 < finrank F ↥L'
⊢ False

tactic: have h1 : L = L' := eq_of_le_of_finrank_le le_sup_left ((not_lt.1 h).trans hn)
state_before: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
h : ¬n + 1 < finrank F ↥L'
⊢ False
state_after: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
h : ¬n + 1 < finrank F ↥L'
h1 : L = L'
⊢ False

tactic: have h2 : F⟮x⟯ ≤ L' := le_sup_right
state_before: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
h : ¬n + 1 < finrank F ↥L'
h1 : L = L'
⊢ False
state_after: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
h : ¬n + 1 < finrank F ↥L'
h1 : L = L'
h2 : F⟮x⟯ ≤ L'
⊢ False

tactic: exact hx <| (h1.symm ▸ h2) <| mem_adjoin_simple_self F x
state_before: case succ.intro.intro.intro
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
x : E
hx : x ∉ L
L' : IntermediateField F E := L ⊔ F⟮x⟯
this : FiniteDimensional F ↥F⟮x⟯
h : ¬n + 1 < finrank F ↥L'
h1 : L = L'
h2 : F⟮x⟯ ≤ L'
⊢ False
state_after: no goals

tactic: exact ⟨⊥, Subalgebra.finite_bot, finrank_pos⟩
state_before: case zero
F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L : Type u_3
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
⊢ ∃ L, FiniteDimensional F ↥L ∧ 0 < finrank F ↥L
state_after: no goals

tactic: contrapose! hnfd
state_before: F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
hnfd : ¬FiniteDimensional F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
⊢ ∃ x, x ∉ L
state_after: F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
hnfd : ∀ (x : E), x ∈ L
⊢ FiniteDimensional F E

tactic: rw [show L = ⊤ from eq_top_iff.2 fun x _ ↦ hnfd x] at fin
state_before: F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥L
hn : n < finrank F ↥L
hnfd : ∀ (x : E), x ∈ L
⊢ FiniteDimensional F E
state_after: F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥⊤
hn : n < finrank F ↥L
hnfd : ∀ (x : E), x ∈ L
⊢ FiniteDimensional F E

tactic: exact topEquiv.toLinearEquiv.finiteDimensional
state_before: F : Type u_1
inst✝⁷ : Field F
E : Type u_2
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
α : E
K : Type u
inst✝⁴ : Field K
inst✝³ : Algebra F K
L✝ : Type u_3
inst✝² : Field L✝
inst✝¹ : Algebra K L✝
inst✝ : Algebra.IsAlgebraic F E
n : ℕ
L : IntermediateField F E
fin : FiniteDimensional F ↥⊤
hn : n < finrank F ↥L
hnfd : ∀ (x : E), x ∈ L
⊢ FiniteDimensional F E
state_after: no goals