| # ax = # kx, new(ax, fs), ri-cons(ri, fs), inodekey(ino) ∈ ri, kx.toSet ⊆ dom ri ⊦ mkfile(fs[ri[inodekey(ino)]].size, fs[ri[inodekey(ino)]].meta, fs[ri[inodekey(ino)]].nlink, abs-content(ino, fs, ri)) = mkfile(fs[ri[inodekey(ino)]].size, fs[ri[inodekey(ino)]].meta, fs[ri[inodekey(ino)]].nlink, abs-content(ino, fs[ax, fs[ri[kx]]], ri[kx, ax])), fs[ri[inodekey(ino)]].directory, dups(ax), dups(kx) |
# ax = # kx, new(ax, fs), ri-cons(ri, fs), inodekey(ino) ∈ ri, kx.toSet ⊆ dom ri ⊦ fs[ri[inodekey(ino)]].directory, dups(kx), dups(ax), (datakey(ino, n) ∈ ri → datakey(ino, n) ∈ ri[kx, ax]) ∧ (datakey(ino, n) ∈ ri[kx, ax] → fs[ax, fs[ri[kx]]][ri[kx, ax][datakey(ino, n)]].data = fs[ri[datakey(ino, n)]].data)
Used simplifier rules: F-inj: ⊦ mkfile(m0, md0, n0, content0) = mkfile(m1, md1, n1, content1) ↔ ¬(n0 ≠ n1 ∨ md0 ≠ md1 ∨ m0 ≠ m1 ∨ content0 ≠ content1);%P-ext: ⊦ content = abs-content(ino, fs, ri) ↔ (∀ n. (n ∈ content ↔ datakey(ino, n) ∈ ri) ∧ (n ∈ content → content[n] = fs[ri[datakey(ino, n)]].data));%in-content: ⊦ n ∈ abs-content(ino, fs, ri) ↔ datakey(ino, n) ∈ ri;%at-content: ⊦ datakey(ino, n) ∈ ri → abs-content(ino, fs, ri)[n] = fs[ri[datakey(ino, n)]].data;% ⊦ kx.toSet ⊆ dom ri ∧ ¬ key ∈ ri → ¬ key ∈ kx; (s)% ⊦ # kx = # ax → (key ∈ ri[kx, ax] ↔ key ∈ ri ∨ key ∈ kx); (ws)