| psynced, root.dir?, fids-cons(root, fs, ofh), posix-crash(root, fs, ofh, tree, fs0, ofh0) ⊦ ⟨posix_close#(fd, user, root; err, fs, ofh)⟩ (psynced ∧ posix-crash(root, fs, ofh, tree, fs0, ofh0)) |
⊦
err0 = err, psynced, root.dir?, fids-cons(root, fs, ofh), posix-crash(root, fs, ofh, tree, fs0, ofh0) ⊦ ⟨choose err with pre-close(fd, err, user, root, fs, ofh) in err0 := err; if err0 = ESUCCESS then let fid = ofh[fd].fid in {ofh := ofh -- fd; if ¬ fid ∈ ofh.fids ∧ ¬ fid ∈ root.fids then fs := fs -- fid}⟩ (psynced ∧ posix-crash(root, fs, ofh, tree, fs0, ofh0))
Used simplifier rules: close: ⊦ ;