Theorem: QuotientGroup.preimage_image_coe
File: Mathlib/GroupTheory/QuotientGroup.lean

tactic: ext a
state_before: G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
⊢ mk ⁻¹' (mk '' s) = ↑N * s
state_after: case h
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ mk ⁻¹' (mk '' s) ↔ a ∈ ↑N * s

tactic: constructor
state_before: case h
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ mk ⁻¹' (mk '' s) ↔ a ∈ ↑N * s
state_after: case h.mp
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ mk ⁻¹' (mk '' s) → a ∈ ↑N * s

case h.mpr
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ ↑N * s → a ∈ mk ⁻¹' (mk '' s)

tactic: rintro ⟨b, hb, h⟩
state_before: case h.mp
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ mk ⁻¹' (mk '' s) → a ∈ ↑N * s
state_after: case h.mp.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a b : G
hb : b ∈ s
h : ↑b = ↑a
⊢ a ∈ ↑N * s

tactic: refine ⟨a / b, (QuotientGroup.eq_one_iff _).1 ?_, b, hb, div_mul_cancel _ _⟩
state_before: case h.mp.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a b : G
hb : b ∈ s
h : ↑b = ↑a
⊢ a ∈ ↑N * s
state_after: case h.mp.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a b : G
hb : b ∈ s
h : ↑b = ↑a
⊢ ↑(a / b) = 1

tactic: simp only [h, QuotientGroup.mk_div, div_self']
state_before: case h.mp.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a b : G
hb : b ∈ s
h : ↑b = ↑a
⊢ ↑(a / b) = 1
state_after: no goals

tactic: rintro ⟨a, ha, b, hb, rfl⟩
state_before: case h.mpr
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ ↑N * s → a ∈ mk ⁻¹' (mk '' s)
state_after: case h.mpr.intro.intro.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
ha : a ∈ ↑N
b : G
hb : b ∈ s
⊢ (fun x x_1 => x * x_1) a b ∈ mk ⁻¹' (mk '' s)

tactic: refine ⟨b, hb, ?_⟩
state_before: case h.mpr.intro.intro.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
ha : a ∈ ↑N
b : G
hb : b ∈ s
⊢ (fun x x_1 => x * x_1) a b ∈ mk ⁻¹' (mk '' s)
state_after: case h.mpr.intro.intro.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
ha : a ∈ ↑N
b : G
hb : b ∈ s
⊢ ↑b = ↑((fun x x_1 => x * x_1) a b)

tactic: simpa only [QuotientGroup.mk_mul, self_eq_mul_left, QuotientGroup.eq_one_iff]
state_before: case h.mpr.intro.intro.intro.intro
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
ha : a ∈ ↑N
b : G
hb : b ∈ s
⊢ ↑b = ↑((fun x x_1 => x * x_1) a b)
state_after: no goals