我正在使用 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)))
对于每一对相同类型的常数。我想知道是否有某种方法可以做到这一点,以便默认情况下每个排序常量都是唯一的。