Z3 如何声明记录,使其中一个字段是函数
我对Z3很陌生,很抱歉问了一些愚蠢的问题 我试图定义一个记录,使它的一些字段是函数。我试过这个: (声明数据类型(domran)((PFun(mkpfun)(DOM(DOM)Bool)(law(DOM)RAN‘‘)’) 其意图是dom和ran是两个类型为函数的字段(dom是从dom到Bool的函数,而law是从dom到ran的函数)。我还尝试将函数类型括在括号中: (declaredatatypes(domran)((PFun(mkpfun)(DOM((DOM)Bool))(law((DOM)RAN()()))) 这些都不行 我搜索了教程,但没有这方面的例子 你能帮我吗 提前谢谢你的回答 祝你一切顺利,Z3 如何声明记录,使其中一个字段是函数,z3,Z3,我对Z3很陌生,很抱歉问了一些愚蠢的问题 我试图定义一个记录,使它的一些字段是函数。我试过这个: (声明数据类型(domran)((PFun(mkpfun)(DOM(DOM)Bool)(law(DOM)RAN‘‘)’) 其意图是dom和ran是两个类型为函数的字段(dom是从dom到Bool的函数,而law是从dom到ran的函数)。我还尝试将函数类型括在括号中: (declaredatatypes(domran)((PFun(mkpfun)(DOM((DOM)Bool))(law((DOM)R
Maxi基于一阶逻辑。因此,函数不能是数据类型构造函数或其他函数的参数。 也就是说,您可以使用数组“模拟”高阶功能。 您可以将数据类型写为
(declare-datatypes (DOM RAN) ((PFun (mk-pfun (dom (Array DOM Bool))
(law (Array DOM RAN))))))
让p
成为PFun
和d
一个排序常数DOM
,然后您编写(选择(domp)d)
以获得DOM(p)(d)
(选择(法则p)d)以获得法则(p)(d)