| ∀ t0, r5, r, r0, r3, a, r6, t2, r1, t1, a0, P, H. # t0 < # branch(t3, a2, t4) → ( r5 = r ∧ r0 ≠ null ∧ r ≠ null ∧ (r0 => mknode(r3, a, r6) * tr(r3, t0) * tr(r6, t2) * tr(r1, t1) * r => mknode(r0, a0, r1) * P)(H) → 〈while r3 ≠ null do { r5 := r0 ; r0 := r3 ; r3 := H[r0] .left }〉 〈a1 := H[r0] .val ; r3 := H[r0] .right ; H[r5] .left := r3〉 ((tr(r, branch((t0 = leaf ⊃ t2; branch(t0 .butleftmost, a, t2)), a0, t1)) * P * true)(H) ∧ a1 = ((t0 = leaf ⊃ a; t0 .leftmost)))), r5 = r, r0 ≠ null, r ≠ null, (r0 => mknode(r3, a, r6) * tr(r3, branch(t3, a2, t4)) * tr(r6, t2) * tr(r1, t1) * r => mknode(r0, a0, r1) * P)(H) ⊦ 〈while r3 ≠ null do { r5 := r0 ; r0 := r3 ; r3 := H[r0] .left }〉 〈a1 := H[r0] .val ; r3 := H[r0] .right ; H[r5] .left := r3〉 ( (tr(r, branch(branch((t3 = leaf ⊃ t4; branch(t3 .butleftmost, a2, t4)), a, t2), a0, t1)) * P * true)(H) ∧ a1 = ((t3 = leaf ⊃ a2; t3 .leftmost))) |
∀ t0, r5, r, r0, r3, a, r6, t2, r1, t1, a0, P, H. # t0 < # branch(t3, a2, t4) → ( r5 = r ∧ r0 ≠ null ∧ r ≠ null ∧ (r0 => mknode(r3, a, r6) * tr(r3, t0) * tr(r6, t2) * tr(r1, t1) * r => mknode(r0, a0, r1) * P)(H) → 〈while r3 ≠ null do { r5 := r0 ; r0 := r3 ; r3 := H[r0] .left }〉 〈a1 := H[r0] .val ; r3 := H[r0] .right ; H[r5] .left := r3〉 ((tr(r, branch((t0 = leaf ⊃ t2; branch(t0 .butleftmost, a, t2)), a0, t1)) * P * true)(H) ∧ a1 = ((t0 = leaf ⊃ a; t0 .leftmost)))), r5 = r, r0 ≠ null, r ≠ null, (r0 => mknode(r3, a, r6) * tr(r3, branch(t3, a2, t4)) * tr(r6, t2) * tr(r1, t1) * r => mknode(r0, a0, r1) * P)(H) ⊦ 〈r5 := r0〉 〈r0 := r3 ; r3 := H[r0] .left〉 〈while r3 ≠ null do { r5 := r0 ; r0 := r3 ; r3 := H[r0] .left }〉 〈a1 := H[r0] .val ; r3 := H[r0] .right ; H[r5] .left := r3〉 ((tr(r, branch(branch((t3 = leaf ⊃ t4; branch(t3 .butleftmost, a2, t4)), a, t2), a0, t1)) * P * true)(H) ∧ a1 = ((t3 = leaf ⊃ a2; t3 .leftmost)))
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ tr(null, t) = (emp ∧ ⌜t = leaf⌝ )], [CSIMPSEQ : ⊦ leaf ≠ branch(t, a, t0)], [CSIMPSEQ : ⊦ ⌜false⌝ = false], [CSIMPSEQ : ⊦ (false ∧ P) = false], [CSIMPSEQ : ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2)], [CSIMPSEQ : ⊦ (P0 ∧ P1) = (P1 ∧ P0)], [CSIMPSEQ : ⊦ false * P = false], [CSIMPSEQ : ⊦ (P0 * P1) * P2 = P0 * P1 * P2], [CSIMPSEQ : ⊦ P0 * P1 = P1 * P0], [CSIMPSEQ : ⊦ ¬ false(H)])]]