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