| ⊦ ispath(p + q, n, m, dirs, files) ↔ (∃ m0. ispath(p, n, m0, dirs, files) ∧ ispath(q, m0, m, dirs, files)) |
∀ q, n, m, dirs, files. ispath(p0 + q, n, m, dirs, files) ↔ (∃ m0. ispath(p0, n, m0, dirs, files) ∧ ispath(q, m0, m, dirs, files)) ⊦ ispath((name + p0) + q, n, m, dirs, files) ↔ (∃ m0. ispath(name + p0, n, m0, dirs, files) ∧ ispath(q, m0, m, dirs, files))
Used simplifier rules: path-here: ⊦ ispath(ε, n, m, dirs, files) ↔ valid-ino(n, dirs, files) ∧ m = n;%valid-ino: ⊦ valid-ino(ino, dirs, files) ↔ ino ∈ dirs ∨ ino ∈ files;%path-in-start: ⊦ ispath(p, n, m, dirs, files) ∧ ¬ n ∈ files → n ∈ dirs;%path freely generated by ε, +;;% ⊦ ε + p = p; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]