Int、Bool、S1、S2 など、いくつかの組み込みおよびユーザー定義の Z3 ソートの使用を想定すると、ソート 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)))))
このようなラッパーは、特定の種類のセットから自動的に作成できますが、可能性のある一般的なソリューションをお勧めします。