Theorem: Subgroup.commute_of_normal_of_disjoint
File: Mathlib/GroupTheory/Subgroup/Basic.lean

tactic: apply hdis.le_bot
state_before: G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
⊢ x * y * x⁻¹ * y⁻¹ = 1

tactic: constructor
state_before: case a
G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
⊢ x * y * x⁻¹ * y⁻¹ ∈ H₁ ⊓ H₂

tactic: show x * y = y * x
state_before: G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
this : x * y * x⁻¹ * y⁻¹ = 1
⊢ _root_.Commute x y

tactic: rw [mul_assoc, mul_eq_one_iff_eq_inv] at this
state_before: G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
this : x * y * x⁻¹ * y⁻¹ = 1
⊢ x * y = y * x

tactic: simp only [this, mul_inv_rev, inv_inv]
state_before: G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
this : x * y = (x⁻¹ * y⁻¹)⁻¹
⊢ x * y = y * x

tactic: suffices x * (y * x⁻¹ * y⁻¹) ∈ H₁ by simpa [mul_assoc]
state_before: case a.left
G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
⊢ x * y * x⁻¹ * y⁻¹ ∈ ↑H₁.toSubmonoid

tactic: exact H₁.mul_mem hx (hH₁.conj_mem _ (H₁.inv_mem hx) _)
state_before: case a.left
G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
⊢ x * (y * x⁻¹ * y⁻¹) ∈ H₁

tactic: simpa [mul_assoc]
state_before: G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
this : x * (y * x⁻¹ * y⁻¹) ∈ H₁
⊢ x * y * x⁻¹ * y⁻¹ ∈ ↑H₁.toSubmonoid

tactic: show x * y * x⁻¹ * y⁻¹ ∈ H₂
state_before: case a.right
G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
⊢ x * y * x⁻¹ * y⁻¹ ∈ ↑H₂.toSubmonoid

tactic: apply H₂.mul_mem _ (H₂.inv_mem hy)
state_before: case a.right
G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
⊢ x * y * x⁻¹ * y⁻¹ ∈ H₂

tactic: apply hH₂.conj_mem _ hy
state_before: G : Type u_1
G' : Type ?u.717622
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.717631
inst✝¹ : AddGroup A
N : Type ?u.717637
inst✝ : Group N
H₁ H₂ : Subgroup G
hH₁ : Normal H₁
hH₂ : Normal H₂
hdis : Disjoint H₁ H₂
x y : G
hx : x ∈ H₁
hy : y ∈ H₂
⊢ x * y * x⁻¹ ∈ H₂