Z3 如何使用注释:无模式

Z3 如何使用注释:无模式,z3,Z3,我写道: 为什么会出现错误“无效表达式,意外输入”?为了检查语法错误,我从中复制了,并将:pattern(…)替换为:no pattern。注释:没有模式需要表达式作为参数。 如果通用量化公式F没有用模式注释,那么Z3将试探性地为F选择模式。注释:no pattern指示Z3出现在F中的哪些子表达式不应用作模式。以下是您的示例(也可从以下网址获得): 备注:Z3从未选择方程式(例如,(=ab))作为模式 下面是另一个示例的链接 顺便说一句,注释:pattern接受两种参数:表达式;或表达式列表。

我写道:


为什么会出现错误“
无效表达式,意外输入”
?为了检查语法错误,我从中复制了,并将
:pattern(…)
替换为
:no pattern
。注释
:没有模式需要表达式作为参数。
如果通用量化公式
F
没有用模式注释,那么Z3将试探性地为
F
选择模式。注释
:no pattern
指示Z3出现在
F
中的哪些子表达式不应用作模式。以下是您的示例(也可从以下网址获得):

备注:Z3从未选择方程式(例如,
(=ab)
)作为模式

下面是另一个示例的链接

顺便说一句,注释
:pattern
接受两种参数:表达式;或表达式列表。在Z3指南中,我们有注释:
:pattern((f(gx))
,其中
((f(gx))
是一个长度为1的列表,包含表达式
(f(gx))
。如果我们将
:pattern
替换为
:no pattern
,我们会得到一个错误,因为
((f(gx))
不是表达式。另一方面,
:无模式(f(gx)
是有效的
:无模式
注释


最后,
:pattern
接受表达式列表,因为Z3支持多模式()。

我删除了大部分原始问题,因为我认为我还不了解模式。
(assert (!
    (forall ((A Set) (B Set))
        (= 
            (= A B) 
            (and (subset A B)(subset B A)))
:no-pattern)))
(declare-sort Set)
(declare-fun mysubset (Set Set) Bool)

(assert 
    (forall ((A Set) (B Set))
        (! (= 
            (= A B) 
            (and (mysubset A B) (mysubset B A)))
           :no-pattern (mysubset A B))))

(check-sat)