| zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, boolvar2, m0), zbrar[n0] = mkzbranch(key, adr, r2), zh[r2].dirty, n0 < m, r2 ∈ zh, r ∈ zh, n0 ≤ n, n < m ∧ zbrar[n].branch? ∧ zbrar[n].child ∈ zh → ¬ boolvar2, ∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty ⊦ |
zbrar[n0] = mkzbranch(key, adr, r2), zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, boolvar2, m0), zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zh[r2] = mkznode(r3, zbrar1, boolvar, boolvar3, m1), boolvar3, n0 < m, r ∈ zh, r2 ∈ zh, n0 ≤ n, n < m ∧ zbrar[n].branch? ∧ zbrar[n].child ∈ zh → ¬ boolvar2, ∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].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[r2], r3, zbrar1, boolvar, boolvar3, m1