z3 SMT解算器中的不同数组值
我花了一段时间尝试完成一个相当简单的要求: 我声明了一个新的数据类型z3 SMT解算器中的不同数组值,z3,smt,Z3,Smt,我花了一段时间尝试完成一个相当简单的要求: 我声明了一个新的数据类型 (声明数据类型()((A(mk_A(key Int)(var1 Int)(var2 Int ')) 其中,key应与数据库中的主键类似,即,a的每个不同实例应具有不同的key值。 不同实例(函数)的容器如下所示: (声明常量A_实例(数组Int A)) 到目前为止还不错。我试图创建一个断言,这样A_instances中的所有实例都有一个不同的key字段。因此,对于A_实例中的每个索引i(键(选择A_实例i))应该是不同的。但是
(声明数据类型()((A(mk_A(key Int)(var1 Int)(var2 Int '))
其中,key
应与数据库中的主键类似,即,a
的每个不同实例应具有不同的key
值。
不同实例(函数)的容器如下所示:
(声明常量A_实例(数组Int A))
到目前为止还不错。我试图创建一个断言,这样A_instances
中的所有实例都有一个不同的key
字段。因此,对于A_实例中的每个索引i
(键(选择A_实例i))应该是不同的。但是,它返回未知
有人有什么建议吗?一个可能的解决方案是
(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