31 lines
727 B
Python
31 lines
727 B
Python
from mimetypes import init
|
|
import clingo
|
|
|
|
PROGRAM_A = """
|
|
#theory o {
|
|
kterm {- : 0, unary };
|
|
&o/0 : kterm, any
|
|
}.
|
|
a, b.
|
|
a :- &o{a}.
|
|
b :- &o{b}.
|
|
"""
|
|
|
|
class CheckAtoms:
|
|
def init(self, init: clingo.PropagateInit):
|
|
theory_lits = set(init.solver_literal(atom.literal) for atom in init.theory_atoms)
|
|
symbolic_lits = set(init.solver_literal(atom.literal) for atom in init.symbolic_atoms)
|
|
|
|
if len(theory_lits & symbolic_lits) == 0:
|
|
print("There is no solver literal overlap")
|
|
else:
|
|
print("There is overlap")
|
|
|
|
|
|
control = clingo.Control(["0"])
|
|
control.register_propagator(CheckAtoms())
|
|
control.add("base", [], PROGRAM_A)
|
|
control.ground([("base", [])])
|
|
|
|
control.solve()
|