Skip to content

Commit 8d28624

Browse files
committed
Group ABA closure rules once
1 parent 10735be commit 8d28624

1 file changed

Lines changed: 12 additions & 16 deletions

File tree

src/argumentation/aba_sat.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -450,14 +450,7 @@ def _add_ranked_closure_constraints(z3, solver, framework, variables):
450450
literal: z3.Int(f"rank_{_literal_key(literal)}")
451451
for literal in literals
452452
}
453-
rules_by_consequent = {
454-
literal: [
455-
rule
456-
for rule in sorted(framework.rules, key=repr)
457-
if rule.consequent == literal
458-
]
459-
for literal in literals
460-
}
453+
rules_by_consequent = _rules_by_consequent(framework, literals)
461454

462455
for literal in literals:
463456
solver.add(ranks[literal] >= 0, ranks[literal] <= rank_bound)
@@ -520,14 +513,7 @@ def _add_bitvec_ranked_closure_constraints(z3, solver, framework, variables):
520513
literal: z3.BitVec(f"rank_bv_{_literal_key(literal)}", rank_bits)
521514
for literal in literals
522515
}
523-
rules_by_consequent = {
524-
literal: [
525-
rule
526-
for rule in sorted(framework.rules, key=repr)
527-
if rule.consequent == literal
528-
]
529-
for literal in literals
530-
}
516+
rules_by_consequent = _rules_by_consequent(framework, literals)
531517

532518
for literal in literals:
533519
solver.add(z3.ULE(ranks[literal], rank_bound_value))
@@ -577,6 +563,16 @@ def _add_bitvec_ranked_closure_constraints(z3, solver, framework, variables):
577563
return derived
578564

579565

566+
def _rules_by_consequent(framework: ABAFramework, literals: tuple[Literal, ...]):
567+
grouped: dict[Literal, list[Rule]] = {literal: [] for literal in literals}
568+
for rule in sorted(framework.rules, key=repr):
569+
grouped[rule.consequent].append(rule)
570+
return {
571+
literal: tuple(rules)
572+
for literal, rules in grouped.items()
573+
}
574+
575+
580576
class _SupportState:
581577
def __init__(
582578
self,

0 commit comments

Comments
 (0)