Proof with Geometry.
intros.
cases_equality B' A'.
subst.
assert (S<>A').
intro.
subst.
intuition.
replace (S ** A' / S ** A') with 1.
2:field;auto with Geom.
cases_equality A B.
subst.
field.
intro.
assert (S=B).
auto with Geom.
subst.
intuition.
assert (Col A A' S).
apply  (col_trans_1 A B A' S).
assumption.
unfold parallel, S4 in *.
basic_simpl.
auto with Geom.
auto with Geom.
assert (Col S A A') by auto with Geom.
intuition.
assert (S<>A).
intro;subst.
intuition.
assert (S<>A').
intro;subst.
intuition.
cases_equality A B.
subst.
replace (S ** B / S ** B) with 1.
2:field.
2:auto with Geom.
clear H0.
assert (Col A' B' B).
unfold parallel, S4 in *.
basic_simpl.
auto with Geom.
assert (Col A' S B).
apply (col_trans_1 A' B' S B);auto with Geom.
assert (Col S B A');auto with Geom.
intuition.
assert (S ** A / B ** A = S ** A' / B' ** A').
apply (thales S A B B' A');auto with Geom.
intro.
assert (Col A A' S).
apply (col_trans_1 A B A' S);auto with Geom.
intuition.
assert (B**A/S**A= B'**A' / S**A').
assert (S ** A / B ** A * B**A =  S** A' / B' ** A' * B**A).
rewrite H7.
auto.
replace (S ** A / B ** A * B ** A) with (S**A) in H8.
2:field;auto with Geom.
field_simplify_eq.
rewrite H8.
field.
auto with Geom.
split;auto with Geom.
assert ( A**B / S ** A =  A'**B' / S ** A').
uniformize_dir_seg.
IsoleVar (A**B) H8.
rewrite H8.
field;split;auto with Geom.
auto with Geom.
assert (1+ A ** B / S ** A = 1+ A' ** B' / S ** A').
rewrite H9.
auto.
replace (1 + A ** B / S ** A) with ((S**A + A**B) / S**A) in H10.
2:field;auto with Geom.
replace (1 + A' ** B' / S ** A') with ((S**A' + A'**B') / S**A') in H10.
2:field;auto with Geom.
assert (S**A + A**B=S**B).
apply chasles;auto with Geom.
assert (S**A' + A'**B'=S**B').
apply chasles;auto with Geom.
rewrite H11 in H10.
rewrite H12 in H10.
assumption.
Qed.

(* Specifications: *)
Theorem on_line_dex_spec :
forall P Q C D : Point, P <> Q -> {Y : Point | Col Y P Q /\ P ** Y = C ** D}.
Lemma diff_not_col_par_not_col : forall A B P Q,
A<>B ->
~ Col A Q P ->
parallel A B P Q ->
~ Col A B P.
Lemma two_sides_par_eq_parallelogram :
forall A B C D,
parallel A B C D ->
~ Col A B C ->
A**B=D**C ->
parallelogram A B C D.
Lemma parallel_side_eq_weak_para :   forall P Q C D,
parallel P Q C D ->
C <> D -> P <> D -> Q<> C ->
P ** Q = C ** D ->
weak_parallelogram P Q D C.