Theorem: FreeProduct.lift_word_ping_pong
File: Mathlib/GroupTheory/FreeProduct.lean

tactic: induction' w with i x hne_one i j k l w₁ hne w₂ hIw₁ hIw₂ generalizing k
state_before: ι : Type u_1
M : ι → Type ?u.671928
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.671939
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_2
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ (#ι) ∨ ∃ i, 3 ≤ (#H i)
α : Type u_3
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), Set.Nonempty (X i)
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → ↑(f i) h • X j ⊆ X i
i j k : ι
w : NeWord H i j
hk : j ≠ k
⊢ ↑(↑lift f) (NeWord.prod w) • X k ⊆ X i

tactic: simpa using hpp hk _ hne_one
state_before: case singleton
ι : Type u_1
M : ι → Type ?u.671928
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.671939
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_2
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ (#ι) ∨ ∃ i, 3 ≤ (#H i)
α : Type u_3
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), Set.Nonempty (X i)
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → ↑(f i) h • X j ⊆ X i
i✝ j k✝ : ι
hk✝ : j ≠ k✝
i : ι
x : H i
hne_one : x ≠ 1
k : ι
hk : i ≠ k
⊢ ↑(↑lift f) (NeWord.prod (NeWord.singleton x hne_one)) • X k ⊆ X i

tactic: calc
  lift f (NeWord.append w₁ hne w₂).prod • X k = lift f w₁.prod • lift f w₂.prod • X k := by
    simp [MulAction.mul_smul]
  _ ⊆ lift f w₁.prod • X _ := (set_smul_subset_set_smul_iff.mpr (hIw₂ hk))
  _ ⊆ X i := hIw₁ hne
state_before: case append
ι : Type u_1
M : ι → Type ?u.671928
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.671939
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_2
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ (#ι) ∨ ∃ i, 3 ≤ (#H i)
α : Type u_3
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), Set.Nonempty (X i)
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → ↑(f i) h • X j ⊆ X i
i✝ j✝ k✝¹ : ι
hk✝ : j✝ ≠ k✝¹
i j k✝ l : ι
w₁ : NeWord H i j
hne : j ≠ k✝
w₂ : NeWord H k✝ l
hIw₁ : ∀ {k : ι}, j ≠ k → ↑(↑lift f) (NeWord.prod w₁) • X k ⊆ X i
hIw₂ : ∀ {k : ι}, l ≠ k → ↑(↑lift f) (NeWord.prod w₂) • X k ⊆ X k✝
k : ι
hk : l ≠ k
⊢ ↑(↑lift f) (NeWord.prod (NeWord.append w₁ hne w₂)) • X k ⊆ X i

tactic: simp [MulAction.mul_smul]
state_before: ι : Type u_1
M : ι → Type ?u.671928
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.671939
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_2
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ (#ι) ∨ ∃ i, 3 ≤ (#H i)
α : Type u_3
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), Set.Nonempty (X i)
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → ↑(f i) h • X j ⊆ X i
i✝ j✝ k✝¹ : ι
hk✝ : j✝ ≠ k✝¹
i j k✝ l : ι
w₁ : NeWord H i j
hne : j ≠ k✝
w₂ : NeWord H k✝ l
hIw₁ : ∀ {k : ι}, j ≠ k → ↑(↑lift f) (NeWord.prod w₁) • X k ⊆ X i
hIw₂ : ∀ {k : ι}, l ≠ k → ↑(↑lift f) (NeWord.prod w₂) • X k ⊆ X k✝
k : ι
hk : l ≠ k
⊢ ↑(↑lift f) (NeWord.prod (NeWord.append w₁ hne w₂)) • X k =
    ↑(↑lift f) (NeWord.prod w₁) • ↑(↑lift f) (NeWord.prod w₂) • X k