私は現在、C プログラムの「パス」を対応する SMT クエリに変換して、このパスの実現可能性をテストするコードに取り組んでいます。SMT-LIB v1.2 クエリを作成し、Z3 2.11 と QF_AUFBV ロジックを使用してクエリを解決する作業コードがあります。私は現在、このコードを Z3 4.3 に移植しています。これは、それ以降に発生した可能性のある速度の進歩を利用するためです。特に、以前のコードでは、24 個の値を割り当てるだけのクエリで長い時間 (約 22 分) かかるように思われるためです。 3 次元配列を作成し、配列内の特定の位置の値をチェックします。
ただし、QF_AUFBV ロジック (SMT-LIB v2.0 標準の時点) は、多次元配列、または値も配列である配列 (より深い可能性がある) をサポートしなくなったようです。クエリから「(set-logic QF_AUFBV)」という行を取り出すと、Z3 4.3 はクエリを処理できますが、それでも時間がかかります。
多次元配列のサポートが SMT-LIB v2.0 標準で停止された理由と、使用できる代替ロジックを誰かが知っているかどうか疑問に思っていました。また、QF_AUFBV 理論を指定する行を取り出したときに、Z3 がどのようなロジックを使用していたのかも疑問に思っていました。
ありがとう!