Theorem: IsLocalization.isLocalization_of_is_exists_mul_mem
File: Mathlib/RingTheory/Localization/LocalizationLocalization.lean

Proof steps:
state_before: R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
y : ↥N
⊢ IsUnit ((algebraMap R S) ↑y)
state_after: case intro
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
y : ↥N
m : R
hm : m * ↑y ∈ M
⊢ IsUnit ((algebraMap R S) ↑y)
tactic: obtain ⟨m, hm⟩ := h' y
state_before: case intro
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
y : ↥N
m : R
hm : m * ↑y ∈ M
⊢ IsUnit ((algebraMap R S) ↑y)
state_after: case intro
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
y : ↥N
m : R
hm : m * ↑y ∈ M
this : IsUnit ((algebraMap R S) ↑⟨m * ↑y, hm⟩)
⊢ IsUnit ((algebraMap R S) ↑y)
tactic: have := IsLocalization.map_units S ⟨_, hm⟩
state_before: case intro
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
y : ↥N
m : R
hm : m * ↑y ∈ M
this : IsUnit ((algebraMap R S) ↑⟨m * ↑y, hm⟩)
⊢ IsUnit ((algebraMap R S) ↑y)
state_after: case intro
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
y : ↥N
m : R
hm : m * ↑y ∈ M
this : IsUnit ((algebraMap R S) m * (algebraMap R S) ↑y)
⊢ IsUnit ((algebraMap R S) ↑y)
tactic: erw [map_mul] at this
state_before: case intro
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
y : ↥N
m : R
hm : m * ↑y ∈ M
this : IsUnit ((algebraMap R S) m * (algebraMap R S) ↑y)
⊢ IsUnit ((algebraMap R S) ↑y)
state_after: no goals
tactic: exact (IsUnit.mul_iff.mp this).2
state_before: R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
z : S
⊢ ∃ x, z * (algebraMap R S) ↑x.2 = (algebraMap R S) x.1
state_after: case intro.mk
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
z : S
y : R
s : ↥M
e : z * (algebraMap R S) ↑(y, s).2 = (algebraMap R S) (y, s).1
⊢ ∃ x, z * (algebraMap R S) ↑x.2 = (algebraMap R S) x.1
tactic: obtain ⟨⟨y, s⟩, e⟩ := IsLocalization.surj M z
state_before: case intro.mk
R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
z : S
y : R
s : ↥M
e : z * (algebraMap R S) ↑(y, s).2 = (algebraMap R S) (y, s).1
⊢ ∃ x, z * (algebraMap R S) ↑x.2 = (algebraMap R S) x.1
state_after: no goals
tactic: exact ⟨⟨y, _, h s.prop⟩, e⟩
state_before: R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
⊢ (algebraMap R S) x✝¹ = (algebraMap R S) x✝ → ∃ c, ↑c * x✝¹ = ↑c * x✝
state_after: R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
⊢ (∃ c, ↑c * x✝¹ = ↑c * x✝) → ∃ c, ↑c * x✝¹ = ↑c * x✝
tactic: rw [IsLocalization.eq_iff_exists M]
state_before: R : Type u_1
inst✝⁶ : CommSemiring R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
P : Type u_3
inst✝³ : CommSemiring P
N✝ : Submonoid S
T : Type u_4
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : ↥N), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
⊢ (∃ c, ↑c * x✝¹ = ↑c * x✝) → ∃ c, ↑c * x✝¹ = ↑c * x✝
state_after: no goals
tactic: exact fun ⟨x, hx⟩ => ⟨⟨_, h x.prop⟩, hx⟩