| q ∈ dnode(md, sdt) -- (str ' + p0), str ∈ sdt, p0 ∈ sdt[str], ∀ 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))[q] = (q ⊑ str ' + p0 ⊃ dnode(md, sdt)[q] -- restn(# q, str ' + p0);dnode(md, sdt)[q]) |
⊦ tree[ε] = tree
q = str0 + q1, p0 ∈ sdt[str], str ∈ sdt, q ∈ dnode(md, sdt) -- (str ' + p0), ∀ 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))[q] = (q ⊑ str ' + p0 ⊃ dnode(md, sdt)[q] -- restn(# q, str ' + p0);dnode(md, sdt)[q])
Used simplifier rules: nil-at: ⊦ tree[ε] = tree;%path freely generated by ε, +;;% ⊦ ε ⊑ p; (s)% ⊦ # ε = 0; (s)% ⊦ restn(0, p) = p; (s)