13

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,...} (これが、量指定子を介してその機能を取得しようとしている理由です)。それとも別のルートがありますか?

ありがとう!

ランジット。

4

1 に答える 1