| ⟨afs_lookup#(pageno, dirs1, files1, asynced0; dent, err)⟩ (dent = old_dent ∧ err = err0), asynced ↔ boolvar0, dirs = dirs1, files = files1, p_ino = pageno, pre-lookup(p_ino, dent, dirs, files) ⊦ ⟨ if dent.name ∈ dirs[p_ino].entries then {dent := mkdentry(dent.name, dirs[p_ino].entries[dent.name]); err := ESUCCESS} else {dent := negdentry(dent.name); err := ENOENT} or fail#(; ; err)⟩ (dent = old_dent ∧ err = err0) |
⟨afs_lookup#(pageno, dirs1, files1, asynced0; dent, err)⟩ (dent = old_dent ∧ err = err0), asynced ↔ boolvar0, dirs = dirs1, files = files1, p_ino = pageno, pre-lookup(p_ino, dent, dirs, files) ⊦ ⟨fail#(; ; err)⟩ (dent = old_dent ∧ err = err0), ⟨if dent.name ∈ dirs[p_ino].entries then {dent := mkdentry(dent.name, dirs[p_ino].entries[dent.name]); err := ESUCCESS} else {dent := negdentry(dent.name); err := ENOENT}⟩ (dent = old_dent ∧ err = err0)