run method
Runs the Datalog program to compute derived facts.
Implementation
@override
void run() {
_reachedMaxIterations = false;
_totalIterations = 0;
// Group rules by stratum for stratified evaluation
final strata = <int, List<DatalogRule>>{};
for (final rule in _rules) {
strata.putIfAbsent(rule.stratum, () => []).add(rule);
}
// Evaluate each stratum to fixpoint before moving to next
final sortedStrata = strata.keys.toList()..sort();
for (final stratumId in sortedStrata) {
if (_reachedMaxIterations) break;
_runStratum(strata[stratumId]!);
}
}