| # ax = # kx, new(ax, fs), ri-cons(ri, fs), kx.toSet ⊆ dom ri ⊦ abs-dirs(fs[ax, fs[ri[kx]]], ri[kx, ax]) = abs-dirs(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 → mkdir (fs[ri[inodekey(ino)]].size, fs[ri[inodekey(ino)]].meta, fs[ri[inodekey(ino)]].nlink, fs[ri[inodekey(ino)]].nsubdirs, abs-children(ino, fs, ri)) = mkdir (fs[ri[inodekey(ino)]].size, fs[ri[inodekey(ino)]].meta, fs[ri[inodekey(ino)]].nlink, fs[ri[inodekey(ino)]].nsubdirs, abs-children(ino, fs[ax, fs[ri[kx]]], ri[kx, ax])))
Used simplifier rules: D-ext: ⊦ dirs = abs-dirs(fs, ri) ↔ (∀ ino. ( ino ∈ dirs ↔ inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].directory) ∧ (ino ∈ dirs → dirs[ino] = abs-dir(ino, fs, ri)));%in-dirs: ⊦ ino ∈ abs-dirs(fs, ri) ↔ inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].directory;%at-dirs: ⊦ inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].directory → abs-dirs(fs, ri)[ino] = abs-dir(ino, fs, ri);%dir: ⊦ abs-dir(ino, fs, ri) = mkdir (fs[ri[inodekey(ino)]].size, fs[ri[inodekey(ino)]].meta, fs[ri[inodekey(ino)]].nlink, fs[ri[inodekey(ino)]].nsubdirs, abs-children(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)