| # ax = # kx, ro.inodes?, new(ax, fs), orphans-cons(fs, ri, ro), ri-closed(ri, fs, ro), ri-cons(ri, fs), kx.toSet ⊆ dom ri ⊦ replay-log(ax, fs[ax, fs[ri[kx]]], ri ⊖ ro) = ri[kx, ax] ⊖ ro, dups(ax), dups(kx) |
#(adr + ax0) = # kx, ro.inodes?, new(adr + ax0, fs), orphans-cons(fs, ri, ro), ri-closed(ri, fs, ro), ri-cons(ri, fs), kx.toSet ⊆ dom ri, ∀ kx, ro, fs, ri. # ax0 = # kx ∧ ro.inodes? ∧ new(ax0, fs) ∧ orphans-cons(fs, ri, ro) ∧ ri-closed(ri, fs, ro) ∧ ri-cons(ri, fs) ∧ kx.toSet ⊆ dom ri → replay-log(ax0, fs[ax0, fs[ri[kx]]], ri ⊖ ro) = ri[kx, ax0] ⊖ ro ∨ dups(ax0) ∨ dups(kx) ⊦ replay-log(adr + ax0, fs[adr + ax0, fs[ri[kx]]], ri ⊖ ro) = ri[kx, adr + ax0] ⊖ ro, dups(kx), dups(adr + ax0)
Used simplifier rules: replay-log-empty: ⊦ replay-log([], fs, ri) = ri;%address-list freely generated by [], +;;% ⊦ # [] = 0; (s)% ⊦ # kx = 0 ↔ kx = []; (s)% ⊦ new([], fs); (s)% ⊦ ¬ dups([]); (s)% ⊦ ri[[], []] = ri; (s)