| q = str0 + q1, p0 ∈ sdt[str], str ∈ sdt, q ∈ dnode(md, sdt) -- (str ' + p0), ∀ tree0, q0. p0 ∈ tree0 ∧ ¬ p0 ⊑ q0 ∧ q0 ∈ tree0 → (tree0 -- p0)[q0] = (q0 ⊑ p0 ⊃ tree0[q0] -- restn(# q0, p0);tree0[q0]) ∨ p0 = ε ⊦ (dnode(md, sdt) -- (str ' + p0))[q] = (q ⊑ str ' + p0 ⊃ dnode(md, sdt)[q] -- restn(# q, str ' + p0);dnode(md, sdt)[q]) |
⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p]
⊦ p ∈ tree → tree[p + q] = tree[p][q]
str ∈ sdt, p0 ∈ sdt[str], str0 ' ∈ dnode(md, sdt) -- (str ' + p0), q1 ∈ (dnode(md, sdt) -- (str ' + p0))[str0 '], ∀ tree0, q0. p0 ∈ tree0 ∧ ¬ p0 ⊑ q0 ∧ q0 ∈ tree0 → (tree0 -- p0)[q0] = (q0 ⊑ p0 ⊃ tree0[q0] -- restn(# q0, p0);tree0[q0]) ∨ p0 = ε ⊦ (dnode(md, sdt) -- (str ' + p0))[str0 '][q1] = (str0 ' + q1 ⊑ str ' + p0 ⊃ dnode(md, sdt)[str0 ' + q1] -- restn(# q1, p0);dnode(md, sdt)[str0 ' + q1])
Used simplifier rules: split-in: ⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p];%split-at: ⊦ p ∈ tree → tree[p + q] = tree[p][q];%c: ⊦ m + n = n + m; from specification nat-basic[directory-tree-inst]%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic[directory-tree-inst]% ⊦ restn(n + 1, str ' + p) = restn(n, p); (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ m +1 = m + 1; (s)% ⊦ #(str ' + p) = (# p)+1; (s)% ⊦ str + p = str ' + p; (s)