メッセージ
Z3: ERROR: WARNING: failed to find a pattern for quantifier (quantifier id: k!8)
は誤解を招くです。これはちょうど警告であり、 "ERROR"という言葉は偶然そこにあります。これは修正され、次のリリースで利用可能になります。 警告は、E-matchingモジュールが量子を無視することをユーザーに通知するだけです。 しかし、Z3では、多くのエンジンを使用して定量化された数式を処理しています。 MBQIモジュールは、この定量化式を処理し、などの問題のために満足割り当て構築することができる:言われている、上記定量化式は、単一の要素とのソートを指定するための最良の方法ではないことを
(declare-sort S)
(declare-fun s() S)
(assert (forall ((t S)) (= t s)))
(declare-fun a() S)
(declare-fun b() S)
(assert (= a b))
(check-sat)
(model)
を。 データ型を使用して、列挙型をエンコードできます。 たとえば、次のコマンドは要素e1 ... enを持つソートSを定義します。 (declare-datatypes ((S e1 e2 … en)))
唯一の要素でソートを使用して指定することができます。 (declare-datatypes ((S e)))
次の例では、充足不能である:私はE-マッチングモジュールを無効にすると
(declare-datatypes ((S elem)))
(declare-const a S)
(declare-const b S)
(assert (not (= a b)))
(check-sat)
は、Z3は、もはやエラーを報告していないん(rise4fun.comを参照してください。/Z3/VPi)。私たちの公式が数量化されていないことを考えると、Eマッチングモジュールを安全な回避策にしていないのですか? – reprogrammer
'declare-datatypes'は単なる短縮形ですか、それとも拡張版よりも利点がありますか? – reprogrammer
警告/エラーは、数量詞を含む問題についてのみ報告されます。したがって、量指定子を使用しない場合は、E-matchingを無効にする必要はありません。 'declare-datatypes'は省略形ではなく、列挙型、帰納的データ型(リストや木など)を宣言するために使用できます。ところで、数日後にZ3 3.0をリリースする予定です。 –