run method

  1. @override
void run()
override

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]!);
  }
}