| fs[ri[key]].key = key, as ∩ range ri = ∅, fo.inodes?, ro.inodes?, file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(fi), ri-inj(ri), ubifs-cons(fs, ri, ro, fi, fo, log), key ∈ ri, ri[key] ∈ fs, key.inode? → fs[ri[key]].inode? ∧ key.ino ≠ 0, key.dentry? → fs[ri[key]].dentry? ∧ inodekey(key.ino) ∈ ri ∧ inodekey(fs[ri[key]].ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ ¬ inodekey(fs[ri[key]].ino) ∈ ro ∧ fs[ri[inodekey(key.ino)]].directory, key.data? → fs[ri[key]].data? ∧ inodekey(key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(key.ino)]].directory ∧ # fs[ri[key]].data = VFS_PAGE_SIZE ⊦ (fs \ as)[ri[key]].key = key ∧ (key.inode? → (fs \ as)[ri[key]].inode? ∧ key.ino ≠ 0) ∧ ( key.dentry? → (fs \ as)[ri[key]].dentry? ∧ inodekey(key.ino) ∈ ri ∧ inodekey((fs \ as)[ri[key]].ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ ¬ inodekey((fs \ as)[ri[key]].ino) ∈ ro ∧ (fs \ as)[ri[inodekey(key.ino)]].directory) ∧ ( key.data? → (fs \ as)[ri[key]].data? ∧ inodekey(key.ino) ∈ ri ∧ ¬ (fs \ as)[ri[inodekey(key.ino)]].directory ∧ # (fs \ as)[ri[key]].data = VFS_PAGE_SIZE) |
fs[ri[key]].key = key, as ∩ range ri = ∅, ro.inodes?, fo.inodes?, file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(ri), ri-inj(fi), ubifs-cons(fs, ri, ro, fi, fo, log), ri[key] ∈ fs, key ∈ ri, ri[inodekey(key.ino)] ∈ as, key.data? → fs[ri[key]].data? ∧ inodekey(key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(key.ino)]].directory ∧ # fs[ri[key]].data = VFS_PAGE_SIZE, key.dentry? → fs[ri[key]].dentry? ∧ inodekey(key.ino) ∈ ri ∧ inodekey(fs[ri[key]].ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ ¬ inodekey(fs[ri[key]].ino) ∈ ro ∧ fs[ri[inodekey(key.ino)]].directory, key.inode? → fs[ri[key]].inode? ∧ key.ino ≠ 0 ⊦ (fs \ as)[ri[key]].key = key ∧ (key.inode? → (fs \ as)[ri[key]].inode? ∧ key.ino ≠ 0) ∧ ( key.dentry? → (fs \ as)[ri[key]].dentry? ∧ inodekey(key.ino) ∈ ri ∧ inodekey((fs \ as)[ri[key]].ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ ¬ inodekey((fs \ as)[ri[key]].ino) ∈ ro ∧ (fs \ as)[ri[inodekey(key.ino)]].directory) ∧ ( key.data? → (fs \ as)[ri[key]].data? ∧ inodekey(key.ino) ∈ ri ∧ ¬ (fs \ as)[ri[inodekey(key.ino)]].directory ∧ # (fs \ as)[ri[key]].data = VFS_PAGE_SIZE)
fs[ri[key]].key = key, as ∩ range ri = ∅, ro.inodes?, fo.inodes?, file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(ri), ri-inj(fi), ubifs-cons(fs, ri, ro, fi, fo, log), ri[key] ∈ fs, key ∈ ri, key.data? → fs[ri[key]].data? ∧ inodekey(key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(key.ino)]].directory ∧ # fs[ri[key]].data = VFS_PAGE_SIZE, key.dentry? → fs[ri[key]].dentry? ∧ inodekey(key.ino) ∈ ri ∧ inodekey(fs[ri[key]].ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ ¬ inodekey(fs[ri[key]].ino) ∈ ro ∧ fs[ri[inodekey(key.ino)]].directory, key.inode? → fs[ri[key]].inode? ∧ key.ino ≠ 0 ⊦ ri[inodekey(key.ino)] ∈ as, (fs \ as)[ri[key]].key = key ∧ (key.inode? → (fs \ as)[ri[key]].inode? ∧ key.ino ≠ 0) ∧ ( key.dentry? → (fs \ as)[ri[key]].dentry? ∧ inodekey(key.ino) ∈ ri ∧ inodekey((fs \ as)[ri[key]].ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ ¬ inodekey((fs \ as)[ri[key]].ino) ∈ ro ∧ (fs \ as)[ri[inodekey(key.ino)]].directory) ∧ ( key.data? → (fs \ as)[ri[key]].data? ∧ inodekey(key.ino) ∈ ri ∧ ¬ (fs \ as)[ri[inodekey(key.ino)]].directory ∧ # (fs \ as)[ri[key]].data = VFS_PAGE_SIZE)
Used formulas: ri[inodekey(key.ino)] ∈ as