| # ax = # kx, fs[ri[inodekey(ino)]].directory, new(ax, fs), ri-cons(ri, fs), inodekey(ino) ∈ ri, kx.toSet ⊆ dom 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)) = 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])), dups(ax), dups(kx) |
# ax = # kx, fs[ri[inodekey(ino)]].directory, new(ax, fs), ri-cons(ri, fs), inodekey(ino) ∈ ri, kx.toSet ⊆ dom ri ⊦ dups(kx), dups(ax), (dentrykey(ino, str) ∈ ri → dentrykey(ino, str) ∈ ri[kx, ax]) ∧ (dentrykey(ino, str) ∈ ri[kx, ax] → fs[ax, fs[ri[kx]]][ri[kx, ax][dentrykey(ino, str)]].ino = fs[ri[dentrykey(ino, str)]].ino)
Used simplifier rules: D-inj: ⊦ mkdir(n0, md0, m0, m1, entries0) = mkdir(n1, md1, m2, m3, entries1) ↔ ¬(md0 ≠ md1 ∨ n0 ≠ n1 ∨ m0 ≠ m2 ∨ m1 ≠ m3 ∨ entries0 ≠ entries1);%C-ext: ⊦ entries = abs-children(ino, fs, ri) ↔ (∀ str. (str ∈ entries ↔ dentrykey(ino, str) ∈ ri) ∧ ( str ∈ entries → entries[str] = fs[ri[dentrykey(ino, str)]].ino));%in-children: ⊦ str ∈ abs-children(ino, fs, ri) ↔ dentrykey(ino, str) ∈ ri;%at-children: ⊦ dentrykey(ino, str) ∈ ri → abs-children(ino, fs, ri)[str] = fs[ri[dentrykey(ino, str)]].ino;% ⊦ kx.toSet ⊆ dom ri ∧ ¬ key ∈ ri → ¬ key ∈ kx; (s)% ⊦ # kx = # ax → (key ∈ ri[kx, ax] ↔ key ∈ ri ∨ key ∈ kx); (ws)