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