Proof using A order order_trans.
intros a b l; generalize a b; elim l; clear l a b.
intros a b H H2; inversion H2.
simpl in |- *; intros c l H a b H0 [H1| H1].
rewrite <- H1; apply ordered_inv_order with (1 := H0).
apply order_trans with (b := c); auto.
apply ordered_inv_order with (1 := H0).
apply H; auto.
apply ordered_inv with (1 := H0).
Qed.

(* Specifications: *)
(* In an ordered list split in two, elements of the first part are always smaller than the ones of the second part *)
Theorem ordered_trans_app :
forall (a b : A) (l1 l2 : list A),
ordered (l1 ++ l2) -> In a l1 -> In b l2 -> order a b.