Book I · Proposition 32
In any triangle, if one of the sides be produced, the exterior angle is equal to the two interior and opposite angles, and the three interior angles of the triangle are equal to two right angles.Heath, 1908
Rests on: C.N.1, C.N.3, C.N.4, C.N.5, Def.10, Def.15, Def.4, Post.5
Depth: 11 steps of argument above the first principles. Parallel postulate: needed.
@proposition(
"I.32",
THEOREM,
sample=samples.triangle,
)
def prop_I_32(a: Point, b: Point, c: Point) -> Out:
hypothesis("ABC is a genuine triangle", not collinear(a, b, c), guard=True)
d = posit(Point(c.x + (c.x - b.x), c.y + (c.y - b.y)), "D")
line(b, d, "BC produced to D")
alongside = prop_I_31(c, a, b).through
# AC falls across AB and the parallel through C, meeting each at an end of
# itself, so each line is named by two points straddling the crossing. The
# alternate angle to BAC is on the far side of AC, which fixes which way
# along the parallel to look.
edge = Line.through(a, c)
if edge.side_of(alongside) * edge.side_of(b) > 0:
alongside = Point(2 * c.x - alongside.x, 2 * c.y - alongside.y)
back_a = Point(2 * a.x - b.x, 2 * a.y - b.y)
back_c = Point(2 * c.x - alongside.x, 2 * c.y - alongside.y)
because(prop_I_29, b, back_a, back_c, alongside, a, c)
because(prop_I_13, b, c, d, a)
alpha, beta, gamma = angle_at(b, a, c), angle_at(a, b, c), angle_at(a, c, b)
claim("the exterior angle ACD equals the sum of the angles at A and B", "I.29",
angle_at(a, c, d) == alpha + beta)
claim("adding the angle at C, the three angles equal two right angles", "I.13",
alpha + beta + gamma == STRAIGHT)
return Out(exterior=angle_at(a, c, d))