| fs[ri[dentrykey(ino, str)]] = dentrynode(dentrykey(ino, str), m), ro.inodes?, orphans-cons(fs, ri, ro), ri[dentrykey(ino, str)] ∈ fs, dentrykey(ino, str) ∈ ri, dentrykey(ino, str) ∈ ri → ri[dentrykey(ino, str)] ∈ fs ∧ node-closed(fs[ri[dentrykey(ino, str)]], ri, fs, ro), ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ (m ≠ 0 ⊃ (ri ⊖ ro)[dentrykey(ino, str), adr];(ri ⊖ ro) -- dentrykey(ino, str)) = ri[dentrykey(ino, str), adr] ⊖ ro |
fs[ri[dentrykey(ino, str)]] = dentrynode(dentrykey(ino, str), m), fs[ri[inodekey(ino)]].directory, ro.inodes?, orphans-cons(fs, ri, ro), ri[dentrykey(ino, str)] ∈ fs, dentrykey(ino, str) ∈ ri, inodekey(ino) ∈ ri, inodekey(m) ∈ ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ (m ≠ 0 ⊃ (ri ⊖ ro)[dentrykey(ino, str), adr];(ri ⊖ ro) -- dentrykey(ino, str)) = ri[dentrykey(ino, str), adr] ⊖ ro, inodekey(m) ∈ ro, inodekey(ino) ∈ ro
Used simplifier rules: ⊦ dentrykey(m, str).ino = m; (s)%⊦ 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; (s)