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()