SMT 솔버는 SAT 솔버 + 결정 절차입니다
SAT 솔버는 의사 결정 문제에 대한 솔버입니다. SAT 문제는 의사 결정 문제입니다. 또한이 결정 문제는 "자체 환원 가능"합니다.
SAT 문제는 스스로 해결할 수 있습니다. 즉, SAT 인스턴스를 해결할 수있는 경우 올바르게 응답하는 각 알고리즘을 사용하여 만족스러운 과제를 찾을 수 있습니다.
— ( 위키 백과 )
이것은 SAT 솔버가 문제를 결정하는 것 외에도 만족스러운 과제를 줄 수 있음을 의미합니다.
TL; DR SMT 솔버는 이론에서 허용되는 유형 / 제약에 따라 SAT 문제의 일반화를 해결합니다. 또한 SAT 인코딩이 허용하는 것보다 더 높은 수준의 유형 관계 인코딩을 허용합니다.
SAT 솔버는 일반적으로 CNF 의 절 / 제약을 통해서만 관련된 많은 단일 부울 변수를 처리합니다 . QF_BV (quantifier-free bitvector) 이론 SMT 솔버는 기본적으로 SAT 솔버 + 관계에 대한 추가 정보입니다. 예를 들어, QF_BV SMT 솔버는 SAT 1 로 환원 될 수 있습니다. 그렇다면 왜 QF_BF SMT 솔버를 사용합니까? 가장 큰 장점은 SAT에서 정수가 다른 변수로 표시되어 언뜻보기에는 관련이 없을 수 있다는 것입니다. SAT 솔버는 와 같은 간단한 관계를 다시 배우는 데 많은 시간을 소비합니다.( A = B ) ∧ ( B = C)⟹( A = C)
- 해결해야 할 동등한 SAT 문제를 출력 할 수있는 Beaver SMT 솔버 를 참조하십시오 .
QF_BV SMT 솔버가 SAT 솔버에 비해 이러한 이점을 가지고 있지만 이것이 복잡한 이점이라고 생각하지 않습니다. 본질적으로 동등한 문제이며 최악의 문제를 해결하는 데 시간이 많이 걸립니다. 그러나 실제로 이러한 추가 지식으로 인해 QF_BV SMT 솔버가 훨씬 빠를 수 있습니다. (현재) QF_BV SMT 솔버와 SAT 솔버가 모두 질식 할 수있는 "하드"로 간주되는 예 는 SMT 솔버 한계에 대한 내 답변을 참조하십시오 .
부울 만족도보다 더 어려운 문제를 해결하려고하는 SMT 솔버도 있습니다 (예 : 실수에 대한 유형 및 제한 허용 또는 수량 자 허용). 분명히 이것은 이론적으로 적어도 SAT 솔버만큼 느립니다. 이 SMT 솔버는 SAT 문제의 일반화를 해결합니다. 이진 변수를 사용하는 대신, 각각의 "이론"은 실제와 같은 다른 영역에 대한 관계 / 제약 또는 수량화 된 (전부) 제약을 허용합니다.
정리 증명
피= N피
그러나 NP- 완전 문제를 해결하기위한 효율적인 방법이 수학 자체에서 야기 할 수있는 혁명과 비교했을 때 그러한 변화는 의미가 희미해질 수 있습니다. Stephen Cook에 따르면, [19]
... 정식 증명은 다항식 시간으로 쉽게 인식 될 수 있기 때문에 컴퓨터가 합리적인 길이의 증명을 가진 정리에 대한 공식적인 증거를 찾도록 허용함으로써 수학을 변형시킬 것입니다. 예제 문제에는 모든 CMI 상 문제가 포함될 수 있습니다.
— ( 위키 백과 )
[19] : Cook, Stephen (2000 년 4 월). P 대 NP 문제. 점토 수학 연구소 (PDF) .
피= N피
그러나 현재로서는 자동 정리는 대부분 휴리스틱 또는 지수 시간 알고리즘을 사용하지만 여전히 유용합니다.
구속 솔버
이것들은 보통 SAT / SMT 솔버를 다른 언어로 재구성 한 것입니다. SAT / SMT 솔버를 사용하여 문제를 해결 한 적이 있다면 솔버의 비 결정적 능력을 정말 좋아할 수 있습니다. 즉, 컴퓨터 에게 무언가를 하는 방법 을 알려주는 대신 원하는 것을 말해줍니다 . 출력에 어떤 속성이 필요한지, SAT / SMT 솔버는 구현 세부 사항을 방해하지 않고 비 결정적 "채우기"상태로 만듭니다. 이러한 종류의 프로그래밍 패러다임은 매우 호소력이 있으며 제약 조건 프로그래밍 이라고 하며 실행하려면 제약 조건 솔버를 사용해야합니다 (이는 사용할 수있는 유형 및 제약 조건에 따라 백엔드에서 SAT / SMT 솔버를 사용할 수 있음). .
그러나 Z3를 정리 증명 자로 부르는 사람들이 있습니다. 그래서 나는 그 용어를 부정하게하는 방법을 모른다.
AFAIK, Z3는 SMT 솔버, 여러 가지 이론 증명 / 모델 확인 언어 등을 포함한 많은 도구 모음입니다.
그리고 그들 모두에게 가장 일반적인 용어는 무엇입니까?
만족도 문제의 일반화는 만족도 모듈로 이론 이라고 생각합니다. 따라서 "SMT 솔버"가 이들 중 가장 일반적인 것입니다. 그러나 모든 실제 SMT 솔버 구현이 모든 이론을 해결하는 것은 아니므로 모든 SMT 솔버가 똑같이 일반적이라는 것을 의미하지는 않습니다.