微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Z3 python 中构建元组列表

如何解决在 Z3 python 中构建元组列表

我试图在 python 中使用 Z3 求解器来创建一个谓词 path(list),如果 list 是给定图 G 上的有效路径,它返回 true

我想使用 Z3 来构建一个元组列表来表示图中存在的所有边,这是我的第一次尝试:

from z3 import *

IntPair = TupleSort("IntPair",[IntSort(),IntSort()])

List = Datatype('List')
List.declare('list',('head',IntPair),('tail',List))
List.declare('empty')
List = List.create()

但是我收到一个错误

Z3Exception:预期访问者的有效列表。访问器是一对形式 (String,Datatype|Sort)

从这一行:

List.declare('list',List))

我不确定哪个访问器违反并导致此错误。如果我们考虑一个整数列表:

List.declare('list',IntSort()),List))

上面的代码运行不会出错。

谢谢。

解决方法

当您调用 TupleSort 时,它返回一个三元组。排序、构造函数和访问器。您需要进行模式匹配并给每个单独的名称。也就是说,替换您的行:

IntPair = TupleSort("IntPair",[IntSort(),IntSort()])

与:

IntPair,mkIntPair,(first,second) = TupleSort("IntPair",IntSort()])

现在 IntPair 是您想要的排序的名称;程序的其余部分将不会出错。

随着您进一步开发程序,您需要使用 mkIntPairfirstsecond 来访问和构建列表中的这些对。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。