| fs0[ri1[inodekey(ino)]].directory, orphans(fs0, ri1).inodes?, fo0.inodes?, afs-cons(abs-dirs(fs0, ri1), abs-files(fs0, ri1)), file-node-cons(fs0, ri1), file-node-cons(fs0, ri1 ⊖ orphans(fs0, ri1)), log-cons(log0, fs0), orphans-cons(fs0, ri1, orphans(fs0, ri1)), orphans-cons(fs0, ri1 ⊖ orphans(fs0, ri1), ∅), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-inj(ri1), ri-inj(fi0), ri-inj(ri1 ⊖ orphans(fs0, ri1)), ubifs-cons(fs0, ri1, orphans(fs0, ri1), fi0, fo0, log0), ubifs-cons(fs0, ri1 ⊖ orphans(fs0, ri1), ∅, fi0, fo0, log0), inodekey(ino) ∈ ri1 ⊦ abs-children(ino, fs0, ri1) = abs-children(ino, fs0, ri1 ⊖ orphans(fs0, ri1)), fs0[ri1[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO |
fs0[ri1[inodekey(ino)]].directory, fo0.inodes?, orphans(fs0, ri1).inodes?, afs-cons(abs-dirs(fs0, ri1), abs-files(fs0, ri1)), file-node-cons(fs0, ri1 ⊖ orphans(fs0, ri1)), file-node-cons(fs0, ri1), log-cons(log0, fs0), orphans-cons(fs0, ri1 ⊖ orphans(fs0, ri1), ∅), orphans-cons(fs0, ri1, orphans(fs0, ri1)), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-inj(ri1 ⊖ orphans(fs0, ri1)), ri-inj(fi0), ri-inj(ri1), ubifs-cons(fs0, ri1 ⊖ orphans(fs0, ri1), ∅, fi0, fo0, log0), ubifs-cons(fs0, ri1, orphans(fs0, ri1), fi0, fo0, log0), inodekey(ino) ∈ ri1 ⊦ fs0[ri1[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO, (dentrykey(ino, str) ∈ ri1 ⊖ orphans(fs0, ri1) ↔ dentrykey(ino, str) ∈ ri1) ∧ (dentrykey(ino, str) ∈ ri1 ⊖ orphans(fs0, ri1) → fs0[(ri1 ⊖ orphans(fs0, ri1))[dentrykey(ino, str)]].ino = fs0[ri1[dentrykey(ino, str)]].ino)
Used simplifier rules: ⊦ dentrykey(ino, str) ∈ ri → abs-children(ino, fs, ri)[str] = fs[ri[dentrykey(ino, str)]].ino; (s)% ⊦ str ∈ abs-children(ino, fs, ri) ↔ dentrykey(ino, str) ∈ ri; (s)%⊦ entries = abs-children(ino, fs, ri) ↔ (∀ str. (str ∈ entries ↔ dentrykey(ino, str) ∈ ri) ∧ ( str ∈ entries → entries[str] = fs[ri[dentrykey(ino, str)]].ino)); (ss)