属性値を計算するにはどうすればよいですか? ここに例を示します。これによりZ3とsmtlibを使用して、混合値を持つ構成/モデルを計算する
(declare-fun x() bool)
(declare-fun y() bool)
(declare-fun z() bool)
(assert (AND x (OR y z)))
私は2つのモデルになるだろう:
今x=true and y=true
x=true and z=true
を、私が欲しいものは、このようなものである:だから
(declare-fun x() bool)
(declare-fun y() bool)
(declare-fun z() bool)
(declare-fun x.val() Int)
(declare-fun y.val() Int)
(declare-fun z.val() Int)
(assert (= x.val 2))
(assert (= y.val 3))
(assert (= z.val 5))
(assert (AND x (OR y z)))
(assert (> sum 6))
、私はしたいと思います属性の合計が6より大きいモデルを取得します。
x=true and z=true
私は、変数を追加するマクロ
cond_add
を定義ここで
(define-fun cond_add ((cond Bool) (x Int) (sum Int)) Int
(ite cond (+ sum x) sum))
(declare-fun sum() Int)
(assert (= sum (cond_add x x.val (cond_add y y.val (cond_add z z.val 0)))))
(assert (> sum 6))
:
たぶん配列での作業は、私が何かのようにそれは想像、これを達成するための方法...三つの変数で
うわー、それはすばらしかったです。まさに私が探していたもの。ありがとうございました! –