| tree0[parent(str + p0)].dir?, str + p0 ∈ tree0, ∀ tree0, tree1. tree0[parent(p0)].dir? ∧ p0 ∈ tree0 → tree0[p0, tree1].fids = (tree0.fids ∪ tree1.fids) \ tree0[p0].fids ∨ p0 = ε ⊦ str + p0 = ε, tree0[str + p0, tree1].fids = (tree0.fids ∪ tree1.fids) \ tree0[str + p0].fids |
tree0[parent(str ' + p0)].dir?, str ' ∈ tree0, p0 ∈ tree0[str '], ∀ tree0, tree1. tree0[parent(p0)].dir? ∧ p0 ∈ tree0 → tree0[p0, tree1].fids = (tree0.fids ∪ tree1.fids) \ tree0[p0].fids ∨ p0 = ε ⊦ tree0[str ' + p0, tree1].fids = (tree0.fids ∪ tree1.fids) \ tree0[str ' + p0].fids
Used simplifier rules: ⊦ p + q ∈ tree ↔ p ∈ tree ∧ q ∈ tree[p]; (s)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ' + p ≠ ε; (s)% ⊦ str + p = str ' + p; (s)