Book XI · Proposition 37
If four straight lines be proportional, the parallelepipedal solids on them which are similar and similarly described will also be proportional; and, if the parallelepipedal solids on them which are similar and similarly described be proportional, the straight lines will themselves also be proportional.Heath, 1908
Needs: XI.33
Rests on: VI.Def.1, XI.Def.11, XI.Def.9
Depth: 4 steps of argument above the first principles. Parallel postulate: not needed.
Nothing. It draws no intersections and reads nothing off the picture.
@proposition("XI.37", THEOREM, sample=samples3.corner_and_arms)
def prop_XI_37(o: Point3, a: Point3, b: Point3, c: Point3) -> Out:
"""Four proportional straight lines carry similar parallelepipeds that are
proportional, and conversely."""
hypothesis("the three arms are not in one plane", not coplanar(o, a, b, c))
ratio, apart = Fraction(3, 2), Fraction(5, 4)
lines = (Fraction(1), ratio, apart, apart * ratio)
hypothesis("the four straight lines are proportional",
lines[0] * lines[3] == lines[1] * lines[2])
directions = tuple(unit(vector_between(o, point)) for point in (a, b, c))
def described(reach):
return parallelepiped(o, *[_arm_at(o, step, reach) for step in directions])
solids = [described(reach) for reach in lines]
_built(solids[0])
_built(solids[3])
contents = [content(solid) for solid in solids]
because(prop_XI_33, o, a, b, c)
claim("the four solids are similar and similarly described", "XI.Def.9",
all(_solid_angle_of(o, tuple(solid.vertices[i] for i in (1, 3, 4)))
== _solid_angle_of(o, tuple(solids[0].vertices[i] for i in (1, 3, 4)))
for solid in solids[1:]))
claim("as the first solid is to the second, so is the third to the fourth",
"XI.37", contents[0] * contents[3] == contents[1] * contents[2])
# The converse is checked where it can fail: a fourth line that is not the
# fourth proportional, and the solid on it, which the proportion must then
# refuse. Each content is the cube on its line times one and the same
# figure, so a proportion between the solids is one between the cubes.
astray = lines[3] * Fraction(6, 5)
claim("and a solid on any other line breaks the proportion, so solids "
"proportional give lines proportional", "XI.37",
lines[0] * astray != lines[1] * lines[2]
and contents[0] * content(described(astray)) != contents[1] * contents[2])
return Out(solids=tuple(solids), lines=lines)