| str + p0 ∈ tree, ∀ tree, q. p0 ∈ tree → tree -- (p0 + q) = tree[p0, tree[p0] -- q] ∨ q = ε ⊦ tree -- ((str + p0) + q) = tree[str + p0, tree[str + p0] -- q], q = ε |
⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p]
⊦ p ∈ tree → tree[p + q] = tree[p][q]
⊦ p ∈ tree → tree[p + q, tree0] = tree[p, tree[p][q, tree0]]
str ' ∈ tree, p0 ∈ tree[str '], ∀ tree, q. p0 ∈ tree → tree -- (p0 + q) = tree[p0, tree[p0] -- q] ∨ q = ε ⊦ tree -- ((str ' + p0) + q) = tree[str ', tree[str '][p0, tree[str '][p0] -- q]], q = ε
Used simplifier rules: split-in: ⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p];%split-at: ⊦ p ∈ tree → tree[p + q] = tree[p][q];%split-put: ⊦ p ∈ tree → tree[p + q, tree0] = tree[p, tree[p][q, tree0]];%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str + p = str ' + p; (s)