Z3 を使用してレコードの配列を作成することができましたが、配列に対して $\forall$ 操作を実行するために必要な構文を確認するのに苦労しています... これまでに持っている SMT-LIB2 コードのスニペット サンプルです。 .
(declare-datatypes () ((rec (mk-R5 (age Int) (area Int) (married Bool)))))
(declare-const recs (Array Int rec))
(declare-const r1 rec)
(assert(= (age r1) 15))
(assert(= (area r1) 10001))
(assert(= (married r1) true))
(declare-const r2 rec)
(assert(= (age r2) 35))
(assert(= (area r2) 2845))
(assert(= (married r2) true))
(declare-const x Int)
(declare-const y Int)
(assert (= recs (store recs x r1)))
(assert (= recs (store recs y r2)))
(assert(forall ((i rec)) (= (married i) true)))
(check-sat)
(get-model)
最後から 3 番目の行には配列への参照が必要だと思いますが、すべてを試しましたが、チュートリアルはこの問題の解決に役立ちませんでした。
ここにある配列に対して $\forall$ 操作を実行するにはどうすればよいですか?