| r ≠ null, (r => mknode(r0, a0, r1) * tr(r0, t0) * tr(r1, t1) * P)(H), r2 = H[r] .left, H1 = H ∧ r3 = r ⊦ 〈if r2 = null then { a1 := H1[r3] .val ; r3 := H1[r3] .right } else let r = r3, r0 = H1[r2] .left in { while r0 ≠ null do { r := r2 ; r2 := r0 ; r0 := H1[r2] .left } ; a1 := H1[r2] .val ; r0 := H1[r2] .right ; H1[r] .left := r0 }〉 ((tr(r3, (t0 = leaf ⊃ t1; branch(t0 .butleftmost, a0, t1))) * P * true)(H1) ∧ a1 = ((t0 = leaf ⊃ a0; t0 .leftmost))) |
r ≠ null, (r => mknode(r0, a0, r1) * tr(r0, t0) * tr(r1, t1) * P)(H), r2 = H[r] .left, H1 = H ∧ r3 = r, r2 = null ⊦ 〈a1 := H1[r3] .val〉 〈r3 := H1[r3] .right〉 ((tr(r3, (t0 = leaf ⊃ t1; branch(t0 .butleftmost, a0, t1))) * P * true)(H1) ∧ a1 = ((t0 = leaf ⊃ a0; t0 .leftmost)))
r ≠ null, (r => mknode(r0, a0, r1) * tr(r0, t0) * tr(r1, t1) * P)(H), r2 = H[r] .left, H1 = H ∧ r3 = r, r2 ≠ null ⊦ 〈let r = r3, r0 = H1[r2] .left in { while r0 ≠ null do { r := r2 ; r2 := r0 ; r0 := H1[r2] .left } ; a1 := H1[r2] .val ; r0 := H1[r2] .right ; H1[r] .left := r0 }〉 ((tr(r3, (t0 = leaf ⊃ t1; branch(t0 .butleftmost, a0, t1))) * P * true)(H1) ∧ a1 = ((t0 = leaf ⊃ a0; t0 .leftmost)))
[[CONCRETESIMPRULES : ()]]