| tree[p] = dnode(md, sdt), ((abs|(tree, ROOT_INO, p, ino0) * ino0 => mkdir(# entries + 1, md, m0, m1, entries[str, ino1]) * abs(sdt, entries) * D))(dirs), p ∈ tree, D ⊆ abs(tree0, ino1) ⊦ (( ino0 => mkdir(# entries + 1, md, m0, m1, entries[str, ino1]) * (abs(tree0, ino1) * abs(sdt, entries)) * abs|(tree[p, dnode(md, sdt[str, tree0])], ROOT_INO, p, ino0)) )(dirs), str ∈ sdt, str ∈ entries |
⊦ p ≠ ε ∧ q ⊑ p ∧ parent(p) ∈ tree ∧ tree[parent(p)].dir? → abs|(tree[p, tree0], ino0, q, ino1) = abs|(tree, ino0, q, ino1)
tree[p] = dnode(md, sdt), ((abs|(tree, ROOT_INO, p, ino0) * ino0 => mkdir(# entries + 1, md, m0, m1, entries[str, ino1]) * abs(sdt, entries) * D))(dirs), p ∈ tree, D ⊆ abs(tree0, ino1) ⊦ (( ino0 => mkdir(# entries + 1, md, m0, m1, entries[str, ino1]) * (abs(tree0, ino1) * abs(sdt, entries)) * abs|(tree[p, dnode(md, sdt[str, tree0])], ROOT_INO, p, ino0)) )(dirs), str ∈ entries, str ∈ sdt, p ≠ ε ∧ p ⊑ p ∧ parent(p) ∈ tree ∧ tree[parent(p)].dir?
Used simplifier rules: ⊦ p ⊑ p; (s)%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]% ⊦ D ⊆ D0 ∧ ((D1 * D))(dirs) → ((D1 * D0))(dirs); (s) Used terms: ino0, p, ROOT_INO, dnode(md, sdt[str, tree0]), p, tree