Book XI · Proposition 34

XI.34

In equal parallelepipedal solids the bases are reciprocally proportional to the heights; and those parallelepipedal solids in which the bases are reciprocally proportional to the heights are equal.Heath, 1908

Every step, checked

What it needs, and what needs it

Needs: XI.31 XI.32

Used by: XI.36 XII.9

Rests on: C.N.1, C.N.2, C.N.3, C.N.4, C.N.5, Def.10, Def.15, Def.4, Post.5, XI.Def.10, XI.Def.3, XI.Def.8

Depth: 16 steps of argument above the first principles. Parallel postulate: needed.

What it takes on trust

Nothing. It draws no intersections and reads nothing off the picture.

The proposition as code

@proposition("XI.34", THEOREM, sample=samples3.corner_and_arms)
def prop_XI_34(o: Point3, a: Point3, b: Point3, c: Point3) -> Out:
    """In equal parallelepipeds the bases are reciprocally proportional to the
    heights, and conversely."""
    hypothesis("the three arms are not in one plane", not coplanar(o, a, b, c))
    first = _built(parallelepiped(o, a, b, c, "the first solid"))
    # A second solid equal to the first, its base twice as wide and its height
    # halved: the reciprocation the proposition is about, made rather than found.
    wider = posit3(_along(o, a, Fraction(2)), "P")
    lower = posit3(_along(o, c, Fraction(1, 2)), "R")
    second = _built(parallelepiped(o, wider, b, lower, "the second solid"))

    because(prop_XI_32, o, a, b, c)

    bases = (_base_area(o, a, b), _base_area(o, wider, b))
    heights = (height_over(c, first.face_plane(0)),
               height_over(lower, second.face_plane(0)))
    claim("the two solids are equal", "XI.31", content(first) == content(second))
    claim("so as the base is to the base, so is the height to the height "
          "reciprocally", "XI.34",
          bases[0] * heights[0] == bases[1] * heights[1])
    # The converse is the same equation read the other way, and Euclid states
    # both halves, so both are checked.
    claim("and solids whose bases are reciprocally proportional to their "
          "heights are equal", "XI.34",
          content(first) == bases[0] * heights[0]
          and content(second) == bases[1] * heights[1])
    return Out(solids=(first, second), bases=bases, heights=heights)