证明与计算(3): 二分决策图(Binary Decision Diagram, BDD)

本文介绍了布尔代数的历史和基本概念,以及布尔函数和布尔表达式的定义与范式。重点讲解了二分决策图(BDD)的概念,通过BDD展示了如何表示和简化布尔表达式,强调了BDD在消除冗余和构建布尔函数的独特性质。BDD的构造、精简算法和其在动态编程、组合电路验证、形式验证等领域的应用也得到了讨论。
摘要由CSDN通过智能技术生成

0x01 布尔代数(Boolean algebra)

大名鼎鼎鼎的stephen wolfram在2015年的时候写了一篇介绍George Boole的文章:George Boole: A 200-Year View

怎样用数学公理重新表达经典逻辑?George Boole在19世纪的时候开始思考这件事,在他的书《The Mathematical Analysis of Logic》里面George Boole首次展示了使用符号加运算符的方式表示逻辑,例如“And”是“xy”,“NOT”是“1-x”,“OR”是“x+y-2xy”。但是x^2是什么呢?命题x加上命题x还是命题x,George Boole又规定了x^2=x。在George Boole的另一本书《An Investigation of the Laws of Thought》里面,Gerge Boole认为自己在发明一个“science of intellectual powers”,区别于牛顿发明微积分是“physical science”。

从George Boole开始,在经过Frege, Peano, Hilbert, Whitehead, Russell, Gödel 和 Turing等一系列数学家/计算机科学家的工作后,直到克劳德·香农( Claude Shannon )才开始让布尔代数实用。

“这个过程是必然会发生的么?”stephen wolfram思考到。布尔代数的历史显示了一个从复杂问题中慢慢产生的简单的形式化思想,偶然间就被大规模使用了,流行了起来。

Most often what happens is that at some moment the ideas become relevant to technology, and quickly then go from curiosities to mainstream.

stephen wolfram的书《A New Kind of Science》收集了很多这种“simple formal idea”,其中有些已经流行,有很多还没有,其中会有下一个技术奇点么?

0x02 布尔函数(Boolean function)

如果一个函数F(x1,x2,...,xn)的输入参数xi取值于{0,1}集合,并且函数的输出也是布尔值{0,1},那么这个函数是一个布尔函数(Boolean function, [5])。布尔函数在密码学的对称加密算法中有重要的作用,特别是在对称加密算法的置换-代换算法中,设计置换盒子的过程中。

定义3.1:布尔函数的形式化定义


  • F:\(\{0,1\}^k->\{0,1\}\)

如果一个布尔函数有k个参数个数,称F(x1,x2,...,xk)为k元布尔函数。英语专有名词是k-ary,例如常见的有:

  • Nulary:F()=0,也就是常量布尔函数
  • Unary: F(x)=x
  • Binary: F(x,y)=x&&y
  • Ternary: F(x,y,z)= x?y:z
  • Quaternary
  • ...
  • k-ary: F(x1,x2,...,xn) = 2*\(\prod_{i=1}^{k}x_i\)
  • Variable arity: 可变(数量)参数

这虽然不是一个很复杂的事情,但是知道这些专有名词有助于在代码中的命名。如果不仅仅关心名字,那么考虑一个问题:

k-ary Boolan function有多少个具体的不同函数?

那么,首先需要理解什么是“不同”的布尔函数。这涉及到数理逻辑的一些基本概念,我们采用步步陈述的方式展现数理逻辑中下面的一组关系。

  • 基本定义:
    • 个体词:就是表示对象
    • 命题(Propositional):是指判断一件事的陈述句,返回true/false。命题包含了“原命题”,“逆命题”,“否命题”,“逆否命题”等等。
    • 谓词(Predicat):表示个体词之间的关系
  • 关键操作:
    • 断言(Logical assertion):简单说就是把命题函数化。
    • 变量(Variable):简单说就是变量名
    • 量化(Quantifiers):使用全称量词\(\forall\)和存在量词\(\exists\)来量化。
  • 从而分类:
    • 谓词逻辑(Predicate logic):谓词逻辑中原子逻辑被切分成个体词和谓词。
    • 命题逻辑(Propositional logic):只有陈述性命题,不能使用断言、量化,也叫零阶逻辑(Zeroth order logic, ZOL)
    • 一阶逻辑(First Order Logic, FOL):可以使用断言、可以对个体词量化。
    • 高阶逻辑(High Order Logic, HOL):可以对命题和谓词也量化。

我们关心的是命题逻辑,可见它是处于零阶逻辑这个位置。命题逻辑使用命题公式(Propositional formula, [5.a])表达,命题公式由原子命题以及命题连接词组合而成。我们看下有哪些连接词:

  • 一元否定连接词(unary negation connective)
  • 经典二元连接词:与(And)、或(Or)、蕴含(->),等价(<->)
  • 其他二元连接词:NAND, NOR, XOR
  • 三元连接词:IF ... THEN...ELSE..., C?A:B
  • 常量{T,F}, {1,0}

考虑布尔公式的完备性(Completeness),下面的连接词都可以完备的表示命题公式:

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值