2011-12-12 6 views
5

SAT가 NP 완전하다는 증거는 건설적인 증거이므로 프로그램으로 구현할 수 있어야합니다. 아무도이 짓을 한거야?검증 알고리즘을 SAT 문제로 변환하는 컴파일러

나는 (true 또는 false를 반환하는) 프로그램으로 입력하고 SAT 수식을 출력하는 프로그램 (컴파일러)을 찾고있다.

예를 들어, 컴파일러는 다음 프로그램을 사용할 수 있습니다 (pythonic 구문으로 표시하지만 모든 언어는 저와 동일합니다). 입력으로 SAT 수식을 출력합니다. SAT 공식을 SAT 해석기에 공급하면 "인증서"매개 변수에 대한 해답을 얻을 수 있습니다. 이 경우, 해는 {-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 공식에는 다른 보조 변수가 있으므로 컴파일러는 어떤 변수가 인증서에 해당하는지 표시해야합니다.

이러한 컴파일러가 이미 있습니까? 그들 중 누구도 오픈 소스입니까?

답변

3

당신이 원하는 것에 가장 가까운 SMT 솔버를 조사해야합니다. SMT (루프 없음)를 사용하여 Turing 완전한 언어로 작성하지는 않지만 정수 및 실수 값 변수, 부울 논리, 함수, 기본 산술 및 배열로 작업 할 수 있습니다.