| 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))) ⊦ 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 |
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]
Used simplifier rules: one-at: str ∈ sdt ⊦ dnode(md, sdt)[str '] = sdt[str];% ⊦ str ≠ str0 → (str ∈ sdt[str0, tree] ↔ str ∈ sdt); (s)% ⊦ str0 ∈ sdt ∧ ¬ str ∈ sdt → sdt[str, tree][str0] = sdt[str0]; (s)% ⊦ str ' + p ⊑ str0 ' + p0 ↔ str = str0 ∧ p ⊑ p0; (ws)%a: ⊦ (p + p0) + p1 = p + p0 + p1; from specification list[path] Used formulas: str1 = str0