| ispath(p0, entries[str], ino1, dirs, files), p0 ∈ sdt[str], ino1 ∈ files, str ∈ entries, str ∈ sdt, ∀ tree, ino0, D, dirs, ino1, files. ((abs(tree, ino0) * D))(dirs) ∧ ispath(p0, ino0, ino1, dirs, files) ∧ p0 ∈ tree ∧ ino1 ∈ files → tree[p0] = fnode(⌜ino1⌝ ) ∨ ino1 ∈ dirs, ∃ tree, ino, sdi0, sdt0. ¬ str ∈ sdt0 ∧ sdt = sdt0[str, tree] ∧ ¬ str ∈ sdi0 ∧ entries = sdi0[str, ino] ∧ ((abs(tree, ino) * abs(sdt0, sdi0) * D * ino0 => mkdir(# entries, md, m0, m1, entries)))(dirs) ⊦ sdt[str][p0] = fnode(⌜ino1⌝ ), ino1 ∈ dirs |
((abs(tree, ino) * abs(sdt0, sdi) * D * ino0 => mkdir(# sdi + 1, md, m0, m1, sdi[str, ino])))(dirs), ispath(p0, ino, ino1, dirs, files), ino1 ∈ files, p0 ∈ tree, ∀ tree, ino0, D, dirs, ino1, files. ((abs(tree, ino0) * D))(dirs) ∧ ispath(p0, ino0, ino1, dirs, files) ∧ p0 ∈ tree ∧ ino1 ∈ files → tree[p0] = fnode(⌜ino1⌝ ) ∨ ino1 ∈ dirs ⊦ tree[p0] = fnode(⌜ino1⌝ ), ino1 ∈ dirs, str ∈ sdi, str ∈ sdt0
Used simplifier rules: ⊦ entries[str, ino][str] = ino; (s)% ⊦ str ∈ entries[str0, ino] ↔ str = str0 ∨ str ∈ entries; (ws)% ⊦ str ∈ sdt[str0, tree] ↔ str = str0 ∨ str ∈ sdt; (ws)% ⊦ ¬ str ∈ entries → # entries[str, ino] = # entries + 1; (s)% ⊦ sdt[str, tree][str] = tree; (s)