| dirs[m1] = mkdir(m5, md0, m6, m7, entries0), files[m] = mkfile(m0, md1, # links(m, dirs), content), dirs[lookup(parent(p), ROOT_INO, dirs, files)] = mkdir(m2, md, m3, m4, entries), mklink(lookup(parent(p0), ROOT_INO, dirs, files), p0.last) = mklink(lookup(parent(q), ROOT_INO, dirs, files), q.last), root.dir?, dom of < ino6, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), ispath(path, ROOT_INO, m, dirs, files), of-cons(of, dirs, files), pr(user, md1), px-parent(user, path, ROOT_INO, dirs, files), p0 ∈ links(⌜m⌝ , root), q ∈ links(⌜m⌝ , root), ROOT_INO ∈ dirs, m ∈ files, psynced → asynced ⊦ # links(m, dirs) = count(⌜m⌝ , root.fids), p0 = q, root[path].dir?, m ∈ dirs |
p0.last = q.last, dirs[m1] = mkdir(m5, md0, m6, m7, entries0), files[m] = mkfile(m0, md1, # links(m, dirs), content), dirs[lookup(parent(p), ROOT_INO, dirs, files)] = mkdir(m2, md, m3, m4, entries), lookup(parent(p0), ROOT_INO, dirs, files) = lookup(parent(q), ROOT_INO, dirs, files), root.dir?, dom of < ino6, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), ispath(path, ROOT_INO, m, dirs, files), of-cons(of, dirs, files), pr(user, md1), px-parent(user, path, ROOT_INO, dirs, files), p0 ∈ links(⌜m⌝ , root), q ∈ links(⌜m⌝ , root), ROOT_INO ∈ dirs, m ∈ files, psynced → asynced ⊦ # links(m, dirs) = count(⌜m⌝ , root.fids), # links(⌜m⌝ , root) = 0, links(⌜m⌝ , root) = ∅, p0 = q, root[path].dir?, m ∈ dirs
Used simplifier rules: size-zero-01: ⊦ ps ≠ ∅ → # ps ≠ 0; (forward) from specification set-basic[pathset]%ne-01: ⊦ p ∈ ps → ps ≠ ∅; (forward) from specification set-basic[pathset]% ⊦ mklink(m, str) = mklink(m0, str0) ↔ m = m0 ∧ str = str0; (ws)