![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/local/lib/python3.6/dist-packages/sympy/logic/algorithms/ |
Upload File : |
from sympy.assumptions.cnf import EncodedCNF def pycosat_satisfiable(expr, all_models=False): import pycosat if not isinstance(expr, EncodedCNF): exprs = EncodedCNF() exprs.add_prop(expr) expr = exprs # Return UNSAT when False (encoded as 0) is present in the CNF if {0} in expr.data: if all_models: return (f for f in [False]) return False if not all_models: r = pycosat.solve(expr.data) result = (r != "UNSAT") if not result: return result return {expr.symbols[abs(lit) - 1]: lit > 0 for lit in r} else: r = pycosat.itersolve(expr.data) result = (r != "UNSAT") if not result: return result # Make solutions sympy compatible by creating a generator def _gen(results): satisfiable = False try: while True: sol = next(results) yield {expr.symbols[abs(lit) - 1]: lit > 0 for lit in sol} satisfiable = True except StopIteration: if not satisfiable: yield False return _gen(r)