| fs[ri[inodekey(ino)]].key = inodekey(ino), fs[ri[inodekey(ino)]].inode?, fo.inodes?, ro.inodes?, node-closed(fs[ri[inodekey(ino)]], ri, fs, ro), node-closed(fs[ri[dentrykey(ino, str)]], ri, fs, ro), dentrykey(ino, str) ∈ ri, inodekey(ino) ∈ ri, ri[inodekey(ino)] ∈ fs, ri[dentrykey(ino, str)] ∈ 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]) ⊦ fs[ri[inodekey(ino)]].directory, dups(log), inodekey(0) ∈ ri |
fs[ri[inodekey(ino)]] = inodenode(key0, md, boolvar, m, m0, m1), ¬ boolvar, key0 = inodekey(ino), fs[ri[inodekey(ino)]].inode?, ro.inodes?, fo.inodes?, node-closed(fs[ri[dentrykey(ino, str)]], ri, fs, ro), node-closed(fs[ri[inodekey(ino)]], ri, fs, ro), ri[dentrykey(ino, str)] ∈ fs, ri[inodekey(ino)] ∈ fs, inodekey(ino) ∈ ri, dentrykey(ino, str) ∈ ri, ro ⊆ dom ri, fo ⊆ dom fi, ∀ 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]]) ⊦ dups(log), inodekey(0) ∈ ri
Used simplifier rules: ⊦ nd.inode? → ( ( ( ( (key = nd.key ∧ md = nd.meta) ∧ (boolvar ↔ nd.directory)) ∧ m = nd.nlink) ∧ m0 = nd.nsubdirs) ∧ m1 = nd.size ↔ nd = inodenode(key, md, boolvar, m, m0, m1)); (elim) Used terms: fs[ri[inodekey(ino)]], key0, md, boolvar, m, m0, m1