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