| dnode(md, sdt)[parent(p)].dir?, parent(p) ∈ dnode(md, sdt), str ' + q0 ⊑ p, ∀ tree, p, tree0, ino0, ino1, D, dirs. tree[parent(p)].dir? ∧ parent(p) ∈ tree ∧ q0 ⊑ p → (((abs|(tree[p, tree0], ino0, q0, ino1) * D))(dirs) ↔ ((abs|(tree, ino0, q0, ino1) * D))(dirs)) ∨ p = ε ⊦ ((abs|(dnode(md, sdt)[p, tree0], ino0, str ' + q0, ino1) * D))(dirs) ↔ (∃ ad. str ∈ ad.entries ∧ ad.meta = md ∧ ad.size = # ad.entries ∧ ((((abs|(sdt[str], ad.entries[str], q0, ino1) * abs(sdt -- str, ad.entries -- str)) * ino0 => ad) * D))(dirs)), p = ε |
p = str0 + p0, dnode(md, sdt)[parent(p)].dir?, parent(p) ∈ dnode(md, sdt), str ' + q0 ⊑ p, ∀ tree, p, tree0, ino0, ino1, D, dirs. tree[parent(p)].dir? ∧ parent(p) ∈ tree ∧ q0 ⊑ p → (((abs|(tree[p, tree0], ino0, q0, ino1) * D))(dirs) ↔ ((abs|(tree, ino0, q0, ino1) * D))(dirs)) ∨ p = ε ⊦ ((abs|(dnode(md, sdt)[p, tree0], ino0, str ' + q0, ino1) * D))(dirs) ↔ (∃ ad. str ∈ ad.entries ∧ ad.meta = md ∧ ad.size = # ad.entries ∧ ((((abs|(sdt[str], ad.entries[str], q0, ino1) * abs(sdt -- str, ad.entries -- str)) * ino0 => ad) * D))(dirs)), p = ε
Used simplifier rules: path freely generated by ε, +;;