| tree[p0] = dnode(md0, sdt), p0 ∈ tree, ∀ tree, md0, sdt, md1. tree[p0] = dnode(md0, sdt) ∧ p0 ∈ tree → tree[p0, dnode(md1, sdt)].fids = tree.fids ⊦ dnode(md, sdt1[str, tree])[str ' + p0, dnode(md1, sdt)].fids = sdt1.fids ∪ tree.fids, str ∈ sdt1 |
p ≠ ε ⊦ str ∈ sdt → dnode(md, sdt)[str ' + p, tree0] = dnode(md, sdt[str, sdt[str][p, tree0]])
⊦ dnode(md, sdt).fids = sdt.fids
⊦ ¬ str ∈ sdt → sdt[str, tree].fids = sdt.fids ∪ tree.fids
tree[p0] = dnode(md0, sdt), p0 ∈ tree, str ∈ sdt1[str, tree], ∀ tree, md0, sdt, md1. tree[p0] = dnode(md0, sdt) ∧ p0 ∈ tree → tree[p0, dnode(md1, sdt)].fids = tree.fids ⊦ dnode(md, sdt1[str, tree][str, sdt1[str, tree][str][p0, dnode(md1, sdt)]]).fids = sdt1.fids ∪ tree.fids, p0 = ε, str ∈ sdt1
Used simplifier rules: fids-dnode: ⊦ dnode(md, sdt).fids = sdt.fids;%fids-ins: ⊦ ¬ str ∈ sdt → sdt[str, tree].fids = sdt.fids ∪ tree.fids;% ⊦ str ∈ sdt[str, tree]; (s)% ⊦ tree[ε] = tree; (s)% ⊦ p + ε = p; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ dnode(md, sdt)[str ', tree0] = dnode(md, sdt[str, tree0]); (s)% ⊦ sdt[str, tree0][str, tree] = sdt[str, tree]; (s)% ⊦ fidb ∪ fidb0 = fidb ∪ fidb1 ↔ fidb0 = fidb1; (s)%union-ass: ⊦ fidb ∪ fidb0 ∪ fidb1 = (fidb ∪ fidb0) ∪ fidb1; from specification bag-union[fidbag]%union-com: ⊦ fidb ∪ fidb0 = fidb0 ∪ fidb; from specification bag-union[fidbag]% ⊦ ε ∈ tree; (s)% ⊦ tree[ε, tree0] = tree0; (s) Used terms: dnode(md1, sdt), p0, str, sdt1[str, tree], md