编程的实践理论 第一章 基本理论

第一章 基本理论

我们需要的基本理论有二进制理论,数的理论和字符的理论。

1.0 二进制理论

二进制理论,也叫做布尔代数,或者是逻辑,它被设计出来用于
辅助推理因果关系,并且我们将用它来进行关于计算的因果关系
推理。二进制理论的表达式被叫做二进制表达式。我们说一些二
进制表达式为真命题,其它的一些二进制表达式为假命题。

二进制理论的表达式能被用来表示关于世界的声明语句;真命题
表示真的声明语句,假命题表示假的声明语句。这是理论的原始
应用,一个是设计为之,一个是绝大多数时用于术语学。二进制
理论的另一个应用是完美地运用于数字电路的设计。在这个应用
中,二进制的表达式表示电路,真命题表示电路有高电位输出,
并且假命题表示电路有低电位输出。总之,二进制的理论能够被
用于有两个数值的各种应用之中。

两个最简单的二进制表达式是T和Ʇ。第一个T是一个真命题,第
二个Ʇ是一个假命题。当二进制理论被用于它最原始的目的时,
我们宣布T为真,Ʇ为假,因为前者表示永真的声明,后者表示
永为假的声明。当一个二进制的理论被用于电路设计时,我们
宣布T为高电压,Ʇ为低电压,或者作为电源和接地。相似的,
我们可以从其他的领域中选择合适的词。或者为了应用的独立性,
我们可以叫它们 高 和 低。因为它们没有操作数,它们是0元的
二进制操作符。

这有四个1元的二进制操作符,它仅有一个是有用的,让我们感兴趣。
它的符号是¬,称为非。它是一个前缀的操作符(放在它的操作数的
前面)。形成的¬x的表达式,叫做一个否定表达式。如果我们否定
一个真命题,我们得到了一个假命题;如果我们否定了一个假命题,
我们就得到了一个真命题。通过如下的真值表显示了这个情况。
             T      Ʇ
        |————— 
   ¬   |   Ʇ       T

在上面的水平线之上,T意味着操作数是一个真命题,Ʇ 意味着操作
数是一个假命题。在水平线之下,T意味着结果是一个真命题,Ʇ意味
着结果是一个假命题。

有六个二元的二进制操作符。主要是归因于传统,我们将只使用其中的
六个,尽管它们不是我们仅仅感兴趣的。这些操作符是中缀的(放在两
个操作数的中间)。这有符号和它们的含义
∧             与
∨             或
=> →           应用于,等于或者是强于
<= ←           被应用于,等于或者是弱于
=              等于,有且仅有
≠             不同于,不等于
×÷
形成x∧y 的表达式被叫做 合取 ,操作数x和y被叫做合取子,
形成x∨y 的表达式被叫做 析取 ,操作数x和y被叫做析取子,
形成x→y的表达式被叫做 蕴含,x被叫做 前件 ,y 被叫做 后件。
形成x←y的表达式被叫做 逆蕴含,x被叫做 后件 ,y 被叫做 前件。
形成x=y的表达式被叫做 一个等式,x叫做左边, y叫做右边。
形成x≠y的表达式被叫做 一个不等式,x叫做左边, y叫做右边。

如下的真值表,显示出如何根据两个操作数的值,得到二进制表达
式的值。水平线上的TT 意味着两个操作数都是真命题,等等。
在水平线下,T意味着结果是一个真命题。Ʇ意味着结果是一个假命题。

           TT       TꞱ      ꞱT      ꞱꞱ
      ——————————————
∧   |    T         Ʇ        Ʇ         Ʇ
∨   |    T         T        T        Ʇ
→   |    T         Ʇ        T        T
←   |    T         T        Ʇ        T
=    |    T         Ʇ        Ʇ         T
≠   |    Ʇ         T        T         Ʇ

中缀操作符让一些表达式混淆。例如 Ʇ  ∧ T ∨ T 可以读作假合取真,
结果是假,然后再析取真,最终的结果为真。或者可以读作 假合取的是
真与真的析取,最终的结果为假。为了说明是哪一种情况,我们能够
使用括号:或者是 (Ʇ  ∧ T) ∨ T 或者是 Ʇ  ∧ (T ∨ T)。为了
防止出现一大堆括号,我们在书的尾末页提供了优先级的列表。在这个
表中,合取在第9级,析取在第10级;这意味着,在括号缺省时,合取
比析取要优先一点。例子 Ʇ  ∧ T ∨ T 的结果为真。

在优先级的表中,操作符 = → ← 中的每一个都出现了两次。大版本的
在第16级,位于所有的操作符之后。除了优先级,这些操作符的小版本
与大版本是完全一样的。在使用受限后,这些重复的操作符能在一些时候,
通过减少括号来提高可读性。但是注意的是,一些闭合的括号,即使对于
优先级是没有用的,还是能在结构上有助于我们。正确性是必须的。

这里有256个三元的操作符,我们仅显示了其中的一个。它叫条件组合,
写成 如果 x 那么 y 否则 z .这里是它的真值表。


真命题与假命题

一致性    :没有一个二进制表达式同时为真命题和假命题。
非一致性 :有一个二进制表达式同时为真命题和假命题。
完备性    : 没有一个二进制表达式 既不真也不假。
非完备性 : 有一个二进制表达式 既不真也不假。

例如有一群人,只有男人和女人,这时它是具有一致性和完备性。
如果有一个双性人,他是又男又女的,这时就破坏了一致性,称
群体为具有非一致性。
如果有一个无性人,他是不男也不女的,这时就破坏了完备性,
称群体为具有非完备性。

     1.0.0 公理与证明规则

我们通过说一个表达式是什么来展示一个理论。以及它的真命题是什么,
假命题是什么。真命题与假命题由如下的五个规则来确定。我们先声明
它,然后再稍后的时候讨论它。

公理规则
如果一个二进制的表达式是一个公理,它是一个真命题。如果它是一个伪公理,
它是一个假命题。

评估规则
如果一个二进制的表达式的所有的子表达式都被分类了,那么那的分类要根据
真值表来确定。

完备性规则
如果一个二进制的表达式包括了未分类的子表达式,所有的分类方式都把它
放在同一个分类中,那么它就在这个分类中。

一致性规则
如果一个已经分类的表达式包括了二进制的子表达式,仅有一个方式分类它们
才有一致性,那么它们就被以那个方式进行分类了。

实例规则
如果一个二进制的表达式被分类了,那么它的所有的实例都有相同的分类结果。

    1.0.1 表达式与证明格式

在这本书的最后页上的优先级表说了在括号缺省的时候,如何解析
一个表达式。为了帮助眼睛更好地对符号进行分组,为缺省的括号
留出空格来是一个好主意。考虑一下如下的两个方式对表达式的
空格处理。

a∧b ∨ c
a ∧ b∨c

根据我们的优先级的规则,括号应该在a∧b周围,所以第一个
空格的方式是有帮助的,第二个空格的方式是有误导作用的。

    1.0.2  单调性与非单调性

一个证明能够是一个连续的相等,正如我们已经看到的,它能够是一个
连续的蕴含,或者是一个连续的相等和蕴含的混合物。作为一个例子,
这有一个合并的第一个定律的证明,它说
(a→b)∧(c→d)  ==>  a∧c → b∧d

    1.0.3 上下文

一个证明,或者是证明的一部分,能够使用当前的假定。一个证明
可能有如下的格式
假定 → (表达式0=表达式1=表达式2=表达式3)


    1.0.4 形式化

我们使用计算机来解决问题,或者提供服务,或者仅是为了娱乐。
期望的计算机行为通常在开始时是非形式化的,用一种自然语言
(例如英语),还有一个图,可能还有一些手势,而不是形式化
的数学公式(记号)来描述的。在最终,期望的计算机行为被形
式化以一个程序的形式描述出来。一个程序员必须能够把一个
非形式化的描述转换成形式化的描述。

在一个自然语言中的语句,可能是模糊的,有歧义的,或者是
很微妙的,能依赖一大堆文化性的上下文。这使得形式化的工作
很难,但也是必须要做的。我们不可能说如何形式化,总之,它
需要很多的自然语言的知识,并且总是要讨论的。在这个子部分,
我们仅指出一些从英语到二进制表达式的翻译上的陷阱。

最好的翻译不可能是一对一的单词替换。同一个单词在不同的地方
可能被翻译成不同的符号,不同的单词可能被翻译成同一个符号。
单词 和,也,但是,然而,进而 可能被翻译成合取。仅把东西放在
一起,彼此挨着,这意味着是合取。例如 “他们是 红,成熟,多汁 
但不甜” 变成 这样的形式化结果 “红 ∧ 成熟 ∧ 多汁 ∧  ¬甜”

1.1 数的理论

数字的理论,也叫做算术,为了表示数量,而被设计出来。在这个版本中,
我们表示,一个数字的表达式以如下的方式来形成。

一个或者是多个十进制的数字的一个序列
∞            无穷大
-x            减x
x + y          x加y
x - y          x减y
x × y          x乘y
x / y          x除y
x^y          x的y次方
if a then x else y fi       如果 a 那么 x 否则 y
当x和 y是任意的数字的表达式时,并且  a是任意的二进制表达式。
当我们讨论程序的执行时间时,无穷大的数的表达式∞将是很必要
的。我们也介绍形成二进制表达式的一些新的方式:
x<y       x小于y
x≤y      x小于或者是等于y
x>y       x大于y
x≥y      x大于或者是等于y
x=y       x等于y
x≠y     x不等于y

数字理论的公理被列在了本书的后面。它是一个很长的列表,
它的大部分内容与你已学内容很相似。特别要注意的是如下
的两个公理。

-∞ ≤ x ≤ ∞                      极限公理
-∞ < x  ——>   ∞ + x = ∞   吸收公理   

数的理论是不完备的。例如 二进制表达式 1/0=5 和 
0<(-1)^(1/2) 这两个表达式是即不真也不假的。


1.2 字符的理论

最简单的字符表达式是用左双引号和右双引号包围起来,作为一个图形一样的
形状被写出来的。例如 “A”是一个“大写A”的字符。“1”是一个“一个”
的字符。“ ”是一个“空格”的字符。左双引号和右双引号是必须被写两次
的,然后用左双引号和右双引号包围起来,像这样“““”和“”””。字符
的理论是不太重要的。它的操作符有succ(后继), pred(前驱)和相等,不等,
小于,小于等于,大于,大于等于,如果...那么...否则... 。 我把这个理论的
细节留给你的爱好了。

所有的理论使用了"等于","不等于",还有"如果...那么...否则..." 的操作符的,
它们的定律都列在了书的后面,在泛型的开头部分了,意思是它们是每个理论的
一部分。这些定律不需要二进制理论的公理;例如 x=x 使用完备性和评估原则
就能够证明了。但是在数字的理论和其它的理论中,它们是公理;没有它们
我们甚至不能证明5=5.

操作符小于,小于等于,大于,大于等于能应用于一些表达式,不是所有类型
的表达式。当它们被用时,它们的公理,列在了书的后面,在泛型的开头部分
了,可以在那里参考。

我们已经讨论了二进制表达式,数字的表达式,字符的表达式。在下面的章节中,
我们将讨论束的表达式,集合的表达式,字符串的表达式,列表的表达式,函数
的表达式,判断的表达式,关系表达式,声明的表达式,程序的表达式,如此多
的表达式。为了在如下的章节中,表达的简单性,我们将省略表达式,仅说二进制,
数字,字符,束,集合,字符串,列表,函数,判断,关系,声明,程序,含义是
每一种类型的表达式。如果这让你感到困惑,只要你愿意的话,请你自己加上表达
式这个单词。
 

猜你喜欢

转载自blog.csdn.net/gggwfn1982/article/details/130795753