首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Z3中得到布尔公式中的原子

在Z3中得到布尔公式中的原子
EN

Stack Overflow用户
提问于 2022-10-19 16:53:15
回答 1查看 30关注 0票数 0

我想知道是否有一种方法可以得到布尔公式的原子:

代码语言:javascript
复制
a = Bool('a')
b = Bool('b')
c = Bool('C')
d = Bool('D')
e = Bool('E')
f = Bool('F')

formula = And(Or(a, b), Or(c, d), Or(e, f))

我想知道这样的事情是否存在:

代码语言:javascript
复制
formula.get_atoms() or get_atoms(formula)

给我以下期望的输出:

代码语言:javascript
复制
{A, B, C, D, E, F}

pySMT中,get_atoms()存在提供原子。然而,出于某种原因,我需要在Z3上进行实验。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-19 18:40:20

您可以遍历children() (文档)的层次结构:

代码语言:javascript
复制
def atoms(expr):
    a = set()
    if not str(expr) in {'True', 'False'}:
        c = expr.children()
        if len(c):
            for child in c:
                a = a.union(atoms(child))  
        else:
            a = {expr}
    return a    

a = Bool('a')
b = Bool('b')
c = Bool('C')
d = Bool('D')
e = Bool('E')
f = Bool('F')

formula = And(Or(a, b), Or(c, d), Or(e, f))

print(atoms(formula))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74129129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档