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),下面的连接词都可以完备的表示命题公式:
- {AND, NOT} (see, Stephen