(* Gabriel Braun March 2013 *)
Require Export GeoCoq.Tarski_dev.Annexes.vectors.
Section Projections.
Context `{T2D:Tarski_2D}.
Context `{TE:@Tarski_euclidean Tn TnEQD}.

(* Specifications: *)
Lemma project_id : forall A B X Y P P', Proj P P' A B X Y -> Col A B P -> P = P'.
Lemma project_not_id : forall A B X Y P P', Proj P P' A B X Y -> ~Col A B P -> P <> P'.
Lemma project_col : forall A B X Y P , Proj P P A B X Y -> Col A B P.
Lemma project_not_col : forall A B X Y P P', Proj P P' A B X Y -> P <> P' -> ~Col A B P.
Lemma project_par : forall A B X Y P Q P' Q', Proj P P' A B X Y -> Proj Q Q' A B X Y -> Par P Q X Y -> P' = Q'.
Lemma ker_col : forall P Q P' A B X Y, Proj P P' A B X Y -> Proj Q P' A B X Y -> Col P Q P'.
Lemma ker_par : forall P Q P' A B X Y, P <> Q -> Proj P P' A B X Y -> Proj Q P' A B X Y -> Par P Q X Y.
Lemma project_uniqueness : forall P P' Q' A B X Y, Proj P P' A B X Y -> Proj P Q' A B X Y -> P' = Q'.
Lemma project_existence : forall P A B X Y,
X<>Y -> A<>B ->
~ Par X Y A B ->
exists! P', Proj P P' A B X Y.
Lemma project_col_eq : forall P Q P' Q' A B X Y,
P <> P' ->
Col P Q P' ->
Proj P P' A B X Y ->
Proj Q Q' A B X Y ->
P' = Q'.
Lemma par_col_project :
forall P P' A B X Y ,
A <> B ->
~ Par A B X Y ->
Par P P' X Y ->
Col A B P' ->
Proj P P' A B X Y.
Lemma project_preserves_bet :
forall A B X Y P Q R P' Q' R',
Bet P Q R ->
Proj P P' A B X Y ->
Proj Q Q' A B X Y ->
Proj R R' A B X Y ->
Bet P' Q' R'.
Lemma triangle_par :
forall A B C A' B' C',
~ Col A B C ->
Par A B A' B' ->
Par B C B' C' ->
Par A C A' C' ->
CongA A B C A' B' C'.
Lemma par3_conga3 :
forall A B C A' B' C',
~ Col A B C ->
Par A B A' B' ->
Par B C B' C' ->
Par A C A' C' ->
CongA_3 A B C A' B' C'.
Lemma cong_conga3_cong3 :
forall A B C A' B' C',
~ Col A B C ->
Cong A B A' B' ->
CongA_3 A B C A' B' C' ->
Cong_3 A B C A' B' C'.
Lemma project_par_eqv :
forall P P' Q Q' A B X Y,
Proj P P' A B X Y ->
Proj Q Q' A B X Y ->
Par P Q A B ->
EqV P Q P' Q'.
Lemma eqv_project_eq_eq :
forall P Q R S P' Q' S' A B X Y,
EqV P Q R S ->
Proj P P' A B X Y ->
Proj Q Q' A B X Y ->
Proj R P' A B X Y ->
Proj S S' A B X Y ->
Q' = S'.
Lemma eqv_eq_project :
forall P Q R S P' Q' A B X Y,
EqV P Q R S ->
Proj P P' A B X Y ->
Proj Q Q' A B X Y ->
Proj R P' A B X Y ->
Proj S Q' A B X Y.
Lemma project_par_dir : forall P P' A B X Y, P <> P' -> Proj P P' A B X Y -> Par P P' X Y.
intros.