数量詞について質問があります。
配列があり、この配列の配列インデックス0、1、2を計算したいとします-
(declare-const cpuA (Array Int Int))
(assert (or (= (select cpuA 0) 0) (= (select cpuA 0) 1)))
(assert (or (= (select cpuA 1) 0) (= (select cpuA 1) 1)))
(assert (or (= (select cpuA 2) 0) (= (select cpuA 2) 1)))
または、forall構文を使用して-と同じものを指定できます
(assert (forall ((x Int)) (=> (and (>= x 0) (<= x 2)) (or (= (select cpuA x) 0) (= (select cpuA x) 1)))))
ここで、2つの違いを理解したいと思います。最初のメソッドはすばやく実行され、シンプルで読みやすいモデルを提供します。対照的に、2番目のオプションを使用したコードサイズは非常に小さくなりますが、プログラムの実行には時間がかかります。また、ソリューションは複雑です。
コードが小さくなるので、2番目の方法を使用したいと思います。しかし、読みやすいシンプルなモデルを見つけたいと思います。