【发布时间】:2014-06-11 18:50:55
【问题描述】:
我是使用 Z3 的新手,经过大量教程阅读了几乎所有相关问题后,我仍然对如何“编码”Z3 的问题有些疑问。有人可以帮帮我吗?.. 我想做的是用 Z3 对可满足性问题进行编码。 我有两个表示角色(角色-任务关系)和特权(用户-角色关系)的数组。我还有一个数据类型,它是一个用户角色对,表示任务的“属性”。
(declare-datatypes (User Role) ((Pair (mk-pair (first User) (second Role)))))
(declare-const Privs (Array User Role))
(declare-const Roles (Array Role (Pair User Role)))
然后我试图断言,对于任何任务(对于所有),在 Privs 中都有一个元素包含用户角色关系,并且在 Roles 和元素中包含角色-“任务”(用户角色对),例如这个。
(assert (forall ((l (Pair User Role)))
(and (= (select Privs (first oneTask)) (second oneTask))
(= (select Roles (second oneTask)) oneTask))))
直到那里我得到一个星期六的答案和一个模型(因为我使用的是未解释的排序,所以没有解释)。
但这是我的怀疑开始的地方......
1) 下一步是询问当有两个带有任务列表(用户角色对)的工作流时,我是否可以为列表中的所有任务声明相同的内容。我尝试创建一个新的 const,它是这样的任务列表:
(declare-const Workflow (List (Pair User Role)))
在 Z3 中是否有任何方法可以对列表的所有元素(在我的情况下为工作流程)指定断言??
2) 一个人如何指定限制,例如对用户或分配的集合,以及如何在执行时间上表达限制,例如.. 一组任务的执行不能超过 n 秒? ..
3) 有什么方法可以在使用解释型任务时获得解释型模型,让我们说类似...当 PRIVS = (U1, R1) , (U2,R2) and Role= (R1,T1) and wf =T1(U1,R1)
有人可以帮我从Z3的角度解决问题吗?????请!!
【问题讨论】:
-
我只需要一个关于如何映射问题并表达它的想法。也许类似的东西和例子会对我有很大帮助。!
标签: z3