| 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-cons(ri, fs0), ri-inj(fi0), ri-inj(ri), inodekey(key.ino) ∈ ro, key ∈ ri, fo0 ⊆ dom fi0, ro ⊆ dom ri ⊦ key.data?, dups(log0), inodekey(0) ∈ ri ⊖ ro, inodekey(0) ∈ ri, key ∈ ro, ( ri[key] ∈ fs0 ∧ ( fs0[ri[key]].dentry? → inodekey(key.ino) ∈ ri ∧ ¬ inodekey(key.ino) ∈ ro ∧ fs0[ri[inodekey(key.ino)]].directory ∧ inodekey(fs0[ri[key]].ino) ∈ ri ∧ ¬ inodekey(fs0[ri[key]].ino) ∈ ro) ∧ (fs0[ri[key]].data? → inodekey(key.ino) ∈ ri ∧ ¬ fs0[ri[inodekey(key.ino)]].directory ∧ # fs0[ri[key]].data = VFS_PAGE_SIZE) → key ∈ ri ⊖ ro → (fs0[ri[key]].dentry? → inodekey(key.ino) ∈ ri ⊖ ro ∧ fs0[(ri ⊖ ro)[inodekey(key.ino)]].directory ∧ inodekey(fs0[ri[key]].ino) ∈ ri ⊖ ro) ∧ (fs0[ri[key]].data? → inodekey(key.ino) ∈ ri ⊖ ro ∧ ¬ fs0[(ri ⊖ ro)[inodekey(key.ino)]].directory ∧ # fs0[ri[key]].data = VFS_PAGE_SIZE)) ∧ file-node-cons(fs0, ri ⊖ ro) ∧ orphans-cons(fs0, ri ⊖ ro, ∅) |
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-cons(ri, fs0), ri-inj(fi0), ri-inj(ri), inodekey(key.ino) ∈ ro, key ∈ ri, inodekey(key.ino) ∈ ri, fo0 ⊆ dom fi0, ro ⊆ dom ri ⊦ # ro = 0, ro = ∅, key.data?, dups(log0), inodekey(0) ∈ ri ⊖ ro, inodekey(0) ∈ ri, key ∈ ro, ( ri[key] ∈ fs0 ∧ ¬ fs0[ri[key]].dentry? ∧ ¬ fs0[ri[inodekey(key.ino)]].directory ∧ # fs0[ri[key]].data = VFS_PAGE_SIZE → key ∈ ri ⊖ ro → ¬ fs0[ri[key]].data?) ∧ file-node-cons(fs0, ri ⊖ ro) ∧ orphans-cons(fs0, ri ⊖ ro, ∅)
Used simplifier rules: size-zero-01: ⊦ ks ≠ ∅ → # ks ≠ 0; (forward) from specification set-basic[node-index]% ⊦ key ∈ dom ri ↔ key ∈ ri; (s)%ne-01: ⊦ key ∈ ks → ks ≠ ∅; (forward) from specification set-basic[node-index]%sub-in: ⊦ key ∈ ks ∧ ks ⊆ ks0 → key ∈ ks0; (forward) from specification set-basic[node-index]%⊦ inodekey(ino) ∈ ri → (inodekey(ino) ∈ ri ⊖ ro ↔ ¬ inodekey(ino) ∈ ro); (s)