Book XI · Proposition 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
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.
@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))