Theorem: RelSeries.smash_succ_castAdd
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 p.length
⊢ (p.smash q h).toFun (Fin.castAdd q.length i).succ = p.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 p.length
⊢ (if H : ↑(Fin.castAdd q.length i).succ < p.length then p.toFun ⟨↑(Fin.castAdd q.length i).succ, ⋯⟩
    else q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩) =
    p.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 p.length
⊢ (if H : ↑(Fin.castAdd q.length i).succ < p.length then p.toFun ⟨↑(Fin.castAdd q.length i).succ, ⋯⟩
    else q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩) =
    p.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 p.length
H : ↑(Fin.castAdd q.length i).succ < p.length
⊢ p.toFun ⟨↑(Fin.castAdd q.length i).succ, ⋯⟩ = p.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 p.length
H : ¬↑(Fin.castAdd q.length i).succ < p.length
⊢ q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩ = p.toFun i.succ

tactic: congr
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 p.length
H : ↑(Fin.castAdd q.length i).succ < p.length
⊢ p.toFun ⟨↑(Fin.castAdd q.length i).succ, ⋯⟩ = p.toFun i.succ
state_after: no goals

tactic: simp only [Fin.val_succ, Fin.coe_castAdd] at H
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 p.length
H : ¬↑(Fin.castAdd q.length i).succ < p.length
⊢ q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩ = p.toFun i.succ
state_after: case neg
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩ = p.toFun i.succ

tactic: convert h.symm
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 p.length
H : ¬↑i + 1 < p.length
⊢ q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩ = p.toFun i.succ
state_after: case h.e'_2
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩ = q.head

case h.e'_3
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ p.toFun i.succ = p.last

tactic: congr
state_before: case h.e'_2
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩ = q.head
state_after: case h.e'_2.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 p.length
H : ¬↑i + 1 < p.length
⊢ ↑(Fin.castAdd q.length i).succ - p.length = 0 % (q.length + 1)

tactic: simp only [Fin.val_succ, Fin.coe_castAdd, Nat.zero_mod, tsub_eq_zero_iff_le]
state_before: case h.e'_2.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 p.length
H : ¬↑i + 1 < p.length
⊢ ↑(Fin.castAdd q.length i).succ - p.length = 0 % (q.length + 1)
state_after: case h.e'_2.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 p.length
H : ¬↑i + 1 < p.length
⊢ ↑i + 1 ≤ p.length

tactic: omega
state_before: case h.e'_2.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 p.length
H : ¬↑i + 1 < p.length
⊢ ↑i + 1 ≤ p.length
state_after: no goals

tactic: congr
state_before: case h.e'_3
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ p.toFun i.succ = p.last
state_after: case h.e'_3.e_a
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ i.succ = Fin.last p.length

tactic: ext
state_before: case h.e'_3.e_a
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ i.succ = Fin.last p.length
state_after: case h.e'_3.e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ ↑i.succ = ↑(Fin.last p.length)

tactic: change i.1 + 1 = p.length
state_before: case h.e'_3.e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ ↑i.succ = ↑(Fin.last p.length)
state_after: case h.e'_3.e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ ↑i + 1 = p.length

tactic: omega
state_before: case h.e'_3.e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑i + 1 < p.length
⊢ ↑i + 1 = p.length
state_after: no goals