| 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) ⊦ str ∈ entries, mkdir(# entries + 1, md, m0, m1, entries[str, ino1]).meta = md ∧ mkdir(# entries + 1, md, m0, m1, entries[str, ino1]).size = # mkdir(# entries + 1, md, m0, m1, entries[str, ino1]).entries ∧ (( ( ino0 => mkdir(# entries + 1, md, m0, m1, entries[str, ino1]) * abs(sdt[str, tree0], mkdir(# entries + 1, md, m0, m1, entries[str, ino1]).entries)) * abs|(tree[p, dnode(mkdir(# entries + 1, md, m0, m1, entries[str, ino1]).meta, sdt[str, tree0])], ROOT_INO, p, ino0)) )(dirs) |
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(sdt[str, tree0], entries[str, ino1])) * abs|(tree[p, dnode(md, sdt[str, tree0])], ROOT_INO, p, ino0)) )(dirs), str ∈ entries
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + n = m + n0 ↔ n = n0; (s)% ⊦ ¬ str ∈ entries → # entries[str, ino] = # entries + 1; (s)% ⊦ mkdir(m, md, m0, m1, entries).entries = entries; (s)% ⊦ mkdir(m, md, m0, m1, entries).size = m; (s)% ⊦ mkdir(m, md, m0, m1, entries).meta = md; (s)