Proof with Geometry.
intros.
assert (Op := mid_point_ex A P)...
elim Op; intro O; clear Op...
intros...
elim p; intros; clear p...
assert (Op := symmetric_point_ex B O)...
elim Op; intro Q; clear Op...
intros...
elim p; intros; clear p...
exists Q...
split.
eapply diag_mid_point_parallel;unfold mid_point;split.
apply H0.
assumption.
Geometry.
assumption.
unfold not;intro.
subst Q.
rewrite <- H1 in H3.
cases_equality O P.
subst P.
replace (O**O) with 0 in H1.
2:symmetry;Geometry.
assert (A=O).
Geometry.
subst A.
replace (O**O) with 0 in H3.
assert (B=O).
Geometry.
subst B.
intuition.
assert (Col O A B).
eapply col_trans_1 with (B:=P)...
assert (A**O+O**B=A**B)...
rewrite <- H3 in H6.
replace (B**O) with (-O**B) in H6.
NormalizeRing H6.
assert (A=B)...
symmetry;Geometry.
Qed.

(* Specifications: *)
Theorem euclid_parallel_existence :
forall A B P : Point, {Q : Point | parallel A B P Q}.