既成のSMTソルバーを使用して、Cコードのシンボリック実行でいくつかの実験を計画しており、どのソルバーを使用するかを考えています。たとえば、SMTコンテストの参加者を見て、オープンソースシステムのみを取り上げ、ビーバー、ブーレクター、CVC3、OpenSMT、サテン、ソノラー、STP、ベリットに絞り込みます。これはまだ長いリストです。
もう少し絞り込んでみると、一部のシステムはビットベクトル演算を処理する機能をアドバタイズしているのに対し、他のシステムは一般的な整数演算を処理する機能のみをアドバタイズしていることに気付きました。原則として、前者はCに対して正しいです。ここで、変数はマシンワードであり、無制限の整数ではありません。実際にはどのくらいの違いがありますか?この種の仕事に一般的な整数システムを使おうとするとどうなりますか?次のシナリオのいずれかが当てはまりますか?
ビットベクトルシステムの方が少し効率的ですが、どちらでも問題ありません。
少し調整を加えた一般的な整数システムを使用できます。
一般的な整数システムはsignedintには問題ありませんが(オーバーフローの結果が未定義であるため)、unsignedには間違った答えが返されます。
一般的な整数システムは、マシンワード演算には正しくありません。短いリストを、ビットベクトル演算を提供するシステムのみに減らすことができます。
他に…?
私はできるだけ具体的な質問をしようとしましたが、誰かがリストを絞り込むための他の基準を提案できるなら、それは素晴らしいことです!