回答:
SMTソルバーは、SATソルバー+決定手順です
SATソルバーは決定問題のソルバーです。SAT問題は決定問題です。さらに、この決定の問題は「自己還元可能」です。
SAT問題は自己還元可能です。つまり、SATのインスタンスが解ける場合に正しく答える各アルゴリズムを使用して、満足のいく割り当てを見つけることができます。
—(ウィキペディア)
これは、SATソルバーが問題を決定することに加えて、満足のいく割り当てを与えることもできることを意味します。
TL; DR SMTソルバーは、理論で許可されているタイプ/制約に応じて、SAT問題の一般化を解決します。さらに、SATエンコードが許可するよりも高いレベルの型関係のエンコードも許可します。
SATソルバーは通常、多数の単一ブール変数を処理します。これらの変数は、CNFの節/制約によってのみ関連付けられます。QF_BV(数量詞なしのビットベクトル)理論SMTソルバーは、基本的にSATソルバー+関係に関する詳細情報です。たとえば、QF_BV SMTソルバーはSAT 1に還元可能です。では、なぜQF_BF SMTソルバーを使用するのですか?主な利点は、SATでは整数がさまざまな変数で表され、一見無関係に見える場合があることです。SATソルバーは、ような単純な関係の再学習に多くの時間を費やします
QF_BV SMTソルバーにはSATソルバーよりもこの利点がありますが、これは複雑な利点ではないと思います。これらは本質的に同等であり、最悪の問題を解決するために指数関数的な時間がかかります。しかし実際には、この追加の知識により、QF_BV SMTソルバーははるかに高速になる可能性があります。(現在の)QF_BV SMTソルバーとSATソルバーの両方が窒息する「ハード」と見なされるものの例については、SMTソルバーの制限に対する私の答えを参照してください。
ブール充足可能性よりもさらに難しい問題を解決しようとするSMTソルバーもあります(たとえば、実数に対する型と制約の許可、数量詞の許可など)。明らかに、これらは理論的には少なくともSATソルバーと同じくらい遅いです。これらのSMTソルバーは、SAT問題の一般化を解きます。バイナリ変数を使用する代わりに、各「理論」は、実数や定量化された(すべての)制約など、異なるドメインでの関係/制約を許可します。
定理証明者
しかし、そのような変化は、NP完全問題を解決するための効率的な方法が数学自体にもたらす革命と比較して、意味が薄いかもしれません。スティーブンクックによると、[19]
...形式的な証明は多項式時間で簡単に認識できるため、合理的な長さの証明を持つ定理の形式的な証明をコンピュータが見つけられるようにすることで、数学を変換します。問題の例には、CMIプライズの問題がすべて含まれる場合があります。
—(ウィキペディア)
[19]:クック、スティーブン(2000年4月)。P対NP問題。クレイ数学研究所(PDF) 。
しかし今のところ、自動化された定理のほとんどは、ヒューリスティックまたは指数時間アルゴリズムを使用します(しかし、まだ役立ちます)。
制約ソルバー
これらは通常、SAT / SMTソルバーを他の言語に再定式化したものです。SAT / SMTソルバーを使用して問題を解決したことがある場合、ソルバーの非決定的能力を本当に愛することができます。つまり、コンピューターに何かをする方法を伝えるのではなく、あなたがやりたいことを伝えるのです。出力にどのプロパティを持たせ、SAT / SMTソルバーは実装の詳細に煩わされることなく、非決定的な「入力」を行います。この種のプログラミングパラダイムは非常に魅力的で、制約プログラミングと呼ばれ、実行するには、制約ソルバーを使用する必要があります(使用できるタイプと制約によっては、バックエンドでSAT / SMTソルバーを使用する場合があります) 。
しかし、Z3を定理証明者と呼ぶ人々がいます。したがって、これらの用語をどのように区別するかはわかりません。
知る限りでは、Z3は、SMTソルバー、いくつかの定理証明/モデル検査言語などを含む多くのツールのスイートです。
そして、それらすべての最も一般的な用語は何ですか?
充足可能性問題の一般化は充足可能性モジュロ理論であると思うので、「SMTソルバー」はこれらすべての中で最も一般的です。ただし、実際のすべてのSMTソルバーの実装がすべての理論を解決するわけではないため、すべてのSMTソルバーが同様に一般的であることを意味するわけではありません。