如何声明一个记录,使其中一个字段是一个函数

时间:2011-09-19 13:33:24

标签: z3

我对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)))))))

没有这些工作。

我搜索了教程,但没有这方面的例子。

你能帮助我吗?

提前感谢您的回答。

一切顺利,   全型

1 个答案:

答案 0 :(得分:1)

Z3基于一阶逻辑。因此,函数不能是数据类型构造函数或其他函数的参数。 话虽这么说,你可以使用数组“模拟”高阶特征。 您可以将数据类型编写为

  (declare-datatypes (DOM RAN) ((PFun (mk-pfun (dom (Array DOM Bool)) 
                                               (law (Array DOM RAN))))))

p成为PFund为常量DOM,然后您编写(select (dom p) d)以获取dom(p)(d),{ {1}}获取(select (law p) d)