| # 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 ⊦ dups(ax), dups(kx), replay-safe(ax, fs[ax, fs[ri[kx]]], ri ⊖ ro) |
#(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 → dups(ax0) ∨ dups(kx) ∨ replay-safe(ax0, fs[ax0, fs[ri[kx]]], ri ⊖ ro) ⊦ dups(kx), dups(adr + ax0), replay-safe(adr + ax0, fs[adr + ax0, fs[ri[kx]]], ri ⊖ ro)
Used simplifier rules: replay-safe-empty: ⊦ replay-safe([], fs, fi);%address-list freely generated by [], +;;% ⊦ # [] = 0; (s)% ⊦ # kx = 0 ↔ kx = []; (s)% ⊦ new([], fs); (s)