Library RulerCompassGeometry.D3_Triangle_Prop
Require Export D2_Axe.
Section TRIANGLE_PROPERTIES.
Lemma TriangleSpecComm : forall A B C : Point,
A <> B ->
B <> C ->
C <> A ->
TriangleSpec (Distance A B) (Distance B C) (Distance C A) ->
TriangleSpec (Distance A B) (Distance C A) (Distance B C) .
Proof.
substDistance.
rewrite (LSplusComm C A B C); auto.
rewrite (LSplusComm B C A B); auto.
rewrite (LSplusComm A B C A); auto.
intuition.
Qed.
Lemma EqualTriangleClockwise : forall A B C D E : Point,
Clockwise A B C ->
Distance A B = Distance D E ->
{F : Point |
Clockwise D E F /\
Distance B C = Distance E F /\
Distance C A = Distance F D}.
Proof.
intros.
assert (H1 := ClockwiseDistinctBC A B C H).
assert (H2 := ClockwiseDistinctCA A B C H).
setCircle E B C H1 ipattern:F1 ipattern:G1.
setCircle D C A H2 ipattern:F2 ipattern:G2.
setCinterantiC F1 F2 G1 G2 ipattern:F ipattern:H3 ipattern:H4 ipattern:H5
ipattern:H6.
rewrite (DistSym E D); rewrite <- H0.
apply ClockwiseTriangleSpec; auto.
exists F; canonize.
rewrite (DistSym F D); auto.
Qed.
Lemma EqualTriangleAntiClockwise : forall A B C D E : Point,
Clockwise A B C ->
Distance A B = Distance D E ->
{F : Point |
Clockwise D F E /\
Distance B C = Distance E F /\
Distance C A = Distance F D}.
Proof.
intros.
assert (H1 := ClockwiseDistinctBC A B C H).
assert (H2 := ClockwiseDistinctCA A B C H).
setCircle E B C H1 ipattern:F1 ipattern:G1.
setCircle D C A H2 ipattern:F2 ipattern:G2.
setCinterclockC F1 F2 G1 G2 ipattern:F ipattern:H3 ipattern:H4 ipattern:H5
ipattern:H6.
rewrite (DistSym E D); rewrite <- H0.
apply ClockwiseTriangleSpec; auto.
exists F; canonize.
autoClockwise.
rewrite (DistSym F D); auto.
Qed.
Lemma ExistsCongruentStrictTriangle : forall A B C D E : Point,
Clockwise A B C ->
Distance A B = Distance D E ->
{F : Point | CongruentStrictTriangles A B C D E F /\ Clockwise D E F}.
Proof.
intros.
destruct (EqualTriangleClockwise A B C D E H H0) as (F, (H1, (H2, H3))).
exists F; repeat split; auto.
apply ClockwiseNotCollinear; trivial.
Qed.
End TRIANGLE_PROPERTIES.
Section TRIANGLE_PROPERTIES.
Lemma TriangleSpecComm : forall A B C : Point,
A <> B ->
B <> C ->
C <> A ->
TriangleSpec (Distance A B) (Distance B C) (Distance C A) ->
TriangleSpec (Distance A B) (Distance C A) (Distance B C) .
Proof.
substDistance.
rewrite (LSplusComm C A B C); auto.
rewrite (LSplusComm B C A B); auto.
rewrite (LSplusComm A B C A); auto.
intuition.
Qed.
Lemma EqualTriangleClockwise : forall A B C D E : Point,
Clockwise A B C ->
Distance A B = Distance D E ->
{F : Point |
Clockwise D E F /\
Distance B C = Distance E F /\
Distance C A = Distance F D}.
Proof.
intros.
assert (H1 := ClockwiseDistinctBC A B C H).
assert (H2 := ClockwiseDistinctCA A B C H).
setCircle E B C H1 ipattern:F1 ipattern:G1.
setCircle D C A H2 ipattern:F2 ipattern:G2.
setCinterantiC F1 F2 G1 G2 ipattern:F ipattern:H3 ipattern:H4 ipattern:H5
ipattern:H6.
rewrite (DistSym E D); rewrite <- H0.
apply ClockwiseTriangleSpec; auto.
exists F; canonize.
rewrite (DistSym F D); auto.
Qed.
Lemma EqualTriangleAntiClockwise : forall A B C D E : Point,
Clockwise A B C ->
Distance A B = Distance D E ->
{F : Point |
Clockwise D F E /\
Distance B C = Distance E F /\
Distance C A = Distance F D}.
Proof.
intros.
assert (H1 := ClockwiseDistinctBC A B C H).
assert (H2 := ClockwiseDistinctCA A B C H).
setCircle E B C H1 ipattern:F1 ipattern:G1.
setCircle D C A H2 ipattern:F2 ipattern:G2.
setCinterclockC F1 F2 G1 G2 ipattern:F ipattern:H3 ipattern:H4 ipattern:H5
ipattern:H6.
rewrite (DistSym E D); rewrite <- H0.
apply ClockwiseTriangleSpec; auto.
exists F; canonize.
autoClockwise.
rewrite (DistSym F D); auto.
Qed.
Lemma ExistsCongruentStrictTriangle : forall A B C D E : Point,
Clockwise A B C ->
Distance A B = Distance D E ->
{F : Point | CongruentStrictTriangles A B C D E F /\ Clockwise D E F}.
Proof.
intros.
destruct (EqualTriangleClockwise A B C D E H H0) as (F, (H1, (H2, H3))).
exists F; repeat split; auto.
apply ClockwiseNotCollinear; trivial.
Qed.
End TRIANGLE_PROPERTIES.
