Language specifications

This document lists the statements allowed in the GeometricTheoremProver DSL, describing whether they introduce new points and if they are free, semifree, or dependent

StatementNew pointsConstraints
points(PP...)points in PP freenone
P := P ∈ Segment(A, B)A B free, P semifreeP ∈ AB
D := Segment(A, B) ⟂ Segment(C, D)A B C free, D semifreeAB ⟂ CD
D := Segment(A, B) ∥ Segment(C, D)A B C free, D semifreeAB ∥ CD
D := Segment(A, B) ≅ Segment(C, D)A B C free, D semifreeAB ≅ CD
D := Parallelogram(A, B, C, D)A B C free, D dependentparallelogram(A, B, C, D)
H := A ↓ Segment(B, C)A B C free, H dependentH ∈ BC, AH ⟂ BC
M := Midpoint(A, B)A B free, M dependentM = midpoint(A, B)
M := Segment(A, B) ∩ Segment(C, D)A B C D free, M dependentM ∈ AB, M ∈ CD
O := Circle(A, B, C)A B C free, O dependentOA ≅ OB ≅ OC
P := P ∈ Circle(O, A)O A free, P semifreeOA ≅ OP

If the point already exists and the statement tries to add the point again, the behavior is detemined by the next table

Current statusNew statusOutcome
freess
semifreefreesemifree
semifreesemifreedependent
semifreedependenterror
dependentfreedependent
dependentsemifreeerror
dependentdependenterror

NOTES:

  • The idea behind the semifree + semifree = dependent rule is to allow to define points by multiple constraints. For example,

    P := Segment(A, B) ⟂ Segment(A, P)

    creates a point P constrained to lie on the line perpendicular to AB and passing through A. There are infinitely many candidates, but not all points in the plane are good candidates, hence the point is semifree. Adding the constraint

    P := Segment(A, B) ≅ Segment(A, P)

    further constraints the point to have distance from A equal to AB. As there are not infinitely many candidates, the point is dependent.

  • The semifree + semifree = dependent does not check for possibly contradicting statements, for example if you type

    A := Segment(A, B) ⟂ Segment(C, D)
    A := Segment(A, B) ∥  Segment(C, D)

    it cannot notice that the two statements are contradicting.