(* To be a tree of minimum weight for a cover *)
Definition cover_min (l : list (btree A)) (t1 : btree A) : Prop :=
  cover l t1 /\
  (forall t2 : btree A, cover l t2 -> weight_tree f t1 <= weight_tree f t2).

(* Specifications: *)
Theorem cover_min_one : forall t : btree A, cover_min (t :: nil) t.
Theorem cover_min_permutation : forall (t : btree A) (l1 l2 : list (btree A)), cover_min l1 t -> permutation l1 l2 -> cover_min l2 t.
Theorem cover_min_ex : forall l : list (btree A), l <> nil -> exists t : btree A, cover_min l t.