evaluate method
Evaluates the rule and returns derived facts.
Implementation
@override
List<Fact> evaluate(
Map<String, List<List<Object>>> facts,
Map<String, List<List<Object>>> derived,
) {
// This is a stratified rule - only evaluate after Mutable is complete
final result = <Fact>[];
final allocs = facts['Alloc'] ?? [];
final mutable = {...?facts['Mutable'], ...?derived['Mutable']};
// Convert mutable to set for efficient lookup
final mutableHeaps = <Object>{};
for (final m in mutable) {
mutableHeaps.add(m[0]);
}
for (final alloc in allocs) {
final heap = alloc[1];
if (!mutableHeaps.contains(heap)) {
result.add(Fact('DeepImmutable', [heap]));
}
}
return result;
}