| root[path] = fnode(fid), root.dir?, root[parent(path')].dir?, fids-cons(root, fs, ofh), px(user, parent(path), root, fs), py(user, parent(path'), root, fs), path ∈ root, parent(path') ∈ root ⊦ fids-cons(root[path', fnode(fid)], fs, ofh), path' ∈ root |
⊦ fids-cons(tree0, fs0, ofh0) → (fids-cons(tree1, fs1, ofh1) ↔ (∀ fid. (fid ∈ fs0 ↔ fid ∈ tree0.fids ∨ fid ∈ ofh0.fids) → (fid ∈ fs1 ↔ fid ∈ tree1.fids ∨ fid ∈ ofh1.fids)))
fid0 ∈ fs ↔ fid0 ∈ root.fids ∨ fid0 ∈ ofh.fids, root[path] = fnode(fid), root[parent(path')].dir?, root.dir?, fids-cons(root, fs, ofh), px(user, parent(path), root, fs), py(user, parent(path'), root, fs), parent(path') ∈ root, path ∈ root ⊦ fid0 ∈ fs ↔ fid0 ∈ root.fids ∪ {fid} ∨ fid0 ∈ ofh.fids, path' ∈ root
Used simplifier rules: fids-cons-reduce: ⊦ fids-cons(tree0, fs0, ofh0) → ( fids-cons(tree1, fs1, ofh1) ↔ (∀ fid. (fid ∈ fs0 ↔ fid ∈ tree0.fids ∨ fid ∈ ofh0.fids) → (fid ∈ fs1 ↔ fid ∈ tree1.fids ∨ fid ∈ ofh1.fids)));% ⊦ fnode(fid).fids = {fid} ; (s)%p ≠ ε ⊦ parent(p) ∈ tree0 ∧ tree0[parent(p)].dir? ∧ ¬ p ∈ tree0 → tree0[p, tree1].fids = tree0.fids ∪ tree1.fids; (s)% ⊦ ε ∈ tree; (s)