| tree = dnode(md, sdt), p0 ∈ tree[str '], str ' ∈ tree, ∀ 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 = ε |
⊦ dnode(md, sdt)[str ', tree0] = dnode(md, sdt[str, tree0])
⊦ str ' ∈ dnode(md, sdt) ↔ str ∈ sdt
p ≠ ε ⊦ str ∈ sdt → dnode(md, sdt) -- (str ' + p) = dnode(md, sdt[str, sdt[str] -- p])
str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str]
str ∈ sdt, p0 ∈ sdt[str], ∀ tree, q. p0 ∈ tree → tree -- (p0 + q) = tree[p0, tree[p0] -- q] ∨ q = ε ⊦ dnode(md, sdt[str, sdt[str] -- (p0 + q)]) = dnode(md, sdt[str, sdt[str][p0, sdt[str][p0] -- q]]), q = ε
Used simplifier rules: put-here: ⊦ dnode(md, sdt)[str ', tree0] = dnode(md, sdt[str, tree0]);%one-ind: ⊦ str ' ∈ dnode(md, sdt) ↔ str ∈ sdt;%del-recin: p ≠ ε ⊦ str ∈ sdt → dnode(md, sdt) -- (str ' + p) = dnode(md, sdt[str, sdt[str] -- p]);%one-at: str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str];%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ p + p0 = ε ↔ p = ε ∧ p0 = ε; (as)