| (r2 = r ⊃ mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], false, boolvar0, m);zh[r2]) = mkznode(r3, zbrar1, boolvar, true, m1), zh[zbrar[n0].child] = mkznode(r4, zbrar2, boolvar2, boolvar3, m2), 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), n0 = n, n < # zbrar, n0 < m, n0 < # zbrar, r ∈ zh, r2 ∈ zh, n0 ≤ n, n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ boolvar3 ⊦ |
(zbrar[n].child = r ⊃ mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], false, boolvar0, m);mkznode(r1, zbrar0, boolvar1, false, m0)) = mkznode(r3, zbrar1, boolvar, true, m1), zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, false, m0), n < m, n < # zbrar, zbrar[n].child ∈ zh, r ∈ zh ⊦
Used simplifier rules: ⊦ mkznode(r, zbrar, boolvar, boolvar0, m) = mkznode(r0, zbrar0, boolvar1, boolvar2, m0) ↔ r = r0 ∧ zbrar = zbrar0 ∧ (boolvar ↔ boolvar1) ∧ (boolvar0 ↔ boolvar2) ∧ m = m0; (ws)% ⊦ ¬ n < n; (s)% ⊦ m ≤ m; (s)%⊦ mkzbranch(key, adr, r) = mkzbranch(key0, adr0, r0) ↔ key = key0 ∧ adr = adr0 ∧ r = r0; (ws)% ⊦ m < # zbrar → zbrar[m, zbr][m] = zbr; (s)