(* Return the proof tree of the list with the largest proj_left *)
Fixpoint proj_left_max_size_list (default : cbv) (proof_trees : list cbv) : cbv :=
  match proof_trees with
    | [] => default
    | [p] => p
    | p :: ps =>
      let p' := proj_left_max_size_list default ps in
      if leb (term_size (proj_left p)) (term_size (proj_left p')) then p' else p
  end.

(* Specifications: *)
Lemma In_proj_left_max_size_list p lp : lp <> [] -> In (proj_left_max_size_list p lp) lp.
Lemma proj_left_size_le_max_gen default proof_trees proof_tree: In proof_tree proof_trees -> term_size (proj_left proof_tree) <= term_size (proj_left (proj_left_max_size_list default proof_trees)).