| r ≠ null, (tr(r, t) * P)(H), bst(t), (tr(r0, t .butleftmost) * P * true)(H0), a0 = t .leftmost, ¬ (tr(r0, t .butleftmost) * P * true)(H0) ∨ ¬ bst(t .butleftmost) ∨ a0 ≠ t .leftmost ∨ a0 ∈ t .butleftmost ∨ (∃ b. ¬ (b ∈ t .butleftmost → a0 < b)) ⊦ |
⊦ branch(t0, a, t1) .butleftmost = ((t0 = leaf ⊃ t1; branch(t0 .butleftmost, a, t1)))
⊦ bst(branch(t0, b, t1)) ↔ (∀ a. a ∈ t0 → a < b) ∧ (∀ a. a ∈ t1 → b < a) ∧ (∀ a. ¬ (a ∈ t0 ∧ a ∈ t1)) ∧ (∀ a, c. a ∈ t0 ∧ c ∈ t1 → a < c) ∧ bst(t0) ∧ bst(t1)
⊦ branch(t0, a, t1) .leftmost = ((t0 = leaf ⊃ a; t0 .leftmost))
(r => mknode(r1, a, r2) * tr(r1, t0) * tr(r2, t1) * P)(H), (true * tr(r0, (t0 = leaf ⊃ t1; branch(t0 .butleftmost, a, t1))) * P)(H0), bst(t0), bst(t1), ∀ a0. a0 ∈ t0 → a0 < a, ∀ a0. a0 ∈ t1 → a < a0, ∀ a, c. a ∈ t0 ∧ c ∈ t1 → a < c, ¬ bst((t0 = leaf ⊃ t1; branch(t0 .butleftmost, a, t1))) ∨ ((t0 = leaf ⊃ a; t0 .leftmost)) ∈ ((t0 = leaf ⊃ t1; branch(t0 .butleftmost, a, t1))) ∨ ¬ (b ∈ ((t0 = leaf ⊃ t1; branch(t0 .butleftmost, a, t1))) → ((t0 = leaf ⊃ a; t0 .leftmost)) < b), ∀ a0. ¬ a0 ∈ t0 ∨ ¬ a0 ∈ t1 ⊦ r = null
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (P0 * P)(H) → (true * P)(H)], [CSIMPSEQ : ⊦ P0 * P1 = P1 * P0], [CSIMPSEQ : ⊦ (P0 * P1) * P2 = P0 * P1 * P2], [CSIMPSEQ : ⊦ r ≠ null → ( ¬ ¬ (tr(r, t) * P)(H) ↔ (∃ t0, t1, a, r0, r1. t = branch(t0, a, t1) ∧ ( r => mknode(r0, a, r1) * tr(r0, t0) * tr(r1, t1) * P )(H)))])]]