如何使用列表值作为 Z3py 中的字典索引

How to use list value as the dictionary indices in Z3py

我有一个 python 数组 (Arr),其中包含 j 个整数元素,一个值为 z3 Int 变量的 Z3 列表 (X) 和一个值为 Z3 Bool 变量的 Z3 字典 (D)。

例如:


    X = [ [ x_0_0, x_0_1, …, x_0_j],   
          [ x_1_0, x_1_1, …, x_1_j],   
                          …  
          [ x_i_0, x_i_1, …, x_i_j] ]  
    
    X[0] = Arr      /* Arr is python integer array */
    
    
    D = { (x, i, j): D_x_i_j }  for all i and j, and where x is the value present at X[i][j] location.

X[i1][j]的剩余值由求解器根据D值决定,即True/False,其中1<= i1<=i.

现在这些解决的 X 值是 D 字典的键值。

因此,我想使用这些值作为字典的键索引。

我的问题是如何使用 Z3 列表值作为 Z3 字典的键值或作为另一个 z3 列表的索引?

您可以将列表变成 tupleTuples 是可散列的,因此是有效的字典键。

d = {(x, i, j): D_x_i_j}
X[0] = Arr                # [x, i, j]
key = tuple(X[0])
print(d[key])             # yields D_x_i_j