| 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, ino ∈ abs-files(fs0, ri1), fs0[ri1[inodekey(ino)]].nlink ≠ 0 ∨ ino = ROOT_INO ⊦ abs-files(fs0, ri1)[ino] = mkfile(fs0[ri1[inodekey(ino)]].size, fs0[ri1[inodekey(ino)]].meta, fs0[ri1[inodekey(ino)]].nlink, abs-content(ino, fs0, ri1 ⊖ orphans(fs0, ri1))), fs0[ri1[inodekey(ino)]].directory, ino ∈ abs-keys(orphans(fs0, ri1)), fs0[ri1[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO |
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, fs0[ri1[inodekey(ino)]].nlink ≠ 0 ∨ ino = ROOT_INO ⊦ fs0[ri1[inodekey(ino)]].directory, (datakey(ino, n) ∈ ri1 ⊖ orphans(fs0, ri1) ↔ datakey(ino, n) ∈ ri1) ∧ (datakey(ino, n) ∈ ri1 ⊖ orphans(fs0, ri1) → fs0[(ri1 ⊖ orphans(fs0, ri1))[datakey(ino, n)]].data = fs0[ri1[datakey(ino, n)]].data), fs0[ri1[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_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)% ⊦ n ∈ abs-keys(ks) ↔ inodekey(n) ∈ ks; (s)%⊦ ino ∈ abs-files(fs, ri) ↔ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory; (s)%⊦ datakey(ino, n) ∈ ri → abs-content(ino, fs, ri)[n] = fs[ri[datakey(ino, n)]].data; (s)% ⊦ n ∈ abs-content(ino, fs, ri) ↔ datakey(ino, n) ∈ ri; (s)%⊦ content = abs-content(ino, fs, ri) ↔ (∀ n. (n ∈ content ↔ datakey(ino, n) ∈ ri) ∧ (n ∈ content → content[n] = fs[ri[datakey(ino, n)]].data)); (ss)%⊦ mkfile(m0, md0, n0, content0) = mkfile(m1, md1, n1, content1) ↔ ¬(n0 ≠ n1 ∨ md0 ≠ md1 ∨ m0 ≠ m1 ∨ content0 ≠ content1); (ss)%⊦ abs-file(ino, fs, ri) = mkfile (fs[ri[inodekey(ino)]].size, fs[ri[inodekey(ino)]].meta, fs[ri[inodekey(ino)]].nlink, abs-content(ino, fs, ri)); (s)%⊦ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory → abs-files(fs, ri)[ino] = abs-file(ino, fs, ri); (s)