z3 - z3 SMT 求解器中的不同数组值

标签 z3 smt

我尝试了一段时间来完成一个相当简单的要求:
我声明了一个新的数据类型
(declare-datatypes () ((A (mk_A (key Int) (var1 Int) (var2 Int)))))
哪里key应该充当数据库中的主键,即 A 的每个不同实例应该有一个不同的 key值(value)。
不同实例(函数)的容器如下所示:
(declare-const A_instances (Array Int A))
到现在为止还挺好。我试图创建一个断言,使得 A_instances 中的所有实例有一个不一样的key field 。因此,对于每个索引 i在 A_instances (key (select A_instances i))应该是有区别的。但是它返回 unknown .

有人有什么建议吗?

最佳答案

一种可能的解决方案是

(declare-datatypes () ((A (mk_A (key Int) (var1 Int) (var2 Int)))))
(declare-const A_instances (Array Int A))
(declare-fun j () Int)
(assert (forall ((i Int))  (implies (distinct i j) 
                           (distinct (key (select A_instances i))  
                                     (key (select A_instances j)))        )   ))
(check-sat)

和相应的输出是
sat

关于z3 - z3 SMT 求解器中的不同数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25564642/

相关文章:

java - 使用 "for all"与未解释的排序 JAVA API

z3 - 如何安装iZ3?

Z3 非线性算术性能

z3 - 了解生产证明、字段名称和中间检查对性能的影响

z3 - 避免在 Z3 中使用量词

z3 - z3 是否支持其输入约束的有理算术?

z3 - EPR片段中prenex量化的顺序是否重要?

z3 - Z3 中的后果

Z3:表达线性代数属性

c++ - 在 z3 中存储 implies() 函数的参数