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.

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).