用 Z3 记录

Records with Z3

我仔细查看了文档和指南,并亲自尝试了一些东西。然而,我的问题的解决方案却让我望而却步。

这是教程中关于记录的内容,但我不清楚如何让它满足我的需要:

(declare-datatypes (T1 T2) ((Pair (mk-pair (first T1) (second T2)))))
(declare-const p1 (Pair Int Int))
(declare-const p2 (Pair Int Int))

我正在寻找用于声明包含 5 个字段、2 个整数和 3 个布尔值的 记录 的 SMT-LIB2 语法。

然后我想要 array/set 这些记录。

我还在寻找语法,然后我会用它来对某些记录集进行 $\forall$ 语句。

我已经尽了最大的努力,但没有取得任何进展。

谢谢。

以下是使用 2 个整数和 3 个布尔值创建记录的方法:

(declare-datatypes () ((R5 (mk-R5 (el1 Int) (el2 Int) (el3 Bool) (el4 Bool) (el5 Bool)))))

(declare-const r1 R5)
(declare-const r2 R5)

(assert (not (= r1 r2)))

(check-sat)
(get-model)

Z3 回复:

sat
(model
  (define-fun r2 () R5
    (mk-R5 1 0 false false false))
  (define-fun r1 () R5
    (mk-R5 0 0 false false false))
)

希望这能让您入门。关于量词,它与所有其他量词用法相似;最好提出具体问题以获得更好的答案。