| # links(m0, dirs) = 0, files[m0] = mkfile(m, md, 0, content), of[n] = mkfile(m0, mode, m1), afs-cons(dirs, files), afs-cons(dirs, files -- m0), of-cons(of, dirs, files), n ∈ of, m0 ∈ files ⊦ m0 = ROOT_INO, is-open(m0, of), m0 ∈ dirs |
# links(m0, dirs) = 0, of[n] = mkfile(m0, mode, m1), files[m0] = mkfile(m, md, 0, content), afs-cons(dirs, files -- m0), afs-cons(dirs, files), of-cons(of, dirs, files), m0 ∈ files, n ∈ of ⊦ m0 = ROOT_INO, is-open(m0, of)
Used simplifier rules: ⊦ mkfile(m, md, m0, content).nlink = m0; (s)%⊦ of-cons(of, dirs, files) ∧ fd ∈ of ∧ of[fd] = mkfile(ino, mode, n) → ino ∈ files; (ss)%⊦ afs-cons(dirs, files) → ( links(ino, dirs) = ∅ ↔ (ino ∈ dirs → dirs[ino].nlink = 0) ∧ (ino ∈ files → files[ino].nlink = 0)); (ws)%afs-cons-file-nlink: ⊦ afs-cons(dirs, files) ∧ ino ∈ files ∧ files[ino] = mkfile(m, md, n, content) → # links(ino, dirs) = n; (forward) from specification afs-base%size-zero-02: ⊦ # ls = 0 → ls = ∅; (forward) from specification set-basic[alink-set]%⊦ of-cons(of, dirs, files) ∧ fd ∈ of ∧ of[fd] = mkfile(ino, mode, n) ∧ afs-cons(dirs, files) → ¬ ino ∈ dirs; (s)