| files[m] = mkfile(m0, md1, # links(m, dirs), content), 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), m ∈ files, ROOT_INO ∈ dirs, psynced → asynced ⊦ # links(m, dirs) = count(⌜m⌝ , root.fids), root[path].dir?, m ∈ dirs |
∀ p. p ∈ ps → fpathtolink(p) ∈ ls, ∀ alink. alink ∈ ls → (∃ p. p ∈ ps ∧ fpathtolink(p) = alink), ∀ p, q. p ∈ ps ∧ q ∈ ps ∧ fpathtolink(p) = fpathtolink(q) → p = q ⊦ # ps = # ls ↔ true
files[m] = mkfile(m0, md1, # links(m, dirs), content), 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), ROOT_INO ∈ dirs, m ∈ files, psynced → asynced ⊦ # links(m, dirs) = count(⌜m⌝ , root.fids), root[path].dir?, m ∈ dirs, (∀ p. p ∈ links(⌜m⌝ , root) → mklink(lookup(parent(p), ROOT_INO, dirs, files), p.last) ∈ links(m, dirs)) ∧ (∀ alink. alink ∈ links(m, dirs) → (∃ p. p ∈ links(⌜m⌝ , root) ∧ mklink(lookup(parent(p), ROOT_INO, dirs, files), p.last) = alink)) ∧ (∀ p, q. p ∈ links(⌜m⌝ , root) ∧ q ∈ links(⌜m⌝ , root) ∧ mklink(lookup(parent(p), ROOT_INO, dirs, files), p.last) = mklink(lookup(parent(q), ROOT_INO, dirs, files), q.last) → p = q)
# links(⌜m⌝ , root) = # links(m, dirs) ↔ true, files[m] = mkfile(m0, md1, # links(m, dirs), content), 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), ROOT_INO ∈ dirs, m ∈ files, psynced → asynced ⊦ # links(m, dirs) = count(⌜m⌝ , root.fids), root[path].dir?, m ∈ dirs
Used terms: links(⌜m⌝ , root), λ p. mklink(lookup(parent(p), ROOT_INO, dirs, files), p.last), links(m, dirs)