Proof using.
intros a b1; apply (le_bool_correct4 (sum_leaves a) (sum_leaves b1)).
Qed.
Fixpoint weight_tree (t : btree A) : nat :=
match t with
| leaf n => 0
| node t1 t2 =>
sum_leaves t1 + weight_tree t1 + (sum_leaves t2 + weight_tree t2)
end.
Definition weight_tree_list : list (btree A) -> nat :=
fold_right (fun x : btree A => plus (weight_tree x)) 0.

(* Specifications: *)
Theorem weight_tree_list_node :
forall (t1 t2 : btree A) (l : list (btree A)),
weight_tree_list (node t1 t2 :: l) =
sum_leaves t1 + sum_leaves t2 + weight_tree_list (t1 :: t2 :: l).