| ri[key] = ri[key0], fo.inodes?, ro.inodes?, key-cons(key, fs[ri[key0]]), key-cons(key0, fs[ri[key0]]), key ∈ ri, key0 ∈ ri, ri[key0] ∈ fs, fo ⊆ dom fi, ro ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]), ∀ key. key ∈ ri → ri[key] ∈ fs ∧ node-closed(fs[ri[key]], ri, fs, ro), ∀ adr. adr ∈ log → adr ∈ fs ∧ node-cons(fs[adr].key, fs[adr]) ⊦ key = key0, dups(log), inodekey(0) ∈ ri |
⊦ key-cons(key, nd) ↔ nd.key = key ∧ (key.inode? → nd.inode? ∧ key.ino ≠ 0) ∧ (key.dentry? → nd.dentry?) ∧ (key.data? → nd.data?)
fs[ri[key0]].key = key0, ri[key] = ri[key0], ro.inodes?, fo.inodes?, key-cons(key, fs[ri[key0]]), ri[key0] ∈ fs, key0 ∈ ri, key ∈ ri, ro ⊆ dom ri, fo ⊆ dom fi, key0.inode? → fs[ri[key0]].inode? ∧ key0.ino ≠ 0, key0.dentry? → fs[ri[key0]].dentry?, key0.data? → fs[ri[key0]].data?, ∀ adr. adr ∈ log → adr ∈ fs ∧ node-cons(fs[adr].key, fs[adr]), ∀ 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]]) ⊦ key = key0, dups(log), inodekey(0) ∈ ri
Used terms: fs[ri[key0]], key0