| inodekey(ino0) ∈ ri ⊦ abs-files(fs, ri \ datakeys(inodekey(ino), ri))[ino0] = mkfile(fs[ri[inodekey(ino0)]].size, fs[ri[inodekey(ino0)]].meta, fs[ri[inodekey(ino0)]].nlink, abs-content(ino0, fs, ri)), ino0 = ino, fs[ri[inodekey(ino0)]].directory |
⊦ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory → abs-files(fs, ri)[ino] = abs-file(ino, fs, ri)
Used simplifier rules: 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));%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;% ⊦ (ri \ datakeys(key, ri))[inodekey(ino)] = ri[inodekey(ino)]; (s)% ⊦ key ∈ ri \ ks ↔ key ∈ ri ∧ ¬ key ∈ ks; (ws)%⊦ key ∈ datakeys(key0, ri) ↔ key ∈ ri ∧ key.data? ∧ key0.inode? ∧ key.ino = key0.ino; (s)% ⊦ datakey(m, m0).data?; (s)% ⊦ inodekey(m).inode?; (s)% ⊦ datakey(m, m0).ino = m; (s)% ⊦ inodekey(m).ino = m; (s)%⊦ ino0 ≠ ino → (ri \ datakeys(inodekey(ino0), ri))[datakey(ino, n)] = ri[datakey(ino, n)]; (s)% ⊦ ¬ inodekey(m).data?; (s) Used terms: ino0, ri \ datakeys(inodekey(ino), ri), fs