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

tactic: obtain ⟨m, hm⟩ := h' y
state_before: R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
y : { x // x ∈ N }
⊢ IsUnit (↑(algebraMap R S) ↑y)

tactic: have := IsLocalization.map_units S ⟨_, hm⟩
state_before: case intro
R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
y : { x // x ∈ N }
m : R
hm : m * ↑y ∈ M
⊢ IsUnit (↑(algebraMap R S) ↑y)

tactic: erw [map_mul] at this
state_before: case intro
R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
y : { x // x ∈ N }
m : R
hm : m * ↑y ∈ M
this : IsUnit (↑(algebraMap R S) ↑{ val := m * ↑y, property := hm })
⊢ IsUnit (↑(algebraMap R S) ↑y)

tactic: exact (IsUnit.mul_iff.mp this).2
state_before: case intro
R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
y : { x // x ∈ N }
m : R
hm : m * ↑y ∈ M
this : IsUnit (↑(algebraMap R S) m * ↑(algebraMap R S) ↑y)
⊢ IsUnit (↑(algebraMap R S) ↑y)

tactic: obtain ⟨⟨y, s⟩, e⟩ := IsLocalization.surj M z
state_before: R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
z : S
⊢ ∃ x, z * ↑(algebraMap R S) ↑x.snd = ↑(algebraMap R S) x.fst

tactic: exact ⟨⟨y, _, h s.prop⟩, e⟩
state_before: case intro.mk
R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
z : S
y : R
s : { x // x ∈ M }
e : z * ↑(algebraMap R S) ↑(y, s).snd = ↑(algebraMap R S) (y, s).fst
⊢ ∃ x, z * ↑(algebraMap R S) ↑x.snd = ↑(algebraMap R S) x.fst

tactic: rw [IsLocalization.eq_iff_exists M]
state_before: R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
⊢ ↑(algebraMap R S) x✝¹ = ↑(algebraMap R S) x✝ ↔ ∃ c, ↑c * x✝¹ = ↑c * x✝

tactic: refine ⟨fun ⟨x, hx⟩ => ⟨⟨_, h x.prop⟩, hx⟩, ?_⟩
state_before: R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
⊢ (∃ c, ↑c * x✝¹ = ↑c * x✝) ↔ ∃ c, ↑c * x✝¹ = ↑c * x✝

tactic: rintro ⟨x, h⟩
state_before: R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
⊢ (∃ c, ↑c * x✝¹ = ↑c * x✝) → ∃ c, ↑c * x✝¹ = ↑c * x✝

tactic: obtain ⟨m, hm⟩ := h' x
state_before: case intro
R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h✝ : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
x : { x // x ∈ N }
h : ↑x * x✝¹ = ↑x * x✝
⊢ ∃ c, ↑c * x✝¹ = ↑c * x✝

tactic: refine ⟨⟨_, hm⟩, ?_⟩
state_before: case intro.intro
R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h✝ : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
x : { x // x ∈ N }
h : ↑x * x✝¹ = ↑x * x✝
m : R
hm : m * ↑x ∈ M
⊢ ∃ c, ↑c * x✝¹ = ↑c * x✝

tactic: simp [h, mul_assoc]
state_before: case intro.intro
R : Type u_1
inst✝⁶ : CommRing R
M✝ : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
P : Type ?u.656657
inst✝³ : CommRing P
N✝ : Submonoid S
T : Type ?u.656821
inst✝² : CommRing T
inst✝¹ : Algebra R T
M N : Submonoid R
inst✝ : IsLocalization M S
h✝ : M ≤ N
h' : ∀ (x : { x // x ∈ N }), ∃ m, m * ↑x ∈ M
x✝¹ x✝ : R
x : { x // x ∈ N }
h : ↑x * x✝¹ = ↑x * x✝
m : R
hm : m * ↑x ∈ M
⊢ ↑{ val := m * ↑x, property := hm } * x✝¹ = ↑{ val := m * ↑x, property := hm } * x✝