Theorem: Submonoid.LocalizationMap.toMap_injective_iff
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: rw [Injective]
state_before: M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
⊢ Injective ⇑f.toMap ↔ ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
state_after: M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
⊢ (∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂) ↔ ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x

tactic: constructor <;> intro h
state_before: M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
⊢ (∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂) ↔ ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
state_after: case mp
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂
⊢ ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x

case mpr
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
⊢ ∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂

tactic: intro x hx y z hyz
state_before: case mp
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂
⊢ ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
state_after: case mp
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂
x : M
hx : x ∈ S
y z : M
hyz : (fun x_1 => x * x_1) y = (fun x_1 => x * x_1) z
⊢ y = z

tactic: simp_rw [LocalizationMap.eq_iff_exists] at h
state_before: case mp
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂
x : M
hx : x ∈ S
y z : M
hyz : (fun x_1 => x * x_1) y = (fun x_1 => x * x_1) z
⊢ y = z
state_after: case mp
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
x : M
hx : x ∈ S
y z : M
hyz : (fun x_1 => x * x_1) y = (fun x_1 => x * x_1) z
h : ∀ ⦃a₁ a₂ : M⦄, (∃ c, ↑c * a₁ = ↑c * a₂) → a₁ = a₂
⊢ y = z

tactic: apply (fun y z _ => h) y z x
state_before: case mp
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
x : M
hx : x ∈ S
y z : M
hyz : (fun x_1 => x * x_1) y = (fun x_1 => x * x_1) z
h : ∀ ⦃a₁ a₂ : M⦄, (∃ c, ↑c * a₁ = ↑c * a₂) → a₁ = a₂
⊢ y = z
state_after: case mp.a
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
x : M
hx : x ∈ S
y z : M
hyz : (fun x_1 => x * x_1) y = (fun x_1 => x * x_1) z
h : ∀ ⦃a₁ a₂ : M⦄, (∃ c, ↑c * a₁ = ↑c * a₂) → a₁ = a₂
⊢ ∃ c, ↑c * y = ↑c * z

tactic: lift x to S using hx
state_before: case mp.a
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
x : M
hx : x ∈ S
y z : M
hyz : (fun x_1 => x * x_1) y = (fun x_1 => x * x_1) z
h : ∀ ⦃a₁ a₂ : M⦄, (∃ c, ↑c * a₁ = ↑c * a₂) → a₁ = a₂
⊢ ∃ c, ↑c * y = ↑c * z
state_after: case mp.a.intro
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
y z : M
h : ∀ ⦃a₁ a₂ : M⦄, (∃ c, ↑c * a₁ = ↑c * a₂) → a₁ = a₂
x : ↥S
hyz : (fun x_1 => ↑x * x_1) y = (fun x_1 => ↑x * x_1) z
⊢ ∃ c, ↑c * y = ↑c * z

tactic: use x
state_before: case mp.a.intro
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
y z : M
h : ∀ ⦃a₁ a₂ : M⦄, (∃ c, ↑c * a₁ = ↑c * a₂) → a₁ = a₂
x : ↥S
hyz : (fun x_1 => ↑x * x_1) y = (fun x_1 => ↑x * x_1) z
⊢ ∃ c, ↑c * y = ↑c * z
state_after: no goals

tactic: intro a b hab
state_before: case mpr
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
⊢ ∀ ⦃a₁ a₂ : M⦄, f.toMap a₁ = f.toMap a₂ → a₁ = a₂
state_after: case mpr
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
a b : M
hab : f.toMap a = f.toMap b
⊢ a = b

tactic: rw [LocalizationMap.eq_iff_exists] at hab
state_before: case mpr
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
a b : M
hab : f.toMap a = f.toMap b
⊢ a = b
state_after: case mpr
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
a b : M
hab : ∃ c, ↑c * a = ↑c * b
⊢ a = b

tactic: obtain ⟨c,hc⟩ := hab
state_before: case mpr
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
a b : M
hab : ∃ c, ↑c * a = ↑c * b
⊢ a = b
state_after: case mpr.intro
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
a b : M
c : ↥S
hc : ↑c * a = ↑c * b
⊢ a = b

tactic: apply (fun x a => h a) c (SetLike.coe_mem c) hc
state_before: case mpr.intro
M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f✝ : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
Q : Type u_4
inst✝ : CommMonoid Q
f : S.LocalizationMap N
h : ∀ ⦃x : M⦄, x ∈ S → IsLeftRegular x
a b : M
c : ↥S
hc : ↑c * a = ↑c * b
⊢ a = b
state_after: no goals