| boolvar1 ↔ boolvar, dirs = abs-dirs(fs, ri), dirs0 = dirs, err = err, err = err0, err1 = err, fi0 = fi, files = abs-files(fs, ri), files0 = files, fo0 = fo, new_child_inode = new_child_inode, new_child_inode = new_dent_inode, new_dent = new_dent, new_dent = old_dent1, new_dent_inode0 = new_child_inode, new_inode0 = new_parent_inode, new_parent_inode = new_parent_inode, new_parent_inode = new_inode, old_child_inode = old_child_inode, old_child_inode = old_dent_inode, old_child_inode0 = old_child_inode, old_dent = old_dent, old_dent = old_dent0, old_dent2 = old_dent, old_dent3 = new_dent, old_dent_inode0 = old_child_inode, old_inode0 = old_parent_inode, old_parent_inode = old_parent_inode, old_parent_inode = old_inode, orphans(dirs, files) = abs-keys(ro), fo.inodes?, ro.inodes?, afs-cons(dirs, files), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), pre-rename(old_parent_inode, old_dent, old_child_inode, new_parent_inode, new_dent, new_child_inode, dirs, files), pre-rename(old_inode, old_dent, old_dent_inode, new_inode, new_dent, new_dent_inode, dirs, files), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(fi), ri-inj(ri), ubifs-cons(fs, ri, ro, fi, fo, log), valid-dentry(new_parent_inode.ino, new_dent, dirs, files), boolvar → boolvar0 ⊦ ∀ old_parent_inode, new_parent_inode, new_child_inode, old_dent, new_dent, err, ri, ro, fs, log, boolvar0. ⟨afs_rename#(; old_inode0, new_inode0, old_dent_inode0, new_dent_inode0, old_dent2, old_dent3, err1, dirs0, files0; boolvar)⟩ ( (dirs0 = abs-dirs(fs, ri) ∧ files0 = abs-files(fs, ri) ∧ orphans(dirs0, files0) = abs-keys(ro) ∧ (boolvar → boolvar0)) ∧ old_parent_inode = old_inode0 ∧ new_parent_inode = new_inode0 ∧ old_child_inode0 = old_dent_inode0 ∧ new_child_inode = new_dent_inode0 ∧ old_dent = old_dent2 ∧ new_dent = old_dent3 ∧ err = err1) → ⟨afs_rename#(; old_inode, new_inode, old_dent_inode, new_dent_inode, old_dent0, old_dent1, err0, dirs, files; boolvar)⟩ ( (dirs = abs-dirs(fs, ri) ∧ files = abs-files(fs, ri) ∧ orphans(dirs, files) = abs-keys(ro) ∧ (boolvar → boolvar0)) ∧ old_parent_inode = old_inode ∧ new_parent_inode = new_inode ∧ old_child_inode = old_dent_inode ∧ new_child_inode = new_dent_inode ∧ old_dent = old_dent0 ∧ new_dent = old_dent1 ∧ err = err0), old_parent_inode.ino = new_parent_inode.ino, new_child_inode.directory, new_dent_inode.directory |
⟨afs_rename#(; old_inode, new_inode, old_child_inode, new_dent_inode, old_dent0, old_dent1, err0, dirs, files; boolvar)⟩ ( dirs = abs-dirs(fs0, ri0) ∧ files = abs-files(fs0, ri0) ∧ orphans(abs-dirs(fs0, ri0), abs-files(fs0, ri0)) = abs-keys(ro0) ∧ (boolvar → boolvar2) ∧ old_parent_inode0 = old_inode ∧ new_parent_inode0 = new_inode ∧ old_dent_inode = old_child_inode ∧ new_child_inode0 = new_dent_inode ∧ old_dent4 = old_dent0 ∧ new_dent0 = old_dent1 ∧ err2 = err0), new_dent_inode.ino = old_dent1.ino, old_dent1.ino = fs[ri[dentrykey(new_inode.ino, old_dent1.name)]].ino, old_dent_inode.ino = old_dent0.ino, old_dent0.ino = fs[ri[dentrykey(old_inode.ino, old_dent0.name)]].ino, new_dent_inode.nlink = fs[ri[inodekey(old_dent1.ino)]].nlink, new_inode.nlink = fs[ri[inodekey(new_inode.ino)]].nlink, old_inode.nlink = fs[ri[inodekey(old_inode.ino)]].nlink, old_dent_inode.nlink = fs[ri[inodekey(old_dent0.ino)]].nlink, new_dent_inode.nsubdirs = 0, new_inode.nsubdirs = fs[ri[inodekey(new_inode.ino)]].nsubdirs, old_inode.nsubdirs = fs[ri[inodekey(old_inode.ino)]].nsubdirs, old_dent_inode.nsubdirs = 0, new_inode.size = fs[ri[inodekey(new_inode.ino)]].size, old_inode.size = fs[ri[inodekey(old_inode.ino)]].size, dirs = abs-dirs(fs, ri), files = abs-files(fs, ri), old_child_inode = old_dent_inode, old_inode.ino ≠ new_inode.ino, old_dent0.dentry?, old_dent1.dentry?, new_inode.directory, old_inode.directory, fs[ri[inodekey(old_inode.ino)]].directory, fs[ri[inodekey(new_inode.ino)]].directory, fo.inodes?, orphans(fs, ri).inodes?, afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, orphans(fs, ri)), replay-cons-strong(fs, ri, orphans(fs, ri), fi, fo, log), ri-inj(fi), ri-inj(ri), ubifs-cons(fs, ri, orphans(fs, ri), fi, fo, log), dentrykey(old_inode.ino, old_dent0.name) ∈ ri, inodekey(old_inode.ino) ∈ ri, inodekey(old_dent1.ino) ∈ ri, dentrykey(new_inode.ino, old_dent1.name) ∈ ri, inodekey(new_inode.ino) ∈ ri, inodekey(old_dent0.ino) ∈ ri, ¬ fs[ri[inodekey(old_dent1.ino)]].directory, ¬ new_dent_inode.directory, ¬ fs[ri[inodekey(old_dent0.ino)]].directory, ¬ old_dent_inode.directory, boolvar → boolvar0, links(old_inode.ino, abs-dirs(fs, ri)) ≠ ∅ ∨ old_inode.ino = ROOT_INO, links(new_inode.ino, abs-dirs(fs, ri)) ≠ ∅ ∨ new_inode.ino = ROOT_INO ⊦ ⟨afs_rename#(; old_inode, new_inode, old_dent_inode, new_dent_inode, old_dent0, old_dent1, err0, dirs, files; boolvar)⟩ ( dirs = abs-dirs(fs0, ri0) ∧ files = abs-files(fs0, ri0) ∧ orphans(abs-dirs(fs0, ri0), abs-files(fs0, ri0)) = abs-keys(ro0) ∧ (boolvar → boolvar2) ∧ old_parent_inode0 = old_inode ∧ new_parent_inode0 = new_inode ∧ old_child_inode = old_dent_inode ∧ new_child_inode0 = new_dent_inode ∧ old_dent4 = old_dent0 ∧ new_dent0 = old_dent1 ∧ err2 = err0)
Used simplifier rules: ubifs-parent-in: ⊦ dentrykey(ino, str) ∈ ri ∧ ubifs-cons(fs, ri, ro, fi, fo, log) → inodekey(ino) ∈ ri; (forward) from specification aubifs-inv% ⊦ mkdir(m, md, m0, m1, entries).nsubdirs = m1; (s)% ⊦ mkdir(m, md, m0, m1, entries).size = m; (s)% ⊦ mkdir(m, md, m0, m1, entries).nlink = m0; (s)% ⊦ dir-empty(ino, dirs, files) ↔ dirs[ino].entries = ∅; (s)% ⊦ mkfile(m, md, m0, content).nlink = m0; (s)%⊦ 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)); (s)%⊦ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory → abs-files(fs, ri)[ino] = abs-file(ino, fs, ri); (s)% ⊦ valid-file-ino(ino, dirs, files) ↔ ino ∈ files; (s)%⊦ valid-file-inode(inode, dirs, files) ↔ valid-file-ino(inode.ino, dirs, files) ∧ inode.nlink = files[inode.ino].nlink ∧ inode.nsubdirs = 0 ∧ ¬ inode.directory; (s)% ⊦ valid-dir-ino(ino, dirs, files) ↔ ino ∈ dirs; (s)%⊦ valid-dir-inode(inode, dirs, files) ↔ valid-dir-ino(inode.ino, dirs, files) ∧ inode.nlink = dirs[inode.ino].nlink ∧ inode.size = dirs[inode.ino].size ∧ inode.nsubdirs = dirs[inode.ino].nsubdirs ∧ inode.directory; (s)%⊦ valid-wb-inode(inode, dirs, files) ↔ valid-dir-inode(inode, dirs, files) ∨ valid-file-inode(inode, dirs, files); (s)%⊦ valid-negdentry(ino, dent, dirs, files) ↔ valid-parent-ino(ino, dirs, files) ∧ ¬ dent.name ∈ dirs[ino].entries ∧ dent.negdentry?; (s)%⊦ pre-rename (old_parent_inode, old_dent, old_child_inode, new_parent_inode, new_dent, new_child_inode, dirs, files) ↔ ( valid-negdentry(new_parent_inode.ino, new_dent, dirs, files) ∨ valid-dentry(new_parent_inode.ino, new_dent, dirs, files) ∧ valid-wb-inode(new_child_inode, dirs, files) ∧ new_child_inode.ino = new_dent.ino ∧ ( valid-file-ino(new_dent.ino, dirs, files) ↔ valid-file-ino(old_dent.ino, dirs, files)) ∧ ( valid-dir-ino(new_dent.ino, dirs, files) → new_dent.ino ≠ ROOT_INO ∧ dir-empty(new_dent.ino, dirs, files))) ∧ valid-dentry(old_parent_inode.ino, old_dent, dirs, files) ∧ valid-dir-inode(old_parent_inode, dirs, files) ∧ valid-dir-inode(new_parent_inode, dirs, files) ∧ ( new_parent_inode.ino = old_parent_inode.ino → new_parent_inode.meta = old_parent_inode.meta) ∧ valid-wb-inode(old_child_inode, dirs, files) ∧ old_child_inode.ino = old_dent.ino; (s)%⊦ dentrykey(ino, str) ∈ ri → abs-children(ino, fs, ri)[str] = fs[ri[dentrykey(ino, str)]].ino; (s)% ⊦ str ∈ abs-children(ino, fs, ri) ↔ dentrykey(ino, str) ∈ ri; (s)% ⊦ mkdir(m, md, m0, m1, entries).entries = entries; (s)%⊦ 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)); (s)%⊦ inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].directory → abs-dirs(fs, ri)[ino] = abs-dir(ino, fs, ri); (s)%⊦ ino ∈ abs-files(fs, ri) ↔ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory; (s)% ⊦ valid-ino(ino, dirs, files) ↔ ino ∈ dirs ∨ ino ∈ files; (s)%⊦ ino ∈ abs-dirs(fs, ri) ↔ inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].directory; (s)%⊦ valid-parent-ino(ino, dirs, files) ↔ ino ∈ dirs ∧ (links(ino, dirs) ≠ ∅ ∨ ino = ROOT_INO); (s)%⊦ valid-dentry(ino, dent, dirs, files) ↔ valid-parent-ino(ino, dirs, files) ∧ valid-ino(dent.ino, dirs, files) ∧ dent.name ∈ dirs[ino].entries ∧ dent.ino = dirs[ino].entries[dent.name] ∧ dent.dentry?; (s)%⊦ ro.inodes? → (abs-keys(ro) = abs-keys(orphans(fs, ri)) ↔ ro = orphans(fs, ri)); (s)%⊦ afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)) → orphans(abs-dirs(fs, ri), abs-files(fs, ri)) = abs-keys(orphans(fs, ri)); (s)