Theorem: Monoid.CoprodI.Word.mem_rcons_iff
File: Mathlib/GroupTheory/CoprodI.lean

tactic: simp only [rcons, cons, ne_eq]
state_before: ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
i j : ι
p : Pair M i
m : M j
⊢ ⟨j, m⟩ ∈ (rcons p).toList ↔ ⟨j, m⟩ ∈ p.tail.toList ∨ m ≠ 1 ∧ ∃ (h : i = j), m = h ▸ p.head
state_after: ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
i j : ι
p : Pair M i
m : M j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨i, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : i = j), m = h ▸ p.head

tactic: by_cases hij : i = j
state_before: ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
i j : ι
p : Pair M i
m : M j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨i, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : i = j), m = h ▸ p.head
state_after: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
i j : ι
p : Pair M i
m : M j
hij : i = j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨i, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : i = j), m = h ▸ p.head

case neg
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
i j : ι
p : Pair M i
m : M j
hij : ¬i = j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨i, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : i = j), m = h ▸ p.head

tactic: subst i
state_before: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
i j : ι
p : Pair M i
m : M j
hij : i = j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨i, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : i = j), m = h ▸ p.head
state_after: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
m : M j
p : Pair M j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : j = j), m = h ▸ p.head

tactic: by_cases hm : m = p.head
state_before: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
m : M j
p : Pair M j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : j = j), m = h ▸ p.head
state_after: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
m : M j
p : Pair M j
hm : m = p.head
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : j = j), m = h ▸ p.head

case neg
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
m : M j
p : Pair M j
hm : ¬m = p.head
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : j = j), m = h ▸ p.head

tactic: subst m
state_before: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
m : M j
p : Pair M j
hm : m = p.head
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : j = j), m = h ▸ p.head
state_after: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
p : Pair M j
⊢ ⟨j, p.head⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, p.head⟩ ∈ p.tail.toList ∨ ¬p.head = 1 ∧ ∃ (h : j = j), p.head = h ▸ p.head

tactic: split_ifs <;> simp_all
state_before: case pos
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
p : Pair M j
⊢ ⟨j, p.head⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, p.head⟩ ∈ p.tail.toList ∨ ¬p.head = 1 ∧ ∃ (h : j = j), p.head = h ▸ p.head
state_after: no goals

tactic: split_ifs <;> simp_all
state_before: case neg
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
j : ι
m : M j
p : Pair M j
hm : ¬m = p.head
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨j, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : j = j), m = h ▸ p.head
state_after: no goals

tactic: split_ifs <;> simp_all [Ne.symm hij]
state_before: case neg
ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N : Type u_3
inst✝¹ : Monoid N
inst✝ : (i : ι) → DecidableEq (M i)
i j : ι
p : Pair M i
m : M j
hij : ¬i = j
⊢ ⟨j, m⟩ ∈
      (if h : p.head = 1 then p.tail
        else { toList := ⟨i, p.head⟩ :: p.tail.toList, ne_one := ⋯, chain_ne := ⋯ }).toList ↔
    ⟨j, m⟩ ∈ p.tail.toList ∨ ¬m = 1 ∧ ∃ (h : i = j), m = h ▸ p.head
state_after: no goals