Theorem: Subgroup.mul_normal
File: Mathlib/Algebra/Group/Subgroup/Pointwise.lean

tactic: rw [sup_eq_closure_mul]
state_before: α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
⊢ ↑(H ⊔ N) = ↑H * ↑N
state_after: α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
⊢ ↑(closure (↑H * ↑N)) = ↑H * ↑N

tactic: refine Set.Subset.antisymm (fun x hx => ?_) subset_closure
state_before: α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
⊢ ↑(closure (↑H * ↑N)) = ↑H * ↑N
state_after: α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x : G
hx : x ∈ ↑(closure (↑H * ↑N))
⊢ x ∈ ↑H * ↑N

tactic: exact ⟨1, one_mem _, 1, one_mem _, mul_one 1⟩
state_before: case one
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x : G
⊢ 1 ∈ ↑H * ↑N
state_after: no goals

tactic: exact hx
state_before: case mem
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x x✝ : G
hx : x✝ ∈ ↑H * ↑N
⊢ x✝ ∈ ↑H * ↑N
state_after: no goals

tactic: obtain ⟨x, hx, y, hy, rfl⟩ := hx
state_before: case inv_mem
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H * ↑N
⊢ x⁻¹ ∈ ↑H * ↑N
state_after: case inv_mem.intro.intro.intro.intro
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
⊢ ((fun x x_1 => x * x_1) x y)⁻¹ ∈ ↑H * ↑N

tactic: simpa only [mul_inv_rev, mul_assoc, inv_inv, inv_mul_cancel_left]
  using mul_mem_mul (inv_mem hx) (hN.conj_mem _ (inv_mem hy) x)
state_before: case inv_mem.intro.intro.intro.intro
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
⊢ ((fun x x_1 => x * x_1) x y)⁻¹ ∈ ↑H * ↑N
state_after: no goals

tactic: obtain ⟨x, hx, y, hy, rfl⟩ := hx
state_before: case mul
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x x'✝ x' : G
hx✝ : x'✝ ∈ closure (↑H * ↑N)
hy✝ : x' ∈ closure (↑H * ↑N)
hx : x'✝ ∈ ↑H * ↑N
hx' : x' ∈ ↑H * ↑N
⊢ x'✝ * x' ∈ ↑H * ↑N
state_after: case mul.intro.intro.intro.intro
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x' : G
hy✝ : x' ∈ closure (↑H * ↑N)
hx' : x' ∈ ↑H * ↑N
x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
⊢ (fun x x_1 => x * x_1) x y * x' ∈ ↑H * ↑N

tactic: obtain ⟨x', hx', y', hy', rfl⟩ := hx'
state_before: case mul.intro.intro.intro.intro
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x' : G
hy✝ : x' ∈ closure (↑H * ↑N)
hx' : x' ∈ ↑H * ↑N
x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
⊢ (fun x x_1 => x * x_1) x y * x' ∈ ↑H * ↑N
state_after: case mul.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
x' : G
hx' : x' ∈ ↑H
y' : G
hy' : y' ∈ ↑N
hy✝ : (fun x x_1 => x * x_1) x' y' ∈ closure (↑H * ↑N)
⊢ (fun x x_1 => x * x_1) x y * (fun x x_1 => x * x_1) x' y' ∈ ↑H * ↑N

tactic: refine ⟨x * x', mul_mem hx hx', x'⁻¹ * y * x' * y', mul_mem ?_ hy', ?_⟩
state_before: case mul.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
x' : G
hx' : x' ∈ ↑H
y' : G
hy' : y' ∈ ↑N
hy✝ : (fun x x_1 => x * x_1) x' y' ∈ closure (↑H * ↑N)
⊢ (fun x x_1 => x * x_1) x y * (fun x x_1 => x * x_1) x' y' ∈ ↑H * ↑N
state_after: case mul.intro.intro.intro.intro.intro.intro.intro.intro.refine_1
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
x' : G
hx' : x' ∈ ↑H
y' : G
hy' : y' ∈ ↑N
hy✝ : (fun x x_1 => x * x_1) x' y' ∈ closure (↑H * ↑N)
⊢ x'⁻¹ * y * x' ∈ N

case mul.intro.intro.intro.intro.intro.intro.intro.intro.refine_2
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
x' : G
hx' : x' ∈ ↑H
y' : G
hy' : y' ∈ ↑N
hy✝ : (fun x x_1 => x * x_1) x' y' ∈ closure (↑H * ↑N)
⊢ (fun x x_1 => x * x_1) (x * x') (x'⁻¹ * y * x' * y') = (fun x x_1 => x * x_1) x y * (fun x x_1 => x * x_1) x' y'

tactic: simpa using hN.conj_mem _ hy x'⁻¹
state_before: case mul.intro.intro.intro.intro.intro.intro.intro.intro.refine_1
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
x' : G
hx' : x' ∈ ↑H
y' : G
hy' : y' ∈ ↑N
hy✝ : (fun x x_1 => x * x_1) x' y' ∈ closure (↑H * ↑N)
⊢ x'⁻¹ * y * x' ∈ N
state_after: no goals

tactic: simp only [mul_assoc, mul_inv_cancel_left]
state_before: case mul.intro.intro.intro.intro.intro.intro.intro.intro.refine_2
α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : N.Normal
x✝ x : G
hx : x ∈ ↑H
y : G
hy : y ∈ ↑N
hx✝ : (fun x x_1 => x * x_1) x y ∈ closure (↑H * ↑N)
x' : G
hx' : x' ∈ ↑H
y' : G
hy' : y' ∈ ↑N
hy✝ : (fun x x_1 => x * x_1) x' y' ∈ closure (↑H * ↑N)
⊢ (fun x x_1 => x * x_1) (x * x') (x'⁻¹ * y * x' * y') = (fun x x_1 => x * x_1) x y * (fun x x_1 => x * x_1) x' y'
state_after: no goals