| str ' + p0 ⊑ q0, ∀ q0, q1. p0 ⊑ q0 → restn(# p0, q0 + q1) = restn(# p0, q0) + q1 ⊦ restn(# p0 + 1, q0 + q1) = restn(# p0, q0.tail) + q1 |
q0 = str0 + p1, str ' + p0 ⊑ q0, ∀ q0, q1. p0 ⊑ q0 → restn(# p0, q0 + q1) = restn(# p0, q0) + q1 ⊦ q0 = ε, restn(# p0 + 1, q0 + q1) = restn(# p0, p1) + q1
Used simplifier rules: ⊦ ε + p = p; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ p ⊑ ε ↔ p = ε; (s)% ⊦ p + p0 = ε ↔ p = ε ∧ p0 = ε; (as)% ⊦ str ' ≠ ε; (s)%p ≠ ε ⊦ str = p.head ∧ p0 = p.tail ↔ p = str + p0; (elim) Used terms: q0, str0, p