Section WeightTree.
Variable A : Type.
Variable f : A -> nat.
Fixpoint sum_leaves (t : btree A) : nat :=
match t with
| leaf n => f n
| node t1 t2 => sum_leaves t1 + sum_leaves t2
end.
Definition sum_order x y := sum_leaves x <= sum_leaves y.
Definition le_sum x y := le_bool (sum_leaves x) (sum_leaves y).

Theorem le_sum_correct1 :
forall a b1 : btree A, le_sum a b1 = true -> sum_order a b1.