Orthogonality 1

This is part of a series of modules which prove a variety of geometrical theorems starting with Tarski's axioms for geometry. We follow the formalization of Julien Narboux which itself closely follows a treatise by Schwabhäuser, Szmielew, and Tarski.

Here we prove results involving perpendicular lines. This also enables us to prove the existence of the midpoint of a line segment.

We import the theorems of propositional logic and predicate logic, and the geometry results so far and define some variables:  import (CLASSICAL Interface:Classical_propositional_calculus ) import (FIRSTORDER Interface:First-order_logic_with_quantifiability (CLASSICAL) ) import (START Interface:Midpoint (CLASSICAL FIRSTORDER) )

var (formula antecedent) var (point A B C D E F M P Q R S X Y Z) var (point A′ B′ C′ D′ E′ M′ P′ Q′ R′ S′ X′ Y′) var (point C″) var (variable a a′ b b′ c c′ c″ d d′ e e′ f p p′ q r r′ u u′ v v′ x x′ y y′ z) 

Right angles
Our treatment of perpendicularity, on the page and following ones, is in terms of three related concepts. First is the perpendicularity of a line segment and another line segment which share an endpoint, in this diagram whether  is perpendicular to. The second is whether a line segment is perpendicular to another line segment at a given point, for example whether  is perpendicular to   (or whether they are perpendicular if   is specified by   and another point, not shown, on the line  ). The third is similar, but just whether there is a point where the two lines are perpendicular, without needing to mention that point explicitly.

We start with the first of those, a predicate which can be thought of as recognizing whether  is perpendicular to   even though it is not tied to any larger theory of angles (that will come later). The definition can be read as " is a right angle iff the symmetric point of   around   is as far from   as   is".  def ((is-right-angle A B C) (∃ c′ ((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))))) 

As usual, we'll need to restate the definition as a theorem.  thm (RightAngle ((c′ A) (c′ B) (c′ C) (c″ c′) (c″ A) (c″ B) (c″ C))   ((is-right-angle A B C) ↔ (∃ c′ ((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))))) (  The left hand side's variable of quantification is implicit, but we can use c″ in this proof. First we need.  C EqualityReflexivity A EqualityReflexivity A EqualityReflexivity A A C C A A (value c″) (value c′) CongruenceBuilder detach1of4 detach2of3 detach1of2  Combining these two and applying  we are done.  buildConjunctionInConsequent ChangeVariableThereExists )) 

A convenience rule
 thm (applyCongruenceTransitivityInConsequent  ((H1 (antecedent → (A B ≡ C D))) (H2 (antecedent → (C D ≡ E F))))  (antecedent → (A B ≡ E F)) ( H1       H2        composeConjunction A B C D E F CongruenceTransitivity applySyllogism )) 

Can interchange legs of a right angle
Although it isn't obvious from the definition, the roles of the two points which aren't the vertex are equivalent. To prove this, expand  according to the definition into. Then let  be the symmetric point of   around. Since reflecting through a point preserves distances,. This allows us to show  by the definition.  thm (RightAngleSymmetryImplicationLemma   ((((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧ (B is-midpoint-of A A′)) → ((B is-midpoint-of A A′) ∧ (C A ≡ C A′))) ( ((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) (B is-midpoint-of A A′) ConjunctionLeftElimination

 Next is, which will let us apply.  ((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) (B is-midpoint-of A A′) ConjunctionRightElimination eliminateRightConjunctInConsequent

((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) (B is-midpoint-of A A′) ConjunctionLeftElimination

B A A′ MidpointSymmetry eliminateBiconditionalReverse applySyllogism

composeConjunction

B C C′ A′ A SymmetricPointDistance applySyllogism  That gives us. We combine it with  to give.  swapCongruenceInConsequent commuteCongruenceRightInConsequent

((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) (B is-midpoint-of A A′) ConjunctionRightElimination eliminateLeftConjunctInConsequent swapCongruenceInConsequent

applyCongruenceTransitivityInConsequent swapCongruenceInConsequent commuteCongruenceLeftInConsequent </jh> Now we just need to hook together  and.  composeConjunction ))

thm (RightAngleSymmetryImplication ((c′ A) (c′ B) (c′ C) (c′ a′) (a′ A) (a′ B) (a′ C))   ((is-right-angle A B C) → (is-right-angle C B A)) ( </jh> First we rewrite  to explicitly quantify with the variable.  A B C c′ RightAngle eliminateBiconditionalReverse </jh> Next we construct.  a′ B A SymmetricPoint introduceRightConjunctToConsequent gatherThereExistsInConsequent </jh> That gives us. We're looking for.  B C (value c′) A (value a′) RightAngleSymmetryImplicationLemma a′ addThereExists c′ addThereExists applySyllogism removeThereExistsInConsequent ))

thm (RightAngleSymmetry   ((is-right-angle A B C) ↔ (is-right-angle C B A)) ( A B C RightAngleSymmetryImplication C B A RightAngleSymmetryImplication introduceBiconditionalFromImplications )) </jh>

Picking a different point on a right angle's line
Given a right angle  where   is a line (that is,  ), picking a different point   on the line   also produces a right angle.  thm (RightAngleLeg ( (c′ A) (c′ B) (c′ C) (c′ A′))  ((((is-right-angle A B C) ∧ (A ≠ B)) ∧ (collinear B A A′)) → (is-right-angle A′ B C)) ( </jh> Expanding the definition of, we have.  A B C c′ RightAngle eliminateBiconditionalReverse </jh> Now we add in  and   and move them inside the quantifier. That gives.  (A ≠ B) conjoinRR moveRightConjunctIntoThereExistsInConsequent

(collinear B A A′) conjoinRR moveRightConjunctIntoThereExistsInConsequent </jh> To prove  we need a point   for which. Since  is on the same line,   itself fits the bill.

The first half is, which we already have.  (((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))) ∧ (A ≠ B)) (collinear B A A′) ConjunctionRightElimination eliminateRightConjunctInConsequent eliminateRightConjunctInConsequent </jh> The other half is.

We'll be applying  which in this case is. First is.  (((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))) ∧ (A ≠ B)) (collinear B A A′) ConjunctionRightElimination eliminateLeftConjunctInConsequent

A B EqualitySymmetry addNegation eliminateBiconditionalReverse applySyllogism </jh> :  (((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))) ∧ (A ≠ B)) (collinear B A A′) ConjunctionLeftElimination composeConjunction </jh> follows from.  (((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))) ∧ (A ≠ B)) (collinear B A A′) ConjunctionRightElimination eliminateRightConjunctInConsequent eliminateRightConjunctInConsequent eliminateLeftConjunctInConsequent commuteCongruenceLeftInConsequent composeConjunction </jh> :  (((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))) ∧ (A ≠ B)) (collinear B A A′) ConjunctionRightElimination eliminateRightConjunctInConsequent eliminateLeftConjunctInConsequent composeConjunction </jh> Applying  gives , which we combine with   to give  B A A′ C (value c′) EquidistantLine applySyllogism composeConjunction c′ addThereExists applySyllogism

A′ B C c′ RightAngle eliminateBiconditionalForward applySyllogism )) </jh>

Reflecting about the vertex
Reflecting one of the points of a right angle through the vertex of that angle produces a right angle. In symbols,. .

The proof will start by expanding the definition of  into. Then the result of reflecting  through , which is our first lemma.  thm (RightAngleSymmetricPoint-cdoubleprime-cprime   ((((B is-midpoint-of C C″) ∧ (A C ≡ A C″)) ∧ (B is-midpoint-of C C′)) → (C″ = C′)) ( ((B is-midpoint-of C C″) ∧ (A C ≡ A C″)) (B is-midpoint-of C C′) ConjunctionRightElimination eliminateRightConjunctInConsequent

((B is-midpoint-of C C″) ∧ (A C ≡ A C″)) (B is-midpoint-of C C′) ConjunctionLeftElimination composeConjunction

B C C″ C′ SymmetricPointUniqueness applySyllogism ))

thm (RightAngleSymmetricPoint ( (c″ A) (c″ B) (c″ C) (c″ C′) (p A) (p B) (p C) (p C′) (p c″))   (((is-right-angle A B C) ∧ (B is-midpoint-of C C′)) → (is-right-angle A B C′)) ( </jh> First we expand the definition of  into   and move   inside the quantifier.  A B C c″ RightAngle eliminateBiconditionalReverse

(B is-midpoint-of C C′) conjoinRR moveRightConjunctIntoThereExistsInConsequent </jh> To prove  we need a point which is the symmetric point of   through , and the point which fits the bill is. So we need. The first half we already have. <jh> ((B is-midpoint-of C (value c″)) ∧ (A C ≡ A (value c″))) (B is-midpoint-of C C′) ConjunctionLeftElimination

B C C′ MidpointSymmetry eliminateBiconditionalReverse applySyllogism </jh> To get  we just need to substitute   for. We start with. <jh> ((B is-midpoint-of C (value c″)) ∧ (A C ≡ A (value c″))) (B is-midpoint-of C C′) ConjunctionRightElimination eliminateLeftConjunctInConsequent </jh> Next is  and. <jh> B C (value c″) A C′ RightAngleSymmetricPoint-cdoubleprime-cprime

C EqualityReflexivity A EqualityReflexivity A EqualityReflexivity A A C C A A (value c″) C′ CongruenceBuilder detach1of4 detach2of3 detach1of2

applySyllogism </jh> We combine that with  to get. <jh> eliminateBiconditionalReverseInConsequent applyModusPonensInConsequent </jh> So now we have. <jh> swapCongruenceInConsequent composeConjunction </jh> Now we need to replace  with a variable quantified by. The first step is. <jh> B EqualityReflexivity C′ EqualityReflexivity B B C′ C′ (value p) C MidpointBuilder detach2of3 detach1of2

C′ EqualityReflexivity A EqualityReflexivity A EqualityReflexivity A A C′ C′ A A (value p) C CongruenceBuilder detach1of4 detach2of3 detach1of2

buildConjunctionInConsequent </jh> Next is , <jh> makeSubstExplicit eliminateBiconditionalForward applySyllogism </jh> and in turn. <jh> C p ((B is-midpoint-of C′ (value p)) ∧ (A C′ ≡ A (value p))) ThereExistsIntroductionFromObject </jh> Now we need to combine with the construction of  and remove the no-longer-needed. <jh> applySyllogism c″ addThereExists applySyllogism removeThereExistsInConsequent )) </jh>

Degenerate cases
In defining  we also encompassed degenerate cases, in this case where the vertex and one point defining a leg are the same. <jh> thm (RightAngleABB ( (p A) (p B)) (is-right-angle A B B) ( </jh> Expanding what we are trying to prove from the definition of, we need. The point  suffices. So the first step is. <jh> B MidpointReflexivity A B CongruenceReflexivity introduceConjunction </jh> Next is. <jh> makeSubstExplicit eliminateBiconditionalForward applyModusPonens introduceThereExistsFromObject )) </jh>

One leg between two points on the perpendicular
There are a few cases which imply we are dealing with a degenerate. Here's one in which the point defining one leg is between two points which both lie on the perpendicular. Specifically,.

The proof first expands both occurrences of  according to the definition to get points   and   for which.

Then we apply  to get , which in turn implies. <jh> thm (RightAngleBetween-cprime-cdoubleprime   (((((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧ ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) ∧   (between A C A′)) → (C′ = C″)) ( (((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧         ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) (between A C A′) ConjunctionRightElimination eliminateRightConjunctInConsequent eliminateRightConjunctInConsequent

(((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧         ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) (between A C A′) ConjunctionRightElimination eliminateLeftConjunctInConsequent eliminateRightConjunctInConsequent

composeConjunction

B C C′ C C″ SymmetricPointDistance applySyllogism

C′ C″ C CongruenceIdentity applySyllogism )) </jh> Next is  which is just a matter of substituting   for. <jh> thm (RightAngleBetween-aprime-c-aprime-cprime   (((((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧ ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) ∧   (between A C A′)) → (A′ C ≡ A′ C′)) ( (((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧         ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) (between A C A′) ConjunctionRightElimination eliminateLeftConjunctInConsequent eliminateLeftConjunctInConsequent

B C C′ A C″ A′ RightAngleBetween-cprime-cdoubleprime </jh> The substitution is. <jh> C EqualityReflexivity A′ EqualityReflexivity A′ EqualityReflexivity A′ A′ C C A′ A′ C′ C″ CongruenceBuilder detach1of4 detach2of3 detach1of2

applySyllogism

eliminateBiconditionalForwardInConsequent applyModusPonensInConsequent )) </jh> Next we apply  which in this case is. <jh> thm (RightAngleBetween-c-cprime   (((((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧ ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) ∧   (between A C A′)) → (C = C′)) ( (((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧         ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) (between A C A′) ConjunctionLeftElimination

(((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧         ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) (between A C A′) ConjunctionRightElimination eliminateRightConjunctInConsequent eliminateLeftConjunctInConsequent composeConjunction

B C C′ A C″ A′ RightAngleBetween-aprime-c-aprime-cprime composeConjunction

A C A′ C′ BetweennessTwoDistanceUniqueness applySyllogism )) </jh>

From here we get  by substituting   for , which in turn implies. <jh> thm (RightAngleBetween-b-c   (((((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧ ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) ∧   (between A C A′)) → (B = C)) ( (((B is-midpoint-of C C′) ∧ (A C ≡ A C′)) ∧         ((B is-midpoint-of C C″) ∧ (A′ C ≡ A′ C″))) (between A C A′) ConjunctionRightElimination eliminateRightConjunctInConsequent eliminateRightConjunctInConsequent

B C C′ A C″ A′ RightAngleBetween-c-cprime

B EqualityReflexivity C EqualityReflexivity B B C C C C′ MidpointBuilder detach2of3 detach1of2

applySyllogism eliminateBiconditionalForwardInConsequent applyModusPonensInConsequent

B C MidpointIndivisibility applySyllogism ))

thm (RightAngleBetween ( (c′ A) (c′ B) (c′ C) (c′ A′) (c′ c″) (c″ A) (c″ B) (c″ C) (c″ A′))   ((((is-right-angle A B C) ∧ (is-right-angle A′ B C)) ∧ (between A C A′)) → (B = C)) ( A B C c′ RightAngle eliminateBiconditionalReverse

A′ B C c″ RightAngle eliminateBiconditionalReverse

conjoin gatherThereExistsInConsequent

(between A C A′) conjoinRR moveRightConjunctIntoThereExistsInConsequent

c″         (((B is-midpoint-of C (value c′)) ∧ (A C ≡ A (value c′))) ∧            ((B is-midpoint-of C (value c″)) ∧ (A′ C ≡ A′ (value c″)))) (between A C A′) ThereExistsConjunctionRightMovement eliminateBiconditionalForward c′ addThereExists applySyllogism

B C (value c′) A (value c″) A′ RightAngleBetween-b-c c″ addThereExists c′ addThereExists applySyllogism

removeThereExistsInConsequent removeThereExistsInConsequent )) </jh>

Builder
We prove the builder for  similarly to other builders: by applying builders for each of the expressions which make up the definition. <jh> thm (RightAngleBuilder ( (z A) (z B) (z C) (z A′) (z B′) (z C′))  ((((A = A′) ∧ (B = B′)) ∧ (C = C′)) → ((is-right-angle A B C) ↔ (is-right-angle A′ B′ C′))) ( ((A = A′) ∧ (B = B′)) (C = C′) ConjunctionRightElimination eliminateLeftConjunctInConsequent

((A = A′) ∧ (B = B′)) (C = C′) ConjunctionLeftElimination composeConjunction

(value z) EqualityReflexivity B B′ C C′ (value z) (value z) MidpointBuilder detach2of2

applySyllogism

((A = A′) ∧ (B = B′)) (C = C′) ConjunctionRightElimination eliminateRightConjunctInConsequent

((A = A′) ∧ (B = B′)) (C = C′) ConjunctionLeftElimination composeConjunction

((A = A′) ∧ (B = B′)) (C = C′) ConjunctionRightElimination eliminateRightConjunctInConsequent composeConjunction

(value z) EqualityReflexivity A A′ C C′ A A′ (value z) (value z) CongruenceBuilder detach2of2 applySyllogism

buildConjunctionInConsequent z buildThereExistsInConsequent

A B C z RightAngle swapBiconditional transformImplicationBiconditionalLeft )) </jh>

Export
We now export to Interface:Orthogonality 1. <jh> export (RESULTS Interface:Orthogonality_1 (CLASSICAL FIRSTORDER) ) </jh>