我正在尝试在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列:预期使用可变符号”。据我所知,我完全遵循指定的语法。我该如何解决?
答案 0 :(得分:1)
我认为您没有做错任何事情!看来这是z3错误,您应该在https://github.com/Z3Prover/z3/issues/
报告 assert
之前的(check-sat)
语句存在一个小问题。它应显示为:
(assert (= (foo a) 1))
,即1
周围没有括号。但是您在语法上正确使用match
命令,应将其报告为z3错误。