| fs[ri[inodekey(m)]].nlink = 0, boolvar ↔ boolvar1, dirs = abs-dirs(fs, ri), files = abs-files(fs, ri), key = inodekey(m), ks = datakeys(key, n, ri), n = 0, 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), 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 = 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_orphans_remove#(inodekey(m), ri \ ks, fi, fo, fs, log, boolvar1; ro0); ri := ri \ ks; 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, 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_orphans_remove#(inodekey(m), ri \ datakeys(inodekey(m), ri), fi, fo, fs, log, boolvar1; ro); ri0 := ri \ datakeys(inodekey(m), ri); aubifs_core_index_remove#(inodekey(m), fi, ro, fo, fs, log, boolvar1; ri0); err := ESUCCESS⟫ ⟨files := abs-files(fs, ri); dirs := abs-dirs(fs, ri); afs_evict#(mkinode(m, md, boolvar2, m0, m1, m2), asynced; err0, dirs, files)⟩ ( dirs = abs-dirs(fs, ri0) ∧ files = abs-files(fs, ri0) ∧ orphans(abs-dirs(fs, ri0), abs-files(fs, ri0)) = abs-keys(ro) ∧ (asynced → boolvar1) ∧ err = err0)
Used simplifier rules: ⊦ datakeys(key, 0, ri) = datakeys(key, ri); (s)