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

tactic: rw [smash_toFun]
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
⊢ (p.smash q h).toFun (Fin.natAdd p.length i).succ = q.toFun i.succ
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
⊢ (if H : ↑(Fin.natAdd p.length i).succ < p.length then p.toFun ⟨↑(Fin.natAdd p.length i).succ, ⋯⟩
    else q.toFun ⟨↑(Fin.natAdd p.length i).succ - p.length, ⋯⟩) =
    q.toFun i.succ

tactic: split_ifs with H
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
⊢ (if H : ↑(Fin.natAdd p.length i).succ < p.length then p.toFun ⟨↑(Fin.natAdd p.length i).succ, ⋯⟩
    else q.toFun ⟨↑(Fin.natAdd p.length i).succ - p.length, ⋯⟩) =
    q.toFun i.succ
state_after: case pos
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ↑(Fin.natAdd p.length i).succ < p.length
⊢ p.toFun ⟨↑(Fin.natAdd p.length i).succ, ⋯⟩ = q.toFun i.succ

case neg
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ¬↑(Fin.natAdd p.length i).succ < p.length
⊢ q.toFun ⟨↑(Fin.natAdd p.length i).succ - p.length, ⋯⟩ = q.toFun i.succ

tactic: have H' : p.length < p.length + (i.1 + 1) := by omega
state_before: case pos
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ↑(Fin.natAdd p.length i).succ < p.length
⊢ p.toFun ⟨↑(Fin.natAdd p.length i).succ, ⋯⟩ = q.toFun i.succ
state_after: case pos
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ↑(Fin.natAdd p.length i).succ < p.length
H' : p.length < p.length + (↑i + 1)
⊢ p.toFun ⟨↑(Fin.natAdd p.length i).succ, ⋯⟩ = q.toFun i.succ

tactic: exact (lt_irrefl _ (H.trans H')).elim
state_before: case pos
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ↑(Fin.natAdd p.length i).succ < p.length
H' : p.length < p.length + (↑i + 1)
⊢ p.toFun ⟨↑(Fin.natAdd p.length i).succ, ⋯⟩ = q.toFun i.succ
state_after: no goals

tactic: omega
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ↑(Fin.natAdd p.length i).succ < p.length
⊢ p.length < p.length + (↑i + 1)
state_after: no goals

tactic: congr
state_before: case neg
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ¬↑(Fin.natAdd p.length i).succ < p.length
⊢ q.toFun ⟨↑(Fin.natAdd p.length i).succ - p.length, ⋯⟩ = q.toFun i.succ
state_after: case neg.e_a.e_val
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ¬↑(Fin.natAdd p.length i).succ < p.length
⊢ ↑(Fin.natAdd p.length i).succ - p.length = ↑i + 1

tactic: simp only [Fin.val_succ, Fin.coe_natAdd]
state_before: case neg.e_a.e_val
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ¬↑(Fin.natAdd p.length i).succ < p.length
⊢ ↑(Fin.natAdd p.length i).succ - p.length = ↑i + 1
state_after: case neg.e_a.e_val
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ¬↑(Fin.natAdd p.length i).succ < p.length
⊢ p.length + ↑i + 1 - p.length = ↑i + 1

tactic: rw [add_assoc, Nat.add_sub_cancel_left]
state_before: case neg.e_a.e_val
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin q.length
H : ¬↑(Fin.natAdd p.length i).succ < p.length
⊢ p.length + ↑i + 1 - p.length = ↑i + 1
state_after: no goals