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