- ベストアンサー
1+1=2、2×3=6の証明のための3変数関数fでの定義と帰納的定義は同値?
- 1+1=2、2×3=6の証明のために、3変数関数fでの定義と帰納的定義が同値かどうかを検討しています。
- 過去の質問「1+1=2の証明って?」を参考にし、3変数関数fを使った定義と帰納的定義を比較しています。
- 具体的な計算ステップを示しながら、3変数関数fでの定義と帰納的定義が等しいことを証明しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1へのコメントについてです。 > 3変数関数fでの定義は、数え上げ、かつ、記述が複雑な傾向がありそうです。 > 再帰的定義は、数え下げ、かつ、記述が簡易な傾向がありそうです。 手続き型のプログラミングに慣れていると、再帰的な定義は分かりにくくて困るようです。手順に沿って順番にやっていくループによる操作の方がイメージしやすい。これはひとつには、「この関数は結局何をやってるのか」を知っているかどうかの違いだと思います。実際、fjfsghさんの+が足し算を意味していると分かっていて定義を見るのと、予備知識なしに意味を知るために定義を読むのとでは難しさが全く違います。 後者の場合、再帰が複数箇所に現れるともっと大変で、例えば、Ackermann関数 A(0,n) = n+1 (n≧0のとき) A(m,0) = A(m-1,1) (m≧1のとき) A(m,n) = A(m-1,A(m,n-1)) (m≧1, n≧1のとき) が何をやるものか、定義だけ見てもなかなか分からないでしょう。 手続き型であるfの方は、補助変数が沢山あるので、操作に従ってナニがどう変わって行くか、ナニが変化しないかが見つけやすく、意味を(直感による帰納を使って)推測しやすいのだろうと思います。 ですから、過去の質問「1+1=2の証明って?」において、「どういう演算を表しているか」を先に言わずに、しかも分かりやすく説明する、という目的には、fの方が適していた訳です。 しかし、数学の対象として扱う場合には、fは冗長な補助変数を抱えているのが邪魔ですし、定義が長いので大変。再帰的な定義は数学的帰納法に素直に乗る(数学的帰納法と再帰的定義は表裏一体なのだから当たり前)。だから、再帰的定義の方が大抵便利です。 計算可能性(計算不可能な関数とはどんなものか。真偽を決定できない命題はあるか)を論じるために、算術を手続き型のプロセスとして構築し直したのがアラン・チューリング、再帰的な関数(原始帰納関数、帰納関数)として構築し直したのがクルト・ゲーデルでしょう。 結局、両者の方法は同等であることが示されました。これらは情報工学の基礎理論である「計算の理論(計算論、アルゴリズム理論)」と呼ばれる分野の話であり、同時に、ヒルベルトの形式主義(数学を記号の操作とみなすことによって、あらゆる定理を自動的に導く方法を構築できないか?)の(否定的な)研究、という意味を持っていて、20世紀の数学の重要な流れのひとつと言えます。 なお、チューリングの考えた「チューリングマシン」は、あるプログラムの出力を別のブログラムに入力として与える、というやり方で複雑な計算を構成します。ゲーデルの帰納関数では、同じ事をやるのに、関数の変数に別の関数を代入する、というやり方で実現します。それぞれ手続き型のプログラミング言語と再帰型のプログラミング言語(LISP, PROLOGなど。もちろんC言語でも再帰は書けますが)の基礎になっています。
その他の回答 (1)
- stomachman
- ベストアンサー率57% (1014/1775)
命題:任意の自然数a,bについてf(a,b,0)=a+b (右辺はfjfsghさんが定義した+) が証明できるでしょう。 自然数の定義を与えたことによって、証明に帰納法が使えるようになった、という事がポイントだろうと思います。 > 違いがあるとしたらそれは何ですか? 指の出し入れ、という操作論的な解釈ができるfですら技巧的と言われてしまうような文脈において、fjfsghさんの+を持ち出しても質問者には理解できなかっただろう、という事でしょうか。
お礼
ありがとうございます。 ここらへんは情報工学的、プログラミング的分野なのですね。僕には未知の分野です。 3変数関数fでの定義は、数え上げ、かつ、記述が複雑な傾向がありそうです。 再帰的定義は、数え下げ、かつ、記述が簡易な傾向がありそうです。