| q ∈ tree -- (str + p0), str + p0 ∈ tree, ∀ tree, q. p0 ∈ tree ∧ q ∈ tree -- p0 → (tree -- p0)[q] = (q ⊑ p0 ⊃ tree[q] -- restn(# q, p0);tree[q]) ∨ p0 = ε ⊦ str + p0 = ε, (tree -- (str + p0))[q] = (q ⊑ str + p0 ⊃ tree[q] -- restn(# q, str + p0);tree[q]) |
⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p]
p ≠ ε ⊦ p ∈ tree → (q ∈ tree -- p ↔ ¬ p ⊑ q ∧ q ∈ tree)
str ' ∈ tree, p0 ∈ tree[str '], q ∈ tree -- (str ' + p0), ∀ tree0, q0. p0 ∈ tree0 ∧ ¬ p0 ⊑ q0 ∧ q0 ∈ tree0 → (tree0 -- p0)[q0] = (q0 ⊑ p0 ⊃ tree0[q0] -- restn(# q0, p0);tree0[q0]) ∨ p0 = ε ⊦ (tree -- (str ' + p0))[q] = (q ⊑ str ' + p0 ⊃ tree[q] -- restn(# q, str ' + p0);tree[q])
Used simplifier rules: split-in: ⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p];%in-del: p ≠ ε ⊦ p ∈ tree → (q ∈ tree -- p ↔ ¬ p ⊑ q ∧ q ∈ tree);%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ' + p ≠ ε; (s)% ⊦ str + p = str ' + p; (s)