Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Z3能否处理包含由declare sort/define sort引入的排序的数据类型?_Z3 - Fatal编程技术网

Z3能否处理包含由declare sort/define sort引入的排序的数据类型?

Z3能否处理包含由declare sort/define sort引入的排序的数据类型?,z3,Z3,我试图定义一个数据类型,它包含由declare sort或define sort引入的排序。 但以下尝试会导致错误 (declare-sort A) (define-sort B () Int) (declare-datatypes ((listA (nilA) (consA (hdA A) (tlA listA))))) ;=> unknown sort 'A' (declare-datatypes ((listB (nilB) (consB (hdB B) (tlB listB))))

我试图定义一个数据类型,它包含由declare sort或define sort引入的排序。 但以下尝试会导致错误

(declare-sort A)
(define-sort B () Int)
(declare-datatypes ((listA (nilA) (consA (hdA A) (tlA listA))))) ;=> unknown sort 'A'
(declare-datatypes ((listB (nilB) (consB (hdB B) (tlB listB))))) ;=> unknown sort 'B'
有办法吗


提前谢谢。

是的,可以。顺便说一句,看起来你使用的是旧版本的Z3。 你应该试试最新的版本。 Z3.x支持参数化类型。因此,声明数据类型的语法发生了一些变化。 现在,你必须写:

(declare-datatypes () ((listA (nilA) (consA (hdA A) (tlA listA)))))
在新语法中,可以指定类型参数。由于listA不是参数化的,所以您只提供了类型参数的空列表
()
。 有关Z3中数据类型的更多信息,请参阅

使用参数化类型,还可以将
listA
listB
编码为:

(declare-datatypes (T) ((list (nil) (cons (hd T) (tl list))))) 
(define-sort listA () (list A))
(define-sort listB () (list B))

非常感谢你!在上一篇文章中,我将Z3.2与*.smtc文件一起使用。现在我用新语法尝试了*.smt2文件,效果很好。