| 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 ∈ links(⌜m⌝ , root) → lookup(parent(p), ROOT_INO, dirs, files) ∈ dirs ∧ p.last ∈ dirs[lookup(parent(p), ROOT_INO, dirs, files)].entries ∧ m = dirs[lookup(parent(p), ROOT_INO, dirs, files)].entries[p.last]) ∧ ( alink.pino ∈ dirs ∧ alink.name ∈ dirs[alink.pino].entries ∧ m = dirs[alink.pino].entries[alink.name] → (∃ p0. p0 ∈ links(⌜dirs[lookup(parent(p0), ROOT_INO, dirs, files)].entries[p0.last]⌝ , root) ∧ mklink(lookup(parent(p0), ROOT_INO, dirs, files), p0.last) = alink)) ∧ ( p0 ∈ links(⌜m⌝ , root) ∧ q ∈ links(⌜m⌝ , root) ∧ mklink(lookup(parent(p0), ROOT_INO, dirs, files), p0.last) = mklink(lookup(parent(q), ROOT_INO, dirs, files), q.last) → p0 = q) |
files[m] = mkfile(m0, md1, # links(m, dirs), content), alink = mklink(m1, str), 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 ∈ links(⌜m⌝ , root) → lookup(parent(p), ROOT_INO, dirs, files) ∈ dirs ∧ p.last ∈ dirs[lookup(parent(p), ROOT_INO, dirs, files)].entries ∧ m = dirs[lookup(parent(p), ROOT_INO, dirs, files)].entries[p.last]) ∧ ( m1 ∈ dirs ∧ str ∈ dirs[m1].entries ∧ m = dirs[m1].entries[str] → (∃ p0. p0 ∈ links(⌜dirs[lookup(parent(p0), ROOT_INO, dirs, files)].entries[p0.last]⌝ , root) ∧ mklink(lookup(parent(p0), ROOT_INO, dirs, files), p0.last) = alink)) ∧ ( p0 ∈ links(⌜m⌝ , root) ∧ q ∈ links(⌜m⌝ , root) ∧ mklink(lookup(parent(p0), ROOT_INO, dirs, files), p0.last) = mklink(lookup(parent(q), ROOT_INO, dirs, files), q.last) → p0 = q)
Used simplifier rules: ⊦ m = alink.pino ∧ str = alink.name ↔ alink = mklink(m, str); (elim) Used terms: alink, m1, str