| # ax = # kx, new(ax, fs), ri-cons(ri, fs), kx.toSet ⊆ dom ri ⊦ abs-files(fs[ax, fs[ri[kx]]], ri[kx, ax]) = abs-files(fs, ri), dups(ax), dups(kx) |
# ax = # kx, new(ax, fs), ri-cons(ri, fs), kx.toSet ⊆ dom ri ⊦ dups(kx), dups(ax), (inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory ↔ inodekey(ino) ∈ ri[kx, ax] ∧ ¬ fs[ax, fs[ri[kx]]][ri[kx, ax][inodekey(ino)]].directory) ∧ ( inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory → 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])))
Used simplifier rules: F-ext: ⊦ files = abs-files(fs, ri) ↔ (∀ ino. ( ino ∈ files ↔ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory) ∧ (ino ∈ files → files[ino] = abs-file(ino, fs, ri)));%in-files: ⊦ ino ∈ abs-files(fs, ri) ↔ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory;%at-files: ⊦ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory → abs-files(fs, ri)[ino] = abs-file(ino, fs, ri);%file: ⊦ abs-file(ino, fs, ri) = mkfile (fs[ri[inodekey(ino)]].size, fs[ri[inodekey(ino)]].meta, fs[ri[inodekey(ino)]].nlink, abs-content(ino, fs, ri));%# ax = # kx ⊦ new(ax, fs) ∧ ¬ dups(ax) ∧ ¬ dups(kx) ∧ ri-cons(ri, fs) ∧ kx.toSet ⊆ dom ri ∧ key ∈ ri → fs[ax, fs[ri[kx]]][ri[kx, ax][key]] = fs[ri[key]]; (s)