python - 如何在 Z3py 中定义二维数组变量
问题描述
我想在 Z3py 中定义一个二维布尔数组。实际上,我想使用其他整数变量访问数组索引,例如 A[x][3],其中 x 是一个整数变量,其值由 SMT 求解器在运行时决定。
如果我将二维数组定义如下: A = [ [ Bool("a_%s_%s" % (i, j)) for j in range(5) ] for i in range(5) ] 那么,我在添加诸如 (A[x][3]==True) 之类的约束时得到“TypeError:对象不能被解释为索引”。
我检查了对于定义为 A = Array('A',IntSort(),IntSort()) 的 z3 数组,我可以使用其他整数变量(例如 A[x])访问数组索引。现在,我希望二维数组也一样。
请在这方面帮助我。提前致谢。
解决方案
您可以像这样对嵌套数组进行建模:
A = Array('A', IntSort(), ArraySort(IntSort(), BoolSort()))
也就是说,第一个索引是一个整数,它索引到另一个从整数到布尔值的数组。
推荐阅读
- pandas - 熊猫在行参加条件下连接部分索引
- php - 接收外部推送的 Web 服务
- tensorflow - 使用seq2seq模型(如transformer)进行命名实体识别?
- c# - 具有可为空属性的多个条件的 EF Core 联接表
- javascript - 如何使用自己的证书为 webpack-dev-server 启用 https?
- python-3.x - TypeError:“位置”类型的对象不是 JSON 可序列化的
- python - 按元素过滤列表数据帧
- ios - 如何将代码从 swift 3 迁移到 swift 4 或更高版本?
- css - font-face css自定义字体的问题
- android - 将java类连接到包含的xml android