ExDatalog.Compiler.Stratifier (ExDatalog v0.2.0)

Copy Markdown View Source

Assigns strata to relations and rules in a validated Datalog program.

Uses ExDatalog.Validator.Stratification for SCC computation and stratum assignment. This module bridges the validator and the IR compiler, producing a deterministic stratum assignment that the engine uses to evaluate strata in order.

Summary

Functions

Assigns a stratum to each rule in the program.

Computes stratum structures for the IR.

Functions

assign(program)

@spec assign(ExDatalog.Program.t()) :: %{
  required(non_neg_integer()) => non_neg_integer()
}

Assigns a stratum to each rule in the program.

Returns a map from rule index (0-based, in canonical order) to its stratum number. Rules are ordered by their position in the program's rules list after validation.

compute_strata(program)

@spec compute_strata(ExDatalog.Program.t()) :: [ExDatalog.IR.Stratum.t()]

Computes stratum structures for the IR.

Returns a list of ExDatalog.IR.Stratum structs, one per distinct stratum, ordered by stratum index. Each stratum contains the rule IDs and relation names that belong to it.

EDB-only relations (no rules defining them) are always in stratum 0.