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