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.