我知道我可以通过单独声明其元素(可能通过列表理解)在z3.Real
中声明Z3
的矩阵。有没有办法表示未知大小的矩阵?
例如,请考虑以下示例:
在图像过滤中,给定size [X,Y]
的图像I和K
的过滤器内核size [M,N]
,图像I
和过滤器内核K
之间的卷积是I*K
。我希望Z3
证明(或反驳)存在任何大小的过滤器F1
和F2
,例如I*K == I*F1*F2
。
问题本身是完全弥补的,可能没有意义。我的想法是,我是否可以要求Z3
找到未知大小的矩阵,使矩阵满足某些可以用线性函数表示的属性。谢谢!
答案 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在这个设置下会有多酷,因为我怀疑它会给你带来很好的效果。如果你尝试这种方法,我很想知道你发现了什么。