0
Z3
的distinct
功能
(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))
約束。
任何想法這兩種方法哪一種可能表現更好?跟蹤所有變量和「不同」跟蹤計數器和函數? – 2013-02-19 16:21:15
對於小變量'distinct'通常更好。備註:如果'distinct(a_1,...,a_n)'中的參數個數很大,那麼Z3將使用上面的技巧來編碼'distinct'。它這樣做是爲了避免二次爆炸。 – 2013-02-19 16:26:25