Book XI · Proposition 39

XI.39

If there be two prisms of equal height, and one have a parallelogram as base and the other a triangle, and if the parallelogram be double of the triangle, the prisms will be equal.Heath, 1908

Every step, checked

What it needs, and what needs it

Needs: I.41 XI.28

Used by: XII.3

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.13

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

What it takes on trust

The proposition as code

@proposition("XI.39", THEOREM, sample=samples3.corner_and_arms)
def prop_XI_39(o: Point3, a: Point3, b: Point3, c: Point3) -> Out:
    """Two prisms of equal height, one on a parallelogram and one on a triangle
    double of it, are equal."""
    hypothesis("the three arms are not in one plane", not coplanar(o, a, b, c))
    # Both prisms are triangular, and both are taken as standing on the same
    # plane -- the one the first and third arms span. The first rests on a
    # parallelogram face of it, the second on a triangular one, which is the
    # whole of what the proposition compares.
    ground = plane_through(o, a, c, "the plane both stand on")
    on_parallelogram = _built(prism((o, a, b), vector_between(o, c),
                                    "the prism on the parallelogram"))
    on_triangle = _built(prism((o, a, c), vector_between(o, b),
                               "the prism on the triangle"))

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

    flat = _base_area(o, a, c)
    triangle = flat / 2
    claim("both prisms stand on that plane, the one on a parallelogram in it "
          "and the other on a triangle", "XI.Def.13",
          on_plane(o, ground) and on_plane(a, ground) and on_plane(c, ground)
          and on_plane(on_parallelogram.vertices[4], ground))
    claim("they are of the same height, the edge the first rises to and the "
          "face the second is carried to standing off the plane alike",
          "XI.Def.13",
          height_over(on_parallelogram.vertices[2], ground)
          == height_over(on_parallelogram.vertices[5], ground)
          == height_over(on_triangle.vertices[4], ground))
    claim("the parallelogram is double of the triangle, being cut by the "
          "diagonal into it and its equal", "I.41",
          triangle == _triangle_area(a, on_parallelogram.vertices[4], c)
          and flat == triangle + _triangle_area(a, on_parallelogram.vertices[4], c))
    claim("therefore the prisms are equal to one another", "XI.39",
          content(on_parallelogram) == content(on_triangle))
    return Out(prisms=(on_parallelogram, on_triangle))