| ad = mkdir(m, md, m0, m1, entries), m = # entries, ((ino0 => ad * abs(sdt, entries)))(dirs), str ∈ sdt, p0 ∈ sdt[str], str ∈ entries, ∀ tree, ino0, dirs. abs(tree, ino0)(dirs) ∧ p0 ∈ tree → (∃ ino. ((abs(tree[p0], ino) * (abs(tree[p0], ino) -* abs(tree, ino0))))(dirs)) ⊦ ∃ ino. (( abs(sdt[str][p0], ino) * (abs(sdt[str][p0], ino) -* _∃(λ ad0. ino0 => ad0 * abs(sdt, ad0.entries) ∧ ⌜ad0.meta = md⌝ ∧ ⌜ad0.size = # ad0.entries⌝ ))) )(dirs) |
⊦ str ∈ sdt ∧ ((abs(sdt, sdi) * D))(dirs) → str ∈ sdi
((ino0 => mkdir(# entries, md, m0, m1, entries) * abs(sdt, entries)))(dirs), p0 ∈ sdt[str], str ∈ sdt, str ∈ entries, ∀ tree, ino0, dirs. abs(tree, ino0)(dirs) ∧ p0 ∈ tree → (∃ ino. ((abs(tree[p0], ino) * (abs(tree[p0], ino) -* abs(tree, ino0))))(dirs)) ⊦ ∃ ino. (( abs(sdt[str][p0], ino) * (abs(sdt[str][p0], ino) -* _∃(λ ad0. ino0 => ad0 * abs(sdt, ad0.entries) ∧ ⌜ad0.meta = md⌝ ∧ ⌜ad0.size = # ad0.entries⌝ ))) )(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]