Theorem: AddSubgroup.inf_add_assoc
File: Mathlib/Algebra/Group/Subgroup/Pointwise.lean

Proof steps:
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
A B C : Subgroup G
h : C ≤ A
⊢ ↑(A ⊓ B) * ↑C = ↑A ∩ (↑B * ↑C)
state_after: case h
α : Type u_1
G : Type u_2
A✝ : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A✝
s : Set G
A B C : Subgroup G
h : C ≤ A
x✝ : G
⊢ x✝ ∈ ↑(A ⊓ B) * ↑C ↔ x✝ ∈ ↑A ∩ (↑B * ↑C)
tactic: ext
state_before: case h
α : Type u_1
G : Type u_2
A✝ : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A✝
s : Set G
A B C : Subgroup G
h : C ≤ A
x✝ : G
⊢ x✝ ∈ ↑(A ⊓ B) * ↑C ↔ x✝ ∈ ↑A ∩ (↑B * ↑C)
state_after: case h
α : Type u_1
G : Type u_2
A✝ : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A✝
s : Set G
A B C : Subgroup G
h : C ≤ A
x✝ : G
⊢ (∃ x, (x ∈ ↑A ∧ x ∈ ↑B) ∧ ∃ y ∈ ↑C, x * y = x✝) ↔ x✝ ∈ ↑A ∧ ∃ x ∈ ↑B, ∃ y ∈ ↑C, x * y = x✝
tactic: simp only [coe_inf, Set.mem_mul, Set.mem_inter_iff]
state_before: case h
α : Type u_1
G : Type u_2
A✝ : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A✝
s : Set G
A B C : Subgroup G
h : C ≤ A
x✝ : G
⊢ (∃ x, (x ∈ ↑A ∧ x ∈ ↑B) ∧ ∃ y ∈ ↑C, x * y = x✝) ↔ x✝ ∈ ↑A ∧ ∃ x ∈ ↑B, ∃ y ∈ ↑C, x * y = x✝
state_after: case h.mp
α : Type u_1
G : Type u_2
A✝ : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A✝
s : Set G
A B C : Subgroup G
h : C ≤ A
x✝ : G
⊢ (∃ x, (x ∈ ↑A ∧ x ∈ ↑B) ∧ ∃ y ∈ ↑C, x * y = x✝) → x✝ ∈ ↑A ∧ ∃ x ∈ ↑B, ∃ y ∈ ↑C, x * y = x✝

case h.mpr
α : Type u_1
G : Type u_2
A✝ : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A✝
s : Set G
A B C : Subgroup G
h : C ≤ A
x✝ : G
⊢ (x✝ ∈ ↑A ∧ ∃ x ∈ ↑B, ∃ y ∈ ↑C, x * y = x✝) → ∃ x, (x ∈ ↑A ∧ x ∈ ↑B) ∧ ∃ y ∈ ↑C, x * y = x✝
tactic: constructor
state_before: case h.mpr
α : Type u_1
G : Type u_2
A✝ : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A✝
s : Set G
A B C : Subgroup G
h : C ≤ A
x✝ : G
⊢ (x✝ ∈ ↑A ∧ ∃ x ∈ ↑B, ∃ y ∈ ↑C, x * y = x✝) → ∃ x, (x ∈ ↑A ∧ x ∈ ↑B) ∧ ∃ y ∈ ↑C, x * y = x✝
state_after: case h.mpr.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
A B C : Subgroup G
h : C ≤ A
y : G
hy : y ∈ ↑B
z : G
hz : z ∈ ↑C
hyz : y * z ∈ ↑A
⊢ ∃ x, (x ∈ ↑A ∧ x ∈ ↑B) ∧ ∃ y_1 ∈ ↑C, x * y_1 = y * z
tactic: rintro ⟨hyz, y, hy, z, hz, rfl⟩
state_before: case h.mpr.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
A B C : Subgroup G
h : C ≤ A
y : G
hy : y ∈ ↑B
z : G
hz : z ∈ ↑C
hyz : y * z ∈ ↑A
⊢ ∃ x, (x ∈ ↑A ∧ x ∈ ↑B) ∧ ∃ y_1 ∈ ↑C, x * y_1 = y * z
state_after: case h.mpr.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
A B C : Subgroup G
h : C ≤ A
y : G
hy : y ∈ ↑B
z : G
hz : z ∈ ↑C
hyz : y * z ∈ ↑A
⊢ y ∈ ↑A
tactic: refine ⟨y, ⟨?_, hy⟩, z, hz, rfl⟩
state_before: case h.mpr.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
A B C : Subgroup G
h : C ≤ A
y : G
hy : y ∈ ↑B
z : G
hz : z ∈ ↑C
hyz : y * z ∈ ↑A
⊢ y ∈ ↑A
state_after: case h.mpr.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
A B C : Subgroup G
h : C ≤ A
y : G
hy : y ∈ ↑B
z : G
hz : z ∈ ↑C
hyz : y * z ∈ ↑A
⊢ y * z * z⁻¹ ∈ A
tactic: suffices y * z * z⁻¹ ∈ A by simpa
state_before: case h.mpr.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
A B C : Subgroup G
h : C ≤ A
y : G
hy : y ∈ ↑B
z : G
hz : z ∈ ↑C
hyz : y * z ∈ ↑A
⊢ y * z * z⁻¹ ∈ A
state_after: no goals
tactic: exact mul_mem hyz (inv_mem (h hz))