| root0[path'] = dnode(md0, ∅), sdt[str][p] = fnode(fid), dnode(md, sdt) = root0[path], (root0 -- path)[parent(path')].dir?, root0[parent(path')].dir?, fids-cons(root0, fs, ofh), pw(user, path, root0, fs), py(user, parent(path), root0, fs), py(user, parent(path'), root0, fs), path' ∈ root0, path ∈ root0, parent(path') ∈ root0, p ∈ sdt[str], str ∈ sdt ⊦ path' = ε, fid ∈ fs, fid ∈ ofh.fids, fid ∈ root0.fids, path ⊑ path', root0[path + str ' + p] = fnode(fid) ∧ path + str ' + p ∈ root0 |
root0[path'] = dnode(md0, ∅), sdt[str][p] = fnode(fid), dnode(md, sdt) = root0[path], (root0 -- path)[parent(path')].dir?, root0[parent(path')].dir?, fids-cons(root0, fs, ofh), pw(user, path, root0, fs), py(user, parent(path), root0, fs), py(user, parent(path'), root0, fs), path' ∈ root0, path ∈ root0, parent(path') ∈ root0, p ∈ sdt[str], str ∈ sdt ⊦ root0[path + str ' + p] = fnode(fid), path' = ε, fid ∈ fs, fid ∈ ofh.fids, fid ∈ root0.fids, path ⊑ path'
Used simplifier rules: str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str]; (s)% ⊦ str ' ∈ dnode(md, sdt) ↔ str ∈ sdt; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p]; (s)