Syntax Z3模式匹配语法

Syntax Z3模式匹配语法,syntax,pattern-matching,z3,smt,Syntax,Pattern Matching,Z3,Smt,我试图在z3中使用模式匹配来处理代数数据类型。我完全按照第27页的语法,但是z3给了我一个语法错误。例如,在以下程序中: (declare-datatype Dyn ((a) (b))) (define-fun foo ((x Dyn)) Int ( match x ( (a 1) (b 2) ) )) (assert (= (foo a) (1))) (check-sat) 它给出了错误“第4行第7列:预期的变量符号”。据我所知,我完全遵循指定的语法。我该如何解决这个

我试图在z3中使用模式匹配来处理代数数据类型。我完全按照第27页的语法,但是z3给了我一个语法错误。例如,在以下程序中:

(declare-datatype Dyn ((a) (b)))
(define-fun foo ((x Dyn)) Int (
  match x (
    (a 1)
    (b 2)
  )
))
(assert (= (foo a) (1)))
(check-sat)

它给出了错误“第4行第7列:预期的变量符号”。据我所知,我完全遵循指定的语法。我该如何解决这个问题?

我不认为你做错了什么!看起来这是一个z3错误,您应该在

就在
(检查sat)
之前,您的
assert
语句有一个小问题。应改为:

(assert (= (foo a) 1))

i、 例如,
1
周围没有任何括号。但是您使用的
match
命令在语法上是正确的,应该报告为z3错误。

从2018年2月3日开始,从github源代码构建z3,该程序可以接受。看起来他们修复了这个错误!伟大的我在他们的github上打开了一个关于这个的问题,他们关闭了它,所以它确实被修复了,这很好!