| 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)), pre-evict(inode.ino, fs, ri, ro), 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, ∃ boolvar, key. key = inodekey(inode.ino) |
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)% ⊦ ubifs-cons(fs, ri, ro, fi, fo, log) ∧ key ∈ ro → key ∈ ri; (ss)% ⊦ 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)