What running the Elements turned up
Every number on this page was produced by running the corpus, and each finding carries the command that reproduces it.
Exhaustive: every possibility was enumerated, so a negative answer is a theorem. Measured: computed exactly from the constructions as they run. Empirical: sampled over configurations, so it is evidence, and it says how much. Nothing here is read off the citations written beside each step. Which edges are which.
All of it is measured over this encoding of the Elements, and the encoding is written by hand. Heath's words are parsed and never retyped; turning them into hypotheses and claims is authored, and that is the part to doubt. Exact arithmetic catches a claim that is false the moment it runs. A hypothesis that is merely narrower than Euclid's makes the proposition weaker and still passes forever, so the necessity analysis below is also the test for it: a condition doing no work survives being broken. That is how VIII.8, VIII.10 and VIII.13 were caught requiring a ratio in least terms, which Euclid nowhere asks for.
Every magnitude these constructions produce is an exact element of a tower of quadratic extensions of the rationals, so it has a degree, and the kernel can state it. Running all 465 propositions gives a map of the work by algebraic depth. The text cannot tell you this; it is a property of what the constructions do.
The equilateral triangle of I.1 already needs √3, and I.2 already needs a second square root standing on the first. Yet Books III and VI — all those circles, all that similarity — never exceed degree 2, and Books VII to IX never leave the rationals at all, which is what arithmetic ought to look like. The deepest point in the whole work is X.115, at degree 32.
| Book | Highest degree reached |
|---|---|
| I | 4 |
| II | 4 |
| III | 2 |
| IV | 8 |
| V | 4 |
| VI | 2 |
| VII | 1 |
| VIII | 1 |
| IX | 1 |
| X | 32 |
| XI | 8 |
| XII | 4 |
| XIII | 8 |
euclid measure --depth
Book X sorts the irrationals into thirteen named species, and is often described as though that were all of them. A constructible number of degree at most four lies in some Q(sqrt m, sqrt n), where it is a + b·sqrt m + c·sqrt n + d·sqrt(mn). Taking every such number with coefficients up to 2 in size and m < n squarefree up to 11, in order of height, the simplest Euclid has no word for is
1 + sqrt2 + sqrt3 ≈ 4.14626437
It is constructible with straightedge and compass, its degree over the rationals is 4, and its minimal polynomial is x^4 - 4*x^3 - 4*x^2 + 16*x - 8 = 0. The classifier's own reason is the whole of the explanation: it resolves into 3 terms, where Book X's definitions treat two. Euclid classifies what comes out of applying areas, which is sums and differences of two terms, so a number needing three falls outside however constructible it is. The enumeration holds 6510 magnitudes; Book X names 1134 of them and has no word for 5376. Height ties are broken by preferring the form written without a subtraction, and the bound is a bound: a constructible of degree 8, or one with a larger radicand, lies outside the set and is not searched.
euclid gap --all
Both say that the squares on the two segments of a divided line are double the square on the half together with the square on the piece between the points of section. II.9 states it for a point taken between the ends; II.10 for a point taken beyond them. Breaking that hypothesis and running anyway, the conclusion holds either way — in every configuration tried (5 of them for II.9).
The identity does not care where the point falls on the line. Euclid needs two propositions because he has no negative length to let one cover both cases; carried out in exact arithmetic the distinction disappears, and the hypothesis separating them does no work.
euclid measure --needless
A proposition says nothing about the configurations its hypotheses exclude, so those are normally thrown away, and one question goes unasked: would the conclusion have held anyway? Lifting the exclusion makes it askable. Move one given until a hypothesis breaks, then run without enforcing it.
Across the corpus 868 hypotheses are stated. 868 could be broken cleanly enough to judge (100% coverage — a run that breaks two at once says nothing about either and is discarded). Of those, 276 proved necessary, a claim failing the moment they went, and 44 turned out to be holding the construction together, which is a weaker kind of necessity.
38 survived being broken. Those are candidates, not results, and the likeliest reading of one is that our claims are too weak to notice the difference. That is what happened the first time this ran: seven propositions of Book III were checking things true of any four points, circle or no circle. They were strengthened, and their hypotheses became necessary.
euclid measure --needless
His postulates let you draw a circle. None of them says that two circles ever cross. He needs them to cross in I.1, on the very first page, to get the top corner of his triangle — and simply takes it. The gap was not stated properly until the nineteenth century.
Every step that uses an intersection the postulates do not license is counted as it happens: 2573 places across Books I to X. The full ledger →
euclid ledger
Restricting the field a construction may build in and running the corpus again is Hilbert's method: make a model where an axiom fails and see what breaks. Over the rationals no new root is allowed at all. Over the Pythagorean field only roots of sums of two squares are, which is what a straightedge and a way to carry a segment produce — a length may be measured, two circles may not be crossed. Between the two rungs, every root the corpus takes sorts into measuring, crossing, or the proposition's own irrational subject.
| Over Q | Propositions |
|---|---|
| complete | 186 |
| need only a length measured | 27 |
| need two circles to meet | 66 |
| are about an irrational | 59 |
| vary by configuration | 29 |
| have no rational configuration | 81 |
The two cases that show what the split is for: I.1 stops in construct.py:_line_circle:163 asking for sqrt(4/75), and no rung short of the full constructibles gives it. I.34, on the opposite sides of a parallelogram, stops in angles.py:between_rays:58 asking for sqrt(32) — and completes over the Pythagorean field, because it only ever measures. It is true in the rational plane, and it appears to fail there only because our encoding builds a root where squared lengths would do.
17 propositions (I.22, I.24, I.25, I.31, I.32, I.38, I.39, I.40, I.43, III.7, III.8, VI.1, VI.10, VI.2, VI.20, VI.24, VI.4) complete over the Pythagorean field while the ledger records them crossing a circle. Their samplers hand them rational triangles, so the circles meet where the configuration already was. Counting those as Pythagorean would be a finding about our test data, so they are kept apart.
The 81 untestable propositions are mostly Book X, whose samplers build irrational magnitudes because that is the subject. A proposition that completes here did so on the rational configurations tried, which is evidence and not a proof of validity in the rational plane.
euclid measure --fields
A standing worry about old geometry is that a proof may hold only for the figure its author happened to draw. Each proposition is run on many configurations and the runs compared, looking for a step that holds in one figure and fails in another. 11 do: III.2, III.14, III.23, III.24, III.29, III.32, III.33, III.34, VI.9, VI.11, XII.17.
Three of them evaluate a different number of facts depending on where the points fall — III.34 checks between four and nine things about the same theorem — which means the argument is branching on the picture. III.32 is the sharper case: a step asserting two points lie on the same side of a line is true in some configurations and false in others. That is exactly the shape of the gap Pasch's axiom was later written to close.
The other 454 take the same route through every figure they are handed. Configurations have to be built to satisfy a proposition's hypotheses, so one draw in six is now taken from a deliberately awkward range — a large denominator puts a point very near a lattice position without landing on it, which is what makes a triangle nearly flat or a triple nearly collinear. That range found an assumption Euclid leaves unstated in III.14: a chord through the centre is bisected by it, so the perpendicular he drops has no length and there is no line to draw.
euclid ledger
For 9 of these problems every shorter figure was enumerated in exact arithmetic and none reached the goal, so fewest possible is a theorem. The two circles of I.1 are the shortest way to an equilateral triangle, and nothing of one move comes close.
Mohr in 1672 and Mascheroni in 1797 proved the compass alone finds anything the pair can, and the search puts a price on it: a midpoint costs six circles, and every five-circle figure was enumerated exactly to prove it cannot be done in five.
That number was seven here until the enumeration reached it. The float search covered depth six and reported nothing, which is exactly the failure the exact pass exists to catch: a point pair merged at a tolerance of 10⁻⁷, or two figures sharing a rounded fingerprint, and a real construction becomes invisible. The six-circle construction it missed replays through the kernel and reaches the midpoint.
Some of Euclid's own constructions are far longer than they need to be, because he builds them out of results already proved, buying certainty with moves.
| Problem | Euclid | His moves | Shortest | Strength of that claim |
|---|---|---|---|---|
| equilateral triangle | I.1 | 5 | 2 | fewest possible |
| perpendicular bisector | I.10 | 29 | 3 | fewest possible |
| midpoint | I.10 | 29 | 4 | fewest possible |
| perpendicular at a point | I.11 | 21 | 5 | fewest possible |
| double a segment | I.3 | 13 | 2 | fewest possible |
| square on a segment | I.46 | 37 | 5 | fewest possible |
| equilateral triangle (compass-only) | I.1 | 5 | 2 | fewest possible |
| double a segment (compass-only) | I.3 | 13 | 3 | fewest possible |
| midpoint (compass-only) | I.10 | 29 | 6 | fewest possible |
euclid optimize midpoint --isa compass-only --depth 7