Theorem: IsFractionRing.isFractionRing_of_isDomain_of_isLocalization
File: Mathlib/RingTheory/Localization/LocalizationLocalization.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
⊢ IsFractionRing S T
state_after: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this : Nontrivial T
⊢ IsFractionRing S T
tactic: haveI := IsFractionRing.nontrivial R T
state_before: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this : Nontrivial T
⊢ IsFractionRing S T
state_after: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
⊢ IsFractionRing S T
tactic: haveI := (algebraMap S T).domain_nontrivial
state_before: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
⊢ IsFractionRing S T
state_after: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
⊢ M ≤ nonZeroDivisors R
tactic: apply isFractionRing_of_isLocalization M S T
state_before: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
⊢ M ≤ nonZeroDivisors R
state_after: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
⊢ x ∈ nonZeroDivisors R
tactic: intro x hx
state_before: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
⊢ x ∈ nonZeroDivisors R
state_after: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
⊢ x ≠ 0
tactic: rw [mem_nonZeroDivisors_iff_ne_zero]
state_before: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
⊢ x ≠ 0
state_after: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
hx' : x = 0
⊢ False
tactic: intro hx'
state_before: R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
hx' : x = 0
⊢ False
state_after: case a
R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
hx' : x = 0
⊢ 0 = 1
tactic: apply @zero_ne_one S
state_before: case a
R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
hx' : x = 0
⊢ 0 = 1
state_after: case a
R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
hx' : x = 0
⊢ ∃ m, ↑m * 1 = 0
tactic: rw [← (algebraMap R S).map_one, ← @mk'_one R _ M, @comm _ Eq, mk'_eq_zero_iff]
state_before: case a
R : Type u_1
inst✝¹⁰ : CommRing R
M : Submonoid R
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : IsDomain R
S : Type u_3
T : Type u_4
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
inst✝¹ : IsLocalization M S
inst✝ : IsFractionRing R T
this✝ : Nontrivial T
this : Nontrivial S
x : R
hx : x ∈ M
hx' : x = 0
⊢ ∃ m, ↑m * 1 = 0
state_after: no goals
tactic: exact ⟨⟨x, hx⟩, by simp [hx']⟩