| files0 = files, ((m0 =>mkfile(n0, md, m, σ) * F))(files), afs-cons(dirs, files) ⊦ [afs_writepage#(mkinode(m0, md0, boolvar, m1, m2, m3), n, buf, dirs; err, files; asynced)] ( err = ESUCCESS ∧ ((m0 =>mkfile(n0, md, m, (σ to n * VFS_PAGE_SIZE) + ⌜buf⌝ + (σ from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE)) * F))(files) ∨ ⌊err⌋ ∧ files0 = files) |
files0 = files, inode = mkinode(m0, md0, boolvar, m1, m2, m3), pageno = n, ((m0 =>mkfile(n0, md, m, σ) * F))(files), afs-cons(dirs, files) ⊦ [if pre-writepage(inode, pageno, buf, dirs, files) then {{files[inode.ino].content[pageno] := buf; err := ESUCCESS} or fail#(; ; err); asynced := ?} else abort] ( err = ESUCCESS ∧ ((m0 =>mkfile(n0, md, m, (σ to n * VFS_PAGE_SIZE) + ⌜buf⌝ + (σ from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE)) * F))(files) ∨ ⌊err⌋ ∧ files0 = files)
Used simplifier rules: afs_writepage#(INODE, PAGENO, PBUF, DIRS; ERR, FILES; ASYNCED) {if pre-writepage(INODE, PAGENO, PBUF, DIRS, FILES) then { {FILES[INODE.ino].content[PAGENO] := PBUF; ERR := ESUCCESS} or fail#(; ; ERR); ASYNCED := ?} else abort };