Book XII · Proposition 8

XII.8

Similar pyramids which have triangular bases are in the triplicate ratio of their corresponding sides.Heath, 1908

Every step, checked

What it needs, and what needs it

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.

What it takes on trust

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

The proposition as code

@proposition("XII.8", THEOREM, sample=samples3.polygon_base)
def prop_XII_8(a: Point3, b: Point3, c: Point3, d: Point3) -> Out:
    """Similar pyramids on triangular bases are in the triplicate ratio of
    their corresponding sides."""
    hypothesis("the four points are not in one plane", not coplanar(a, b, c, d))
    first = _drawn(pyramid((a, b, c), d, "the first pyramid"))
    scale = Fraction(3, 2)
    carried = tuple(posit3(Point3(a.x + scale * (point.x - a.x),
                                  a.y + scale * (point.y - a.y),
                                  a.z + scale * (point.z - a.z)), name)
                    for point, name in ((b, "P"), (c, "Q"), (d, "R")))
    second = _drawn(pyramid((a, carried[0], carried[1]), carried[2],
                            "the similar pyramid"))

    because(prop_XI_33, a, b, c, d)

    side, answering = length3(a, b), length3(a, carried[0])
    claim("the pyramids are similar, their edges in one ratio", "XI.Def.9",
          all(len2(a, far) == scale * scale * len2(a, near)
              for near, far in zip((b, c, d), carried)))
    claim("as the pyramid is to the pyramid, so is the cube on the side to the "
          "cube on the answering side", "XII.8",
          content(first) * answering * answering * answering
          == content(second) * side * side * side)
    return Out(pyramids=(first, second), sides=(side, answering))