| ((abs(sdt, sdi) * D))(dirs), str ∈ sdt, ∃ ino, entries0. sdi = entries0[str, ino] ∧ ¬ str ∈ entries0 ⊦ ∃ tree, ino, sdi0, sdt0. ¬ str ∈ sdt0 ∧ sdt = sdt0[str, tree] ∧ ¬ str ∈ sdi0 ∧ sdi = sdi0[str, ino] ∧ ((abs(tree, ino) * abs(sdt0, sdi0) * D))(dirs) |
⊦ str ∈ sdt ∧ ((abs(sdt, sdi) * D))(dirs) → str ∈ sdi
((abs(sdt, entries[str, ino]) * D))(dirs), str ∈ sdt ⊦ str ∈ entries, ∃ tree, ino0, sdi0, sdt0. ¬ str ∈ sdt0 ∧ sdt = sdt0[str, tree] ∧ ¬ str ∈ sdi0 ∧ entries[str, ino] = sdi0[str, ino0] ∧ ((abs(tree, ino0) * abs(sdt0, sdi0) * D))(dirs)
Used simplifier rules: entries-dom2: ⊦ str ∈ sdt ∧ ((abs(sdt, sdi) * D))(dirs) → str ∈ sdi;% ⊦ str ∈ entries[str0, ino] ↔ str = str0 ∨ str ∈ entries; (ws)%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]