| dnode(md, sdt0)[p] = fnode(fid), fid ∈ sdt0.fids, p ∈ dnode(md, sdt0), ∀ str0. str0 ∈ sdt0[str, tree] → (∀ fid. fid ∈ sdt0[str, tree][str0].fids → (∃ p. p ∈ sdt0[str, tree][str0] ∧ sdt0[str, tree][str0][p] = fnode(fid))), ∀ sdt1, fid, md. # sdt1 < # sdt0[str, tree] → fid ∈ sdt1.fids ∧ (∀ str. str ∈ sdt1 → (∀ fid. fid ∈ sdt1[str].fids → (∃ p. p ∈ sdt1[str] ∧ sdt1[str][p] = fnode(fid)))) → (∃ p. p ∈ dnode(md, sdt1) ∧ dnode(md, sdt1)[p] = fnode(fid)) ⊦ str ∈ sdt0, ∃ p. p ∈ dnode(md, sdt0[str, tree]) ∧ dnode(md, sdt0[str, tree])[p] = fnode(fid), p ∈ dnode(md, sdt0[str, tree]) ∧ dnode(md, sdt0[str, tree])[p] = fnode(fid) |
Used simplifier rules: path freely generated by ε, +;;% ⊦ str + p = str ' + p; (s)% ⊦ str ' + p ∈ dnode(md, sdt) ↔ str ∈ sdt ∧ p ∈ sdt[str]; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ∈ sdt → dnode(md, sdt)[str ' + p] = sdt[str][p]; (s)% ⊦ str0 ∈ sdt ∧ ¬ str ∈ sdt → sdt[str, tree][str0] = sdt[str0]; (s)% ⊦ str ∈ sdt[str0, tree] ↔ str = str0 ∨ str ∈ sdt; (ws)% ⊦ tree[ε] = tree; (s)% ⊦ fnode(fid) ≠ dnode(md, sdt); (s)