| tree2 = fnode(fid), ∀ p. (p ∈ dnode(md, sdt) ↔ p ∈ tree2) ∧ ( p ∈ dnode(md, sdt) → (dnode(md, sdt)[p].dir? ↔ tree2[p].dir?) ∧ (dnode(md, sdt)[p].dir? ⊃ dnode(md, sdt)[p].meta = tree2[p].meta;dnode(md, sdt)[p].fid = tree2[p].fid)), ∀ str. str ∈ sdt → (∀ tree2. (∀ p. (p ∈ sdt[str] ↔ p ∈ tree2) ∧ ( p ∈ sdt[str] → (sdt[str][p].dir? ↔ tree2[p].dir?) ∧ (sdt[str][p].dir? ⊃ sdt[str][p].meta = tree2[p].meta;sdt[str][p].fid = tree2[p].fid))) → sdt[str] = tree2) ⊦ dnode(md, sdt) = tree2 |
⊦ p ∈ fnode(fid) ↔ p = ε
⊦ ε ∈ tree
∀ str. str ∈ sdt → (∀ tree2. (∀ p. (p ∈ sdt[str] ↔ p ∈ tree2) ∧ ( p ∈ sdt[str] → (sdt[str][p].dir? ↔ tree2[p].dir?) ∧ (sdt[str][p].dir? ⊃ sdt[str][p].meta = tree2[p].meta;sdt[str][p].fid = tree2[p].fid))) → sdt[str] = tree2), ∀ p. (p ∈ dnode(md, sdt) → p = ε) ∧ ( p ∈ dnode(md, sdt) → (dnode(md, sdt)[p].dir? ↔ fnode(fid)[p].dir?) ∧ (dnode(md, sdt)[p].dir? ⊃ dnode(md, sdt)[p].meta = fnode(fid)[p].meta;dnode(md, sdt)[p].fid = fnode(fid)[p].fid)) ⊦
Used simplifier rules: fnode-notin: ⊦ p ∈ fnode(fid) ↔ p = ε;%nil-in: ⊦ ε ∈ tree;% ⊦ fnode(fid) ≠ dnode(md, sdt); (s)