| fid0 ∈ fs ↔ fid0 ∈ root0.fids ∨ fid0 ∈ ofh.fids, root0[path'] = fnode(fid), (root0 -- path)[parent(path')].dir?, root0[parent(path')].dir?, fids-cons(root0, fs, ofh), py(user, parent(path), root0, fs), py(user, parent(path'), root0, fs), path' ∈ root0, path ∈ root0, parent(path') ∈ root0 ⊦ fid0 ≠ fid ∧ fid0 ∈ fs ↔ fid0 ∈ ((root0.fids \ root0[path].fids) \ (path' ⊑ path ⊃ fnode(fid) -- restn(# path', path);fnode(fid)).fids) ∪ root0[path].fids ∨ fid0 ∈ ofh.fids, path' = ε, root0[path].dir?, fid ∈ ofh.fids, fid ∈ (root0.fids \ root0[path].fids) \ (path' ⊑ path ⊃ fnode(fid) -- restn(# path', path);fnode(fid)).fids, fid ∈ root0[path].fids, path ⊑ path' |
fid0 ∈ fs ↔ fid0 ∈ root0.fids ∨ fid0 ∈ ofh.fids, root0[path'] = fnode(fid), fnode(fid1) = root0[path], root0[parent(path')].dir?, (root0 -- path)[parent(path')].dir?, fids-cons(root0, fs, ofh), py(user, parent(path'), root0, fs), py(user, parent(path), root0, fs), parent(path') ∈ root0, path ∈ root0, path' ∈ root0 ⊦ fid0 ≠ fid ∧ fid0 ∈ fs ↔ fid0 ∈ ((root0.fids \ root0[path].fids) \ (path' ⊑ path ⊃ fnode(fid) -- restn(# path', path);fnode(fid)).fids) ∪ root0[path].fids ∨ fid0 ∈ ofh.fids, path' = ε, root0[path].dir?, fid ∈ root0[path].fids, fid ∈ (root0.fids \ root0[path].fids) \ (path' ⊑ path ⊃ fnode(fid) -- restn(# path', path);fnode(fid)).fids, fid ∈ ofh.fids, path ⊑ path'
Used simplifier rules: directory-tree, entries-tree generated by ∅, dnode, fnode, [ ];;% ⊦ dnode(md, sdt).fids = sdt.fids; (s)% ⊦ dnode(md, sdt).dir?; (s)% ⊦ fnode(fid).fids = {fid} ; (s)%fidb ⊆ fidb0 ⊦ (fidb0 \ fidb) ∪ fidb1 = (fidb0 ∪ fidb1) \ fidb; (s)% ⊦ (fidb ∪ fidb0) \ fidb0 = fidb; (s)%union-ass: ⊦ fidb ∪ fidb0 ∪ fidb1 = (fidb ∪ fidb0) ∪ fidb1; from specification bag-union[fidbag]%union-com: ⊦ fidb ∪ fidb0 = fidb0 ∪ fidb; from specification bag-union[fidbag]% ⊦ ¬ fid ∈ fidb → ¬ fid ∈ fidb \ fidb0; (s)