2011-08-03 10 views
1

my Z3 programに次の規則を使用して、sに、並べ替えSの唯一の可能な値を設定しています。Z3のソートのドメインを単一の値に制限する方法を教えてください。

Z3: ERROR: WARNING: failed to find a pattern for quantifier (quantifier id: k!8) 

特定の種類のドメインは単一の値のみを持っていることを確認するための正しい方法は何ですか?

(assert (forall ((t S)) (= t s))) 

しかし、上記の式はZ3レポート以下のエラーになりますか

答えて

2

メッセージ

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)

+0

は、Z3は、もはやエラーを報告していないん(rise4fun.comを参照してください。/Z3/VPi)。私たちの公式が数量化されていないことを考えると、Eマッチングモジュールを安全な回避策にしていないのですか? – reprogrammer

+0

'declare-datatypes'は単なる短縮形ですか、それとも拡張版よりも利点がありますか? – reprogrammer

+0

警告/エラーは、数量詞を含む問題についてのみ報告されます。したがって、量指定子を使用しない場合は、E-matchingを無効にする必要はありません。 'declare-datatypes'は省略形ではなく、列挙型、帰納的データ型(リストや木など)を宣言するために使用できます。ところで、数日後にZ3 3.0をリリースする予定です。 –

関連する問題