| ⟨let pageno0 = 0, pageno = 0 in afs_truncate_internal#(n, pageno1; inode, buf-opt, pageno0, pageno, boolvar, err, dirs, files; asynced)⟩ (buf-opt = buf-opt0 ∧ inode = p_inode ∧ (boolvar ↔ boolvar0) ∧ err = err0 ∧ dirs = dirs0 ∧ files = files0 ∧ (asynced ↔ asynced0)), dirs = dirs1, files = files1, n = n0, pageno1 = pageno0, pre-truncate(inode, n, pageno1, buf-opt, dirs, files) ⊦ ⟨afs_truncate#(n0, pageno0; buf-opt, inode, boolvar, err, dirs1, files1, boolvar2)⟩ (buf-opt = buf-opt0 ∧ inode = p_inode ∧ (boolvar ↔ boolvar0) ∧ err = err0 ∧ dirs1 = dirs0 ∧ files1 = files0) |
⟨afs_truncate_internal#(n, pageno1; inode, buf-opt, pageno0, pageno, boolvar, err, dirs, files; asynced)⟩ (buf-opt = buf-opt0 ∧ inode = p_inode ∧ (boolvar ↔ boolvar0) ∧ err = err0 ∧ dirs = dirs0 ∧ files = files0 ∧ (asynced ↔ asynced0)), dirs = dirs1, files = files1, n = n0, pageno = 0, pageno0 = 0, pageno1 = pageno3, pre-truncate(inode, n, pageno1, buf-opt, dirs, files) ⊦ ⟨afs_truncate#(n0, pageno3; buf-opt, inode, boolvar, err, dirs1, files1, boolvar2)⟩ (buf-opt = buf-opt0 ∧ inode = p_inode ∧ (boolvar ↔ boolvar0) ∧ err = err0 ∧ dirs1 = dirs0 ∧ files1 = files0)