情報数学 I
第十三回: 証明の方法
Martin J. Dürst
duerst@it.aoyama.ac.jp
O 棟 529号室
http://www.sw.it.aoyama.ac.jp/2007/Math1/lecture13.html

© 2006-8 Martin
J. Dürst 青山学院大学
今日の予定
- 期末試験について
- 量記号の復習
- 証明の方法
- 数学的帰納法
期末試験
- 日付:
- 2007年 1月25日 (金曜日)
- 時間:
- 11:10-12:35 (85分間)
- 試験範囲:
- 授業全体。授業で習っていないことは含まない。
- 問題の種類:
- ミニテストと同様やそれに似た形式
- 注意点:
- 問題をよく読む (計算、証明、説明などの区別)
- 概念の定義を自分の言葉でおさえる
- 計算のところ (n 進法、真理表など)
をスピードを意識して練習
- 綺麗な字で書く
量記号の復習
量記号の場合の注意点:
- 全集合の把握
- 書き方 (コロン、括弧など)
- 使用する述語の定義
- 自由変数の存在
量記号の性質の具体例
- ∀x: P(x) ∧ ∀x: R(x) =
∀x: (P(x) ∧ R(x))
例:
全ての学生において、30歳以下である、かつ全ての学生において、理工学部在籍である
=
全ての学生において、30歳以下かつ理工学部在籍である
- ∀x: P(x) ∨ ∀x: R(x) →
∀x: (P(x) ∨ R(x))
左から右への例:
全ての学生において、30歳以上である、又は全ての学生において、理工学部在籍である
→
全ての学生において、30歳以上又は理工学部在籍である
右から左への反例:
全ての学生において、男性である又は女性である
しかし、全ての学生が男性である、又は全ての学生が女性であるが偽
- ∃x: P(x) ∨ ∃x: R(x) =
∃x: (P(x) ∨ R(x))
例:
ある学生において、東京都出身である、又はある学生において神奈川県出身である
=
ある学生において、東京都出身である又は神奈川県出身である
- ∃x: P(x) ∧ ∃x: R(x) ←
∃x: (P(x) ∧ R(x))
右から左への例:
ある学生において、広島県出身であるかつ女性である
→
ある学生において、広島県出身である、かつある学生において、女性である
左から右へな反例:
ある学生において、北海道出身であるかつある学生において女性である
ある学生において北海道出身であるかつ女性であるとは限らない
証明の大切さ
- 数学の中心的道具
- 情報テクノロジー
- データ構造の性質の証明
- アルゴリズムの正しさや性質の証明
- プログラムの正しさや性質の証明
- プログラムの変換の正しさの証明
配布テキストについて
- (有名な) 言語理論の教科書から
言語理論やオートマトン理論についての語句は無視してよい
- 一般的で分かりやすいので配布
- たまに違う「方言」を使用
- 試験の範囲に含む
どこまで証明すればよいか
証明の方法
- 演繹的証明 (deductive proof, proof by deduction)
- 帰納的証明 (inductive proof, proof by induction)
- 背理法 (proof by contradiction)
- 反例による証明 (proof by counterexample)
- 集合についての証明 (proof about sets)
- 列挙による「証明」(proof by enumeration)
証明と記号論理
- 演繹的証明: (H ∧ (H→C)) →
C など
- 帰納的証明: (S(b) ∧ ∀n≥b:
S(n)→S(n+1)) → ∀n≥b:
S(n)
- 背理法: (S→¬S) → ¬S
- 反例による証明: ∃x: ¬P (x) → ¬∀x: P(x)
- 列挙による「証明」: 例: 真理表
演繹と帰納
演繹 (deduction): 一般の原理から特定な場合を推論する
帰納 (induction): 少数の事実から一般の原理を推測する
数学的帰納法 (mathematical induction)
目的: ある構造の部分の (殆ど)
全てについて何かを証明する
「ある構造」は整数が多いが、木などもありうる
数学的帰納法は一般の分類では帰納では無く演繹である
情報テクノロジーでの数学的帰納法の応用
- アルゴリズムやデータ構造の設計や性質の証明
- プログラムについての証明
数学的帰納法の二つのステップ
- 基底 (base)
- 帰納 (induction)
整数の場合:
- P(0) が成り立つことを証明する
- P(k) が成り立てば P(k+1)
も成り立つことを証明する
数学的帰納法の種類・変更
- 基底を P(0) ではなくて P(1) や P(2) などにする
- P(n+1) の証明に k≤n
の一部又は全てのP(k) を使う
- 一部の整数に限る
(例えば偶数だけ、2n など)
- 整数そのものではなく、整数で整理できるものに応用する
- 枝分かれや他の構造を許す (条件: (半)順序)
演習題
次の証明のどこがおかしいのかを見つけてください。
- 全てのお互いに平行ではない平面上の直線 n
本は全て一つの点を共有する。
証明:
- 基底: n=2 の場合に明らかである。
- 帰納: n+1 本の場合、最初の n
本にも、最後の n
本にも共通点があるので全ての n+1
本に共通点がある。
数学的帰納法の応用例
次の式を考えよう:
1 = 1
3 + 5 = 8
7 + 9 + 11 = 27
13 + 15 + 17 + 19 = 64
21 + 23 + 25 + 27 + 29 = 125
この式に秘めている法則を仮説として明確にし、数学的帰納法で証明して下さい。
仮説
右辺は明らかに n3
左辺は全部奇数で、順番通り、奇数の数は n
仮説は次の通り: 最小の 1個の奇数の合計は 13
で、その次の n個の奇数の合計が
n3
証明は二段階で行い、いずれも帰納法を使う
一段階目の帰納法
ある合計の最小の奇数が n2-n+1
であることを帰納法で証明
基底: n=1 の場合、
n2-n+1 = 1 なので明らか
帰納:
ある k≥1 の場合、合計の最小の奇数は
k2-k+1
であることを仮定し、m=k+1
の場合、合計の最小の奇数が
m2-m+1 であることを証明
奇数と奇数の差は常に 2 で、k 行目には
k個の奇数がある
k 行の最小の奇数から最大の奇数までの差が
2(k-1) で、k
行目の最小の奇数からm 行目の最小の奇数の差が
2k
よって、k2-k+1 + 2k =
m2-m+1 を証明できればよい
m2-m+1 =
(k+1)2-(k+1)+1 =
k2+2k+1 - k-1 + 1 =
k2-k+1+ 2k で証明済み
二段階目の帰納法
n2-n+1 という奇数を始め
n個の奇数の合計は n3
であることを証明
基底: n=1 の場合奇数の数が
1個なので、n2-n+1 =
n3 が n=1 の場合に明らか
帰納:
ある k≥1
の場合、k2-k+1 で始まる k
個の奇数の合計が k3
であることを仮定し、m=k+1
の場合、m2-m+1 で始まる m
個の奇数の合計が m3 であることを証明
k 行目の合計と m
行目の合計の差は、最初の k
個のそれぞれの差と最後の m
行目にしかない奇数からなる
m 行目の最後の奇数は m+1
行目の最初の奇数 -2 で、すなわち
(m+1)2-(m+1)+1 - 2 である
最初の k 個のそれぞれの差は
k回行の最初の奇数の差、すなわち
k((m2-m+1)-(k2-k+1))
である
よって、差の合計は
k((m2-m+1)-(k2-k+1))
+ (m+1)2-(m+1)+1 - 2 である
これが m3 - k3
であることが証明できればよい
k((m2-m+1)-(k2-k+1))
+ (m+1)2-(m+1)+1 - 2 =
k(((k+1)2-(k+1)+1)-(k2-k+1))
+ ((k+1)+1)2-((k+1)+1)+1 - 2 =
k((k2+2k+1-k)-k2+k-1)
+ (k+2)2-k-3 = 2k2 +
k2+4k+4-k-3 =
3k2 + 3k + 1 (1)
m3 - k3 =
(k+1)3 - k3 =
k3+3k2+3k+1 -
k3 = 3k2+3k+1 (2)
(1) と (2)
が同じなので、k行目とm行目の左辺の差と右辺の差が同じなので、証明が成立
構造的帰納法の例
- 仮説: 二分木 (binary tree) の場合、節 (node) の数が
n で、葉 (leaf) の数が l
の場合、n = 2l-1
- 二分木の定義: 次の条件を満たす有向グラフ:
- グラフに閉路がない
- 節 a から節 b
への矢印が有れば、a を b
の親、b を a の子と呼ぶ
- 「根」(root)
と呼ばれる節以外、全ての節に親がある
- 節は2種類に分けられる:
- 「葉」と呼ばれる子のない節
- 子を2個持つ内部節 (internal node)
証明
根だけの非常に小さい木から少しずつ伸ばせば、どんな形の二分木でも作れる。伸ばし方の一歩として、ある葉の代わり二つの新しい葉が伸びる内部節にする方法を取る。
基底: 根だけの木の場合に、節の数が 1 で、葉の数も 1
なので n = 2l-1 が明らか。
帰納: 伸びる前の節の数を n, 葉の数を
l、一歩伸びる後の節の数を n', 葉の数を
l' にすると、次のことを証明しないといけない:
n = 2l-1 → n' = 2l'-1
一歩伸びると節の数が n から n+2
に増え、葉の数が2個増えるが一個減るので、n'=n+2
かつ l'=l+2-1=l+1 が分かる。
以上の n = 2l-1 (1), n'=n+2
(2), l'=l+2-1=l+1 (3) の三つの式から
n' を l' で表す式を求める:
(2) に (1) を適用: n' = 2l-1+2 = 2l+1
(4)
(3) の書き換え: l'-1 = l (5)
(4) に (5) を適用: n' = 2(l'-1) + 1 =
2l'-2+1 = 2l'-1
よって、帰納のステップが証明できましたので、証明が完成。