• 検索結果がありません。

帰納法によるプログラムの証明

N/A
N/A
Protected

Academic year: 2021

シェア "帰納法によるプログラムの証明"

Copied!
27
0
0

読み込み中.... (全文を見る)

全文

(1)

& %

帰納法によるプログラムの証明

胡 振江

東京大学 計数工学科

2006

年度

Copyright c° 2006 Zhenjiang Hu, All Right Reserved.

(2)

& %

内容

自然数上の帰納法によるプログラムの証明

リスト上の帰納法によるプログラムの証明

補助定理と一般化

(3)

& %

自然数の上の帰納法

1

自然数 n について,命題 p(n) が成立することを帰納法によって証明するには,

次の2つのことを示す.

場合 0P(0) が成立する.

場合 (n + 1). P(n) が成立するならば,P(n + 1) も成立する.

(4)

& %

例題

次のように定義されている関数

x0 = 1

xn+1 = x xn

に対して,任意の x と,任意の自然数 m n について,

xm+n = xm xn が成立することを証明せよ.

(5)

& % 証明:m に関する帰納法で証明する.

場合 0.

x0+n

= { + の法則 }

xn

= { の法則 }

1 xn

= { ベキ関数の定義 }

x0 xm

(6)

& % 場合 m + 1

x(m+1)+n

= { + の法則 }

x(m+n)+1

= { ベキ関数の定義 }

x xm+n

= { 帰納法の仮定 }

x xm xn

= { ベキ関数の定義 }

xm+1 xn

(7)

& %

自然数の上の帰納法

2

自然数 n について,命題 p(n) が成立することを帰納法によって証明するには,

次のことを示す.

base ケース.P(0), P(1), . . . , P(k) が成立する.

Inductive ケース. P(n), P(n + 1), . . . , p(n + k) が成立するならば,

P(n + k + 1) も成立する.

(8)

& %

例題

次のように定義されている関数

fib 0 = 0

fib 1 = 1

fib (n + 2) = fib n + fib (n + 1)

に対して,n 1, m 0 であるすべての自然数について

fib (n + m) = fib n fib (m + 1) + fib (n 1) fib m であることを証明せよ.

(9)

& % 証明:m に関する帰納法で証明する.

場合 0.

fib (n + 0)

= { + の法則 }

fib n

= { + の法則 }

fib n 1 + fib (n 1) 0

= { fib 関数の定義 }

fib n fib 1 + fib (n 1) fib 0

= { + の法則 }

fib n fib (0 + 1) + fib (n 1) fib 0

(10)

& % 場合 1.

fib (n + 1)

= { fib 関数の定義 }

fib n + fib (n 1)

= { + の法則 }

fib n 1 + fib (n 1) 1

= { fib 関数の定義 }

fib n fib 2 + fib (n 1) fib 1

= { + の法則 }

fib n fib (1 + 1) + fib (n 1) fib 1

(11)

& % 場合 m + 2

fib (n + m + 2)

= { fib 関数の定義 }

fib (n + m + 1) + fib (n + m)

= { 帰納法の仮定 }

fib n fib (m + 2) + fib (n 1) fib (m + 1)+

fib n fib (m + 1) + fib (n 1) fib m

= { + の法則 }

fib n (fib (m + 2) + fib (m + 1)) + fib (n 1) (fib (m + 1) + fib m)

= { fib 関数の定義 }

fib n fib (m + 2 + 1) + fib (n 1) fib (m + 2)

(12)

& %

リストの上の帰納法

任意の有限リスト x について P(x) が成立することを帰納法で証明するには次の 2つのことを示さなくてはならない.

場合 [ ]. P([ ]) が成立すること.

場合 (a : x): P(x) が成立すると仮定するとき,すべての a について P(a : x) が成立すること.

(13)

& % 問題:任意の有限リスト x, y, z に対して,

x ++ (y ++z) = (x ++y) ++z

が成立することを証明せよ.

証明:x に関する帰納法で証明する.

場合 [ ]:

[ ] ++ (y ++z)

= { def. of ++ }

y ++z

= { def. of ++ }

([ ] ++y) ++z

(14)

& %

場合 (a : x).

(a : x) ++ (y ++z)

= { def. of ++ }

a : (x ++ (y ++z))

= { 帰納仮定 }

a : ((x ++y) ++z)

= { def. of ++ }

(a : (x ++y)) ++z

= { def. of ++ }

((a : x) ++y) ++z

(15)

& % length (x ++y) = length x + length y

が成立することを証明せよ.

証明:x に関する帰納法で証明する.

場合 [ ]:

length ([ ] ++y)

= { def. of ++ }

length y

= { + の法則 }

0 + length y

= { def. of ++ }

length [ ] + length y

(16)

& % length ((a : x) ++y)

= { def. of ++ }

length (a : (x ++y))

= { def. of length }

1 + length (x ++y)

= { 帰納仮定 }

1 + (length x + length y)

= { + の法則 }

(1 + length x) + length y

= { def. of length }

length (a : x) + length y

(17)

& % take n x ++drop n x = x

が成立することを証明せよ.

take :: Int [a] [a]

take 0 x = [ ]

take (n + 1) [ ] = [ ]

take (n + 1) (a : x) = a : take n x

drop :: Int [a] [a]

drop 0 x = x

drop (n + 1) [ ] = [ ]

drop (n + 1) (a : x) = drop n x

(18)

& % 証明:n x に関する帰納法で証明する.

場合 0, x:

take 0 x ++drop 0 x

= { def. of take and drop }

[ ] ++x

= { def. of ++ }

x

(19)

& %

場合 n + 1, [ ]:

take (n + 1) [ ] ++drop (n + 1) [ ]

= { def. of take and drop }

[ ] ++ [ ]

= { def. of ++ }

[ ]

(20)

& %

場合 n + 1, (a : x).

take (n + 1) (a : x) ++drop (n + 1) (a : x)

= { def. of take and drop }

(a : take n x) ++drop n x

= { def. of ++ }

a : (take n x ++drop n x)

= { 帰納仮定 }

a : x

(21)

& % 問題:任意の関数 f g について,

map f map g = map (f g) が成立することを証明せよ.

証明:任意の有限リスト x について,

(map f map g) x = (map (f g)) x が成立することを証明できればよい.(略)

(22)

& %

補助定理と一般化

定理を証明する際に,直接行わないで,より一般的な結果の証明を試みると容易 になることがある.

(23)

& % 問題: 任意の x について,

reservse (reverse x) = x

が成立することを証明せよ.

reverse :: [a] [a]

reverse [ ] = [ ]

reverse (a : x) = reverse ++ [a]

x について帰納法での証明はうまく行かない.

(24)

& % 補助定理: すべての a と有限リスト x について,

reverse (x ++ [a]) = a : reverse x

証明:x について帰納法で証明する.(略)

(25)

& % 補助定理を使って,

reservse (reverse x) = x x に関する帰納法で証明する.

場合 [ ].

reservse (reverse [ ])

= { def. of reverse }

reservse [ ]

= { def. of reverse }

[ ]

(26)

& %

場合 (a : x).

reservse (reverse (a : x))

= { def. of reverse }

reservse (reverse x ++ [a])

= { 補助定理 }

a : reverse (reverse x)

= { 帰納仮定 }

a : x

(27)

& %

練習問題

教科書の 5.1, 5.2, 5.3, 5.4 を復習し,教科書中の練習問題をやること.

参照

関連したドキュメント

証明で使われる重要な結果は mod p ガロア表現の strictly compatible system への minimal lifting theorem (以下, LT と略記する) と modular lifting theorem (主に

解析の教科書にある Lagrange の未定乗数法の証明では,

12―1 法第 12 条において準用する定率法第 20 条の 3 及び令第 37 条において 準用する定率法施行令第 61 条の 2 の規定の適用については、定率法基本通達 20 の 3―1、20 の 3―2

RCEP 原産国は原産地証明上の必要的記載事項となっています( ※ ) 。第三者証明 制度(原産地証明書)

れをもって関税法第 70 条に規定する他の法令の証明とされたい。. 3

したがって,一般的に請求項に係る発明の進歩性を 論じる際には,

FSIS が実施する HACCP の検証には、基本的検証と HACCP 運用に関する検証から構 成されている。基本的検証では、危害分析などの

※証明書のご利用は、証明書取得時に Windows ログオンを行っていた Windows アカウントでのみ 可能となります。それ以外の