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...
eapply diag_mid_point_parallel;unfold mid_point;split.
apply H.
assumption.
Geometry.
assumption.
Qed.
(*******************************)
(* Some lemmas about parallels *)
(*******************************)

(* Specifications: *)
Theorem par_1 : forall A B C D : Point,
parallel A B C D -> parallel B A C D.