| node-closed(fs[ri[key0]], ri, fs, ro), ri[key0] ∈ fs, key0 ∈ ri, key ∈ ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ key0 = key, adr ∈ fs, ( fs[ri[key0]].dentry? → inodekey(fs[ri[key0]].key.ino) ∈ ri[key, adr] ∧ ¬ inodekey(fs[ri[key0]].key.ino) ∈ ro ∧ fs[adr, fs[ri[key]]][ri[key, adr][inodekey(fs[ri[key0]].key.ino)]].directory ∧ inodekey(fs[ri[key0]].ino) ∈ ri[key, adr] ∧ ¬ inodekey(fs[ri[key0]].ino) ∈ ro) ∧ ( fs[ri[key0]].data? → inodekey(fs[ri[key0]].key.ino) ∈ ri[key, adr] ∧ ¬ fs[adr, fs[ri[key]]][ri[key, adr][inodekey(fs[ri[key0]].key.ino)]].directory ∧ # fs[ri[key0]].data = VFS_PAGE_SIZE) |
⊦ 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 ∈ ri, key0 ∈ ri, ri[key0] ∈ fs, fs[ri[key0]].dentry? → inodekey(fs[ri[key0]].key.ino) ∈ ri ∧ ¬ inodekey(fs[ri[key0]].key.ino) ∈ ro ∧ fs[ri[inodekey(fs[ri[key0]].key.ino)]].directory ∧ inodekey(fs[ri[key0]].ino) ∈ ri ∧ ¬ inodekey(fs[ri[key0]].ino) ∈ ro, fs[ri[key0]].data? → inodekey(fs[ri[key0]].key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(fs[ri[key0]].key.ino)]].directory ∧ # fs[ri[key0]].data = VFS_PAGE_SIZE, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ key0 = key, adr ∈ fs, ( fs[ri[key0]].dentry? → inodekey(fs[ri[key0]].key.ino) ∈ ri[key, adr] ∧ ¬ inodekey(fs[ri[key0]].key.ino) ∈ ro ∧ fs[adr, fs[ri[key]]][ri[key, adr][inodekey(fs[ri[key0]].key.ino)]].directory ∧ inodekey(fs[ri[key0]].ino) ∈ ri[key, adr] ∧ ¬ inodekey(fs[ri[key0]].ino) ∈ ro) ∧ ( fs[ri[key0]].data? → inodekey(fs[ri[key0]].key.ino) ∈ ri[key, adr] ∧ ¬ fs[adr, fs[ri[key]]][ri[key, adr][inodekey(fs[ri[key0]].key.ino)]].directory ∧ # fs[ri[key0]].data = VFS_PAGE_SIZE)
Used terms: ro, fs, ri, fs[ri[key0]]