| ((abs(tree0, ino0) * abs(tree1, ino1) * D))(dirs), ispath(p0, ino0, n1, dirs, files), ispath(p1, ino1, n1, dirs, files), n1 ∈ dirs, p0 ∈ tree0, ∀ ino. ¬ ino ∈ files ∨ ¬ ino ∈ dirs, ∀ ino. ⌜ino⌝ ∈ tree0.fids → ino ∈ files, ∀ ino. ⌜ino⌝ ∈ tree1.fids → ino ∈ files ⊦ |
∀ ino. ¬ ino ∈ files ∨ ¬ ino ∈ dirs, ∀ ino. ⌜ino⌝ ∈ tree.fids → ino ∈ files, ((abs(tree, ino) * D))(dirs) ⊦ ispath(p, ino, dirs, files) ↔ p ∈ tree
ispath(p1, ino1, dirs, files) ↔ p1 ∈ tree1, ((abs(tree0, ino0) * abs(tree1, ino1) * D))(dirs), ispath(p1, ino1, n1, dirs, files), ispath(p0, ino0, n1, dirs, files), p0 ∈ tree0, n1 ∈ dirs, ∀ ino. ⌜ino⌝ ∈ tree1.fids → ino ∈ files, ∀ ino. ⌜ino⌝ ∈ tree0.fids → ino ∈ files, ∀ ino. ¬ ino ∈ files ∨ ¬ ino ∈ dirs ⊦
Used simplifier rules: sep-ass: ⊦ (D * D0) * D1 = D * D0 * D1; from specification heap-sep[dir-heap]%sep-com: ⊦ D * D0 = D0 * D; from specification heap-sep[dir-heap] Used terms: files, dirs, tree1, ino1, abs(tree0, ino0) * D, p1