| 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), fo0 ⊆ dom fi0, ro ⊆ dom ri ⊦ dups(log0), inodekey(0) ∈ ri ⊖ ro, inodekey(0) ∈ ri, ( (key ∈ ri → ri[key] ∈ fs0 ∧ node-closed(fs0[ri[key]], ri, fs0, ro)) → key ∈ ri ⊖ ro → (ri ⊖ ro)[key] ∈ fs0 ∧ node-closed(fs0[(ri ⊖ ro)[key]], ri ⊖ ro, fs0, ∅)) ∧ file-node-cons(fs0, ri ⊖ ro) ∧ orphans-cons(fs0, ri ⊖ ro, ∅), key ∈ ri ∧ ¬ key ∈ ro ∧ ¬ key.data? |
⊦ ri ⊖ ks = (ri \ ks) \ datakeys(ks, ri)
replay-log(log0, fs0, fi0 ⊖ fo0) = (ri \ ro) \ datakeys(ro, ri), fo0.inodes?, ro.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(ri), ri-inj(fi0), ro ⊆ dom ri, fo0 ⊆ dom fi0 ⊦ dups(log0), inodekey(0) ∈ ri, inodekey(0) ∈ (ri \ ro) \ datakeys(ro, ri), key ∈ ri ∧ ¬ key ∈ ro ∧ ¬ key.data?, ( (key ∈ ri → ri[key] ∈ fs0 ∧ node-closed(fs0[ri[key]], ri, fs0, ro)) → key ∈ (ri \ ro) \ datakeys(ro, ri) → ((ri \ ro) \ datakeys(ro, ri))[key] ∈ fs0 ∧ node-closed(fs0[((ri \ ro) \ datakeys(ro, ri))[key]], (ri \ ro) \ datakeys(ro, ri), fs0, ∅)) ∧ file-node-cons(fs0, (ri \ ro) \ datakeys(ro, ri)) ∧ orphans-cons(fs0, (ri \ ro) \ datakeys(ro, ri), ∅)
Used terms: ro, ri