| zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, false, m0), zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].branch?, (zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].child = r ⊃ mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], false, boolvar0, m) ;zh[zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].child] ) .dirty, n0 < # zbrar, n0 < m, n < # zbrar, zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].child ∈ zh, r ∈ zh, n0 ≤ n, ∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty ⊦ |
zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, false, m0), zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0] = mkzbranch(key0, adr0, r2), zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].branch?, (r2 = r ⊃ mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], false, boolvar0, m);zh[r2]).dirty, n < # zbrar, n0 < m, n0 < # zbrar, r ∈ zh, r2 ∈ zh, n0 ≤ n, ∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty ⊦
Used simplifier rules: ⊦ zbr.branch? → ( (key = zbr.key ∧ adr = zbr.adr) ∧ r = zbr.child ↔ zbr = mkzbranch(key, adr, r)); (elim) Used terms: zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0], key0, adr0, r2