Theorem: Subgroup.mul_normal
File: Mathlib/GroupTheory/Subgroup/Pointwise.lean

tactic: rw [sup_eq_closure]
state_before: α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
⊢ ↑(H ⊔ N) = ↑H * ↑N

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

tactic: refine closure_induction'' (p := fun x => x ∈ (H : Set G) * (N : Set G)) hx ?_ ?_ ?_ ?_
state_before: α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x : G
hx : x ∈ ↑(closure (↑H * ↑N))
⊢ x ∈ ↑H * ↑N

tactic: rintro _ ⟨x, y, hx, hy, rfl⟩
state_before: case refine_1
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x : G
hx : x ∈ ↑(closure (↑H * ↑N))
⊢ ∀ (x : G), x ∈ ↑H * ↑N → (fun x => x ∈ ↑H * ↑N) x

tactic: exact mul_mem_mul hx hy
state_before: case refine_1.intro.intro.intro.intro
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x✝ : G
hx✝ : x✝ ∈ ↑(closure (↑H * ↑N))
x y : G
hx : x ∈ ↑H
hy : y ∈ ↑N
⊢ (fun x x_1 => x * x_1) x y ∈ ↑H * ↑N

tactic: rintro _ ⟨x, y, hx, hy, rfl⟩
state_before: case refine_2
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x : G
hx : x ∈ ↑(closure (↑H * ↑N))
⊢ ∀ (x : G), x ∈ ↑H * ↑N → (fun x => x ∈ ↑H * ↑N) x⁻¹

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 refine_2.intro.intro.intro.intro
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x✝ : G
hx✝ : x✝ ∈ ↑(closure (↑H * ↑N))
x y : G
hx : x ∈ ↑H
hy : y ∈ ↑N
⊢ ((fun x x_1 => x * x_1) x y)⁻¹ ∈ ↑H * ↑N

tactic: exact ⟨1, 1, one_mem _, one_mem _, mul_one 1⟩
state_before: case refine_3
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x : G
hx : x ∈ ↑(closure (↑H * ↑N))
⊢ (fun x => x ∈ ↑H * ↑N) 1

tactic: rintro _ _ ⟨x, y, hx, hy, rfl⟩ ⟨x', y', hx', hy', rfl⟩
state_before: case refine_4
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x : G
hx : x ∈ ↑(closure (↑H * ↑N))
⊢ ∀ (x y : G), (fun x => x ∈ ↑H * ↑N) x → (fun x => x ∈ ↑H * ↑N) y → (fun x => x ∈ ↑H * ↑N) (x * y)

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

tactic: simpa using hN.conj_mem _ hy x'⁻¹
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro.refine_1
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x✝ : G
hx✝ : x✝ ∈ ↑(closure (↑H * ↑N))
x y : G
hx : x ∈ ↑H
hy : y ∈ ↑N
x' y' : G
hx' : x' ∈ ↑H
hy' : y' ∈ ↑N
⊢ x'⁻¹ * y * x' ∈ N

tactic: simp only [mul_assoc, mul_inv_cancel_left]
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro.refine_2
α : Type ?u.23973
G : Type u_1
A : Type ?u.23979
S : Type ?u.23982
inst✝¹ : Group G
inst✝ : AddGroup A
s : Set G
H N : Subgroup G
hN : Normal N
x✝ : G
hx✝ : x✝ ∈ ↑(closure (↑H * ↑N))
x y : G
hx : x ∈ ↑H
hy : y ∈ ↑N
x' y' : G
hx' : x' ∈ ↑H
hy' : y' ∈ ↑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'