| replay-log(log, fs, fi ⊖ fo) = ri ⊖ ro, log-cons(log, fs), node-cons(nd.key, nd), replay-safe(log, fs, fi ⊖ fo), ri-cons(ri, fs) ⊦ (replay-safe(log, fs[adr, nd], fi ⊖ fo) ∧ replay-safe(adr ', fs[adr, nd], replay-log(log, fs[adr, nd], fi ⊖ fo))) ∧ replay-one(adr, nd, replay-log(log, fs[adr, nd], fi ⊖ fo)) = ri[nd.key, adr] ⊖ ro ↔ replay-one(adr, nd, ri ⊖ ro) = ri[nd.key, adr] ⊖ ro, adr ∈ fs |
replay-log(log, fs, fi ⊖ fo) = ri ⊖ ro, log-cons(log, fs), node-cons(nd.key, nd), replay-safe(log, fs, fi ⊖ fo), ri-cons(ri, fs) ⊦ replay-safe(log, fs[adr, nd], fi ⊖ fo) ∧ ¬ adr ∈ replay-log(log, fs[adr, nd], fi ⊖ fo) ∧ replay-one(adr, nd, replay-log(log, fs[adr, nd], fi ⊖ fo)) = ri[nd.key, adr] ⊖ ro ↔ replay-one(adr, nd, ri ⊖ ro) = ri[nd.key, adr] ⊖ ro, adr ∈ fs
Used simplifier rules: replay-safe-one: ⊦ replay-safe(adr ', fs, ri) ↔ adr ∈ fs ∧ ¬ adr ∈ ri ∧ node-cons(fs[adr].key, fs[adr]);% ⊦ fs[adr, nd][adr] = nd; (s)% ⊦ adr ∈ fs[adr1, nd] ↔ adr = adr1 ∨ adr ∈ fs; (s)