| boolvar0 ↔ boolvar1, dirs = abs-dirs(fs, ri), files = abs-files(fs, ri), key = inodekey(m), ro = orphans(fs, ri), ro0 = orphans(fs, ri), orphans(fs, ri).inodes?, fo.inodes?, afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, orphans(fs, ri)), replay-cons-strong(fs, ri, orphans(fs, ri), fi, fo, log), ri-inj(ri), ri-inj(fi), ubifs-cons(fs, ri, orphans(fs, ri), fi, fo, log), key ∈ ro, inodekey(m) ∈ ri, asynced → boolvar1, ∀ ino. inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO → links(ino, fs, ri) = ∅, ∀ ino. inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO → dentrykeys(inodekey(ino), ri) = ∅, fs[ri[inodekey(m)]].directory ∧ m0 = fs[ri[inodekey(m)]].nlink ∧ m2 = fs[ri[inodekey(m)]].size ∧ m1 = fs[ri[inodekey(m)]].nsubdirs ∧ boolvar2 ∨ ¬ fs[ri[inodekey(m)]].directory ∧ m0 = fs[ri[inodekey(m)]].nlink ∧ m1 = 0 ∧ ¬ boolvar2 ⊦ ⟪aubifs_core_index_truncate#(inodekey(m), 0, fi, ro0, fo, fs, log, boolvar1; ri); aubifs_core_orphans_remove#(inodekey(m), ri, fi, fo, fs, log, boolvar1; ro0); aubifs_core_index_remove#(inodekey(m), fi, ro0, fo, fs, log, boolvar1; ri); err := ESUCCESS⟫ ⟨afs_evict#(mkinode(m, md, boolvar2, m0, m1, m2), asynced; err0, dirs, files)⟩ ( dirs = abs-dirs(fs, ri) ∧ files = abs-files(fs, ri) ∧ orphans(abs-dirs(fs, ri), abs-files(fs, ri)) = abs-keys(ro0) ∧ (asynced → boolvar1) ∧ err = err0), m = ROOT_INO |
fs[ri[inodekey(m)]].nlink = 0, dirs = abs-dirs(fs, ri), files = abs-files(fs, ri), ro = orphans(fs, ri), m ≠ ROOT_INO, fo.inodes?, orphans(fs, ri).inodes?, afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, orphans(fs, ri)), replay-cons-strong(fs, ri, orphans(fs, ri), fi, fo, log), ri-inj(fi), ri-inj(ri), ubifs-cons(fs, ri, orphans(fs, ri), fi, fo, log), inodekey(m) ∈ ri, asynced → boolvar1, ∀ ino. inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO → dentrykeys(inodekey(ino), ri) = ∅, ∀ ino. inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO → links(ino, fs, ri) = ∅, fs[ri[inodekey(m)]].directory ∧ m0 = 0 ∧ m2 = fs[ri[inodekey(m)]].size ∧ m1 = fs[ri[inodekey(m)]].nsubdirs ∧ boolvar2 ∨ ¬ fs[ri[inodekey(m)]].directory ∧ m0 = 0 ∧ m1 = 0 ∧ ¬ boolvar2 ⊦ ⟪aubifs_core_index_truncate#(inodekey(m), 0, fi, orphans(fs, ri), fo, fs, log, boolvar1; ri); aubifs_core_orphans_remove#(inodekey(m), ri, fi, fo, fs, log, boolvar1; ro); aubifs_core_index_remove#(inodekey(m), fi, ro, fo, fs, log, boolvar1; ri); err := ESUCCESS⟫ ⟨afs_evict#(mkinode(m, md, boolvar2, m0, m1, m2), asynced; err0, dirs, files)⟩ ( dirs = abs-dirs(fs, ri) ∧ files = abs-files(fs, ri) ∧ orphans(abs-dirs(fs, ri), abs-files(fs, ri)) = abs-keys(ro) ∧ (asynced → boolvar1) ∧ err = err0)
Used simplifier rules: ⊦ inodekey(m).ino = m; (s)% ⊦ inodekey(m).inode?; (s)%⊦ key ∈ orphans(fs, ri) ↔ key.inode? ∧ key ∈ ri ∧ fs[ri[key]].nlink = 0 ∧ key.ino ≠ ROOT_INO; (s)