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

tactic: obtain ⟨h, hn1, hnh⟩ := Cardinal.three_le hcard 1 w.head⁻¹
state_before: ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
⊢ ↑(↑lift f) (NeWord.prod w) ≠ 1

tactic: have hnot1 : h * w.head ≠ 1 := by
  rw [← div_inv_eq_mul]
  exact div_ne_one_of_ne hnh
state_before: case intro.intro
ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
⊢ ↑(↑lift f) (NeWord.prod w) ≠ 1

tactic: let w' : NeWord H i i :=
  NeWord.append (NeWord.mulHead w h hnot1) hheadtail.symm
    (NeWord.singleton h⁻¹ (inv_ne_one.mpr hn1))
state_before: case intro.intro
ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
hnot1 : h * NeWord.head w ≠ 1
⊢ ↑(↑lift f) (NeWord.prod w) ≠ 1

tactic: have hw' : lift f w'.prod ≠ 1 :=
  lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
state_before: case intro.intro
ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
hnot1 : h * NeWord.head w ≠ 1
w' : NeWord H i i := NeWord.append (NeWord.mulHead w h hnot1) (_ : j ≠ i) (NeWord.singleton h⁻¹ (_ : h⁻¹ ≠ 1))
⊢ ↑(↑lift f) (NeWord.prod w) ≠ 1

tactic: intro heq1
state_before: case intro.intro
ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
hnot1 : h * NeWord.head w ≠ 1
w' : NeWord H i i := NeWord.append (NeWord.mulHead w h hnot1) (_ : j ≠ i) (NeWord.singleton h⁻¹ (_ : h⁻¹ ≠ 1))
hw' : ↑(↑lift f) (NeWord.prod w') ≠ 1
⊢ ↑(↑lift f) (NeWord.prod w) ≠ 1

tactic: apply hw'
state_before: case intro.intro
ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
hnot1 : h * NeWord.head w ≠ 1
w' : NeWord H i i := NeWord.append (NeWord.mulHead w h hnot1) (_ : j ≠ i) (NeWord.singleton h⁻¹ (_ : h⁻¹ ≠ 1))
hw' : ↑(↑lift f) (NeWord.prod w') ≠ 1
heq1 : ↑(↑lift f) (NeWord.prod w) = 1
⊢ False

tactic: simp [heq1]
state_before: case intro.intro
ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
hnot1 : h * NeWord.head w ≠ 1
w' : NeWord H i i := NeWord.append (NeWord.mulHead w h hnot1) (_ : j ≠ i) (NeWord.singleton h⁻¹ (_ : h⁻¹ ≠ 1))
hw' : ↑(↑lift f) (NeWord.prod w') ≠ 1
heq1 : ↑(↑lift f) (NeWord.prod w) = 1
⊢ ↑(↑lift f) (NeWord.prod w') = 1

tactic: rw [← div_inv_eq_mul]
state_before: ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
⊢ h * NeWord.head w ≠ 1

tactic: exact div_ne_one_of_ne hnh
state_before: ι : Type u_1
M : ι → Type ?u.798766
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type ?u.798777
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_3
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.799558
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 : ι
w : NeWord H i j
hcard : 3 ≤ (#H i)
hheadtail : i ≠ j
h : H i
hn1 : h ≠ 1
hnh : h ≠ (NeWord.head w)⁻¹
⊢ h / (NeWord.head w)⁻¹ ≠ 1