Naive evaluation

The same recipe runs every recursive program:

start: every rule-defined predicate is empty
repeat:
    evaluate every rule body against the current
    relations, adding any new tuples we find
until a round adds nothing new

This is naive evaluation: each round re-evaluates all the rules using the predicates’ current definitions, and it always reaches the same answer.

Two readings of a round: the predicate's table (its relation) gains rows, or equivalently we derive new facts.

A round only adds tuples, and over a finite set there are only finitely many to add, so the rounds must end.

The next section explains what value the iteration finally reaches.