34 lines
833 B
Python
34 lines
833 B
Python
import clingo
|
|
|
|
PROGRAM = """
|
|
#theory o {
|
|
kterm {- : 0, unary };
|
|
&o/0 : kterm, any
|
|
}.
|
|
|
|
x :- &o{false}.
|
|
x :- &o{x}.
|
|
y :- &o{y}.
|
|
"""
|
|
|
|
class CheckAtoms:
|
|
def init(self, init: clingo.PropagateInit):
|
|
symbolic_lits = {atom: init.solver_literal(atom.literal) for atom in init.symbolic_atoms}
|
|
theory_lits = {init.solver_literal(atom.literal) for atom in init.theory_atoms}
|
|
|
|
overlap = tuple(atom for atom, lit in symbolic_lits.items() if lit in theory_lits)
|
|
|
|
if len(overlap) == 0:
|
|
print("There is no solver literal overlap")
|
|
else:
|
|
print("There is overlap")
|
|
print(*(atom.symbol for atom in overlap))
|
|
|
|
|
|
control = clingo.Control(["0"])
|
|
control.register_propagator(CheckAtoms())
|
|
control.add("base", [], PROGRAM)
|
|
control.ground([("base", [])])
|
|
|
|
control.solve()
|