我创建了 4 种(任务、角色、用户和运行),最后一个接收 2 个参数,然后我为它们中的每一个声明一个乐趣,包括一个用于 Run ,调用 P 接收 2 个参数以创建 Run 的“实例” . 然后我创建了两个数组,一个包含用户角色“关系”(Privs),另一个包含角色任务“关系”(角色)。我使用这两个数组来断言当查看用户 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 (User,Role 对) 并且在函数内部断言相同但对于 P 中的所有用户及其所有角色。这可以通过将运行排序变量传递给函数来完成吗??用于访问其内部的元素(用户、角色)?