| afs-cons(dirs, files), ino ∈ dirs, links(ino, dirs) ≠ ∅ ∨ ino = ROOT_INO ⊦ ⟪vfs_walk#(p, user, dirs, files, asynced; ino, err)⟫ true |
⊦
afs-cons(dirs, files), ino ∈ dirs, links(ino, dirs) ≠ ∅ ∨ ino = ROOT_INO ⊦ ⟪err := ESUCCESS; let p = p in while p ≠ ε ∧ err = ESUCCESS do {choose inode with true in vfs_may_lookup#(ino, user, dirs, files, asynced; inode, err); if err = ESUCCESS then let dent = negdentry(p.head) in {afs_lookup#(ino, dirs, files, asynced; dent, err); if err = ESUCCESS then {ino := dent.ino; p := p.tail}}}⟫ true
Used simplifier rules: walk: ⊦ ;