| tree[p] = dnode(md0, sdt0), tree.dir?, p ∈ tree, q ∈ tree[p, dnode(md1, sdt1)] ⊦ tree[p, dnode(md1, sdt1)][q] = (q ⊑ p ⊃ tree[q][restn(# q, p), dnode(md1, sdt1)];tree[p, dnode(md0, sdt1)][q]) |
⊦ tree.dir? ↔ (∃ md, sdt. tree = dnode(md, sdt))
dnode(md, sdt)[p] = dnode(md0, sdt0), p ∈ dnode(md, sdt), q ∈ dnode(md, sdt)[p, dnode(md1, sdt1)] ⊦ dnode(md, sdt)[p, dnode(md1, sdt1)][q] = (q ⊑ p ⊃ dnode(md, sdt)[q][restn(# q, p), dnode(md1, sdt1)];dnode(md, sdt)[p, dnode(md0, sdt1)][q])
Used simplifier rules: dnode-elim-strong: ⊦ tree.dir? ↔ (∃ md, sdt. tree = dnode(md, sdt));