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 错误报告。
我正在尝试使用 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 错误报告。