Recursion is a least fixed point

Recursive reach replaces the second line with reach itself:

reach := line ∪ π#1, #4( σ#2 = #3( line × reach ) )

Now reach appears on both sides: an equation, not a definition. Solve it by naive evaluation as in Part 2 — from reach = {}, apply the right-hand side until it stops growing, at the least fixed point.

This is the one thing relational algebra needs beyond the basic operators, and exactly what SQL spells WITH RECURSIVE.