| # links(fid1, dnode(md, sdt0)) = count(fid1, sdt0.fids), dnode(md, sdt0)[p] = fnode(fid1), tree[p.tail] = fnode(fid1), p ∈ dnode(md, sdt0), p.tail ∈ tree, ∀ str0. str0 ∈ sdt0[p.head, tree] → (∀ fid1. # links(fid1, sdt0[p.head, tree][str0]) = count(fid1, sdt0[p.head, tree][str0].fids)), ∀ sdt1, fid1, md. # sdt1 < # sdt0[p.head, tree] → (∀ str. str ∈ sdt1 → (∀ fid1. # links(fid1, sdt1[str]) = count(fid1, sdt1[str].fids))) → # links(fid1, dnode(md, sdt1)) = count(fid1, sdt1.fids) ⊦ #(links(fid1, dnode(md, sdt0)) ∩ (p.head + links(fid1, tree))) = 0, #(links(fid1, dnode(md, sdt0)) ∪ (p.head + links(fid1, tree))) = count(fid1, sdt0.fids) + # links(fid1, tree), p = ε, links(fid1, dnode(md, sdt0)) ∩ (p.head + links(fid1, tree)) = ∅, p.head ∈ sdt0 |
Used simplifier rules: ⊦ str + p = str ' + p; (s)% ⊦ str ' + p ≠ ε; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ' + p ∈ dnode(md, sdt) ↔ str ∈ sdt ∧ p ∈ sdt[str]; (s)%p ≠ ε ⊦ str = p.head ∧ p0 = p.tail ↔ p = str + p0; (elim) Used terms: p, str1, p0