前言

上一节你发明了“继电器”,解决了有线电报远距离传输和电报持久化记录的问题,并因此立下军功升任军事科技顾问。通过对继电器的深入研究,发现了继电器和逻辑之间紧密的联系。但遗憾的是你的实践经验暂无理论依据,无法研究更加复杂的电路。幸好,你发现了一本逻辑学著作《逻辑的数学分析》,开始按图索骥。最终,发明了“键盘”,极大提升了电报发送消息的效率。

亚里士多德与三段论

逻辑起源于哲学,本质是为了分辨“真”与“假”。柏拉图进一步发扬了苏格拉底“明确概念”的方法,并首次明确提出了“命题”的定义:

一个前提(命题)就是对一个事物的肯定或否定什么的句子。

他的徒弟亚里士多德系统整理了他的观点,提出了“直言三段论”。三段论是逻辑上最常用的一种推理方式,包括大前提、小前提和结论。尽管意识不到,但人类每天日常生活、学习、研究时脑子都在使用三段论。

举个例子:假设你遇到了一个从来没见过的人,你会开口与他说话,你为什么会和他说话呢? 因为你已经有了结论:这个没见过的人会说话。

这个结论是怎么来的呢?

  • 大前提:人都会说话。
  • 小前提:这个没见过的陌生人是人。
  • 结论:所以这个陌生人会说话。

演绎法核心思维方式-三段论

莱布尼兹与通用语言

莱布尼茨,1646年出生于德国官宦世家,精通哲学/数学,是历史上少见的通才,被誉为十七世纪的亚里士多德。

莱布尼兹深受数学思想启发,试图建立“人类思想的字母表”。他觉得人类需要一种普遍的、恰当的符号,普世的所有问题和思想都可以归结为这些符号,然后用一套计算方法来代替人类的思考和推理过程。

而且,他希望人类能够发明这样一种机器,能够自动地代替大脑的逻辑思考过程,不管谁和谁有什么样的问题,发生了什么样的争端,只要把相关的前提条件往这台机器里一输,就能通过“计算一下”的方式,一劳永逸地解决所有问题。——引用《穿越》

精炼我们的推理的唯一方式是使它们同数学一样切实,这样我们能一眼就找出我们的错误,并且在人们有争议的时候,我们可以简单的说,让我们计算“calculemus”,而无须进一步的忙乱,就能看出谁是正确的。 ——《发现的艺术》1685, W 51

这种思想被称为“通用语言”,它本质是一种理性工具,更重要的价值在于表明概念之间的逻辑关系。

他的逻辑原理和哲学观点可被归为两点:

  • 所有观念由不可再分的简单观念组合而成;
  • 复杂的观念可由这些简单观念“计算”得出;

尽管他没有建立“通用语言”,但他阐明了“集合”的概念,为后人统一数理逻辑奠定了基础。

所谓集合,用中学课本上的话说就是——把一些单独的物体合起来看成一个整体,就形成了集合。

布尔与数理逻辑

乔治·布尔(1815-1864)是英国数学家,逻辑学家,逻辑代数的先驱,也是现代计算机技术的奠基人之一。他出身于英国农村,家境贫寒。父亲是一个有理想的修鞋匠,特别重视教育。~~晚上,父亲会和乔治一起研究数学,用望远镜一起观察星星,发掘布尔的的聪明才智。~~而布尔也是少年天才,掌握4门外语,14岁就可以翻译希腊诗歌。

乔治·布尔

他自学成为Cork皇后学院的数学教授,用了近十年时间写出了划时代的学术专著《逻辑的数学分析》和《思维规律研究》。~~秉承莱布尼茨的逻辑数学化思想,把代数的概念和方法应用于传统三段论的改造,从而得出一个既是新的逻辑,也是新的代数的系统,即逻辑代数,建立了数理逻辑发展史上第一个比较成熟的逻辑演算。~~布尔的工作主要是对逻辑进行数学化,并成功地创立一门新的学科:逻辑代数(布尔代数)。这是删除线

在布尔逻辑中,逻辑学中的概念和命题都可以通过字母和符号表达,其中类或集合用小写字母表示,个体元素用大写字母表示。他用[1]表示『万有类』,用[0]表示『空类』或『零类』,用[xy]或[x✖y]表示[x,y]中共有元素的集合,用[x+y]表示[x,y]中所有元素的集合,用[1-x]或者[x']表示[x]的『补集』,用[x-y]表示由不是[y]的那些[x]组成的类,用[xy=x]表示[x]包含在[y]中。等号表示两个类的同一性。

如果[x]和[y]是命题,那么[xy]就是[x]和[y]的同时肯定,而[x+y]就是[x]或[y]或两者的肯定。[x=1]就意味着命题[x]是真的,而[x=0]就意味着命题[x]是假的,[1-x]表示[x]的否定。

我们上文的三段论可以表示为:

  • 大前提:人都会说话。

    • m代表:人的集合
    • p代表:所有会说话的东西
    • =》mXp=m (1)
  • 小前提:这个没见过的陌生人是人。

    • S代表:这个陌生人
    • =》SXm=S (2)
  • 推导过程:

    • 将(1)代入(2):SXmXp=S (3)
    • 将(2)带入(3):SXp=S (4)
    • 结论:所以这个陌生人会说话。

可以看出,用布尔代数解决逻辑问题还有一个显著的好处,那就是同一个证明过程可以用来解决不同的、但本质上属于同一种类型的逻辑问题。

此外,布尔逻辑有如下的性质:

逻辑函数的化简

  • xy=yx //并集交换律
  • xx=x
  • x+y=y+x //交集交换律
  • x(u+v)=xu+xv //结合律
  • x(1-x)=0 //矛盾律
  • x+(1-x)=1
  • 1x=x
  • 0x=0

遗憾的是,这位无私的教授、天才的数学家,因冒雨上课,感染肺炎而死,终年49岁。

香农与电路

学完布尔的逻辑代数后,我们会发现布尔代数和电路存在某种关联。回顾下《102继电器——不只放大信号这么简单!》中进行的电学实验,我们总结了如下规律(列:对应的开关电路):

布尔代数和电路图

可以发现,布尔逻辑系统和电路通断之间一一对应的关系。在布尔代数里,X代表一个命题,X = 0表示命题为假;X = 1表示命题为真。如果用X代表一个由继电器和普通开关组成的电路,那么,X = 0就表示开关合上;X = 1表示开关打开。

图5.1 命题演算和现实的开关组合具有完美的一致性

这不就是我们一直在寻觅的,设计更加复杂电路的理论依据吗?

其实,早在1938年香农就在自己的硕士论文《继电器与开关电路的符号分析》中,把逻辑代数的思想运用到了电子电路的设计上。把逻辑和电路这两个貌似毫不相干的东西,结合成了一对不同寻常的组合,擦出了巧妙的火花。这篇文章也被誉为上个世纪最重要的硕士论文。

它系统化地阐述了布尔的逻辑系统和电路通断之间的关系,不管由开关组成的电路有多复杂,利用布尔代数都可以很好地对其进行解释。没有布尔代数之前,对于开关非常多的复杂电路,想知道闭合或者打开某个开关会对整个电路有什么影响,非常麻烦。幸好现在有了布尔代数,使用它会给我们的工作带来极大的方便。

图5.2 布尔代数可以用来解释复杂的开关电路

在这个电路中,开关A和B串联,具有逻辑乘的关系,即A·B或AB;同时,AB和C又是并联的,属于逻辑加的关系,因此整个电路等效的逻辑表达式为:

AB + C

假如该电路所有的开关都断开,整个电路还是连通的吗?这只需要“计算”一下就行。

AB+C = 0·0+0 = 0

最后的结果“0”表明整个电路是断开的。

此外,我们还可以用“穷举法”将A/B/C三个开关和电路AB+C的状态排列组合,形成下列表格(真值表):

表5.4 三个开关的状态与电路通断之间的关系

利用真值表,只需查表,就能得出所有开关都断开时,电路的状态为“0”。

如果我们想要设计一款电路,它有特定的输入和输出,即已知某个电路的真值表,是否可以逆推电路的组成呢?

目前有两种方法:

  • 第一种方法:以真值表内输出端“1”为准

    • 第一步:
      • 从真值表内找输出端为“1”的各行,把每行的输入变量写成乘积形式
      • 遇到“0”的输入变量上加非号
    • 第二步:把各乘积项相加,即得逻辑函数的表达式
    • 例如上表可表示为:A’B’C+A’BC+AB’C+ABC'+ABC=AB+C
  • 第二种:利用multisim对逻辑函数进行化简与转换(软件)

multisim

键盘和解码器

既然可以根据真值表推断电路的设计,那么是否可以假设有如下一个组件:输入端有26个开关,分别代表26个字母,输出端为4个灯泡,当按下任意一个字母(开关)时,用灯泡的亮灭表示该字母莫斯编码,这样不就是“键盘”了吗?

把我们熟悉的符号或者数字转换成一种代码形式的电路,称为编码器.

说干就干,但不能一口气吃成胖子。我们先从简单的开始,先做一个4-2的编码器,它的真值表如图所示:

4-2真值表

根据真值表求出其逻辑表达式,并画出逻辑电路:

4-2电路图

同理,也可以制作16-4编码器,输入为16个按键,取莫斯密码最后一列的字母,输出为4个灯泡。当按下对应字母开关时,4个灯泡对应亮或灭,然后就可以对照密码表将其翻译为字母。按照该方式发送电报,只需一次开关,即可代替原来需要4次,极大的提升的信息的发送效率。唯一的遗憾是,现在需要4跟电线进行通讯,比原来多了4倍。但,瑕不掩瑜,之后再想办法解决吧。

莫斯电报的编码方式已经不适合这种新型的电报了,需要定义新的编码方式,之后再说。

显示器和译码器

经过上述改造,电报的发送效率提升了4倍,但接收效率并未提升,很可能成为系统的瓶颈。因此,我们需要研发出一种新的设备,帮助提升译码效率。利用“解码器”相同的原理,我们可以将解码器反转过来,即输入和输出调换,设计新的电路,就构成了“译码器”。

把一种代码形式转换成我们熟悉的符号或者数字的电路,称为译码器.

我们还是找个简单的译码器(2-4译码器)进行示意,下面是它的真值表:

2-4真值表

可以看出它的真值表和4-2解码器完全相反,其逻辑电路如图所示:

2-4电路图

同理,也可以制作4-16译码器,输入为4个电线,输出为16个灯泡,分别代表莫斯密码最后一列的字母。将该译码器的输入端与16-4编码器的输出端对接,只要编码器按下某个字母,译码器对应字母的灯泡也会点亮。电报的译码工作,几乎在瞬间完成。

你也因为该发明,立下新的功劳,获得二等功一次。

等等,还有一个问题,那为什么不直接用16根线连接16个灯泡呢,而是多此一举,先编码后译码呢?

当前的电报仅仅能表示16个字母的收发,而真实的环境需要26个字母+4-5个标点符号,按照该方式每增加一个字母或数字,就需要新增一根线,成本实在巨大。采用编码-译码的方式,4根线可以表示16个字母,5根线可以表示32个字母,极大的节省了成本。

那是不是还可以进一步优化,用一根线实现编码-译码信息的发送呢?当然可以,且听下回分解。

@2021-01-27 于长安 Last Modify:2021-02-05

参考