Theorem: isField_of_isIntegral_of_isField'
File: Mathlib/RingTheory/IntegralClosure/IsIntegralClosure/Basic.lean

Proof steps:
state_before: R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
⊢ IsField S
state_after: R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
⊢ ∃ b, x * b = 1
tactic: refine ⟨⟨0, 1, zero_ne_one⟩, mul_comm, fun {x} hx ↦ ?_⟩
state_before: R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
⊢ ∃ b, x * b = 1
state_after: R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
this : Module.Finite R ↥(adjoin R {x})
⊢ ∃ b, x * b = 1
tactic: have : Module.Finite R (adjoin R {x}) := ⟨(Submodule.fg_top _).mpr
    (Algebra.IsIntegral.isIntegral x).fg_adjoin_singleton⟩
state_before: R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
this : Module.Finite R ↥(adjoin R {x})
⊢ ∃ b, x * b = 1
state_after: R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
this✝ : Module.Finite R ↥(adjoin R {x})
this : Field R := hR.toField
⊢ ∃ b, x * b = 1
tactic: letI := hR.toField
state_before: R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
this✝ : Module.Finite R ↥(adjoin R {x})
this : Field R := hR.toField
⊢ ∃ b, x * b = 1
state_after: case intro
R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
this✝ : Module.Finite R ↥(adjoin R {x})
this : Field R := hR.toField
y : ↥(adjoin R {x})
hy : ⟨x, ⋯⟩ * y = 1
⊢ ∃ b, x * b = 1
tactic: obtain ⟨y, hy⟩ := FiniteDimensional.exists_mul_eq_one R
    (K := adjoin R {x}) (x := ⟨x, subset_adjoin rfl⟩) (mt Subtype.ext_iff.mp hx)
state_before: case intro
R✝ : Type u_1
A : Type u_2
B : Type u_3
S✝ : Type u_4
T : Type u_5
inst✝¹³ : CommRing R✝
inst✝¹² : CommRing A
inst✝¹¹ : Ring B
inst✝¹⁰ : CommRing S✝
inst✝⁹ : CommRing T
inst✝⁸ : Algebra A B
inst✝⁷ : Algebra R✝ B
f : R✝ →+* S✝
g : S✝ →+* T
inst✝⁶ : Algebra R✝ A
inst✝⁵ : IsScalarTower R✝ A B
R : Type u_6
S : Type u_7
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsField R
x : S
hx : x ≠ 0
this✝ : Module.Finite R ↥(adjoin R {x})
this : Field R := hR.toField
y : ↥(adjoin R {x})
hy : ⟨x, ⋯⟩ * y = 1
⊢ ∃ b, x * b = 1
state_after: no goals
tactic: exact ⟨y, Subtype.ext_iff.mp hy⟩