| ⟨vfs_walk#(parent(str0 ' + p0), user, dirs, files, asynced; ino, err)⟩ (ino = ino0 ∧ err = EACCESS), ⟪vfs_walk#(parent(str0 ' + p0), user, dirs, files, asynced; ino, err)⟫ ( ⌊err⌋ ∨ err = ESUCCESS ∧ str0 ∈ entries ∧ ispath(parent(p0), entries[str0], ino, dirs, files) ∧ px-parent(user, str0 ' + parent(p0), ROOT_INO, dirs, files) ∨ err = ENOENT ∧ (¬ str0 ∈ entries ∨ ¬ ispath(parent(p0), entries[str0], dirs, files)) ∨ err = EACCESS ∧ (∃ p'. p' ⊑ p1 ∧ ispath(p', ROOT_INO, dirs, files) ∧ ¬ px(user, p', ROOT_INO, dirs, files))), str0 ' + parent(p0) = p1 + str ', dirs[ROOT_INO] = mkdir(m, md, # links(ROOT_INO, dirs), m1, entries), ino = ROOT_INO, afs-cons(dirs, files), ispath(p', ROOT_INO, dirs, files), ROOT_INO ∈ dirs, p' ⊑ p1, str = str0 ∨ str ∈ parent(p0), str0 ∈ p1 ∨ str0 = str ⊦ p0 = ε, px(user, p1, ROOT_INO, dirs, files), px(user, p', ROOT_INO, dirs, files), ∃ p'0. p'0 ⊑ p1 + str ' ∧ ispath(p'0, ROOT_INO, dirs, files) ∧ ¬ px(user, p'0, ROOT_INO, dirs, files) |
⟨vfs_walk#(parent(str0 ' + p0), user, dirs, files, asynced; ino, err)⟩ (ino = ino0 ∧ err = EACCESS), ⟪vfs_walk#(parent(str0 ' + p0), user, dirs, files, asynced; ino, err)⟫ ( ⌊err⌋ ∨ err = ESUCCESS ∧ str0 ∈ entries ∧ ispath(parent(p0), entries[str0], ino, dirs, files) ∧ px-parent(user, str0 ' + parent(p0), ROOT_INO, dirs, files) ∨ err = ENOENT ∧ (¬ str0 ∈ entries ∨ ¬ ispath(parent(p0), entries[str0], dirs, files)) ∨ err = EACCESS ∧ (∃ p'. p' ⊑ p1 ∧ ispath(p', ROOT_INO, dirs, files) ∧ ¬ px(user, p', ROOT_INO, dirs, files))), str0 ' + parent(p0) = p1 + str ', dirs[ROOT_INO] = mkdir(m, md, # links(ROOT_INO, dirs), m1, entries), ino = ROOT_INO, p0 ≠ ε, afs-cons(dirs, files), ispath(p', ROOT_INO, dirs, files), ROOT_INO ∈ dirs, p' ⊑ p1, ¬ px(user, p', ROOT_INO, dirs, files), ¬ px(user, p1, ROOT_INO, dirs, files), str0 ∈ p1 ∨ str0 = str, str = str0 ∨ str ∈ parent(p0) ⊦ ∃ p'0. p'0 ⊑ p1 + str ' ∧ ispath(p'0, ROOT_INO, dirs, files) ∧ ¬ px(user, p'0, ROOT_INO, dirs, files)