distinct
Z3の機能
(declare-const a S)
(declare-const b S)
(assert (distinct a b))
セット内のすべての変数が異なる値を取る必要があるように、変数のセット (ここではa
と) を制約できます。b
私の質問は次のとおりです。変数を区別する必要がある変数のセットを明示的に参照せずに、変数に一意の値を強制することもできますか? 何かのようなもの
(declare-unique-const a S)
(declare-unique-const b S)
(declare-unique-const c S)
これは、プログラムの検証中など、反復プロセスで新しい変数を宣言する状況で便利です。
それが不可能な場合は、すべての個別の変数を追跡し、そのセットを使用して適切なdistinct (newvar, oldvar1, ..., oldvarn))
制約を発行する必要があると思います。