SMTLIB インターフェイスを使用して、Z3 の集合 (和集合、交差など) の理論を定義しようとしています。残念ながら、私の現在の定義では単純なクエリで z3 がハングするため、簡単なオプション/フラグがいくつか欠けていると思います。
パーマリンクはこちら: http://rise4fun.com/Z3/JomY
(declare-sort セット) (declare-fun emp () セット) (declare-fun add (Set Int) Set) (declare-fun cup (Set Set) Set) (宣言楽しいキャップ (セット セット) セット) (declare-fun dif (Set Set) Set) (declare-fun sub (Set Set) Bool) (declare-fun mem (Int Set) Bool) (assert (forall ((x Int)) (not (mem x emp)))) (assert (forall ((x Int) (s1 セット) (s2 セット)) (= (mem x (カップ s1 s2)) (または (mem x s1) (mem x s2))))) (assert (forall ((x Int) (s1 セット) (s2 セット)) (= (mem x (cap s1 s2)) (および (mem x s1) (mem x s2))))) (assert (forall ((x Int) (s1 セット) (s2 セット)) (= (mem x (dif s1 s2)) (および (mem x s1) (not (mem x s2)))))) (assert (forall ((x Int) (s Set) (y Int)) (= (mem x (sy を追加)) (または (mem xs) (= xy))))) (declare-fun z3v8 () Bool) (アサート (z3v8 ではない)) (チェックサット)
私が欠けているものについてのヒントはありますか?
また、私が言えることから、集合演算の標準的な SMT-LIB2 エンコーディングはありませんZ3.mk_set_{add,del,empty,...}
(これが、量指定子を介してその機能を取得しようとしている理由です)。それとも別のルートがありますか?
ありがとう!
ランジット。