| 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 |
⊦ dnode(md, sdt).fids = sdt.fids
⊦ ¬ str ∈ sdt → sdt[str, tree].fids = sdt.fids ∪ tree.fids
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 ⊦ tree[p0, dnode(md1, sdt)].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[str0, tree] ↔ str = str0 ∨ str ∈ sdt; (ws)%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 = fidb ∪ fidb1 ↔ fidb0 = fidb1; (s)% ⊦ sdt[str, tree0][str, tree] = sdt[str, tree]; (s)% ⊦ sdt[str, tree][str] = tree; (s)