Compiler construction 将验证算法转换为SAT问题的编译器

Compiler construction 将验证算法转换为SAT问题的编译器,compiler-construction,np-complete,satisfiability,Compiler Construction,Np Complete,Satisfiability,SAT是NP完全的证明是一个构造性的证明,因此它应该可以作为一个程序来实现。有人这样做过吗 我正在寻找一个程序(一个编译器),它接受一个程序作为输入(返回true或false),并输出一个SAT公式 因此,例如,编译器可以将以下程序(以pythonic语法显示,但我可以使用任何语言)作为输入,并输出SAT公式。将SAT公式提供给SAT解算器将为参数“certificate”提供解决方案。在这种情况下,解将是[False,True,True,True,False],表示{-3,-2,5}是一个解

SAT是NP完全的证明是一个构造性的证明,因此它应该可以作为一个程序来实现。有人这样做过吗

我正在寻找一个程序(一个编译器),它接受一个程序作为输入(返回true或false),并输出一个SAT公式

因此,例如,编译器可以将以下程序(以pythonic语法显示,但我可以使用任何语言)作为输入,并输出SAT公式。将SAT公式提供给SAT解算器将为参数“certificate”提供解决方案。在这种情况下,解将是[False,True,True,True,False],表示{-3,-2,5}是一个解

def verify(certificate):
  problem = [-7, -3, -2, 5, 8]
  sum = 0
  for (x, b) in zip(problem, certificate):
    if b:
      sum += x
  return sum == 0
显然,输出SAT公式将有其他辅助变量,因此编译器必须指示哪些变量对应于证书


这样的编译器已经存在了吗?其中有开源的吗?

你应该研究SMT解决方案,因为它们是最接近你想要的东西。您没有使用带有SMT(无循环)的图灵完整语言编写,但可以使用整型变量和实值变量、布尔逻辑、函数、基本算术和数组