| str0 = str, q1 ∈ dnode(md, sdt[str, sdt[str] -- p0])[str0 '], str0 ∈ sdt[str, sdt[str] -- p0], p0 ∈ sdt[str], str ∈ sdt, ∀ tree, q. p0 ∈ tree ∧ ¬ p0 ⊑ q ∧ q ∈ tree → (tree -- p0)[q] = (q ⊑ p0 ⊃ tree[q] -- restn(# q, p0);tree[q]) ⊦ dnode(md, sdt[str, sdt[str] -- p0])[str0 '][q1] = (str0 ' + q1 ⊑ str ' + p0 ⊃ dnode(md, sdt)[str0 ' + q1] -- restn(# q1, p0);dnode(md, sdt)[str0 ' + q1]), p0 = ε |
str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str]
⊦ str ∈ sdt → dnode(md, sdt)[str ' + p] = sdt[str][p]
p ≠ ε ⊦ p ∈ tree → (q ∈ tree -- p ↔ ¬ p ⊑ q ∧ q ∈ tree)
str ∈ sdt, p0 ∈ sdt[str], q1 ∈ sdt[str], ∀ tree, q. p0 ∈ tree ∧ ¬ p0 ⊑ q ∧ q ∈ tree → (tree -- p0)[q] = (q ⊑ p0 ⊃ tree[q] -- restn(# q, p0);tree[q]) ⊦ (sdt[str] -- p0)[q1] = (q1 ⊑ p0 ⊃ sdt[str][q1] -- restn(# q1, p0);sdt[str][q1]), p0 = ε, p0 ⊑ q1
Used simplifier rules: one-at: str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str];%at-dnode: ⊦ str ∈ sdt → dnode(md, sdt)[str ' + p] = sdt[str][p];%in-del: p ≠ ε ⊦ p ∈ tree → (q ∈ tree -- p ↔ ¬ p ⊑ q ∧ q ∈ tree);% ⊦ str ∈ sdt[str, tree]; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ' + p ⊑ str ' + p0 ↔ p ⊑ p0; (s)% ⊦ sdt[str, tree][str] = tree; (s)% ⊦ str ∈ sdt[str0, tree] ↔ str = str0 ∨ str ∈ sdt; (ws)