Theorem: AddSubmonoid.LocalizationMap.map_surjective_of_surjective
File: Mathlib/GroupTheory/MonoidLocalization/Basic.lean

Proof steps:
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
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k✝ : T.LocalizationMap Q
hg : Surjective ⇑g
k : (Submonoid.map g S).LocalizationMap Q
z : Q
⊢ ∃ a, (f.map ⋯ k) a = z
state_after: case intro.intro.mk.intro.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
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k✝ : T.LocalizationMap Q
hg : Surjective ⇑g
k : (Submonoid.map g S).LocalizationMap Q
y : P
s : M
hs : s ∈ ↑S
⊢ ∃ a, (f.map ⋯ k) a = k.mk' y ⟨g s, ⋯⟩
tactic: obtain ⟨y, ⟨y', s, hs, rfl⟩, rfl⟩ := k.mk'_surjective z
state_before: case intro.intro.mk.intro.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
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k✝ : T.LocalizationMap Q
hg : Surjective ⇑g
k : (Submonoid.map g S).LocalizationMap Q
y : P
s : M
hs : s ∈ ↑S
⊢ ∃ a, (f.map ⋯ k) a = k.mk' y ⟨g s, ⋯⟩
state_after: case intro.intro.mk.intro.intro.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
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k✝ : T.LocalizationMap Q
hg : Surjective ⇑g
k : (Submonoid.map g S).LocalizationMap Q
s : M
hs : s ∈ ↑S
x : M
⊢ ∃ a, (f.map ⋯ k) a = k.mk' (g x) ⟨g s, ⋯⟩
tactic: obtain ⟨x, rfl⟩ := hg y
state_before: case intro.intro.mk.intro.intro.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
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k✝ : T.LocalizationMap Q
hg : Surjective ⇑g
k : (Submonoid.map g S).LocalizationMap Q
s : M
hs : s ∈ ↑S
x : M
⊢ ∃ a, (f.map ⋯ k) a = k.mk' (g x) ⟨g s, ⋯⟩
state_after: case h
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
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k✝ : T.LocalizationMap Q
hg : Surjective ⇑g
k : (Submonoid.map g S).LocalizationMap Q
s : M
hs : s ∈ ↑S
x : M
⊢ (f.map ⋯ k) (f.mk' x ⟨s, hs⟩) = k.mk' (g x) ⟨g s, ⋯⟩
tactic: use f.mk' x ⟨s, hs⟩
state_before: case h
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
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k✝ : T.LocalizationMap Q
hg : Surjective ⇑g
k : (Submonoid.map g S).LocalizationMap Q
s : M
hs : s ∈ ↑S
x : M
⊢ (f.map ⋯ k) (f.mk' x ⟨s, hs⟩) = k.mk' (g x) ⟨g s, ⋯⟩
state_after: no goals
tactic: rw [map_mk']