Z3是否支持量化公式中的变量模式?

Z3是否支持量化公式中的变量模式?,z3,Z3,我想使用纯变量模式来获得使用量化公理编码的某些理论的决策过程。更准确地说,我想强制执行这些公理中的某些变量是用所有相应类别的术语实例化的。这些变量只出现在谓词符号下面,因此创建匹配循环没有危险 例如,考虑下面的部分查询: (declare-sort Loc 0) (declare-sort Map 2) (declare-fun read ((Map Loc Loc) Loc) Loc) (declare-fun Btwn ((Map Loc Loc) Loc Loc Loc) Bool) ..

我想使用纯变量模式来获得使用量化公理编码的某些理论的决策过程。更准确地说,我想强制执行这些公理中的某些变量是用所有相应类别的术语实例化的。这些变量只出现在谓词符号下面,因此创建匹配循环没有危险

例如,考虑下面的部分查询:

(declare-sort Loc 0)
(declare-sort Map 2)
(declare-fun read ((Map Loc Loc) Loc) Loc)
(declare-fun Btwn ((Map Loc Loc) Loc Loc Loc) Bool)
... 
(assert (forall ((?f (Map Loc Loc)) (?x Loc) (?y Loc))
           (or (not (= (read ?f ?x) ?x)) (not (Btwn ?f ?x ?y ?y)) (= ?x ?y))))
在公理中,我想实例化变量
?f
?x
,用于匹配
read?f?x
的所有基本术语,以及变量
?y
与所有排序术语
Loc

如果我在axiom中添加以下多模式:

:pattern ((read ?f ?x) ?y)
然后Z3报告仅变量模式
?y
的错误。如果我在模式中省略
?y
,如下所示:

:pattern ((read ?f ?x))
然后Z3报告了一条警告,指出并非所有变量都出现在模式中。似乎无法抑制这一警告。此外,在本例中,我不确定该模式是否实际生成了预期的实例化。有没有一个解决方案可以提供我正在寻找的实例(没有警告)


请注意,我感兴趣的理论不属于MBQI单独产生决策程序的任何片段(据我所知)。我可以预先对公理进行部分实例化,以获得EPR理论(这就是我目前所做的),但我更希望解算器能为我做到这一点。

基于模式的实例化引擎要求变量在函数符号的范围内。否则,变量可以匹配适当类型的任何基本项,这将无法正常工作,尤其是当实例化创建与变量相同类型的新项时。 在Z3中,您可以指定使用两个谓词的多模式:((read?f?x)(Btwn?f?x?y?y))。您还可以指定在原始问题中没有出现的辅助谓词。
例如,一个谓词(已知?y)。您还必须添加公理来控制希望知道哪些术语。然后可以使用多模式((读取?f?x)(已知?y))。当然,这通常会创建比第一个多模式多得多的实例化。

谢谢,Nikolaj。你的辅助谓词技巧应该符合我的要求。