Python建立数学推理引擎TLW(二)推理都有用到哪些逻辑
逻辑关系表达式可以认为是型为: $左侧 逻辑符号 $右侧 = 返回值
的表达式。
其中左侧
、右侧
的取值可能为: 真(True)
、 假(False)
左右侧中间的逻辑符号
为: 且(AND)
, 或(OR)
, 异或(XOR)
等等
这里暂时不讨论
取反(NOT)
, 另外这些逻辑符号
最少只要有两个就能构成完备的逻辑,可以组合形成别的逻辑。
常用逻辑
上面列举的三种: AND, OR, XOR是最常用的逻辑符号,但显然左侧
、右侧
、取值
对 真
假
所产生的所有真值表不会只有这三种连接符号。先思考AND, OR, NOT的本质含义,再看可能的逻辑操作符号都有那些(根据排列组合可以计算出来应该总共16个),然后根据字面含义对他们简单命名(各种逻辑书上的名字日常中基本很少见到,诸如: 同或
, 与非
, 或非
等等)。
且的解释: 左右两侧都为真才为真,否则为假。
或的解释: 左右两侧全为假则为假,否则为真。
异或解释: 相同为真,相异为假。
与数学推理的关系
异或
就是左右两侧要么全都成立,有一方不成立则为假。类似数学推理过程中的当且仅当
。
数学推理中最常用到的如果...那么
表述的真值表如下:
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | False |
False | True | ? |
False | False | ? |
可以看出, 左侧条件成立时,右侧推论也成立,整个逻辑表达式为真;左侧条件成立,右侧推论不成立时,整个逻辑表达式为假。当左侧条件不成立时,也就是如果...
没有成立,后面的那么...
逻辑取值就无关紧要了。
除了当且仅当
, 如果那么
还有其他的逻辑吗? 下面尝试穷举这种形式的逻辑下所有的真值组合。
所有可能的真值表
可以得知,左侧,右侧对于真、假一共可以有4种取值。从真假中任取4值(可以认为就是进行了某种逻辑操作),会产生的组合如下:
1 . 全真
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | True |
2 . 有真即真(或)
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
3 . 同真异左
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | True |
False | True | False |
False | False | True |
4 . 取左
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | True |
False | True | False |
False | False | False |
5 . 同真异右
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | False |
False | True | True |
False | False | True |
6 . 取右
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | False |
False | True | True |
False | False | False |
7 . 同真异假(异或)
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | True |
8 . 有假即假(且)
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
9 . 有假即真
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | True |
False | True | True |
False | False | True |
10 . 同假异真
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | True |
False | True | True |
False | False | False |
11 . 反右
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | True |
False | True | False |
False | False | True |
12 . 同假异左
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | True |
False | True | False |
False | False | False |
13 . 反左
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | False |
False | True | True |
False | False | True |
14 . 同假异右
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | False |
False | True | True |
False | False | False |
15 . 有真即假
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | False |
False | True | False |
False | False | True |
16 . 全假
左侧 | 右侧 | 返回值 |
---|---|---|
True | True | False |
True | False | False |
False | True | False |
False | False | False |
总结规律
总共16种可能,可大致分如下几类:
- 和左侧,右侧取值无关的逻辑取值:
- 全真
- 全假
- 只和左侧、右侧的单侧取值相关的逻辑取值:
- 取左
- 取右
- 反左
- 反右
- 和左侧、右侧双侧取值相关的逻辑取值:
- 有真即真(或)
- 有真即假(且)
- 有假即假
- 有假即真
- 只和左侧、右侧取值是否相同有关的逻辑取值:
- 同真异假(异或)
- 同假异真
- 和左侧、右侧取值本身以及取值是否相同有关的逻辑取值:
- 同真异左
- 同真异右
- 同假异左
- 同假异右