gpt4 book ai didi

logic - Z3 SMT 求解器中常数的相等性

转载 作者:行者123 更新时间:2023-12-04 05:28:44 25 4
gpt4 key购买 nike

我正在使用 Microsoft 的 Z3 SMT 求解器,并且我正在尝试定义自定义类型的常量。默认情况下,这些常量似乎并不不平等。假设您有以下程序:

(declare-sort S 0)

(declare-const x S)
(declare-const y S)

(assert (= x y))
(check-sat)

这将给出“sat”,因为当然完全有可能两个相同类型的常数相等。由于我正在制作常量必须彼此不同的模型,这意味着我需要添加形式的公理
(assert (not (= x y)))

对于每对相同类型的常量。我想知道是否有某种方法可以做到这一点,以便每个常量在默认情况下都是唯一的。

最佳答案

您可以使用数据类型对许多编程语言中的枚举类型进行编码。在以下示例中,排序 S具有三个元素,它们彼此不同。

(declare-datatypes () ((S a b c)))

这是一个完整的例子: http://rise4fun.com/Z3/ncPc
(declare-datatypes () ((S a b c)))

(echo "a and b are different")
(simplify (= a b))

; x must be equal to a, b or c
(declare-const x S)

; since x != a, then it must be b or c
(assert (not (= x a)))
(check-sat)
(get-model)
; in the next check-sat x must be c
(assert (not (= x b)))
(check-sat)
(get-model)

另一种可能性是使用 distinct .
(assert (distinct a b c d e))

关于logic - Z3 SMT 求解器中常数的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com