| boolvar0 ↔ boolvar, dirs = abs-dirs(fs, ri), err = err0, files = abs-files(fs, ri), ro = 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), asynced → boolvar, inodekey(inode.ino) ∈ ri ∧ fs[ri[inodekey(inode.ino)]].directory ∧ inode.nlink = fs[ri[inodekey(inode.ino)]].nlink ∧ inode.size = fs[ri[inodekey(inode.ino)]].size ∧ inode.nsubdirs = fs[ri[inodekey(inode.ino)]].nsubdirs ∧ inode.directory ∨ inodekey(inode.ino) ∈ ri ∧ ¬ fs[ri[inodekey(inode.ino)]].directory ∧ inode.nlink = fs[ri[inodekey(inode.ino)]].nlink ∧ inode.nsubdirs = 0 ∧ ¬ inode.directory ⊦ inode.ino = ROOT_INO, pre-evict(inode.ino, fs, ri, ro) |
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), asynced → boolvar, inodekey(inode.ino) ∈ ri ∧ fs[ri[inodekey(inode.ino)]].directory ∧ inode.nlink = fs[ri[inodekey(inode.ino)]].nlink ∧ inode.size = fs[ri[inodekey(inode.ino)]].size ∧ inode.nsubdirs = fs[ri[inodekey(inode.ino)]].nsubdirs ∧ inode.directory ∨ inodekey(inode.ino) ∈ ri ∧ ¬ fs[ri[inodekey(inode.ino)]].directory ∧ inode.nlink = fs[ri[inodekey(inode.ino)]].nlink ∧ inode.nsubdirs = 0 ∧ ¬ inode.directory ⊦ inode.ino = ROOT_INO, inodekey(inode.ino) ∈ ri ∧ (inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO → dentrykeys(inodekey(ino), ri) = ∅) ∧ (inodekey(ino0) ∈ ri ∧ fs[ri[inodekey(ino0)]].nlink = 0 ∧ ino0 ≠ ROOT_INO → links(ino0, fs, ri) = ∅)
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)% ⊦ valid-ino(ino, fs, ri) ↔ inodekey(ino) ∈ ri; (s)%⊦ pre-evict(ino, fs, ri, ro) ↔ valid-ino(ino, fs, ri) ∧ ino ≠ ROOT_INO ∧ (∀ ino. inodekey(ino) ∈ ri ∧ inodekey(ino) ∈ ro → dentrykeys(inodekey(ino), ri) = ∅) ∧ (∀ ino. inodekey(ino) ∈ ri ∧ inodekey(ino) ∈ ro → links(ino, fs, ri) = ∅); (s)