(***************************************************************************)
(* Formalization of the Chou, Gao and Zhang's decision procedure.          *)
(* Julien Narboux (Julien@narboux.fr)                                      *)
(* LIX/INRIA FUTURS 2004-2006                                              *)
(* University of Strasbourg 2008                                           *)
(***************************************************************************)
Require Export area_elimination_lemmas.
(********************************)
(** Length ratios eliminations *)
(********************************)
unfold on_line_d in |- *.
intuition.
Qed.
unfold on_line_d in |- *.
intuition.
Qed.
unfold on_line in |- *.
intuition.
Qed.
unfold on_line in |- *.
intuition.
Qed.
Proof with Geometry.
unfold on_line_d in |- *...
intros...
decompose [and] H; clear H...
assert (Col P Q A)...
assert (Col P Q Y)...
assert (Col P A Y); eauto with Geom...
assert (A ** P + P ** Y = A ** Y)...
rewrite <- H7...
rewrite H5...
field...
Qed.
Proof with Geometry.
intros.
assert (on_line_d Y P Q (P**Y/P**Q)).
unfold on_line_d.
unfold on_line in H.
intuition.
field.
Geometry.
apply elim_length_ratio_on_line_d_1;auto.
Qed.
Lemma
invariant_par_on_line_d_1_length_ratio :
forall (A C D P Q Y : Point) (lambda : F),
on_line_d Y P Q lambda -> S A P Q = 0 ->
parallel A Y C D -> parallel A P P Q.
Lemma
invariant_par_on_line_1_length_ratio :
forall (A C D P Q Y : Point),
on_line Y P Q -> S A P Q = 0 ->
parallel A Y C D -> parallel A P P Q.
Lemma
invariant_par_on_line_d_1_length_ratio_2 :
forall (A C D P Q Y : Point) (lambda : F),
on_line_d Y P Q lambda -> S A P Q = 0 -> A<>Y ->
parallel A Y C D -> parallel C D P Q.
Proof with Geometry.
intros.
assert (parallel P Q Y A).
unfold parallel, S4.
replace (S P Q A ) with 0.
ring_simplify.
2:symmetry...
unfold on_line_d in H.
decompose [and] H.
suppose (Col P Y Q)...
suppose (Col P Q A)...
unfold on_line_d in H.
decompose [and] H;clear H.
assert (Col P Q A)...
assert (Col P A Y).
eapply col_trans_1 with (B:=Q)...
assert (Col Q A Y).
eapply col_trans_1 with (B:=P)...
assert (parallel C D A P).
eapply col_par_par with (D:=Y)...
cases_equality P A.
subst P.
eapply col_par_par with (D:=Y)...
eapply col_par_par with (D:=A)...
Qed.
Proof with Geometry.
intros.
assert (on_line_d Y P Q (P**Y / P**Q)).
apply on_line_to_on_line_d...
eapply invariant_par_on_line_d_1_length_ratio_2;eauto.
Qed.
Proof with Geometry.
intros.
unfold parallel, on_line in *.
basic_simpl.
decompose [and] H.
replace (S P Y Q) with (- S Y P Q)...
Qed.
Proof with Geometry.
intros.
unfold parallel, on_line_d in *.
basic_simpl.
decompose [and] H.
replace (S P Y Q) with (- S Y P Q)...
Qed.
(* TODO update tactic to take care of C<>D *)
Proof with Geometry.
intros.
rename H2 into T.
unfold on_line_d in H.
decompose [and] H.
clear H.
assert (not (parallel A Y P Q)).
unfold not;intro.
unfold parallel, S4 in H.
assert ((S A Y Q) = (S A Y P) + (S A P Q) + (S P Y Q))...
rewrite H3 in H.
assert ((S A P Y) = - (S A Y P))...
rewrite H6 in H.
assert ((S P Y Q) = (-0)).
unfold Col in H2.
rewrite <- H2...
rewrite H7 in H.
assert  (-(S A Y P)+((S A Y P)+(S A P Q)+-0) = (S A P Q)).
ring.
rewrite H8 in H.
unfold Col in H0.
intuition.
unfold not;intro.
assert (parallel C D P Q)...
assert (parallel A Y P Q).
eapply parallel_transitivity;try apply H1 || auto.
auto.
intuition.
Qed.
Proof with Geometry.
intros.
assert (on_line_d Y P Q (P**Y/P**Q)).
apply on_line_to_on_line_d...
eapply non_zero_denom_on_line_d_2_length_ratio;eauto.
Qed.

Lemma elim_length_ratio_on_line_d_2 :
forall (A C D P Q Y : Point) (lambda : F),
on_line_d Y P Q lambda ->
S A P Q <> 0 ->
C <> D ->
parallel A Y C D ->
A ** Y / C ** D = S A P Q / S4 C P D Q.