| btree-sub-clean(r, n, zh) ⊦ r ∈ zh ∧ ( ¬ zh[r].leaf → (∀ n0. n0 < zh[r].usedsize ∧ ¬ n < n0 ∧ zh[r].zbranches[n0].branch? ∧ zh[r].zbranches[n0].child ∈ zh → ¬ zh[zh[r].zbranches[n0].child].dirty)) ↔ ¬ zh[r].leaf ∧ n < zh[r].usedsize ∧ zh[r].zbranches[n].branch? ∧ zh[r].zbranches[n].child ∈ zh → ¬ zh[zh[r].zbranches[n].child].dirty |
zh[r] = mkznode(r0, zbrar, boolvar, boolvar0, m), btree-sub-clean(r, n, zh) ⊦ r ∈ zh ∧ (¬ boolvar → (∀ n0. n0 < m ∧ ¬ n < n0 ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty)) ↔ ¬ boolvar ∧ n < m ∧ zbrar[n].branch? ∧ zbrar[n].child ∈ zh → ¬ zh[zbrar[n].child].dirty
Used simplifier rules: ⊦ ( ( (r = znd.parent ∧ zbrar = znd.zbranches) ∧ (boolvar ↔ znd.leaf)) ∧ (boolvar0 ↔ znd.dirty)) ∧ m = znd.usedsize ↔ znd = mkznode(r, zbrar, boolvar, boolvar0, m); (elim) Used terms: zh[r], r0, zbrar, boolvar, boolvar0, m