Theorem: ConjClasses.mk_bijOn
File: Mathlib/GroupTheory/Subgroup/Center.lean

tactic: refine ⟨fun g hg ↦ ?_, fun x hx y _ H ↦ ?_, ?_⟩
state_before: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
⊢ Set.BijOn ConjClasses.mk (↑(Subgroup.center G)) (noncenter G)ᶜ
state_after: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
⊢ ConjClasses.mk g ∈ (noncenter G)ᶜ

case refine_2
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
x : G
hx : x ∈ ↑(Subgroup.center G)
y : G
x✝ : y ∈ ↑(Subgroup.center G)
H : ConjClasses.mk x = ConjClasses.mk y
⊢ x = y

case refine_3
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
⊢ Set.SurjOn ConjClasses.mk (↑(Subgroup.center G)) (noncenter G)ᶜ

tactic: simp only [mem_noncenter, Set.compl_def, Set.mem_setOf, Set.not_nontrivial_iff]
state_before: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
⊢ ConjClasses.mk g ∈ (noncenter G)ᶜ
state_after: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
⊢ (ConjClasses.mk g).carrier.Subsingleton

tactic: intro x hx y hy
state_before: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
⊢ (ConjClasses.mk g).carrier.Subsingleton
state_after: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
x : G
hx : x ∈ (ConjClasses.mk g).carrier
y : G
hy : y ∈ (ConjClasses.mk g).carrier
⊢ x = y

tactic: simp only [mem_carrier_iff_mk_eq, mk_eq_mk_iff_isConj] at hx hy
state_before: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
x : G
hx : x ∈ (ConjClasses.mk g).carrier
y : G
hy : y ∈ (ConjClasses.mk g).carrier
⊢ x = y
state_after: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
x y : G
hx : IsConj x g
hy : IsConj y g
⊢ x = y

tactic: rw [hx.eq_of_right_mem_center hg, hy.eq_of_right_mem_center hg]
state_before: case refine_1
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
g : G
hg : g ∈ ↑(Subgroup.center G)
x y : G
hx : IsConj x g
hy : IsConj y g
⊢ x = y
state_after: no goals

tactic: rw [mk_eq_mk_iff_isConj] at H
state_before: case refine_2
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
x : G
hx : x ∈ ↑(Subgroup.center G)
y : G
x✝ : y ∈ ↑(Subgroup.center G)
H : ConjClasses.mk x = ConjClasses.mk y
⊢ x = y
state_after: case refine_2
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
x : G
hx : x ∈ ↑(Subgroup.center G)
y : G
x✝ : y ∈ ↑(Subgroup.center G)
H : IsConj x y
⊢ x = y

tactic: exact H.eq_of_left_mem_center hx
state_before: case refine_2
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
x : G
hx : x ∈ ↑(Subgroup.center G)
y : G
x✝ : y ∈ ↑(Subgroup.center G)
H : IsConj x y
⊢ x = y
state_after: no goals

tactic: rintro ⟨g⟩ hg
state_before: case refine_3
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
⊢ Set.SurjOn ConjClasses.mk (↑(Subgroup.center G)) (noncenter G)ᶜ
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : Quot.mk Setoid.r g ∈ (noncenter G)ᶜ
⊢ Quot.mk Setoid.r g ∈ ConjClasses.mk '' ↑(Subgroup.center G)

tactic: refine ⟨g, ?_, rfl⟩
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : Quot.mk Setoid.r g ∈ (noncenter G)ᶜ
⊢ Quot.mk Setoid.r g ∈ ConjClasses.mk '' ↑(Subgroup.center G)
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : Quot.mk Setoid.r g ∈ (noncenter G)ᶜ
⊢ g ∈ ↑(Subgroup.center G)

tactic: simp only [mem_noncenter, Set.compl_def, Set.mem_setOf, Set.not_nontrivial_iff] at hg
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : Quot.mk Setoid.r g ∈ (noncenter G)ᶜ
⊢ g ∈ ↑(Subgroup.center G)
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
⊢ g ∈ ↑(Subgroup.center G)

tactic: rw [SetLike.mem_coe, Subgroup.mem_center_iff]
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
⊢ g ∈ ↑(Subgroup.center G)
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
⊢ ∀ (g_1 : G), g_1 * g = g * g_1

tactic: intro h
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
⊢ ∀ (g_1 : G), g_1 * g = g * g_1
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ h * g = g * h

tactic: rw [← mul_inv_eq_iff_eq_mul]
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ h * g = g * h
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ h * g * h⁻¹ = g

tactic: refine hg ?_ mem_carrier_mk
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ h * g * h⁻¹ = g
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ h * g * h⁻¹ ∈ carrier (Quot.mk Setoid.r g)

tactic: rw [mem_carrier_iff_mk_eq]
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ h * g * h⁻¹ ∈ carrier (Quot.mk Setoid.r g)
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ ConjClasses.mk (h * g * h⁻¹) = Quot.mk Setoid.r g

tactic: apply mk_eq_mk_iff_isConj.mpr
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ ConjClasses.mk (h * g * h⁻¹) = Quot.mk Setoid.r g
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ IsConj (h * g * h⁻¹) g

tactic: rw [isConj_comm, isConj_iff]
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ IsConj (h * g * h⁻¹) g
state_after: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ ∃ c, c * g * c⁻¹ = h * g * h⁻¹

tactic: exact ⟨h, rfl⟩
state_before: case refine_3.mk
G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : Group G
a✝ : ConjClasses G
g : G
hg : (carrier (Quot.mk Setoid.r g)).Subsingleton
h : G
⊢ ∃ c, c * g * c⁻¹ = h * g * h⁻¹
state_after: no goals