| q = str0 + q0, q ∈ dnode(md, sdt[str, tree0]) ⊦ dnode(md, sdt[str, tree0])[q] = (str ' ⊑ q ⊃ tree0[q.tail];(q = ε ⊃ dnode(md, sdt[str, tree0]);dnode(md, sdt)[q])) |
⊦ str ' + p ∈ dnode(md, sdt) ↔ str ∈ sdt ∧ p ∈ sdt[str]
⊦ str ∈ sdt → dnode(md, sdt)[str ' + p] = sdt[str][p]
str0 ∈ sdt[str, tree0], q0 ∈ sdt[str, tree0][str0] ⊦ sdt[str, tree0][str0][q0] = (str = str0 ⊃ tree0[q0];dnode(md, sdt)[str0 ' + q0])
Used simplifier rules: in-dnode: ⊦ str ' + p ∈ dnode(md, sdt) ↔ str ∈ sdt ∧ p ∈ sdt[str];%at-dnode: ⊦ str ∈ sdt → dnode(md, sdt)[str ' + p] = sdt[str][p];% ⊦ str ' + p ≠ ε; (s)% ⊦ (str ' + p).tail = p; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ' ⊑ str0 ' + p ↔ str = str0; (s)% ⊦ str + p = str ' + p; (s)