| tree[p0] = dnode(md, sdt), str1 = str0, p0 ∈ tree, ∀ md0, sdt0, md, sdt, q, str, tree0. dnode(md0, sdt0)[p0] = dnode(md, sdt) ∧ p0 ∈ dnode(md0, sdt0) → (q ∈ dnode(md0, sdt0)[p0, dnode(md, sdt[str, tree0])] ↔ (p0 + str ' ⊑ q ⊃ restn(# p0, q.tail) ∈ tree0;q ∈ dnode(md0, sdt0))) ⊦ str1 ∈ sdt1[str0, tree[p0, dnode(md, sdt[str, tree0])]] ∧ q0 ∈ dnode(md0, sdt1[str0, tree[p0, dnode(md, sdt[str, tree0])]])[str1 '] ↔ ((str0 ' + p0) + str ' ⊑ str1 ' + q0 ⊃ restn(# p0, q0.tail) ∈ tree0;str1 ∈ sdt1[str0, tree] ∧ q0 ∈ sdt1[str0, tree][str1]), p0 = ε, str0 ∈ sdt1 |
str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str]
tree[p0] = dnode(md, sdt), p0 ∈ tree, ∀ md0, sdt0, md, sdt, q, str, tree0. dnode(md0, sdt0)[p0] = dnode(md, sdt) ∧ p0 ∈ dnode(md0, sdt0) → (q ∈ dnode(md0, sdt0)[p0, dnode(md, sdt[str, tree0])] ↔ (p0 + str ' ⊑ q ⊃ restn(# p0, q.tail) ∈ tree0;q ∈ dnode(md0, sdt0))) ⊦ q0 ∈ tree[p0, dnode(md, sdt[str, tree0])] ↔ (p0 + str ' ⊑ q0 ⊃ restn(# p0, q0.tail) ∈ tree0;q0 ∈ tree), p0 = ε, str0 ∈ sdt1
Used simplifier rules: one-at: str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str];%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path]% ⊦ str ' + p ⊑ str ' + p0 ↔ p ⊑ p0; (s)% ⊦ sdt[str, tree][str] = tree; (s)% ⊦ str ∈ sdt[str0, tree] ↔ str = str0 ∨ str ∈ sdt; (ws)% ⊦ str ∈ sdt[str, tree]; (s)