I am trying to automatically prove/disprove some theorems in geometry, related to squares, such as "For every 3 collections of 7 disjoint squares, it is possible to select 1 square from each collection such that the 3 representatives are interior disjoint?".
I tried to use OpenGeoProver and came up with the following description of a square:
<!-- define a 'free' point - the south-western corner of the square: -->
<pfree label="square1southwest"/>
<!-- define a line that is parallel to the x axis and goes throught that point - the southern boundary: -->
<lparallel label="square1south" point="square1southwest" baseline="xaxis" />
<!-- define a random point on the southern line, which will be the south-eastern corner: -->
<prandline label="square1southeast" line="square1south" />
<!-- rotate the south-eastern corner 90 degrees around the south-western corner, to create the north-western corner: -->
<protated label="square1northwest" origpt="square1southeast" center="square1southwest" angmeasure="-90"/>
<!-- translate the north-western corner by the vector between the two southern corners, to create the north-eastern corner of the square: -->
<ptranslated label="square1northeast" origpt="square1northwest" point1="square1southwest" point2="square1southeast"/>
This is where I am stuck: how to define the simple statement "square A and square B intersect"?
How can this problem be approached in Z3?