Z3模式匹配语法

时间:2019-01-28 05:51:07

标签: syntax pattern-matching z3 smt

我正在尝试在z3中使用模式匹配来处理代数数据类型。我完全遵循第27页SMTLib standard中给出的语法,但是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列:预期使用可变符号”。据我所知,我完全遵循指定的语法。我该如何解决?

1 个答案:

答案 0 :(得分:1)

我认为您没有做错任何事情!看来这是z3错误,您应该在https://github.com/Z3Prover/z3/issues/

报告

assert之前的(check-sat)语句存在一个小问题。它应显示为:

(assert (= (foo a) 1))

,即1周围没有括号。但是您在语法上正确使用match命令,应将其报告为z3错误。