| dirs[m] = mkdir(# entries, md, # links(m, dirs), n1, entries), dirs[entries[str]] = mkdir(m0, md0, m1, m2, entries0), tree[p].dir?, tree[p + str '].dir?, abs(tree, ino)(dirs), afs-cons(dirs, files), fids-cons(tree, abs-files(files), ofh), ispath(p, ino, m, dirs, files), px-parent(user, p, ino, dirs, files), entries[str] ∈ dirs, str ∈ entries, m ∈ dirs ⊦ entries0 = ∅ ↔ tree[p + str '].entries = ∅ |
⊦ afs-cons(dirs, files) ∧ ino ∈ dirs ∧ dirs[ino] = mkdir(n, md, n0, n1, entries) → # entries = n
dirs[m] = mkdir(# entries, md, # links(m, dirs), n1, entries), dirs[entries[str]] = mkdir(# entries0, md0, # links(entries[str], dirs), m2, entries0), tree[p].dir?, tree[p + str '].dir?, abs(tree, ino)(dirs), afs-cons(dirs, files), fids-cons(tree, abs-files(files), ofh), ispath(p, ino, m, dirs, files), px-parent(user, p, ino, dirs, files), entries[str] ∈ dirs, str ∈ entries, m ∈ dirs ⊦ entries0 = ∅ ↔ tree[p + str '].entries = ∅
Used simplifier rules: make-abs-fold-work: ⊦ afs-cons(dirs, files) ∧ ino ∈ dirs ∧ dirs[ino] = mkdir(n, md, n0, n1, entries) → # entries = n;%afs-cons-dir-nlink: ⊦ afs-cons(dirs, files) ∧ ino ∈ dirs ∧ dirs[ino] = mkdir(n0, md, n, n1, entries) → # links(ino, dirs) = n; (forward) from specification afs-base