注釈:no-pattern
は、引数として式を想定しています。普遍的に量化された数式F
にパターンの注釈が付けられていない場合、Z3 はヒューリスティックに のパターンを選択しますF
。注釈:no-pattern
は、Z3 に、発生する部分式をパターンとして使用してF
はならないことを指示します。これがあなたの例です(http://rise4fun.com/Z3/KfO5でも入手できます):
(declare-sort Set)
(declare-fun mysubset (Set Set) Bool)
(assert
(forall ((A Set) (B Set))
(! (=
(= A B)
(and (mysubset A B) (mysubset B A)))
:no-pattern (mysubset A B))))
(check-sat)
注意: 方程式 ( など(= A B)
) は、Z3 によってパターンとして選択されることはありません。
他の例http://rise4fun.com/Z3/njVuへのリンクを次に示します。
ところで、注釈:pattern
は 2 種類の引数を受け入れます。または式のリスト。Z3 ガイドには、次の注釈:pattern ((f (g x))
があります。((f (g x))
は、式 を含む長さ 1 のリストです(f (g x))
。に置き換える:pattern
と:no-pattern
、 は式ではないため、エラーが発生します((f (g x))
。一方、:no-pattern (f (g x)
有効な:no-pattern
注釈です。
最後に、:pattern
Z3 はマルチパターン ( guide ) をサポートしているため、式のリストを受け入れます。