| ⟨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) |
Used simplifier rules: a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ ¬ p ⊑ p0 + p1 → ¬ p ⊑ p0; (s) Used terms: p'