Proof using.
induction l; intros.
- auto.
- simpl in *. revert H.
repeat (apply Max.max_case_strong; intros).
+ eauto.
+ assert (a = y) by omega. subst_max. eauto.
+ subst x. pose proof (fold_left_maximum_le l a).
assert (fold_left max l a = a) by omega.
eauto.
+ subst x.
pose proof (fold_left_maximum_le l a).
assert (fold_left max l a = a) by omega.
assert (a = y) by omega.
subst. auto.
Qed.

Lemma fold_left_maximum_cases :
forall l x,
fold_left max l x = x \/
exists y,
In y l /\ fold_left max l x = y.