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