| ⟪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' ⊑ 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, # links(ROOT_INO, dirs), m1, entries), ino = ROOT_INO, p0 ≠ ε, afs-cons(dirs, files), ispath(p', ROOT_INO, dirs, files), ROOT_INO ∈ dirs, 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) |
⟪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))), ⟨vfs_walk#(parent(str0 ' + p0), user, dirs, files, asynced; ino, err)⟩ (ino = ino0 ∧ err = EACCESS), 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 ⊦ 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)
Used simplifier rules: ⊦ p + p0 = ε ↔ p = ε ∧ p0 = ε; (as)% ⊦ str ' ≠ ε; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]%p ≠ ε ⊦ str = p.last ∧ p0 = parent(p) ↔ p = p0 + str '; (elim) Used terms: str0 ' + parent(p0), str, p