| dnode(md, sdt0[str, tree])[str ' + parent(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, p0 = ε, str ∈ sdt0 |
tree[parent(p0)].dir?, p0 ∈ tree, ∀ tree0, tree2. tree0[parent(p0)].dir? ∧ p0 ∈ tree0 → tree0[p0, tree2].fids = (tree0.fids ∪ tree2.fids) \ tree0[p0].fids ⊦ dnode(md, sdt0[str, tree])[str ' + p0, tree1].fids = ((sdt0.fids ∪ tree.fids) ∪ tree1.fids) \ tree[p0].fids, p0 = ε, str ∈ sdt0
Used simplifier rules: a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ dnode(md, sdt[str, tree])[str ' + p] = tree[p]; (s)