| fs[ri1[key0]].key = key0, fo.inodes?, ro0.inodes?, file-node-cons(fs, ri1), file-node-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)), log-cons(log, fs), orphans-cons(fs, ri1, ro0), orphans-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m)), replay-cons-strong(fs, ri1, ro0, fi, fo, log), ri-inj(fi), ri-inj(ri1), ubifs-cons(fs, ri1, ro0, fi, fo, log), key0 ∈ ri1, ri1[key0] ∈ fs, inodekey(m) ∈ ri1, inodekey(m) ∈ ro0, ro0 ⊆ dom ri1, key0.dentry? → fs[ri1[key0]].dentry? ∧ inodekey(key0.ino) ∈ ri1 ∧ inodekey(fs[ri1[key0]].ino) ∈ ri1 ∧ ¬ inodekey(key0.ino) ∈ ro0 ∧ ¬ inodekey(fs[ri1[key0]].ino) ∈ ro0 ∧ fs[ri1[inodekey(key0.ino)]].directory, key0.data? → fs[ri1[key0]].data? ∧ inodekey(key0.ino) ∈ ri1 ∧ ¬ fs[ri1[inodekey(key0.ino)]].directory ∧ # fs[ri1[key0]].data = VFS_PAGE_SIZE, key0.inode? → fs[ri1[key0]].inode?, ∀ ino. inodekey(ino) ∈ ro0 → links(ino, fs, ri1) = ∅, ∀ ino. inodekey(ino) ∈ ro0 → dentrykeys(inodekey(ino), ri1) = ∅, ¬ key0.data? ∨ key0.ino ≠ m ⊦ # ro0 = 0, key0.ino = 0, key0 = inodekey(m), m = ROOT_INO, ro0 = ∅, (key0.data? ∧ key0.ino = m ⊃ (∅)[key0];ri1[key0]) ∈ fs ∧ fs[(key0.data? ∧ key0.ino = m ⊃ (∅)[key0];ri1[key0])].key = key0 ∧ ( key0.data? → fs[ri1[key0]].data? ∧ key0.ino ≠ m ∧ inodekey(key0.ino) ∈ ri1 ∧ ¬ fs[ri1[inodekey(key0.ino)]].directory ∧ # fs[ri1[key0]].data = VFS_PAGE_SIZE) |
fs[ri1[key0]].key = key0, ro0.inodes?, fo.inodes?, file-node-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)), file-node-cons(fs, ri1), log-cons(log, fs), orphans-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m)), orphans-cons(fs, ri1, ro0), replay-cons-strong(fs, ri1, ro0, fi, fo, log), ri-inj(ri1), ri-inj(fi), ubifs-cons(fs, ri1, ro0, fi, fo, log), inodekey(m) ∈ ro0, inodekey(m) ∈ ri1, ri1[key0] ∈ fs, key0 ∈ ri1, inodekey(key0.ino) ∈ ri1, ro0 ⊆ dom ri1, key0.inode? → fs[ri1[key0]].inode?, key0.data? → fs[ri1[key0]].data? ∧ inodekey(key0.ino) ∈ ri1 ∧ ¬ fs[ri1[inodekey(key0.ino)]].directory ∧ # fs[ri1[key0]].data = VFS_PAGE_SIZE, key0.dentry? → fs[ri1[key0]].dentry? ∧ inodekey(key0.ino) ∈ ri1 ∧ inodekey(fs[ri1[key0]].ino) ∈ ri1 ∧ ¬ inodekey(key0.ino) ∈ ro0 ∧ ¬ inodekey(fs[ri1[key0]].ino) ∈ ro0 ∧ fs[ri1[inodekey(key0.ino)]].directory, ∀ ino. inodekey(ino) ∈ ro0 → dentrykeys(inodekey(ino), ri1) = ∅, ∀ ino. inodekey(ino) ∈ ro0 → links(ino, fs, ri1) = ∅, ¬ key0.data? ∨ key0.ino ≠ m ⊦ # ro0 = 0, key0.ino = 0, key0 = inodekey(m), m = ROOT_INO, ro0 = ∅, (key0.data? ∧ key0.ino = m ⊃ (∅)[key0];ri1[key0]) ∈ fs ∧ fs[(key0.data? ∧ key0.ino = m ⊃ (∅)[key0];ri1[key0])].key = key0 ∧ ( key0.data? → fs[ri1[key0]].data? ∧ key0.ino ≠ m ∧ inodekey(key0.ino) ∈ ri1 ∧ ¬ fs[ri1[inodekey(key0.ino)]].directory ∧ # fs[ri1[key0]].data = VFS_PAGE_SIZE)
Used simplifier rules: ⊦ key ∈ ri ∧ ubifs-cons(fs, ri, ro, fi, fo, log) → ri[key] ∈ fs; (ss) Used formulas: inodekey(key0.ino) ∈ ri1