Evanalysis
3.2預計閱讀時間: 18 分鐘

3.2 歸納法與遞歸算術

把歸納法當作證明模式,並讀懂加法與乘法的遞歸公式。

課程目錄

遞歸規則告訴我們如何計算加法和乘法。本節要解決的問題是:這些規則為甚麼能夠推出熟悉的代數定律?證明次序很重要:先建立加法恆等式,再把它們用於乘法證明,最後用消去律支持更大數系的構造。

遞歸加法

定義

加法的遞歸定義

對自然數 aa 和 bb,加法定義為:

  • a+0=aa + 0 = a
  • a+S(b)=S(a+b)a + S(b) = S(a + b)

這是一個遞歸定義。你先知道第二個輸入是 00 時的結果,再由較早 的值推出之後的每一步。

例題

由定義計算 2+32 + 3

把 22 寫成 S(S(0))S(S(0)),把 33 寫成 S(S(S(0)))S(S(S(0)))。

那麼:

2+3=2+S(S(S(0)))2 + 3 = 2 + S(S(S(0)))

=S(2+S(S(0)))= S(2 + S(S(0)))

=S(S(2+S(0)))= S(S(2 + S(0)))

=S(S(S(2+0)))= S(S(S(2 + 0)))

=S(S(S(2)))= S(S(S(2)))。

這就是通常叫做 55 的數。

常見錯誤

遞歸公式本身還不是證明

這些公式只告訴你運算怎樣定義,不會自動證明一個關於所有自然數 的命題。要做那一步,你還是要用歸納法。

遞歸乘法

乘法也可以用同一種遞歸方式引入。加法已經定義好之後,乘法可以理解為由 第二個輸入控制的重複加法。

定義

乘法的遞歸定義

對自然數 aa 和 bb,乘法定義為:

  • a⋅0=0a \cdot 0 = 0
  • a⋅S(b)=(a⋅b)+aa \cdot S(b) = (a \cdot b) + a

基本情況說明:把 aa 加零次得到 00。遞歸步驟說明:如果已經知道 a⋅ba \cdot b,那麼乘以後繼 S(b)S(b) 就是在原來結果上再加一個 aa。

例題

由定義計算 3⋅23 \cdot 2

把 22 寫成 S(S(0))S(S(0))。那麼

3⋅2=3⋅S(S(0))=(3⋅S(0))+33\cdot 2 =3\cdot S(S(0)) =(3\cdot S(0))+3

而

3⋅S(0)=(3⋅0)+3=0+3=3.3\cdot S(0)=(3\cdot 0)+3=0+3=3.

因此

3⋅2=3+3=6.3\cdot 2=3+3=6.

熟悉的「三取兩次」其實是由這個遞歸規則重新得到的。

歸納法真正證明甚麼

遞歸定義能夠支撐普通代數定律,是因為背後有歸納原理。典型證明具有以下 形式。

定理

歸納原理

設 P(n)P(n) 是關於自然數 nn 的命題。如果:

  1. P(0)P(0) 成立;
  2. 只要 P(n)P(n) 成立,就能推出 P(S(n))P(S(n)) 成立;

那麼 P(n)P(n) 對每個 n∈Nn\in N 都成立。

基本情況把命題固定在起點 00。歸納步驟證明真值會在做一次後繼時被保留。 兩者合起來,排除了命題一開始成立但後面突然失敗的可能。

跟隨歸納論證

下面的步驟器把一個歸納證明拆成基本情況、歸納假設、歸納步驟和結論。

邊讀邊試

跟著走一遍歸納證明

追蹤 0 + n = n 的證明:驗證基本情況、說明歸納假設,再用遞歸規則推至後繼。

命題

命題:對每個自然數 n,都有 0 + n = n。

建立後繼恆等式

證明:S(a)+b=S(a+b)S(a) + b = S(a + b) 對 bb 歸納

我們對 b∈Nb\in N 證明這個命題。

基本情況:當 b=0b = 0,

S(a)+0=S(a)=S(a+0)S(a) + 0 = S(a) = S(a + 0)。

歸納步驟:假設 S(a)+b=S(a+b)S(a) + b = S(a + b)。那麼

S(a)+S(b)=S(S(a)+b)S(a) + S(b) = S(S(a) + b),因為加法是這樣定義的,

=S(S(a+b))= S(S(a + b)),用歸納假設,

=S(a+S(b))= S(a + S(b)),再用一次加法定義。

所以只要對 bb 成立,它就對 S(b)S(b) 也成立。

為甚麼 a⋅S(b)=a⋅b+aa \cdot S(b) = a \cdot b + a 是定義

對乘法來說,公式

a⋅S(b)=(a⋅b)+aa\cdot S(b)=(a\cdot b)+a

不是在乘法已知之後才證明出來的定理,而是乘法本身的遞歸步驟。之後的 代數定律,例如分配律,才是需要用歸納法證明的命題。

代數定律是在定義之後證明的

加法與乘法用遞歸方式定義之後,熟悉的算術定律就成為需要證明的定理。

定理

用歸納法證明的算術定律例子

對自然數 aa、bb、cc,可以證明:

a+b=b+a,a+b=b+a,a⋅(b+c)=a⋅b+a⋅c,a\cdot(b+c)=a\cdot b+a\cdot c,

以及

a⋅b=b⋅a.a\cdot b=b\cdot a.

重點是邏輯順序:先定義運算,再證明它們具有我們熟悉的運算性質。

證明:加法的結合律

固定 aa、bb,對 cc 歸納證明

(a+b)+c=a+(b+c).(a+b)+c=a+(b+c).

當 c=0c=0 時,兩邊都等於 a+ba+b。若歸納假設對 cc 成立,則

(a+b)+S(c)=S((a+b)+c)=S(a+(b+c))=a+S(b+c)=a+(b+S(c))\begin{aligned} (a+b)+S(c)&=S((a+b)+c)\\ &=S(a+(b+c))\\ &=a+S(b+c)\\ &=a+(b+S(c)) \end{aligned}

第二行使用歸納假設,第一行和最後一行使用加法的遞歸規則。所以在後面的證明用它 來重排各項以前,加法結合律已經證明。

證明:0⋅a=00 \cdot a = 0

對 aa 歸納。基本情況是定義給出的 0⋅0=00\cdot 0=0。若 0⋅a=00\cdot a=0,則

0⋅S(a)=0⋅a+0=0+0=00\cdot S(a)=0\cdot a+0=0+0=0

所以 0⋅a=00\cdot a=0 對每個自然數 aa 成立。

由遞歸規則走向證明

後繼模式有兩種相關但不同的用途。遞歸定義告訴我們如何由較早的值計算新值; 歸納證明則告訴我們如何把命題推廣到每一個自然數。計算可以提示定理,但不能 代替證明。

例題

逐步計算 2⋅32 \cdot 3

利用 3=S(S(S(0)))3=S(S(S(0))) 與乘法規則,

2⋅3=2⋅S(S(S(0)))=(2⋅S(S(0)))+2=((2⋅S(0))+2)+2=(((2⋅0)+2)+2)+2=((0+2)+2)+2=2+2+2=6\begin{aligned} 2\cdot3 &=2\cdot S(S(S(0)))\\ &=(2\cdot S(S(0)))+2\\ &=((2\cdot S(0))+2)+2\\ &=(((2\cdot0)+2)+2)+2\\ &=((0+2)+2)+2\\ &=2+2+2=6 \end{aligned}

每一行都把第二個輸入降低,直到到達基本情況 2⋅0=02\cdot0=0;之後才化簡得到的 加法。

完整證明 0+n=n0+n=n

令 P(n)P(n) 表示命題 0+n=n0+n=n。

基本情況由遞歸加法規則給出:0+0=00+0=0。

歸納步驟中,假設 P(n)P(n) 成立,即 0+n=n0+n=n。則

0+S(n)=S(0+n)=S(n)0+S(n)=S(0+n)=S(n)

第一個等號來自遞歸定義,第二個等號使用歸納假設。因此 P(S(n))P(S(n)) 由 P(n)P(n) 推出。歸納法遂得 0+n=n0+n=n 對每個 n∈Nn\in N 成立。

這個小證明提供後續算術所需要的恆等式,也說明為甚麼應明確寫出歸納假設,不能 只說「規律會繼續」。

定理

加法在歸納引理之後是交換的

對所有 a,b∈Na,b\in N,都有 a+b=b+aa+b=b+a。

加法交換律的證明

固定 aa,對 bb 歸納。

當 b=0b=0 時,

a+0=a=0+aa+0=a=0+a

前一個等號是定義,後一個等號使用引理 0+a=a0+a=a。

現在假設 a+b=b+aa+b=b+a。則

a+S(b)=S(a+b)=S(b+a)=S(b)+a\begin{aligned} a+S(b)&=S(a+b)\\ &=S(b+a)\\ &=S(b)+a \end{aligned}

中間等號使用歸納假設,最後一個等號使用左邊後繼恆等式。因此 S(b)S(b) 情況成立, 歸納完成。 這正是後來證明算術定律的模式:先證明遞歸方向直接給出的恆等式,再用這些恆等式 證明熟悉的對稱規律。

證明:自然數中的消去律

我們對 aa 歸納證明左消去律

a+b=a+c⟹b=ca+b=a+c\quad\Longrightarrow\quad b=c

當 a=0a=0 時,0+b=0+c0+b=0+c 根據 0+n=n0+n=n 化為 b=cb=c。歸納步驟中,若 S(a)+b=S(a)+cS(a)+b=S(a)+c,先用左側後繼引理和後繼映射的單射性得到 a+b=a+ca+b=a+c,再用歸納 假設得到 b=cb=c。這條自然數消去律正是之後證明整數等價關係傳遞性所需的事實。

常見錯誤

計算幾個例子不等於歸納

計算 2+02+0、2+12+1 和 2+22+2 只能檢查三個輸入。歸納證明必須命名任意的 nn, 證明基本情況,並說明命題如何由 nn 傳到 S(n)S(n)。

思考檢查

遞歸定義和歸納假設有甚麼分別?

說明它們各自容許做甚麼。

解答 · 答案

遞歸定義透過把輸入降到基本情況來給出運算值。歸納假設則是假定命題對某個任意 固定的 nn 成立,再用它證明 S(n)S(n) 的命題。

分配律的完整歸納證明

固定 aa 與 bb,令

P(c):a⋅(b+c)=a⋅b+a⋅cP(c):\quad a\cdot(b+c)=a\cdot b+a\cdot c

當 c=0c=0 時,

a⋅(b+0)=a⋅b=a⋅b+0=a⋅b+a⋅0a\cdot(b+0)=a\cdot b=a\cdot b+0=a\cdot b+a\cdot0

假設 P(c)P(c) 成立。因為 b+S(c)=S(b+c)b+S(c)=S(b+c),由遞歸乘法規則與歸納假設,

a⋅(b+S(c))=a⋅S(b+c)=a⋅(b+c)+a=(a⋅b+a⋅c)+a=a⋅b+(a⋅c+a)=a⋅b+a⋅S(c)\begin{aligned} a\cdot(b+S(c)) &=a\cdot S(b+c)\\ &=a\cdot(b+c)+a\\ &=(a\cdot b+a\cdot c)+a\\ &=a\cdot b+(a\cdot c+a)\\ &=a\cdot b+a\cdot S(c) \end{aligned}

倒數第二個等號使用加法結合律,而結合律本身已由較早的歸納證明。於是 P(S(c))P(S(c)) 成立,分配律對每個自然數 cc 成立。

證明:乘法的結合律

我們對 cc 歸納證明 (a⋅b)⋅c=a⋅(b⋅c)(a\cdot b)\cdot c=a\cdot(b\cdot c),並使用已經證明的分配律與加法定律。基本情況為

(a⋅b)⋅0=0=a⋅0=a⋅(b⋅0)(a\cdot b)\cdot0=0=a\cdot0=a\cdot(b\cdot0)

歸納步驟中,由歸納假設同分配律,

(a⋅b)⋅S(c)=(a⋅b)⋅c+a⋅b=a⋅(b⋅c)+a⋅b=a⋅(b⋅c+b)=a⋅(b⋅S(c))\begin{aligned} (a\cdot b)\cdot S(c) &=(a\cdot b)\cdot c+a\cdot b\\ &=a\cdot(b\cdot c)+a\cdot b\\ &=a\cdot(b\cdot c+b)\\ &=a\cdot(b\cdot S(c)) \end{aligned}

最後一個等號使用乘法的遞歸規則,完成歸納。正自然數的乘積也為正:寫成 r=S(r′)r=S(r')、s=S(s′)s=S(s'),則

r⋅s=r⋅S(s′)=r⋅s′+S(r′)=S(r⋅s′+r′)≠0.r\cdot s=r\cdot S(s')=r\cdot s'+S(r')=S(r\cdot s'+r')\ne0.

最後一步使用加法的遞歸定義及零不是後繼的公理。這將用於 ZZ 中的帶符號代表元論證。

如何組織乘法交換律的證明

遞歸定義展開的是第二個輸入,因此不能只把符號交換,就斷言 a⋅b=b⋅aa\cdot b=b\cdot a。先對 aa 作歸納,證明輔助引理

S(b)⋅a=b⋅a+aS(b)\cdot a=b\cdot a+a

當 a=0a=0 時兩邊都是 00。若歸納假設對 aa 成立,使用第二個輸入的後繼規則,再使用歸納假設,得到

S(b)⋅S(a)=S(b)⋅a+S(b)=(b⋅a+a)+S(b)S(b)\cdot S(a)=S(b)\cdot a+S(b) =(b\cdot a+a)+S(b)

前面由遞歸加法證明的結合律和交換律可以重排這個式子,正好得到相應歸納步所需的等式:使用 S(x)=x+1S(x)=x+1 以及遞歸展開 b⋅S(a)=b⋅a+bb\cdot S(a)=b\cdot a+b,目標右側是 b⋅S(a)+S(a)=b⋅a+b+a+1=b⋅a+a+S(b)b\cdot S(a)+S(a)=b\cdot a+b+a+1=b\cdot a+a+S(b)。因此這個輔助引理補上了乘法定義的方向。接着對 bb 歸納證明交換律:基礎步是 a⋅0=0=0⋅aa\cdot 0=0=0\cdot a;後繼步為

a⋅S(b)=a⋅b+a=b⋅a+a=S(b)⋅aa\cdot S(b)=a\cdot b+a=b\cdot a+a=S(b)\cdot a

這個證明安排很關鍵:每次重排都引用已經證明的加法性質,每次展開都遵循給定的遞歸定義。這樣可以避免循環論證,即因為記號看起來對稱,就把乘法交換律當作已知。

例題

證明 n+1=1+nn+1=1+n,而不是先假設交換律

寫 1=S(0)1=S(0)。首先由遞歸規則,

n+1=n+S(0)=S(n+0)=S(n)n+1=n+S(0)=S(n+0)=S(n)

然後對 S(n)=1+nS(n)=1+n 歸納。當 n=0n=0 時兩邊都是 S(0)S(0)。若 S(n)=1+nS(n)=1+n,則

S(S(n))=S(1+n)=1+S(n)S(S(n))=S(1+n)=1+S(n)

最後一個等號使用遞歸規則。因此 S(n)=1+nS(n)=1+n 對所有 nn 成立;合併兩條恆等式便 得到 n+1=1+nn+1=1+n。

快問快答

思考檢查

加法的遞歸定義中,基本情況是哪一句?

想想哪一個輸入先被固定。

解答 · 答案

基本情況是 a+0=aa + 0 = a。

思考檢查

乘法的遞歸定義中,基本情況是哪一句?

看第二個輸入。

解答 · 答案

基本情況是 a⋅0=0a \cdot 0 = 0。

思考檢查

按遞歸規則,a⋅S(b)a \cdot S(b) 等於甚麼?

用前一個乘法值來表達下一步。

解答 · 答案

它等於 (a⋅b)+a(a \cdot b) + a。

思考檢查

在歸納證明中,歸納假設是甚麼?

用一句短句回答。

解答 · 答案

它是假設命題對某個固定的自然數 nn 成立,然後再證 S(n)S(n) 的情況。

建議先讀

如果你想先看自然數的正式設定,可以先讀 3.1 自然數與 Peano 公理。

練習

先自行作答,再檢查答案。你可以修改後重試。

載入中…

本單元重點詞彙