Library GeoCoq.Elements.OriginalProofs.lemma_sameside2
Require Export GeoCoq.Elements.OriginalProofs.lemma_rayimpliescollinear.
Require Export GeoCoq.Elements.OriginalProofs.lemma_ray1.
Require Export GeoCoq.Elements.OriginalProofs.lemma_raystrict.
Require Export GeoCoq.Elements.OriginalProofs.lemma_9_5b.
Require Export GeoCoq.Elements.OriginalProofs.lemma_9_5a.
Section Euclid.
Context `{Ax:euclidean_neutral}.
Lemma lemma_sameside2 :
∀ A B C E F G,
OS E F A C → Col A B C → Out B F G →
OS E G A C.
Proof.
intros.
let Tf:=fresh in
assert (Tf:∃ Q U V, (Col A C U ∧ Col A C V ∧ BetS E U Q ∧ BetS F V Q ∧ nCol A C E ∧ nCol A C F)) by (conclude_def OS );destruct Tf as [Q[U[V]]];spliter.
assert (TS E A C Q) by (conclude_def TS ).
assert (TS F A C Q) by (conclude_def TS ).
assert (Col A C B) by (forward_using lemma_collinearorder).
assert (¬ eq A C).
{
intro.
assert (Col A C F) by (conclude_def Col ).
contradict.
}
assert (Col B F G) by (conclude lemma_rayimpliescollinear).
assert (Col B G F) by (forward_using lemma_collinearorder).
assert (Col A C B) by (forward_using lemma_collinearorder).
assert (¬ ¬ TS G A C Q).
{
intro.
assert (¬ eq F G).
{
intro.
assert (TS G A C Q) by (conclude cn_equalitysub).
contradict.
}
assert (¬ eq B V).
{
intro.
assert (BetS F B Q) by (conclude cn_equalitysub).
assert ((BetS B G F ∨ eq F G ∨ BetS B F G)) by (conclude lemma_ray1).
assert (BetS G B Q).
by cases on (BetS B G F ∨ eq F G ∨ BetS B F G).
{
assert (BetS F G B) by (conclude axiom_betweennesssymmetry).
assert (BetS G B Q) by (conclude lemma_3_6a).
close.
}
{
assert (¬ ¬ BetS G B Q).
{
intro.
contradict.
}
close.
}
{
assert (BetS G F B) by (conclude axiom_betweennesssymmetry).
assert (BetS G B Q) by (conclude lemma_3_7a).
close.
}
assert (¬ Col A C G).
{
intro.
assert (Col A C B) by (forward_using lemma_collinearorder).
assert (Col C G B) by (conclude lemma_collinear4).
assert (Col G B C) by (forward_using lemma_collinearorder).
assert (Col G B F) by (forward_using lemma_collinearorder).
assert (neq B G) by (conclude lemma_raystrict).
assert (neq G B) by (conclude lemma_inequalitysymmetric).
assert (Col B C F) by (conclude lemma_collinear4).
assert (¬ neq B C).
{
intro.
assert (Col B C A) by (forward_using lemma_collinearorder).
assert (Col C F A) by (conclude lemma_collinear4).
assert (Col A C F) by (forward_using lemma_collinearorder).
contradict.
}
assert (Col A B G) by (conclude cn_equalitysub).
assert (neq A B) by (conclude cn_equalitysub).
assert (Col G B A) by (forward_using lemma_collinearorder).
assert (Col B A F) by (conclude lemma_collinear4).
assert (Col A B F) by (forward_using lemma_collinearorder).
assert (Col A C F) by (conclude cn_equalitysub).
contradict.
}
assert (TS G A C Q) by (conclude_def TS ).
contradict.
}
assert (¬ Col Q F B).
{
intro.
assert (Col F V Q) by (conclude_def Col ).
assert (Col Q F V) by (forward_using lemma_collinearorder).
assert (neq F Q) by (forward_using lemma_betweennotequal).
assert (neq Q F) by (conclude lemma_inequalitysymmetric).
assert (Col F B V) by (conclude lemma_collinear4).
assert (Col C B V) by (conclude lemma_collinear4).
assert (Col B V F) by (forward_using lemma_collinearorder).
assert (Col B V C) by (forward_using lemma_collinearorder).
assert (Col V F C) by (conclude lemma_collinear4).
assert (Col V C F) by (forward_using lemma_collinearorder).
assert (Col V C A) by (forward_using lemma_collinearorder).
assert (¬ neq V C).
{
intro.
assert (Col C F A) by (conclude lemma_collinear4).
assert (Col A C F) by (forward_using lemma_collinearorder).
contradict.
}
assert (neq A V) by (conclude cn_equalitysub).
assert (neq V A) by (conclude lemma_inequalitysymmetric).
assert (Col C A B) by (forward_using lemma_collinearorder).
assert (Col C A V) by (forward_using lemma_collinearorder).
assert (neq C A) by (conclude lemma_inequalitysymmetric).
assert (Col A B V) by (conclude lemma_collinear4).
assert (Col B V A) by (forward_using lemma_collinearorder).
assert (Col V F A) by (conclude lemma_collinear4).
assert (Col V A F) by (forward_using lemma_collinearorder).
assert (Col V A C) by (forward_using lemma_collinearorder).
assert (Col A F C) by (conclude lemma_collinear4).
assert (Col A C F) by (forward_using lemma_collinearorder).
contradict.
}
assert ((BetS B G F ∨ eq F G ∨ BetS B F G)) by (conclude lemma_ray1).
assert (TS G A C Q).
by cases on (BetS B G F ∨ eq F G ∨ BetS B F G).
{
assert (TS G A C Q) by (conclude lemma_9_5b).
close.
}
{
assert (TS G A C Q) by (conclude cn_equalitysub).
close.
}
{
assert (¬ Col B G Q).
{
intro.
assert (Col B F G) by (conclude_def Col ).
assert (Col G B F) by (forward_using lemma_collinearorder).
assert (neq B G) by (forward_using lemma_betweennotequal).
assert (neq G B) by (conclude lemma_inequalitysymmetric).
assert (Col G B Q) by (forward_using lemma_collinearorder).
assert (Col B F Q) by (conclude lemma_collinear4).
assert (Col Q F B) by (forward_using lemma_collinearorder).
contradict.
}
assert (TS G A C Q) by (conclude lemma_9_5a).
close.
}
contradict.
}
rename_H H;
let Tf:=fresh in
assert (Tf:∃ H, (BetS G H Q ∧ Col A C H ∧ nCol A C G)) by (conclude_def TS );destruct Tf as [H];spliter.
assert (OS E G A C) by (conclude_def OS ).
close.
Qed.
End Euclid.
Require Export GeoCoq.Elements.OriginalProofs.lemma_ray1.
Require Export GeoCoq.Elements.OriginalProofs.lemma_raystrict.
Require Export GeoCoq.Elements.OriginalProofs.lemma_9_5b.
Require Export GeoCoq.Elements.OriginalProofs.lemma_9_5a.
Section Euclid.
Context `{Ax:euclidean_neutral}.
Lemma lemma_sameside2 :
∀ A B C E F G,
OS E F A C → Col A B C → Out B F G →
OS E G A C.
Proof.
intros.
let Tf:=fresh in
assert (Tf:∃ Q U V, (Col A C U ∧ Col A C V ∧ BetS E U Q ∧ BetS F V Q ∧ nCol A C E ∧ nCol A C F)) by (conclude_def OS );destruct Tf as [Q[U[V]]];spliter.
assert (TS E A C Q) by (conclude_def TS ).
assert (TS F A C Q) by (conclude_def TS ).
assert (Col A C B) by (forward_using lemma_collinearorder).
assert (¬ eq A C).
{
intro.
assert (Col A C F) by (conclude_def Col ).
contradict.
}
assert (Col B F G) by (conclude lemma_rayimpliescollinear).
assert (Col B G F) by (forward_using lemma_collinearorder).
assert (Col A C B) by (forward_using lemma_collinearorder).
assert (¬ ¬ TS G A C Q).
{
intro.
assert (¬ eq F G).
{
intro.
assert (TS G A C Q) by (conclude cn_equalitysub).
contradict.
}
assert (¬ eq B V).
{
intro.
assert (BetS F B Q) by (conclude cn_equalitysub).
assert ((BetS B G F ∨ eq F G ∨ BetS B F G)) by (conclude lemma_ray1).
assert (BetS G B Q).
by cases on (BetS B G F ∨ eq F G ∨ BetS B F G).
{
assert (BetS F G B) by (conclude axiom_betweennesssymmetry).
assert (BetS G B Q) by (conclude lemma_3_6a).
close.
}
{
assert (¬ ¬ BetS G B Q).
{
intro.
contradict.
}
close.
}
{
assert (BetS G F B) by (conclude axiom_betweennesssymmetry).
assert (BetS G B Q) by (conclude lemma_3_7a).
close.
}
assert (¬ Col A C G).
{
intro.
assert (Col A C B) by (forward_using lemma_collinearorder).
assert (Col C G B) by (conclude lemma_collinear4).
assert (Col G B C) by (forward_using lemma_collinearorder).
assert (Col G B F) by (forward_using lemma_collinearorder).
assert (neq B G) by (conclude lemma_raystrict).
assert (neq G B) by (conclude lemma_inequalitysymmetric).
assert (Col B C F) by (conclude lemma_collinear4).
assert (¬ neq B C).
{
intro.
assert (Col B C A) by (forward_using lemma_collinearorder).
assert (Col C F A) by (conclude lemma_collinear4).
assert (Col A C F) by (forward_using lemma_collinearorder).
contradict.
}
assert (Col A B G) by (conclude cn_equalitysub).
assert (neq A B) by (conclude cn_equalitysub).
assert (Col G B A) by (forward_using lemma_collinearorder).
assert (Col B A F) by (conclude lemma_collinear4).
assert (Col A B F) by (forward_using lemma_collinearorder).
assert (Col A C F) by (conclude cn_equalitysub).
contradict.
}
assert (TS G A C Q) by (conclude_def TS ).
contradict.
}
assert (¬ Col Q F B).
{
intro.
assert (Col F V Q) by (conclude_def Col ).
assert (Col Q F V) by (forward_using lemma_collinearorder).
assert (neq F Q) by (forward_using lemma_betweennotequal).
assert (neq Q F) by (conclude lemma_inequalitysymmetric).
assert (Col F B V) by (conclude lemma_collinear4).
assert (Col C B V) by (conclude lemma_collinear4).
assert (Col B V F) by (forward_using lemma_collinearorder).
assert (Col B V C) by (forward_using lemma_collinearorder).
assert (Col V F C) by (conclude lemma_collinear4).
assert (Col V C F) by (forward_using lemma_collinearorder).
assert (Col V C A) by (forward_using lemma_collinearorder).
assert (¬ neq V C).
{
intro.
assert (Col C F A) by (conclude lemma_collinear4).
assert (Col A C F) by (forward_using lemma_collinearorder).
contradict.
}
assert (neq A V) by (conclude cn_equalitysub).
assert (neq V A) by (conclude lemma_inequalitysymmetric).
assert (Col C A B) by (forward_using lemma_collinearorder).
assert (Col C A V) by (forward_using lemma_collinearorder).
assert (neq C A) by (conclude lemma_inequalitysymmetric).
assert (Col A B V) by (conclude lemma_collinear4).
assert (Col B V A) by (forward_using lemma_collinearorder).
assert (Col V F A) by (conclude lemma_collinear4).
assert (Col V A F) by (forward_using lemma_collinearorder).
assert (Col V A C) by (forward_using lemma_collinearorder).
assert (Col A F C) by (conclude lemma_collinear4).
assert (Col A C F) by (forward_using lemma_collinearorder).
contradict.
}
assert ((BetS B G F ∨ eq F G ∨ BetS B F G)) by (conclude lemma_ray1).
assert (TS G A C Q).
by cases on (BetS B G F ∨ eq F G ∨ BetS B F G).
{
assert (TS G A C Q) by (conclude lemma_9_5b).
close.
}
{
assert (TS G A C Q) by (conclude cn_equalitysub).
close.
}
{
assert (¬ Col B G Q).
{
intro.
assert (Col B F G) by (conclude_def Col ).
assert (Col G B F) by (forward_using lemma_collinearorder).
assert (neq B G) by (forward_using lemma_betweennotequal).
assert (neq G B) by (conclude lemma_inequalitysymmetric).
assert (Col G B Q) by (forward_using lemma_collinearorder).
assert (Col B F Q) by (conclude lemma_collinear4).
assert (Col Q F B) by (forward_using lemma_collinearorder).
contradict.
}
assert (TS G A C Q) by (conclude lemma_9_5a).
close.
}
contradict.
}
rename_H H;
let Tf:=fresh in
assert (Tf:∃ H, (BetS G H Q ∧ Col A C H ∧ nCol A C G)) by (conclude_def TS );destruct Tf as [H];spliter.
assert (OS E G A C) by (conclude_def OS ).
close.
Qed.
End Euclid.