Solution (source code)

= Solution

Enumerate by the hypotenuse and test finitely many shorter legs:
``
primitiveTriples :: [(Integer, Integer, Integer)]
primitiveTriples =
  [(a, b, c) |
     c <- [1..],
     b <- [1..c-1],
     a <- [1..b-1],
     a*a + b*b == c*c,
     gcd a (gcd b c) == 1]
``
The equality selects <Pythagorean triples>, and the <greatest common divisor> test makes them primitive. The bounds enforce $0<a<b<c$, removing the duplicate obtained by exchanging the legs. Each fixed $c$ has a finite search, so the outer loop gives ascending hypotenuse order and reaches every qualifying triple. Infinite families supplied by <Euclid's formula> ensure that the stream has arbitrarily many outputs. Its first five entries are
``
[(3,4,5),(5,12,13),(8,15,17),(7,24,25),(20,21,29)]
``
Using `Integer` avoids overflow in the squared values. The construction prioritizes a direct correctness argument; it does not claim an optimal enumeration cost.