Mathematics for Computer Science 3

一个好的证明【proof】需要有7个特性:

  • 正确【correct】
  • 完备【complete】
  • 清晰【clear】证明需要清晰,这样人们才理解发生了什么
  • 简洁【brief】抓住关键点,这样人们才不会被细节整崩溃
  • 优雅【elegant】这是数学家对美的概念
  • 组织有序/井井有条【well organized】例如,使用引理【lemmas】的方式与编写代码时应使用子例程【subroutines】的方式相同,有助于使其清晰
  • 有序【inorder】自顶向下进行证明,从事实出发,不要反其道行之

我们学习证明的原因,是因为我们需要证明程序【program】是否按照我们的预期执行。

问题:找到一个移动顺序,完成从

ABC
DEF
HG

ABC
DEF
GH

的转化。

定理【theorem】:没有这样的合法移动的顺序,来使得全部单词有序。

我们需要使用被称为 invariant 的东西来证明该定理,它是计算机科学中一个非常强大且常用的概念,正如我们将看到的,它与归纳【induction】密切相关。

为了证明你的系统永远不会达到一个特定的特殊状态,我们只需要证明,在初始状态下,存在一些称为不变量【invariant】的性质/属性【property】,并且随着每次移动,这些不变量【invariant】均保持不变,但是,它在特定的特殊状态下是不存在的。

这个 idea 是这样的,如果你得到这个称为不变量【inariant】的神奇性质/属性【property】,并且它在开始时持有,并且在每一步都仍然持有,那么唯一的状态
你可以达到必须有属性,是不变的。如果特殊状态没有那个属性,你就无法达到它。

它的思想是,如果你得到这个称为不变量【inariant】的神奇性质/属性【property】,他在初始时成立,在每一步中仍然成立,那么在你抵达终态时,它依然要成立,即必须具有该性质/属性【property】。如果在特殊状态下不具备该性质/属性【property】,那么你将永远不肯呢个抵达该状态。

我们来分析九宫格中的不变量【inariant】性质/属性【property】。

Lemma 1 : 行移动【row move】不会改变其中项【items】的顺序

Proof : 很明显,在行移动【row move】中,我们将一个项【item】从一个单元格移动到相邻单元格(例如 i - 1 或者 i + 1),没有其他的移动了,因此关于项【item】的顺序可以被保持下来。

但是在九宫格中不仅存在行移动【row move】,还存在列移动【column move】。

列移动【column move】回改变项【item】的顺序!!!

Lemma 2 : 所以一个列移动会改变一个项【item】与前两个或后两个项【item】的顺序,这意味着其相对顺序发生了变化。

Proof : 在列移动中,我们将单元格 i 中的某项 i 移动到单元格中的空白单元格(例如 i - 3,i + 3)。

当一个项【item】移动三个位置时,它会改变与另外两个项【item】的相对顺序。你甚至可以写下它们是什么,它们可以是 i - 1,i - 2,或者是 i + 1,i + 2,这些家伙的顺序被改变了。

So  在行移动中,顺序不变。在列移动中,两个字母/项【item】的序对【pair】的顺序发生翻转。

Definition :一对字母或者项【item】,我们称其为 L1 和 L2——如果 L1 在字母表中位于 L2 之前,但 L1 在九宫格拼图中出现在 L2 之后,则它们形成一个反转【inversion】,也称为反转对【inversion pair】。
例如,让我们看看在下面这种情况下我们有多少反转【inversion】?

ABC
FDG
EH

共计3组:

  • (D,F)
  • (E,F)
  • (E,G)

Lemma 3 : 在移动过程中,。反转的总数只会增加 2 个,或者减少 2 个,或者保持不变。

Proof :

在行移动中,反转保持不变;

在列移动中,2 个序对【pair】改变了顺序

  • case 1,两个序对均有序 => 反转的数量增加 2
  • case 2,两个序对均反转 => 反转的数量减少 2
  • case 3,一个序对有序,一个序对无序列 => 序列的数量不变

推论【Corollary】:在移动过程中,反转的数量的奇偶性不会改变。

证明【Proof】:加 2 或者减 2,并不会影响奇偶性。

好了,现在我们准备好声明不变量【invariant】了。

Lemma 4 : 在从下面的九宫格拼图可达的任何状态下

ABC
DEF
HG

反转【inversion】的奇偶行总是奇数。

证明方法是使用归纳法。不变量证明总是用归纳法。

Proof : 归纳假设【inductive hypothesis】——这在使用不变量的证明中非常典型——是这样的,P(n)表示从起始状态开始的任意 n 次移动,我们从

ABC
DEF
HG

这个起始状态开始,其反转【inversion】数量的奇偶行总是奇数。

Base case:n = 0 ,即我们没有做任何移动,我们的初始状态下,反转【inversion】数量 = 1 => 奇偶性为奇数,满足我们的假设。因此 P(0) 满足。

Inductive step:我们需要证明,对于 n >= 0,P(n) => P(n+1)

                         我们需要考虑任意顺序的 n+1 次移动,我们将这些移动标记为 m_{1} ... m_{n + 1}

                        现在,通过归纳假设【I.P.】 P(n),我们知道在前 n 次移动之后,奇偶性仍是奇数

                        即,m_{1} ... m_{n} 的奇偶性是奇数

                        然后,在推论【Corollary】中,我们知道,任何的移动均不会改变奇偶性

                        因此 m_{1} ... m_{n + 1} 的奇偶性仍然是奇数,而这就是 P(n+1),证明完成

推论【Corollary】通常是其他事物的简单结果。推论有一个非常短的证明。通常当你看到推论时,他经常可以在 10 页内证明完成。

引理【lemma】是用来做更大事情的工具,通常是用于证明其他定理或其他引理。

现在证明变得很简单,因为我们已经完成了所有这些引理【lemma】和推论【Corollary】。

现在我们要讲定理【theorem】了,这是最后一件事,我们真正追求的东西。这点很重要。

事实上,定理【theorem】已经呼之欲出了,即我们没有办法通过移动改变 G 和 H 的顺序!!

我们接下来对该定理进行证明~~

Proof 

        在目标状态下的反转【invertion】的数量的奇偶性,是偶数,及没有乱序存在,全部有序。

        通过lemma 4,我们知道,从初始状态,我们永远无法达到该目标状态,因为其初始的状态下的奇偶性是奇数。

        证明结束。

实际上,这个谜题在 1880 年代后期非常流行。

现在,我想可能你明白为什么不变量【invariant】很重要了。

但是说有一天,你正在构建运行核反应堆的软件。现在,有一种你真的想避免的状态——崩溃。

你想要能够证明,在核反应堆程序中,发生的任何一系列动作中,你永远不会达到崩溃状态。

那么你会使用不变量来证明这一点。

或者,如果您正在为航空公司构建软件,您希望永远不会达到崩溃状态。
或者,如果您正在制造辐射设备,您永远不想陷入让患者受煎熬的状态。

所以这是一个重要的概念。

所以在今天剩下的时间里,我们将讨论一种不同的归纳【induction】,称为强归纳【strong induction】。它与普通的归纳非常相似,但在解决某些问题时使用起来更容易一些。

现在,就像常规归纳一样,强归纳可以用一个公理【axiom】来表达。

因此,让我向您展示强归纳公理。

强归纳公理【strong induction axiom】

        let P(n) be any predicate

        if P(0) -- base case to be true

        and ∀ n,(P(0) ∧ P(1) ∧ P(2) ...∧ P(n)) => P(n+1) is true

        Then  ∀ n P(n) is always true

                

我们发现,强归纳和普通归纳的唯一区别就是这部分---(P(0) ∧ P(1) ∧ P(2) ...∧ P(n))

在普通归纳中,你只需要证明 P(n) => P(n+1)

在强归纳中,你需要证明(P(0) ∧ P(1) ∧ P(2) ...∧ P(n))这些所有事实一起,蕴含出 P(n+1)

注:(P(0) ∧ P(1) ∧ P(2) ...∧ P(n))指的是P(0) 为真 and P(1) 为真 and P(2) 为真 and P(n) 为真

为了证明蕴含,我们假定(P(0) ∧ P(1) ∧ P(2) ...∧ P(n)) 均为真,在普通归纳中,我们只要假定P(n) 为真即可。

你需要假定更多~~因此他是一种更强的证明技术。

事实上,任何用强归纳法能证明的,用普通归纳法也能证明。只是可能更难。所以你不能用它(强归纳)来证明更多,但它可以使你的证明更容易。

栗子 1 拆垛游戏。

定理【theorem】:对于拆垛游戏的所有策略,最终会产生相同的分数(我们用S(n)表示)。

Ex:S(8) = 28

Proof:通过强归纳【strong induction】

            任何类型的归纳证明的下一步是什么?

            predicate!!!

            所以对于归纳假设,谓词是什么呢?谓词就是我们的定理,即在所有策略下,分数均相同

            base case

            当 n = 1时,S(1) = 0,按照规则,我们无法做任何的移动,因此得分为0

            inductive step

            在这里,我们假定【assume】P(1) P(2) P(3) ... P(n) ,来证明P(n+1)

            所以,我们从 n+1 个块开始,我们可以以某种方式拆分它,

            比如 n + 1 可以拆分为 k 和 n + 1 - k,其中 1 <= k <= n

            

     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值