Subtractive reasoning proof of the Pythagorean theorem:

Step 1: Fit the triangles into the square
so that the non-covered part of the square 
is a square whose side length is c

Step 2: Move the triangles, still keeping 
them in the square, so that the uncovered 
part of the square is two smaller squares
whose side lengths are a and b respectively.

A = (3.02, -0.7)
B = (7.24, -0.72)
a = Segment(A, B)
B' = Rotate(B, 90*°, A)
b = Segment(B', A)
C = Point(b)
c = Segment(C, A)
d = Segment(C, B)
u = Vector(A, C)
B'' = Translate(B', u)
e = Segment(B', B'')
B''' = Rotate(B'', 270*°, A)
A' = Rotate(A, 270*°, B''')
f = Segment(B, B''')
g = Segment(B''', A')
h = Segment(A', B'')
poly1, a_1, b''', a', b'' = Polygon(A, B''', A', B'')
D = Midpoint(C, A)
E = Midpoint(D, B)
F = (1.8, -2.66)
v = Vector(E, F)
G = (10.98, 0.06)
w = Vector(E, G)
H = (7.78, -2.74)
z = Vector(E, H)
I = (10.92, 3.38)
i = Vector(E, I)
poly2, b_1, c_1, a_2 = Polygon(C, A, B)
C' = Translate(C, i)
A'_1 = Translate(A, i)
B'_1 = Translate(B, i)
poly2', b'_1, c', a'_1 = Polygon(C', A'_1, B'_1)
C'_1 = Translate(C, z)
A'_2 = Translate(A, z)
B'_2 = Translate(B, z)
poly2'_1, b'_2, c'_1, a'_2 = Polygon(C'_1, A'_2, B'_2)
C'_2 = Translate(C, w)
A'_3 = Translate(A, w)
B'_3 = Translate(B, w)
poly2'_2, b'_3, c'_2, a'_3 = Polygon(C'_2, A'_3, B'_3)
C'_3 = Translate(C, v)
A'_4 = Translate(A, v)
B'_4 = Translate(B, v)
poly2'_3, b'_4, c'_3, a'_4 = Polygon(C'_3, A'_4, B'_4)
J = Rotate(C'_2, 90*°, G)
K = Rotate(A'_3, 90*°, G)
L = Rotate(B'_3, 90*°, G)
poly3, l, j, k = Polygon(J, K, L)
M = Rotate(C'_1, 180*°, H)
N = Rotate(A'_2, 180*°, H)
O = Rotate(B'_2, 180*°, H)
poly4, o, m, n = Polygon(M, N, O)
C'' = Rotate(C', 270*°, I)
P = Rotate(A'_1, 270*°, I)
Q = Rotate(B'_1, 270*°, I)
poly2'', q, c'', p = Polygon(C'', P, Q)