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