我对Z3很新,所以很抱歉问傻事。
我正在尝试定义一条记录,使其某些字段是函数。我试过这个:
(declare-datatypes(DOM RAN)((PFun(mk-pfun(dom(DOM)Bool)(法律(DOM)RAN)))))
意图是dom和ran是两个字段,其类型是一个函数(从DOM到Bool的函数,以及从DOM到RAN的函数)。我还尝试将函数类型括在括号中:
(declare-datatypes(DOM RAN)((PFun(mk-pfun(dom((DOM)Bool))(法((DOM)RAN)))))))
没有这些工作。
我搜索了教程,但没有这方面的例子。
你能帮助我吗?
提前感谢您的回答。
一切顺利, 全型
答案 0 :(得分:1)
Z3基于一阶逻辑。因此,函数不能是数据类型构造函数或其他函数的参数。 话虽这么说,你可以使用数组“模拟”高阶特征。 您可以将数据类型编写为
(declare-datatypes (DOM RAN) ((PFun (mk-pfun (dom (Array DOM Bool))
(law (Array DOM RAN))))))
让p
成为PFun
,d
为常量DOM
,然后您编写(select (dom p) d)
以获取dom(p)(d)
,{ {1}}获取(select (law p) d)
。