我试了一段时间来完成一个相当简单的要求: 我声明了一个新的数据类型
(declare-datatypes () ((A (mk_A (key Int) (var1 Int) (var2 Int)))))
其中key
应该像数据库中的主键一样,即A
的每个不同实例应具有不同的key
值。
不同实例(函数)的容器如下所示:
(declare-const A_instances (Array Int A))
到目前为止一切顺利。我尝试创建一个断言,以便A_instances
中的所有实例都有一个不同的key
字段。因此,对于A_instances i
中的每个索引(key (select A_instances i))
应该是不同的。但是它返回unknown
。
有人有什么建议吗?
答案 0 :(得分:2)
一种可能的解决方案是
(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