用 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))
)
希望这能让您入门。关于量词,它与所有其他量词用法相似;最好提出具体问题以获得更好的答案。
我仔细查看了文档和指南,并亲自尝试了一些东西。然而,我的问题的解决方案却让我望而却步。
这是教程中关于记录的内容,但我不清楚如何让它满足我的需要:
(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))
)
希望这能让您入门。关于量词,它与所有其他量词用法相似;最好提出具体问题以获得更好的答案。