# y0 = n, y = y0 + z, n ≤ # y ⊦ (a0 ' + y)[n, a] = firstn(n, a0 ' + y) + a ' + z
Rule argument
spec: <toplevel>
name: elim-firstn-restn
seq: ⊦ n ≤ # x
→ (y = firstn(n, x) ∧ z = restn(n, x) ↔ x = y + z ∧ # y = n)
subst: [x, n, y, z] → [y, n, y0, z]
flags: <rotated> <all paths>