Proof with simpl; auto.
revert l2; induction l1... intros l2 _ H1.
assert (forall l, (fix merge_aux (l0 : list A) := l0) l = l)
as -> by (destruct l; auto)...
intros l2 H1 H2. induction l2... remember (cmp a a0) as b0; destruct b0...
split; auto. rewrite (Hcmp a a0) in Heqb0; subst. destruct H1 as [H1 H3]...
destruct H1, H2... destruct H1, H2... destruct H2; split... destruct H1; split...
Qed.

Lemma merge_nil l : merge cmp l nil = l.