| tree[p] = dnode(md, sdt), tree.dir?, p ∈ tree ⊦ tree[p, dnode(md, sdt[str, tree0])].dir? |
⊦ tree.dir? ↔ (∃ md, sdt. tree = dnode(md, sdt))
⊦ tree.dir? ↔ ¬(∃ fid. tree = fnode(fid))
⊦ p ∈ tree → (tree[p, tree0] = fnode(fid) ↔ p = ε ∧ tree0 = fnode(fid))
Used simplifier rules: dnode-elim-strong: ⊦ tree.dir? ↔ (∃ md, sdt. tree = dnode(md, sdt));%fnode-elim-strong: ⊦ tree.dir? ↔ ¬(∃ fid. tree = fnode(fid));%put-fnode: ⊦ p ∈ tree → (tree[p, tree0] = fnode(fid) ↔ p = ε ∧ tree0 = fnode(fid));% ⊦ fnode(fid) ≠ dnode(md, sdt); (s)