Proof with Geometry.
intros.
assert (P<>D).
unfold not;intro.
subst P.
assert (C=D).
intuition.
subst D.
assert (C**C<>C**C).
intuition.
intuition.
assert (Th := (on_line_dex_spec P Q C D H0)).
elim Th;intro Y;intros;clear Th.
decompose [and] p;clear p.
cases_equality Y C.
subst Y.
intuition.
exists Y.
split;try assumption.
split;try assumption.
apply parallel_side_eq_weak_weak_para.
cut (parallel C D P Y)...
eapply col_par_par.
apply H0.
Geometry.
Geometry.
2:auto.
split;intro.
intuition.
subst Y.
intuition.
Qed.

(* Specifications: *)
Lemma on_line_dex_spec_strong_bis :
forall P Q C D : Point,
parallel P Q C D ->
C <> D ->
P <> D ->
Q<> C ->
P <> Q->
(parallel P C C D -> P**C <> C**D) ->
{Y : Point | Col Y P Q /\ P ** Y = C ** D /\ weak_parallelogram P Y D C}.