model-checking - CUDD:ZDD 的量化

标签 model-checking quantifiers binary-decision-diagram cudd

我正在使用 CUDD (https://github.com/ivmai/cudd) 使用 bdd 和 zdd 功能进行模型检查,我想知道如何量化 zdds。
对于 bdd,有 bddExistAbstract 和 bddUnivAbstract 函数(参见 http://web.mit.edu/sage/export/tmp/y/usr/share/doc/polybori/cudd/cuddAllDet.html#Cudd_bddUnivAbstract)。
该手册说,这些函数普遍地和存在地从 bdd 中抽象出给定的变量(以封面形式)。我不太清楚“抽象出来”是什么意思,因此我坚持弄清楚量化如何改变 zdds。
你们能帮忙吗?谢谢。

最佳答案

Python 包 dd 实现到 CUDD 的 Cython 接口(interface),该接口(interface)通过量化扩展了 CUDD 的 ZDD 功能。例如,要在 ZDD 上使用存在量化:

from dd import cudd_zdd

zdd = cudd_zdd.ZDD()  # create a ZDD manager
zdd.declare('x', 'y')  # add variables to the manager
u = zdd.add_expr(r'x /\ y')  # create a BDD `u` for the expression x /\ y
v = zdd.exist(['y'], u)  # quantify over variable y, i.e., compute \E y:  x /\ y
>>> zdd.to_expr(v)  # convert to an expression as string
'x'
ZDD 量化的实现可以在以下位置找到:
https://github.com/tulip-control/dd/blob/24ec9eba335c173e1fe0367a9ac25ec201dee1b5/dd/cudd_zdd.pyx#L1999-L2172
并且出于开发目的也存在许多 Python 级别的实现:
https://github.com/tulip-control/dd/blob/24ec9eba335c173e1fe0367a9ac25ec201dee1b5/dd/cudd_zdd.pyx#L1387-L1544
dd可以从 PyPI 安装与 pip install dd .这将在 Linux 上安装 CUDD 绑定(bind)。在 macOS 上,与 CUDD 的绑定(bind)需要从 dd 的源代码编译。 ,因此 macOS 的安装变为:
pip download dd --no-deps
tar xzf dd-*.tar.gz
cd dd-*/
python setup.py install --fetch --cudd --cudd_zdd
如文件 README.md 中所述.

关于model-checking - CUDD:ZDD 的量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63265943/

相关文章:

python - 从可用数据结构生成二元决策图

binary - CUDD:BDD 的操作

model-checking - 为什么无限循环不会导致使用 Promela 和 Spin 进行模型检查时出错?

regex - *+ 量词究竟有什么作用?

model-checking - 使用 Spin 进行 Promela 建模

prolog - 如何在序言中找到所有普遍事实?

javascript - 为什么惰性量词后跟问号会变得贪婪?

计算加入零抑制二元决策图中的算法

automata - 生成 Promela 模型的自动机图像

model-checking - 如何使用 SPIN 为转换系统建模