| ad = mkdir(m, md, m0, m1, entries), m = # entries, (((ino0 => ad * abs(sdt, entries)) * D))(dirs), str ∈ sdt, p0 ∈ sdt[str], str ∈ entries, ∀ tree, ino0, D, dirs. ((abs(tree, ino0) * D))(dirs) ∧ p0 ∈ tree → (∃ ino. (((abs|(tree, ino0, p0, ino) * abs(tree[p0], ino)) * D))(dirs)) ⊦ ∃ ino, ad0. str ∈ ad0.entries ∧ ad0.meta = md ∧ ad0.size = # ad0.entries ∧ (((((abs|(sdt[str], ad0.entries[str], p0, ino) * abs(sdt -- str, ad0.entries -- str)) * ino0 => ad0) * abs(sdt[str][p0], ino)) * D))(dirs) |
⊦ str ∈ sdt ∧ ((abs(sdt, sdi) * D))(dirs) → str ∈ sdi
(((ino0 => mkdir(# entries, md, m0, m1, entries) * abs(sdt, entries)) * D))(dirs), p0 ∈ sdt[str], str ∈ sdt, str ∈ entries, ∀ tree, ino0, D, dirs. ((abs(tree, ino0) * D))(dirs) ∧ p0 ∈ tree → (∃ ino. (((abs|(tree, ino0, p0, ino) * abs(tree[p0], ino)) * D))(dirs)) ⊦ ∃ ino, ad0. str ∈ ad0.entries ∧ ad0.meta = md ∧ ad0.size = # ad0.entries ∧ (((((abs|(sdt[str], ad0.entries[str], p0, ino) * abs(sdt -- str, ad0.entries -- str)) * ino0 => ad0) * abs(sdt[str][p0], ino)) * D))(dirs)
Used simplifier rules: entries-dom2: ⊦ str ∈ sdt ∧ ((abs(sdt, sdi) * D))(dirs) → str ∈ sdi;%sep-com: ⊦ D * D0 = D0 * D; from specification heap-sep[dir-heap]%sep-ass: ⊦ (D * D0) * D1 = D * D0 * D1; from specification heap-sep[dir-heap]