| p0 ∈ tree, p0 ∈ tree → (tree -- p0).fids = tree.fids \ tree[p0].fids ∨ p0 = ε ⊦ (dnode(md, sdt0[str, tree]) -- (str ' + p0)).fids = (sdt0.fids ∪ tree.fids) \ tree[p0].fids, str ∈ sdt0 |
⊦ dnode(md, sdt).fids = sdt.fids
(tree -- p0).fids = tree.fids \ tree[p0].fids, p0 ∈ tree ⊦ (dnode(md, sdt0[str, tree]) -- (str ' + p0)).fids = (sdt0.fids ∪ tree.fids) \ tree[p0].fids, p0 = ε, str ∈ sdt0
Used simplifier rules: fids-dnode: ⊦ dnode(md, sdt).fids = sdt.fids;%union-com: ⊦ fidb ∪ fidb0 = fidb0 ∪ fidb; from specification bag-union[fidbag]%union-ass: ⊦ fidb ∪ fidb0 ∪ fidb1 = (fidb ∪ fidb0) ∪ fidb1; from specification bag-union[fidbag]% ⊦ (fidb ∪ fidb0) \ fidb0 = fidb; (s)% ⊦ tree[ε] = tree; (s)% ⊦ ¬ str ∈ sdt → sdt -- str = sdt; (s)% ⊦ sdt[str, tree] -- str = sdt -- str; (s)% ⊦ dnode(md, sdt) -- str ' = dnode(md, sdt -- str); (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ p + ε = p; (s)