Book VI · Proposition 29

VI.29

To a given straight line to apply a parallelogram equal to a given rectilineal figure and exceeding by a parallelogrammic figure similar to a given one.Heath, 1908

The other root, and the other sign of the quadratic: here the figure runs past the end of the line instead of falling short of it.

ABCS
34 lines and circles drawn, of which 19 helper constructions drew the fainter ones

Every step, checked

What it needs, and what needs it

Needs: I.10 II.6

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

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

What it takes on trust

The proposition as code

@proposition(
    "VI.29",
    CONSTRUCTION,
    sample=_deficient_application,
    note="The other root, and the other sign of the quadratic: here the figure "
    "runs past the end of the line instead of falling short of it.",
)
def prop_VI_29(a: Point, b: Point, part) -> Out:
    """Apply to AB a parallelogram equal to a given area, exceeding by a square."""
    hypothesis("A and B are distinct", a != b)
    hypothesis("the application is a proper one", sign(part) > 0 and sign(1 - part) > 0, guard=True)
    line(a, b, "the given line AB")
    middle = posit(prop_I_10(a, b).midpoint, "C")

    whole = length(a, b)
    wanted = whole * whole * part * (1 + part)
    # x(x - whole) = wanted always has a root, however large the area: this is
    # the case II.6 covers, and it needs no proviso at all.
    excess = sqrt(whole * whole / 4 + wanted)
    beyond = posit(_along(a, b, (whole / 2 + excess) / whole), "S")
    across = (-(b.y - a.y), b.x - a.x)
    applied = _parallelogram_on(a, beyond, Point(a.x + across[0], a.y + across[1]))
    outline(*applied)

    because(prop_II_6, a, b, beyond)

    claim("the point falls beyond B on AB produced", "II.6",
          on_line(beyond, Line.through(a, b))
          and sign(length(a, beyond) - length(a, b)) > 0)
    claim("the rectangle applied equals the given area", "II.6",
          length(a, beyond) * length(b, beyond) == wanted)
    claim("and it exceeds AB by the figure on BS", "II.6",
          length(a, beyond) == whole + length(b, beyond))
    return Out(section=beyond, midpoint=middle)