Proof with Geometry.
intros.
assert (Th := (on_line_dex_spec P Q C D H3)).
elim Th;intro Y;intros;clear Th.
decompose [and] p;clear p.
exists Y.
split.
assumption.
split.
assumption.
apply parallel_side_eq_weak_para;try assumption.
cut (parallel C D P Y).
Geometry.
eapply col_par_par;eauto...
unfold not;intro.
subst Y.
assert (Col P Q D).
eapply par_col_col_1.
apply H.
Geometry.
assert (Col P C D).
eapply col_trans_1 with (B:=Q)...
assert (parallel P C C D).
unfold parallel,S4.
basic_simpl.
Geometry.
assert ( P ** C <> C ** D).
apply H4...
intuition.
Qed.

(* Specifications: *)
Lemma on_line_dex_spec_strong :
forall P Q C D : Point,
parallel P Q C D ->
C <> D ->
~ Col P Q D ->
{Y : Point | Col Y P Q /\ P ** Y = C ** D /\ parallelogram P Y D C}.
Theorem l2_15 :
forall A B P Q : Point,
parallel P Q A B -> ~ Col A Q P ->
A ** B / P ** Q = S P A B / S A Q P.