| ⟨afs_readpage#(p_inode, pageno0, dirs1, files1, asynced0; buf, err)⟩ (buf = buf0 ∧ err = err0), asynced ↔ boolvar0, dirs = dirs1, files = files1, inode = p_inode, pageno = pageno0, pre-readpage(inode, pageno, buf, dirs, files) ⊦ ⟨fail#(; ; err)⟩ (buf = buf0 ∧ err = err0), ⟨if pageno ∈ files[inode.ino].content then buf := files[inode.ino].content[pageno] else buf := zeropage; err := ESUCCESS⟩ (buf = buf0 ∧ err = err0) |
⟨afs_readpage#(p_inode, pageno0, dirs1, files1, asynced0; buf, err)⟩ (buf = buf0 ∧ err = err0), # buf = VFS_PAGE_SIZE, p_inode.ino ∈ files1 ⊦ ⟨fail#(; ; err)⟩ (buf = buf0 ∧ err = err0), ⟨if pageno0 ∈ files1[p_inode.ino].content then buf := files1[p_inode.ino].content[pageno0] else buf := zeropage; err := ESUCCESS⟩ (buf = buf0 ∧ err = err0)
Used simplifier rules: ⊦ valid-file-ino(ino, dirs, files) ↔ ino ∈ files; (s)%⊦ pre-readpage(inode, n, buf, dirs, files) ↔ valid-file-ino(inode.ino, dirs, files) ∧ # buf = VFS_PAGE_SIZE; (s)