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

tactic: haveI := IsFractionRing.nontrivial R T
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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

tactic: haveI := (algebraMap S T).domain_nontrivial
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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: apply isFractionRing_of_isLocalization M S T
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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: intro x hx
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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: rw [mem_nonZeroDivisors_iff_ne_zero]
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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 hx'
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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: apply @zero_ne_one S
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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: 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.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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: exact ⟨⟨x, hx⟩, by simp [hx']⟩
state_before: case a
R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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: simp [hx']
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S✝ : Type ?u.712246
inst✝¹¹ : CommRing S✝
inst✝¹⁰ : Algebra R S✝
P : Type ?u.712502
inst✝⁹ : CommRing P
inst✝⁸ : IsDomain R
S : Type u_2
T : Type u_3
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
⊢ ↑{ val := x, property := hx } * 1 = 0