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