Theorem: RelSeries.mem_snoc
File: Mathlib/Order/RelSeries.lean

tactic: simp only [snoc, append, singleton_length, Nat.add_zero, Nat.reduceAdd, Fin.cast_refl,
  Function.comp_id, mem_def, id_eq, Set.mem_range]
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
⊢ x ∈ p.snoc newLast rel ↔ x ∈ p ∨ x = newLast
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
⊢ (∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x) ↔ (∃ y, p.toFun y = x) ∨ x = newLast

tactic: constructor
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
⊢ (∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x) ↔ (∃ y, p.toFun y = x) ∨ x = newLast
state_after: case mp
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
⊢ (∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x) → (∃ y, p.toFun y = x) ∨ x = newLast

case mpr
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
⊢ (∃ y, p.toFun y = x) ∨ x = newLast → ∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x

tactic: rintro ⟨i, rfl⟩
state_before: case mp
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
⊢ (∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x) → (∃ y, p.toFun y = x) ∨ x = newLast
state_after: case mp.intro
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
i : Fin (p.length + 1 + 1)
⊢ (∃ y, p.toFun y = Fin.append p.toFun (singleton r newLast).toFun i) ∨
    Fin.append p.toFun (singleton r newLast).toFun i = newLast

tactic: exact Fin.lastCases (Or.inr <| Fin.append_right _ _ 0) (fun i => Or.inl ⟨⟨i.1, i.2⟩,
  (Fin.append_left _ _ _).symm⟩) i
state_before: case mp.intro
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
i : Fin (p.length + 1 + 1)
⊢ (∃ y, p.toFun y = Fin.append p.toFun (singleton r newLast).toFun i) ∨
    Fin.append p.toFun (singleton r newLast).toFun i = newLast
state_after: no goals

tactic: intro h
state_before: case mpr
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
⊢ (∃ y, p.toFun y = x) ∨ x = newLast → ∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x
state_after: case mpr
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
h : (∃ y, p.toFun y = x) ∨ x = newLast
⊢ ∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x

tactic: rcases h with (⟨i, rfl⟩ | rfl)
state_before: case mpr
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
x : α
h : (∃ y, p.toFun y = x) ∨ x = newLast
⊢ ∃ y, Fin.append p.toFun (singleton r newLast).toFun y = x
state_after: case mpr.inl.intro
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
i : Fin (p.length + 1)
⊢ ∃ y, Fin.append p.toFun (singleton r newLast).toFun y = p.toFun i

case mpr.inr
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
x : α
rel : r p.last x
⊢ ∃ y, Fin.append p.toFun (singleton r x).toFun y = x

tactic: exact ⟨i.castSucc, Fin.append_left _ _ _⟩
state_before: case mpr.inl.intro
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
newLast : α
rel : r p.last newLast
i : Fin (p.length + 1)
⊢ ∃ y, Fin.append p.toFun (singleton r newLast).toFun y = p.toFun i
state_after: no goals

tactic: exact ⟨Fin.last _, Fin.append_right _ _ 0⟩
state_before: case mpr.inr
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
x : α
rel : r p.last x
⊢ ∃ y, Fin.append p.toFun (singleton r x).toFun y = x
state_after: no goals