| fs[ri[dentrykey(ino, str)]].key = dentrykey(ino, str), fs[ri[inodekey(ino)]] = inodenode(inodekey(ino), md, false, m, m0, m1), fs[ri[dentrykey(ino, str)]].dentry?, ro.inodes?, fo.inodes?, node-closed(fs[ri[dentrykey(ino, str)]], 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: dentrynode-closed: ⊦ node-closed(dentrynode(key, ino), ri, fs, ro) ↔ inodekey(key.ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ fs[ri[inodekey(key.ino)]].directory ∧ inodekey(ino) ∈ ri ∧ ¬ inodekey(ino) ∈ ro;% ⊦ dentrynode(key, m).dentry?; (s)% ⊦ dentrykey(m, str).ino = m; (s)% ⊦ inodenode(key, md, boolvar, m, m0, m1).directory ↔ boolvar; (s)% ⊦ nd.dentry? → (key = nd.key ∧ m = nd.ino ↔ nd = dentrynode(key, m)); (elim) Used terms: fs[ri[dentrykey(ino, str)]], key0, m1