Proof with Geometry.
intros.
cases_col P Q D.
unfold weak_parallelogram.
repeat split...
assert ({O :Point |  mid_point O P D}).
apply mid_point_ex.
elim H5; intro X;intros;clear H5.
exists X;split...
unfold mid_point in *.
DecompAndAll.
assert (Col P Q C).
eapply par_col_col_1;eauto...
assert (Col P X Q).
eapply col_trans_1 with (B:=D)...
assert (Col D X Q).
eapply col_trans_1 with (B:=P)...
split.
eapply col_trans_1 with (B:=P)...
eauto with Geom.
cases_equality X Q.
subst X.
rewrite H3 in H6.
assert (C=Q).
apply (A2bgen D Q C Q 1).
cut (Col Q D C).
Geometry.
eapply col_trans_1 with (B:=P)...
eauto with Geom.
replace (D ** C) with (- C**D).
2:symmetry;Geometry.
rewrite H6.
ring_simplify (1*D**Q).
symmetry.
Geometry.
Geometry.
ring.
subst C.
intuition.
assert (P**X + X**Q = P**Q)...
rewrite H3 in H11.
IsoleVar (X**Q) H11.
suppose (Col X C D).
assert (C**X+ X**D=C**D)...
rewrite <- H13 in H11.
rewrite <- H6 in H11.
NormalizeRing H11.
replace (Q**X) with (- X**Q).
2:symmetry...
rewrite H11.
symmetry...
assert (Col Q C X).
eapply col_trans_1 with (B:=P)...
eauto with Geom.
eapply col_trans_1 with (B:=Q)...
assert (parallelogram P Q D C).
apply two_sides_par_eq_parallelogram...
apply parallelogram_weak_parallelogram...
Qed.

(* Specifications: *)
Lemma weak_parallelogram_weak_2_parallelogram :
forall A B C D, weak_parallelogram A B C D ->
weak_2_parallelogram A B  C D.