| files0 = files, inode = mkinode(m0, md0, boolvar, m1, m2, m3), pageno = n, ((m0 =>mkfile(n0, md, m, σ) * F))(files), afs-cons(dirs, files), pre-writepage(inode, pageno, buf, dirs, files) ⊦ [asynced := ?] ( ESUCCESS = ESUCCESS ∧ ((m0 =>mkfile(n0, md, m, (σ to n * VFS_PAGE_SIZE) + ⌜buf⌝ + (σ from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE)) * F) )(files[inode.ino, files[inode.ino].content:= files[inode.ino].content[pageno, buf]]) ∨ ⌊ESUCCESS⌋ ∧ files0 = files[inode.ino, files[inode.ino].content:= files[inode.ino].content[pageno, buf]]) |
# buf = VFS_PAGE_SIZE, ((m0 =>mkfile(n0, md, m, σ) * F))(files), afs-cons(dirs, files), m0 ∈ files ⊦ [asynced := ?] ((m0 =>mkfile(n0, md, m, (σ to n * VFS_PAGE_SIZE) + ⌜buf⌝ + (σ from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE)) * F) )(files[m0, files[m0].content:= files[m0].content[n, buf]])
Used simplifier rules: ⊦ ¬ ⌊ESUCCESS⌋ ; (s)% ⊦ valid-file-ino(ino, dirs, files) ↔ ino ∈ files; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).ino = m; (s)%⊦ pre-writepage(inode, n, buf, dirs, files) ↔ valid-file-ino(inode.ino, dirs, files) ∧ # buf = VFS_PAGE_SIZE; (s)