| fid ∈ fs ↔ fid ∈ root0.fids ∨ fid ∈ ofh.fids, root0[parent(path')].dir?, fids-cons(root0, fs, ofh), py(user, parent(path), root0, fs), py(user, parent(path'), root0, fs), path ∈ root0, parent(path') ∈ root0, root0[path].dir? → pw(user, path, root0, fs) ⊦ fid ∈ fs ↔ fid ∈ (root0 -- path)[path', root0[path]].fids ∨ fid ∈ ofh.fids, path' = ε, path' ∈ root0, path ⊑ path' |
p ≠ ε ⊦ parent(p) ∈ tree0 ∧ tree0[parent(p)].dir? ∧ ¬ p ∈ tree0 → tree0[p, tree1].fids = tree0.fids ∪ tree1.fids
fid ∈ fs ↔ fid ∈ root0.fids ∨ fid ∈ ofh.fids, root0[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, root0[path].dir? → pw(user, path, root0, fs) ⊦ fid ∈ fs ↔ fid ∈ (root0 -- path)[path', root0[path]].fids ∨ fid ∈ ofh.fids, path' = ε, path' ∈ root0, path ⊑ path', path' ≠ ε ∧ parent(path') ∈ root0 -- path ∧ (root0 -- path)[parent(path')].dir? ∧ ¬ path' ∈ root0 -- path
Used simplifier rules: ⊦ ε ∈ tree; (s)% ⊦ ε ⊑ p; (s)%p ≠ ε ⊦ p ∈ tree → (tree -- p).fids = tree.fids \ tree[p].fids; (s)%p ∈ tree ⊦ tree[p].fids ⊆ tree.fids; (ss)%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] Used terms: root0[path], path', root0 -- path