(수학) 문제를 SAT 인스턴스로 변환 해결하는 것입니다. 누군가가 매뉴얼, 가이드 또는 내

내가하고 싶은 것은 수학 문제를 부울 만족도 문제 (SAT)로 바꾸고 SAT 해 찾기를 사용하여 해결하는 것입니다. 누군가가 매뉴얼, 가이드 또는 내 문제를 SAT 인스턴스로 변환하는 데 도움이되는 것을 알고 있는지 궁금합니다.

또한, 나는 이것을 지수 시간보다 더 나은 시간에 해결하고 싶습니다. SAT 솔버가 도움이 되길 바랍니다.



답변

SAT 핸드북 2 장 (Steven Prestwich) 은 불연속 결정 문제를 CNF로 전환하는 방법에 대해 자세히 설명합니다. (불행히도 온라인에는 초안 버전이 없다고 생각합니다. 아마도 지역 도서관에 문의하는 것이 가장 좋습니다.) Magnus Björk의 기발한 개요에서 인용 된 다른 참고 문헌들 중 성공적인 SAT 인코딩 기술 도 유용합니다.

문제가 계속되거나 불균형 시스템에 특히 관심이 있다면 다른 종류의 솔버가 유용 할 가능성이 높습니다. Kyle이 지적했듯이 SMT 솔버 (예 : Z3 , Yices 또는 OpenSMT )는 유용 할 수 있지만, 일반적으로 SMT 이론은 컴퓨터 소프트웨어의 검증에 중점을 두는 경향이 있으므로 SMT 솔버는 일반적으로 정수 간격을 포함하는 표현식과 같은 항목을 크게 지원합니다. 인젝션 제약 조건에서 성능이 저하 될 수 있습니다. 자연적으로 불평등 시스템으로 표현되는 문제의 경우 CPLEX 가 이길 수있는 것입니다 (이는 학문적 용도로 무료로 사용할 수 있었지만 여전히있을 수 있습니다). 조합 결정 문제 (예 : 찾기)사각형을 정사각형으로 패킹 ), Minion 과 같은 구속 조건 솔버가 SAT 솔버보다 성능이 우수하며 종종 사용하기가 더 쉽습니다.


답변

수학적 문제를 학습 연습으로 SAT 인스턴스로 변환하지 않는 한, 만족도 모듈러스 이론 에 대해 배우는 데 훨씬 더 많은 시간을 할애 할 것 입니다. SMT를 사용하면 부울 SAT 인스턴스보다 훨씬 자연스럽게 방정식 및 기타 제약 조건을 표현할 수 있습니다. 일부 SMT 솔버는 실존 및 범용 정량자를 지원하므로 NP를 넘어 PSPACE 문제를 표현할 수 있습니다.

보다 표현력이 뛰어나고 SMT 솔버가 더 빠릅니다. 좋은 SMT 솔버가 검색 공간을 통해 솔버를 안내하는 데 도움이되는 이론 별 구조 정보를 버리지 않으므로 P = NP가 빠르지는 않지만 더 효율적입니다. Karp 축소를 SAT 인스턴스에 직접 수행하면 SAT 솔버가 종종 모든 지수 구조를 종종 기하 급수적으로 재 학습합니다. 예를 들어, DPLL 기반 및 로컬 검색 기반 SAT 솔버 둘 다에서 덧셈이 교환 적이라는 사실이 사라집니다. 솔버는 숫자를 전혀 다루지 않는다는 것을 인식하지 못합니다! x + y + z = 10의 모든 순열을 시도하지 않으려면 SAT 솔버에 대칭형 코드가 필요합니다.이 코드에는 그래프 자동 형성 감지가 필요합니다. 가장 현재의 그래프 자 형성 인식 알고리즘은 최악의 경우 정점의 수에 대한 시간 지수를 요구합니다.


답변

고급 언어를 SMT 또는 CNF로 변환하는 두 가지 도구.

CVC 구문은 CAS에 가깝습니다.

CBMC C 프로그램을 CNF로 변환하여 어설 션을 허용합니다. 어설 션은 항상 참이거나 거짓 인 경우 반례 입력이 발견됩니다. CBMC는 루프를 언 롤링하므로 특정 C 프로그램은 지수 적으로 큰 CNF / SMT를 갖습니다.


답변