Z3 函数接收排序,构造函数中有2个参数

Z3 函数接收排序,构造函数中有2个参数,z3,theorem-proving,Z3,Theorem Proving,我已经创建了4个排序任务、角色、用户和运行,最后一个收到2个参数,然后我为每个参数声明了一个fun,包括一个for Run,调用p,它收到2个参数来创建Run的实例。然后我创建了两个数组,一个包含用户角色关系private,另一个包含角色任务关系Roles。我使用这两个数组来断言当查看用户u时,它是否在Privs中有一个角色r,并且当查看角色r时,它是否有一个任务t。到目前为止,我都是在单独的行中这样做的: (declare-sort Task) (declare-sort Role) (dec

我已经创建了4个排序任务、角色、用户和运行,最后一个收到2个参数,然后我为每个参数声明了一个fun,包括一个for Run,调用p,它收到2个参数来创建Run的实例。然后我创建了两个数组,一个包含用户角色关系private,另一个包含角色任务关系Roles。我使用这两个数组来断言当查看用户u时,它是否在Privs中有一个角色r,并且当查看角色r时,它是否有一个任务t。到目前为止,我都是在单独的行中这样做的:

(declare-sort Task)
(declare-sort Role)
(declare-sort User)
(declare-sort Run 2)
(define-sort P (User Role) (Run User Role))
(declare-fun t () Task)
(declare-fun r () Role)
(declare-fun u () User)
(declare-const Privs (Array User Role))
(declare-const Roles (Array Role Task))


(assert (= (select Privs u) r))
(assert (= (select Roles r) t))

但是现在我想做一个有趣的事情,它接收一个Run用户,角色对,函数内部断言相同,但是对于p中的所有用户及其所有角色。这可以通过向函数传递Run sort变量来实现吗??。。用于访问其元素用户,角色内

您对参数化类型的使用似乎有些过分:您只使用对用户和角色实例化排序的Run。那么,为什么必须使Run参数化呢。 参数化排序和用例的定义在中有详细描述,Z3实现了这种通用格式,因此关于您的问题,Z3没有什么特别的