| fs0[ri[key]] = datanode(key, buf), replay-log(log0, fs0, fi0 ⊖ fo0) = ri ⊖ ro, ro.inodes?, fo0.inodes?, file-node-cons(fs0, ri), log-cons(log0, fs0), orphans-cons(fs0, ri, ro), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-closed(ri, fs0, ro), ri-inj(fi0), ri-inj(ri), ri[key] ∈ fs0, inodekey(key.ino) ∈ ro, key ∈ ri, inodekey(key.ino) ∈ ri, fo0 ⊆ dom fi0, ro ⊆ dom ri ⊦ # ro = 0, ro = ∅, key.data?, key.dentry?, key.inode?, dups(log0), inodekey(0) ∈ ri ⊖ ro, inodekey(0) ∈ ri, key ∈ ro, (¬ fs0[ri[inodekey(key.ino)]].directory ∧ # buf = VFS_PAGE_SIZE → ¬ key ∈ ri ⊖ ro) ∧ file-node-cons(fs0, ri ⊖ ro) ∧ orphans-cons(fs0, ri ⊖ ro, ∅) |
Used simplifier rules: key freely generated by inodekey, datakey, dentrykey;;% ⊦ dentrykey(m, str).ino = m; (s)% ⊦ ks.inodes? → ¬ dentrykey(ino, str) ∈ ks; (s)% ⊦ ¬ dentrykey(m, str).inode?; (s)% ⊦ dentrykey(m, str).dentry?; (s)% ⊦ datakey(m, m0).ino = m; (s)% ⊦ ks.inodes? → ¬ datakey(ino, n) ∈ ks; (s)% ⊦ ¬ datakey(m, m0).inode?; (s)% ⊦ ¬ datakey(m, m0).dentry?; (s)% ⊦ datakey(m, m0).data?; (s)% ⊦ inodekey(m).ino = m; (s)