| key.data?, fo.inodes?, ro.inodes?, log-cons(log, fs), node-closed(fs[ri[key]], ri, fs, ro), ri-cons(ri, fs), key ∈ ri, ri[key] ∈ fs, fo ⊆ dom fi, ro ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ node-closed(fs[ri[key]], ri, fs, ro) ⊦ # fs[ri[key]].data = VFS_PAGE_SIZE, dups(log), inodekey(0) ∈ ri |
⊦ node-closed(nd, ri, fs, ro) ↔ ( nd.dentry? → inodekey(nd.key.ino) ∈ ri ∧ ¬ inodekey(nd.key.ino) ∈ ro ∧ fs[ri[inodekey(nd.key.ino)]].directory ∧ inodekey(nd.ino) ∈ ri ∧ ¬ inodekey(nd.ino) ∈ ro) ∧ (nd.data? → inodekey(nd.key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(nd.key.ino)]].directory ∧ # nd.data = VFS_PAGE_SIZE)
key.data?, ro.inodes?, fo.inodes?, log-cons(log, fs), ri-cons(ri, fs), ri[key] ∈ fs, key ∈ ri, ro ⊆ dom ri, fo ⊆ dom fi, fs[ri[key]].dentry? → inodekey(fs[ri[key]].key.ino) ∈ ri ∧ ¬ inodekey(fs[ri[key]].key.ino) ∈ ro ∧ fs[ri[inodekey(fs[ri[key]].key.ino)]].directory ∧ inodekey(fs[ri[key]].ino) ∈ ri ∧ ¬ inodekey(fs[ri[key]].ino) ∈ ro, fs[ri[key]].data? → inodekey(fs[ri[key]].key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(fs[ri[key]].key.ino)]].directory ∧ # fs[ri[key]].data = VFS_PAGE_SIZE, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ node-closed(fs[ri[key]], ri, fs, ro) ⊦ # fs[ri[key]].data = VFS_PAGE_SIZE, dups(log), inodekey(0) ∈ ri
Used terms: ro, fs, ri, fs[ri[key]]