| 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 ⊦ 〈r := H1[r3] .right〉 ((tr(r, (t0 = leaf ⊃ t1; branch(t0 .butleftmost, a0, t1))) * P * true)(H1) ∧ H1[r3] .val = ((t0 = leaf ⊃ a0; t0 .leftmost))) |
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (P0 * P1) * P2 = P0 * P1 * P2], [CSIMPSEQ : ⊦ P0 * P1 = P1 * P0], [CSIMPSEQ : ⊦ (r => nd * P)(H) → H[r] = nd], [CSIMPSEQ : ⊦ mknode(r, a, r0) .left = r], [CSIMPSEQ : ⊦ mknode(r, a, r0) .right = r0], [CSIMPSEQ : ⊦ mknode(r, a, r0) .val = a], [CSIMPSEQ : ⊦ tr(null, t) = (emp ∧ ⌜t = leaf⌝ )], [CSIMPSEQ : ⊦ (⌜bv⌝ ∧ P0) * P1 = (⌜bv⌝ ∧ P0 * P1)], [CSIMPSEQ : ⊦ emp * P = P], [CSIMPSEQ : ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2)], [CSIMPSEQ : ⊦ (P0 ∧ P1) = (P1 ∧ P0)], [CSIMPSEQ : ⊦ (P0 ∧ P1)(H) ↔ ¬ ¬ (P0(H) ∧ P1(H))], [CSIMPSEQ : ⊦ ⌜bv⌝ (H) ↔ bv], [CSIMPSEQ : ⊦ (P0 * P)(H) → (true * P)(H)])]]