| dnode(md, sdt)[parent(str ' + p0)].dir?, str ' + parent(p0) ∈ dnode(md, sdt), ∀ tree0, tree1. tree0[parent(p0)].dir? ∧ parent(p0) ∈ tree0 → tree0[p0, tree1].fids = tree0.fids ∪ tree1.fids ∨ p0 = ε ∨ p0 ∈ tree0 ⊦ dnode(md, sdt)[str ' + p0, tree1].fids = sdt.fids ∪ tree1.fids, p0 = ε, str ∈ sdt ∧ p0 ∈ sdt[str] |
⊦ dnode(md, sdt).fids = sdt.fids
sdt[str][parent(p0)].dir?, str ∈ sdt, parent(p0) ∈ sdt[str], ∀ tree, tree0. tree[parent(p0)].dir? ∧ parent(p0) ∈ tree → tree[p0, tree0].fids = tree.fids ∪ tree0.fids ∨ p0 ∈ tree ⊦ sdt[str, sdt[str][p0, tree1]].fids = sdt.fids ∪ tree1.fids, p0 = ε, p0 ∈ sdt[str]
Used simplifier rules: fids-dnode: ⊦ dnode(md, sdt).fids = sdt.fids;% ⊦ str ∈ sdt → dnode(md, sdt)[str ' + p] = sdt[str][p]; (s)% ⊦ p ≠ ε → parent(str ' + p) = str ' + parent(p); (s)%p ≠ ε ⊦ str ∈ sdt → dnode(md, sdt)[str ' + p, tree0] = dnode(md, sdt[str, sdt[str][p, tree0]]); (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ' + p ∈ dnode(md, sdt) ↔ str ∈ sdt ∧ p ∈ sdt[str]; (s)