| # t.set ≠ 0, t.set ≠ ∅, ((tr(r, t) * P))(H), bst(t) ⊦ ⟪search_tree_delete_min(; a, r, H)⟫ ⟨s := t.set; ordered_set_delete_min(; b, s)⟩ ⟨t := t.butleftmost⟩ (s = t.set ∧ a = b ∧ ((tr(r, t) * P))(H) ∧ bst(t)) |
r ≠ null, ((tr(r, t) * P))(H) ⊦ ⟨search_tree_delete_min(; a, r, H)⟩ (((tr(r, t.butleftmost) * P))(H) ∧ a = t.leftmost)
[Concretesimprules((Csimpnamedseq(set-leaf,,, ⊦ leaf.set = ∅) Csimpnamedseq(linked-tree,,tr-null, ⊦ tr(null, t) = (emp ∧ ⌜t = leaf⌝ )) Csimpnamedseq(heap-sep,node-heap,prop-shift, ⊦ (⌜bv⌝ ∧ P0) * P1 = (⌜bv⌝ ∧ P0 * P1)) Csimpnamedseq(heap-sep,node-heap,emp-sep, ⊦ emp * P = P) Csimpnamedseq(heap-sep,node-heap,sep-ass, ⊦ (P0 * P1) * P2 = P0 * P1 * P2) Csimpnamedseq(heap-sep,node-heap,sep-com, ⊦ P0 * P1 = P1 * P0) Csimpnamedseq(heap-sep,node-heap,and-ass, ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2)) Csimpnamedseq(heap-sep,node-heap,and-com, ⊦ (P0 ∧ P1) = (P1 ∧ P0)) Csimpnamedseq(heap-sep,node-heap,and, ⊦ ((P0 ∧ P1))(H) ↔ ¬ ¬(P0(H) ∧ P1(H))) Csimpnamedseq(heap-sep,node-heap,prop, ⊦ ⌜bv⌝ (H) ↔ bv))), Extraterms((rtPHa))]