| fs[ri[inodekey(m)]].directory, 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 → boolvar, links(m, abs-dirs(fs, ri)) ≠ ∅ ∨ m = ROOT_INO ⊦ dentrykey(m, str) ∈ ri, ( negdentry(str).negdentry? ∧ valid-parent-ino (mkinode(m, md0, true, fs[ri[inodekey(m)]].nlink, fs[ri[inodekey(m)]].nsubdirs, fs[ri[inodekey(m)]].size).ino, fs, ri, orphans(fs, ri)) ∧ ¬ dentrykey(mkinode(m, md0, true, fs[ri[inodekey(m)]].nlink, fs[ri[inodekey(m)]].nsubdirs, fs[ri[inodekey(m)]].size).ino, negdentry(str).name) ∈ ri) ∧ valid-dir-inode(mkinode(m, md0, true, fs[ri[inodekey(m)]].nlink, fs[ri[inodekey(m)]].nsubdirs, fs[ri[inodekey(m)]].size), fs, ri) |
⊦ afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)) ∧ fs[ri[inodekey(m)]].directory ∧ inodekey(m) ∈ ri ∧ fo.inodes? ∧ ro.inodes? ∧ log-cons(log, fs) ∧ ri-inj(fi) ∧ ri-inj(ri) ∧ replay-cons-strong(fs, ri, ro, fi, fo, log) ∧ ubifs-cons(fs, ri, ro, fi, fo, log) ∧ abs-keys(ro) = abs-keys(orphans(fs, ri)) ∧ (links(m, abs-dirs(fs, ri)) ≠ ∅ ∨ m = ROOT_INO) → valid-parent-ino(m, fs, ri, ro)
Used simplifier rules: ⊦ mkinode(m, md, boolvar, m0, m1, m2).ino = m; (s)% ⊦ negdentry(str).negdentry?; (s)% ⊦ negdentry(str).name = str; (s)%⊦ valid-dir-inode(inode, fs, ri) ↔ valid-dir-ino(inode.ino, fs, ri) ∧ (inode.directory ↔ fs[ri[inodekey(inode.ino)]].directory) ∧ inode.nlink = fs[ri[inodekey(inode.ino)]].nlink ∧ inode.nsubdirs = fs[ri[inodekey(inode.ino)]].nsubdirs ∧ inode.size = fs[ri[inodekey(inode.ino)]].size; (s)%⊦ valid-dir-ino(ino, fs, ri) ↔ inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].directory; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).directory ↔ boolvar; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).nlink = m0; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).nsubdirs = m1; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).size = m2; (s)% ⊦ ubifs-cons(fs, ri, ro, fi, fo, log) → fo.inodes?; (ss)% ⊦ ubifs-cons(fs, ri, ro, fi, fo, log) → ro.inodes?; (ss)% ⊦ ubifs-cons(fs, ri, ro, fi, fo, log) → log-cons(log, fs); (ss)% ⊦ ubifs-cons(fs, ri, ro, fi, fo, log) → ri-inj(ri); (ss) Used terms: fo, log, fi, orphans(fs, ri), ri, fs, mkinode (m, md0, true, fs[ri[inodekey(m)]].nlink, fs[ri[inodekey(m)]].nsubdirs, fs[ri[inodekey(m)]].size) .ino