Book I · Proposition 12
To a given infinite straight line, from a given point which is not on it, to draw a perpendicular straight line.Heath, 1908
Used by: II.12 II.13 IV.4 IV.8 IV.13 VI.8
Rests on: C.N.1, C.N.3, C.N.4, C.N.5, Def.10, Def.15, Def.4
Depth: 8 steps of argument above the first principles. Parallel postulate: not needed.
@proposition(
"I.12",
CONSTRUCTION,
sample=samples.line_and_external_point,
)
def prop_I_12(a: Point, b: Point, c: Point) -> Out:
base = Line.through(a, b)
hypothesis("C does not lie on AB", not on_line(c, base))
# A circle centred at C large enough to cut AB twice: the distance from C
# to the line is at most |CA|, so this radius strictly exceeds it.
reach = len2(c, a) + len2(c, b)
sweep = circle_with_radius2(c, reach, "circle centre C cutting AB")
g, h = meet(line(a, b), sweep, "GH")
g, h = posit(g, "G"), posit(h, "H")
middle = posit(prop_I_10(g, h).midpoint, "E")
dropped = line(c, middle, "the perpendicular CE")
claim("CG = CH, radii of the circle centre C", "Def.15", eq_len(c, g, c, h))
claim("GE = EH, since E bisects GH", "I.10", eq_len(g, middle, middle, h))
because(prop_I_8, c, g, middle, c, h, middle)
claim("triangles CGE and CHE have three sides equal", "I.8",
congruent_sss((c, g, middle), (c, h, middle)))
claim("hence the adjacent angles at E are equal, so CE is perpendicular to AB", "Def.10",
perpendicular(dropped, base))
return Out(perpendicular=dropped, foot=middle)