| range ri ∩ as = ∅ ⊦ ri[inodekey(ino)] ∈ as, (inodekey(ino) ∈ ri → (fs[ri[inodekey(ino)]].directory ↔ (fs \ as)[ri[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 \ as)[ri[inodekey(ino)]].size, (fs \ as)[ri[inodekey(ino)]].meta, (fs \ as)[ri[inodekey(ino)]].nlink, (fs \ as)[ri[inodekey(ino)]].nsubdirs, abs-children(ino, fs \ as, ri))) |
range ri ∩ as = ∅, fs[ri[inodekey(ino)]].directory, inodekey(ino) ∈ ri, dentrykey(ino, str) ∈ ri ⊦ (fs \ as)[ri[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;% ⊦ key ∈ ri ∧ as ∩ range ri = ∅ → ¬ ri[key] ∈ as; (s)%int-c: ⊦ as ∩ as0 = as0 ∩ as; from specification set-union[node-store]%int-a: ⊦ (as ∩ as0) ∩ as1 = as ∩ as0 ∩ as1; from specification set-union[node-store]% ⊦ ¬ adr ∈ as → (fs \ as)[adr] = fs[adr]; (s)