| dnode(md, sdt)[parent(str ' + p0)].dir?, p0 ∈ sdt[str], ∀ tree0, tree1. tree0[parent(p0)].dir? ∧ p0 ∈ tree0 → tree0[p0, tree1].fids = (tree0.fids ∪ tree1.fids) \ tree0[p0].fids ∨ p0 = ε, ∃ tree, sdt0. sdt = sdt0[str, tree] ∧ ¬ str ∈ sdt0 ⊦ dnode(md, sdt)[str ' + p0, tree1].fids = (sdt.fids ∪ tree1.fids) \ sdt[str][p0].fids |
⊦ ¬ str ∈ sdt → sdt[str, tree].fids = sdt.fids ∪ tree.fids
dnode(md, sdt0[str, tree])[parent(str ' + p0)].dir?, p0 ∈ tree, ∀ tree0, tree1. tree0[parent(p0)].dir? ∧ p0 ∈ tree0 → tree0[p0, tree1].fids = (tree0.fids ∪ tree1.fids) \ tree0[p0].fids ∨ p0 = ε ⊦ dnode(md, sdt0[str, tree])[str ' + p0, tree1].fids = ((sdt0.fids ∪ tree.fids) ∪ tree1.fids) \ tree[p0].fids, str ∈ sdt0
Used simplifier rules: fids-ins: ⊦ ¬ str ∈ sdt → sdt[str, tree].fids = sdt.fids ∪ tree.fids;% ⊦ sdt[str, tree][str] = tree; (s)%union-ass: ⊦ fidb ∪ fidb0 ∪ fidb1 = (fidb ∪ fidb0) ∪ fidb1; from specification bag-union[fidbag]