Z3 模式匹配语法

Z3 pattern matching syntax

我正在尝试使用 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)

它给我错误 "line 4 column 7: variable symbol expected"。据我所知,我完全遵循指定的语法。我该如何解决这个问题?

我不认为你做错了什么!看起来这是一个 z3 错误,您应该在 https://github.com/Z3Prover/z3/issues/

报告

您在 (check-sat) 之前的 assert 声明有一个小问题。它应该是:

(assert (= (foo a) 1))

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