在Z3中声明具有未知大小的矩阵

时间:2017-04-14 02:42:30

标签: z3 z3py

我知道我可以通过单独声明其元素(可能通过列表理解)在z3.Real中声明Z3的矩阵。有没有办法表示未知大小的矩阵?

例如,请考虑以下示例: 在图像过滤中,给定size [X,Y]的图像I和K的过滤器内核size [M,N],图像I和过滤器内核K之间的卷积是I*K。我希望Z3证明(或反驳)存在任何大小的过滤器F1F2,例如I*K == I*F1*F2

问题本身是完全弥补的,可能没有意义。我的想法是,我是否可以要求Z3找到未知大小的矩阵,使矩阵满足某些可以用线性函数表示的属性。谢谢!

2 个答案:

答案 0 :(得分:0)

Z3支持简单的一阶逻辑规范。从某种意义上说,第一个问题是如何在逻辑中表达您感兴趣的属性。 对于有界大小模型,您可以实例化X,Y,M,N大小,并表示适合有限域的反例示查询。如果您想要参数大小,您可以将*的行为表达为三元关系。例如,您可以使用带有两个参数的函数I,K,I_K,并表达I_K(x,y)与I,K中的条目的关系。然后,您将面临诸如证明确实需要归纳的问题。对交互有良好支持的环境,如Lean,PVS,Coq,Isabelle或环境,如Dafny,更适合设置校样。

答案 1 :(得分:0)

Nikolaj的回答似乎触及了头部。我认为Z3(或任何SMT求解器)不会是解决此类问题的最佳工具,因为您希望推断出“未知”尺寸的矩阵。当你有问题的具体实例时,我认为Z3可以非常有效;但不是一般的“forall尺寸”案件。这类索赔通常需要归纳证明,更适合其他工具。

但是,您可能会使用未解释的功能。如果您将矩阵和过滤器表示为未解释的函数,并根据其编码卷积。您可能必须假设NxM的上限(即,N <100,M <100;或类似),并相应地编码,以便任何超出范围的结果产生合适的结果。 (当然,这意味着取决于手头的问题。)

你可能会惊讶于Z3在这个设置下会有多酷,因为我怀疑它会给你带来很好的效果。如果你尝试这种方法,我很想知道你发现了什么。