1
假設使用多個內置和用戶定義的Z3排序(例如, Int,Bool,S1,S2,...有沒有一種方法可以編寫一個通用的排序包裝和-wraping函數,這種函數可以從排序A轉換到排序B並返回?例如排序參數包裝函數
(declare-const a S1)
(declare-const b S2)
(declare-const c Int)
(WRAP[S1] b) ; Expression is of sort S1
(WRAP[S1] c) ; Expression is of sort S1
(WRAP[Int] (WRAP[S1] c)) ; Expression is of sort Int
我目前手動覆蓋每個案例,例如,
(declare-fun $boolToInt (Bool) Int)
(declare-fun $intToBool (Int) Bool)
(assert (forall ((x Int))
(= x ($boolToInt($intToBool x)))))
(assert (forall ((x Bool))
(= x ($intToBool($boolToInt x)))))
這樣的包裝可以自動從一組給定各種各樣的創建,但我寧願可能的一個通用的解決方案。
謝謝,獅子座!我沒有注意到$ boolToInt公理相當於假,但幸運的是從未觸發。 你的解決方案仍然需要爲所有有關的排序創建一個聯合數據類型,但我想這是沒有辦法的。 – 2012-03-26 07:06:28