| zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, boolvar2, m0), zh[r] = mkznode(r0, zbrar, boolvar, boolvar0, m), r ∈ zh, ¬ zh[r].leaf → (∀ n0. n0 < zh[r].usedsize ∧ n0 < n ∧ zh[r].zbranches[n0].branch? ∧ zh[r].zbranches[n0].child ∈ zh → ¬ zh[zh[r].zbranches[n0].child].dirty) ⊦ 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 → ¬ boolvar2 |
zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, boolvar2, m0), r ∈ zh, ∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty ⊦ (∀ n0. n0 < m ∧ ¬ n < n0 ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty) ↔ n < m ∧ zbrar[n].branch? ∧ zbrar[n].child ∈ zh → ¬ boolvar2
Used simplifier rules: ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).zbranches = zbrar; (s)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).usedsize = m; (s)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).leaf ↔ boolvar; (s)