| ε ∈ dnode(md, sdt) ↔ ε ∈ dnode(md0, sdt0), ε ∈ dnode(md, sdt) → (dnode(md, sdt)[ε].dir? ↔ dnode(md0, sdt0)[ε].dir?) ∧ (dnode(md, sdt)[ε].dir? ⊃ dnode(md, sdt)[ε].meta = dnode(md0, sdt0)[ε].meta;dnode(md, sdt)[ε].fid = dnode(md0, sdt0)[ε].fid), ∀ p. (p ∈ dnode(md, sdt) ↔ p ∈ dnode(md0, sdt0)) ∧ ( p ∈ dnode(md, sdt) → (dnode(md, sdt)[p].dir? ↔ dnode(md0, sdt0)[p].dir?) ∧ (dnode(md, sdt)[p].dir? ⊃ dnode(md, sdt)[p].meta = dnode(md0, sdt0)[p].meta;dnode(md, sdt)[p].fid = dnode(md0, sdt0)[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) = dnode(md0, sdt0) |
⊦ ε ∈ tree
⊦ tree[ε] = tree
⊦ dnode(md, sdt).dir?
⊦ dnode(md, sdt).meta = md
∀ p. (p ∈ dnode(md0, sdt) ↔ p ∈ dnode(md0, sdt0)) ∧ ( p ∈ dnode(md0, sdt) → (dnode(md0, sdt)[p].dir? ↔ dnode(md0, sdt0)[p].dir?) ∧ (dnode(md0, sdt)[p].dir? ⊃ dnode(md0, sdt)[p].meta = dnode(md0, sdt0)[p].meta;dnode(md0, sdt)[p].fid = dnode(md0, sdt0)[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) ⊦ sdt = sdt0
Used simplifier rules: nil-in: ⊦ ε ∈ tree;%nil-at: ⊦ tree[ε] = tree;%isdnode: ⊦ dnode(md, sdt).dir?;%meta: ⊦ dnode(md, sdt).meta = md;% ⊦ dnode(md, sdt) = dnode(md0, sdt0) ↔ md = md0 ∧ sdt = sdt0; (ws)