Library HighSchoolGeometry.projection_orthogonale


Require Export orthogonalite.
Set Implicit Arguments.
Unset Strict Implicit.
Parameter projete_orthogonal : PO PO PO PO.

Axiom
  def_projete_orthogonal :
     A B C H : PO,
    A B
    alignes A B H
    orthogonal (vec A B) (vec H C) H = projete_orthogonal A B C.

Axiom
  def_projete_orthogonal2 :
     A B C H : PO,
    A B
    H = projete_orthogonal A B C
    alignes A B H orthogonal (vec A B) (vec H C).

Lemma existence_projete_orthogonal :
  A B C : PO, A B H : PO, H = projete_orthogonal A B C.
intros A B C H0; try assumption.
elim
 existence_representant_mult_vecteur
  with
    (A := A)
    (B := A)
    (C := B)
    (k := / scalaire (vec A B) (vec A B) × scalaire (vec A B) (vec A C));
 intros H H1; try clear existence_representant_mult_vecteur.
H.
apply def_projete_orthogonal; auto.
apply (colineaire_alignes H1).
apply def_orthogonal2.
cut (scalaire (vec A B) (vec A B) 0); intros; auto with geo.
VReplace (vec H C) (add_PP (mult_PP 1 (vec A C)) (mult_PP (-1) (vec A H))).
rewrite H1.
FVReplace
 (mult_PP (-1)
    (mult_PP (/ scalaire (vec A B) (vec A B) × scalaire (vec A B) (vec A C))
       (vec A B)))
 (mult_PP (- (/ scalaire (vec A B) (vec A B) × scalaire (vec A B) (vec A C)))
    (vec A B)) (scalaire (vec A B) (vec A B)).
Simplscal.
field; auto.
Qed.

Theorem scalaire_deux_projetes :
  A B C H K : PO,
 A B
 A C
 H = projete_orthogonal A B C
 K = projete_orthogonal A C B
 scalaire (vec A B) (vec A C) = scalaire (vec A B) (vec A H)
 scalaire (vec A B) (vec A C) = scalaire (vec A K) (vec A C).
intros.
elim (def_projete_orthogonal2 (A:=A) (B:=B) (C:=C) (H:=H)); auto; intros.
elim (def_projete_orthogonal2 (A:=A) (B:=C) (C:=B) (H:=K)); auto; intros.
split; [ try assumption | idtac ].
apply scalaire_avec_projete; auto.
rewrite scalaire_sym.
rewrite (scalaire_sym A K A C).
apply scalaire_avec_projete; auto.
Qed.

Ltac soit_projete A B C H :=
  elim (existence_projete_orthogonal (A:=A) (B:=B) C);
   [ intros H; intros | auto ];
   elim (def_projete_orthogonal2 (A:=A) (B:=B) (C:=C) (H:=H));
   auto; intros.

Lemma existence_perpendiculaire :
  A B C : PO, A B D : PO, orthogonal (vec A B) (vec C D).
intros A B C H0; try assumption.
soit_projete A B C ipattern:H.
H.
auto with geo.
Qed.

Lemma projete_axe :
  A B M H : PO,
 A B :>PO
 H = projete_orthogonal A B M :>PO alignes A B M H = M :>PO.
intros.
elim (def_projete_orthogonal2 (A:=A) (B:=B) (C:=M) (H:=H)); auto; intros.
apply (unicite_projete_orthogonal (A:=A) (B:=B) (C:=M) (H:=H) (H':=M)); auto.
VReplace (vec M M) zero.
auto with geo.
Qed.

Lemma projete_non_axe :
  A B M H : PO,
 A B :>PO
 H = projete_orthogonal A B M :>PO ¬ alignes A B M M H :>PO.
intros.
elim (def_projete_orthogonal2 (A:=A) (B:=B) (C:=M) (H:=H)); auto; intros.
red in |- *; intros; apply H2.
rewrite H5; auto.
Qed.