1+1=2、2×3=6の証明のための3変数関数fでの定義と帰納的定義は同値?

このQ&Aのポイント
  • 1+1=2、2×3=6の証明のために、3変数関数fでの定義と帰納的定義が同値かどうかを検討しています。
  • 過去の質問「1+1=2の証明って?」を参考にし、3変数関数fを使った定義と帰納的定義を比較しています。
  • 具体的な計算ステップを示しながら、3変数関数fでの定義と帰納的定義が等しいことを証明しています。
回答を見る
  • ベストアンサー

1+1=2、2×3=6の証明のための、3変数関数fでの定義と帰納的定義は同値?

過去の質問「1+1=2の証明って?」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=217225 を精読しました。 過去の質問では、小さい自然数の定義した上で、プラスの定義を3変数関数fを使って、 ●f(n,m,m)=n ●m≠kのとき、f(n,m,k) = f(s(n),m,s(k)) そして ●+(n,m)=f(n,m,0) とされていました。 ここでは少し違って考えます。 まず、自然数(ここでは0も含める)の定義ですが、Peano's Axioms http://mathworld.wolfram.com/PeanosAxioms.html をみていただくとして、 自然数 a の 後者を suc(a) と書くことにします。 小さい自然数では、 0 := {} 1 := suc(0) 2 := suc(1) 3 := suc(2) などとします。 次に+の定義ですが、帰納的に、 a+0:=a a+suc(b):=suc(a+b) で定義します。 すると、 1+1=1+suc(0)=suc(1+0)=suc(1)=2 と証明できたことになります。 ×の定義を、帰納的に、 a×0:=0 a×suc(b):=(a×b)+a で定義します。 すると、 2×3=2×suc(2) =(2×2)+2 =(2×suc(1))+2 =((2×1)+2)+2 =((2×suc(0))+2)+2 =(((2×0)+2)+2)+2 =((0+2)+2)+2 =((0+suc(1))+2)+2 =((suc(0+1))+2)+2 =((suc(0+suc(0)))+2)+2 =((suc(suc(0+0)))+2)+2 =((suc(suc(0)))+2)+2 =((suc(1))+2)+2 =(2+2)+2 =(2+suc(1))+2 =(suc(2+1))+2 =(suc(2+suc(0)))+2 =(suc(suc(2+0)))+2 =(suc(suc(2)))+2 =suc(3)+2 =4+2 =4+suc(1) =suc(4+1) =suc(4+suc(0)) =suc(suc(4+0)) =suc(suc(4)) =suc(5) =6 と証明できたことになります。 上記のプラスの3変数関数fでの定義と、今回のプラスやカケルの帰納的定義は同値ですか? 違いがあるとしたらそれは何ですか? ちなみに、s(n)=suc(n)です。

  • fjfsgh
  • お礼率18% (158/843)

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.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)
回答No.1

命題:任意の自然数a,bについてf(a,b,0)=a+b (右辺はfjfsghさんが定義した+) が証明できるでしょう。  自然数の定義を与えたことによって、証明に帰納法が使えるようになった、という事がポイントだろうと思います。 > 違いがあるとしたらそれは何ですか?  指の出し入れ、という操作論的な解釈ができるfですら技巧的と言われてしまうような文脈において、fjfsghさんの+を持ち出しても質問者には理解できなかっただろう、という事でしょうか。

fjfsgh
質問者

お礼

ありがとうございます。 ここらへんは情報工学的、プログラミング的分野なのですね。僕には未知の分野です。 3変数関数fでの定義は、数え上げ、かつ、記述が複雑な傾向がありそうです。 再帰的定義は、数え下げ、かつ、記述が簡易な傾向がありそうです。

関連するQ&A

  • 数学的帰納法って?証明をして下さい!

     次の問題を、どなたか解いて頂けないでしょうか? nは自然数とする。このとき、次式が成立することを数学的帰納法を用いて証明せよ。 1×3+2×4+3×5…+n(n+2)=1/6n(n+1)(2n+7)…命題A  nが1のときに成り立つことは証明できました。n=kのときに命題Aが成り立つと仮定すると、1×3+2×4+3×5…+k(k+2)=1/6k(k+1)(2k+7)…(1)である。n=k+1のとき命題Aの左辺は(1)を用いて、命題Aの左辺=…以下の証明が出来ません。  数学的帰納法について、あまり理解してません。出来れば解説を加えて頂きたいです。よろしくお願いします!(1/6は、6分の1のことです。)

  • 関数の帰納的定義

    f(x)=(2x-1)/x とし、tを実数とする。すべての自然数nに対し実数fn(t)が fn(t)=f(fn-1(t))、n=1,2,3・・・、ただしf0(t)=t によって帰納的に定義できるためのtの条件を求めよ という問題なのですが、 「帰納的」といわれると「数学的帰納法」しか連想できなかったので、n=1をいれてみるとf1(t)=(2t-1)/tとなったのですが、それ以降n=kのときを仮定し、n=k+1を考えてみたのですが変形できなく(?)、「tの条件」ってこれで求められるのかという疑問が生じ、さっぱりわからなくなってしまいました。 回答いただければ幸いです。宜しくお願いしたします

  • 数学的帰納法の証明

    自然数に関する数学的帰納法の原理が自然数が整列集合であることと同値であるということはわかっていますが 次のように数学的帰納法を証明した場合どこに整列集合の性質が使われているor論法が間違っているのでしょうか。 数学的帰納法 自然数nに関する命題をP(n)とする (ⅰ)P(0)が成り立つ (ⅱ)すべての自然数nに対して、P(n)が成り立つならばP(n+1)も成り立つ この2条件が満たされているときP(n)はすべての自然数nについて成り立つ (論理記号でかくと(ⅱ)は(∀n∈N(P(n)⇒P(n+1))だと思います) [証明] P(n)が成り立たないような集合をSとする Sが空集合である事を示せばP(n)がすべての自然数nについて成り立つ事になる Sが空集合でないと仮定するとm∈Sとなるようなmが存在する このとき条件(ⅱ)を次のように書き換えて (II)すべての自然数nに対して、P(n+1)が成り立たないならばP(n)も成り立たない と考えると P(m)が成り立たないのでP(m-1)も成り立たないことになる このときP(m-1)が成り立たないのでP(m-2)も成り立たない 以下続けると結局 P(1)が成り立たないのでP(0)も成り立たないことになるが これは(ⅰ)に反する よってSが空集合でないという仮定が間違っていたことになる ゆえにSは空集合であり命題P(n)がすべての自然数nに対して成り立つことが示された

  • 2×3=6の証明って?

    過去の質問「1+1=2の証明って?」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=217225 を精読しました。 私は数学基礎論を少しだけ読んだことがありますが、自然数論は未勉強です。 過去の質問では、小さい自然数の定義した上で、プラスの定義を、 ●f(n,m,m)=n ●m≠kのとき、f(n,m,k) = f(s(n),m,s(k)) そして ●+(n,m)=f(n,m,0) とされていました。 それについで、カケルの定義はどうすればいいのですか? そして、2×3=6の証明って、どうすればいいのですか?

  • 数学的帰納法を用いる証明です。

    ()ばっかで読みにくいかもです。 nを自然数とするとき 1+3+3(2乗)+…+3(n-1乗)=1/2(3(n乗)-1) が成り立つことを数学的帰納法を用いて証明しなさい。 どなたかお願いします!!

  • 数学的帰納法 不等式の証明

    数学的帰納法の不等式の証明について質問させていただきます。 nは3以上の自然数とする。不等式 2のn乗>2n+1 ・・・(1)を数学的帰納法により証明せよ  この問題で、n=3のときを証明し、次にk≧3としてn=kのとき(1)が成り立ち、 2のk乗>2k+1 ・・・(2)と仮定する。  つぎに、n=k+1のとき(1)の両辺の差を考えると、 (2)より 2のk+1乗-{2(k+1)+1}=2・2のk乗-(2k+3)>2(2k+1)-(2k+3)となります。この>の右側の2(2k+1)-(2k+3)の部分がなぜこうなるのか分かりません。  できるだけ詳しく解説をお願いしたいです。よろしくお願いします。

  • 数学的帰納法の証明問題が分かりません

    nが自然数のとき、 1^2+2^2+…+n^2=1/6n(n+1)(2n+1) が成り立つことを数学的帰納法で証明せよ。

  • この数学的帰納法を用いた証明問題がわかりません。

    この数学的帰納法を用いた証明問題がわかりません。 (2)n 回微分可能な関数f(x) のn 次導関数をf^(n)(x) で表しf^(0)(x) = f(x) と定 義するとき,次の公式(P) が成立する.以下の問(a), (b) に答えなさい. (P)d^n/dx^n ( e^xf(x) ) =Σ(r=0からn)t(n r)e^xf^(r)(x) ( n ≧ 1, t(n r)=n!/( r!(n - r)! ) ) (a) g(x) = x^2e^x のn 次導関数g^(n)(x) を求めなさい. (b) 数学的帰納法を用いて公式(P) を証明しなさい.ただし,必要であれ ば次の性質を用いてよい. t(n ,r - 1)+t(n,r)=t(n + 1,r) (r ≧ 1; n ≧ r) -------------------------------------------------------------- 画像が見づらくて申し訳ありません。 (a)はh(x)=x^2と置くと、 g^(n)=d^n/dx^n( e^xh(x) )=Σ(rからn)e^x h^(r) (x) これで合っていますか? (b)は n=1のときは明らかに成り立つ。 n=k(kは自然数)のとき成り立つと仮定し、n=k+1のときの式変形がどうもうまくいきません。 (n≧3のときh^(n)=0であるのはわかります。) どなたか解説をよろしくお願いします。

  • 帰納法による証明

    問題:0≦a≦bならば、任意のn∈Nに対してa^n≦b^nであることを示せ。 [証]数学的帰納法より [1]n=1のとき (左辺)=a,(右辺)=b 条件よりa≦bとなり成立。 [2]n=kで成立すると仮定すると、a^k≦b^k n=k+1のときb^k+1-a^k+1≧0を示す。 b^k+1-a^k+1=...ここからどうすればいいのでしょうか?

  • 2つの漸化式風の関数が同じあることの証明

    ある順列を2通りの方法で求めていて思いついた質問です。 n≧kなる自然数n,kに対して2つの関数f(n,k)とg(n,k)を定義します。 なお、下の定義式のCとPは高校数学で習う順列のことです。つまり、a≧b≧0なる整数a,bに対してC(a,b)=a!/(b!・(a-b!)) で P(a,b)=a!/(a-b)!です。 k=1のとき f(n,k)=1 k≧2のとき f(n,k)=Σ(i=0to(n-k)){C(n-1,i)・A(n-1-i,k-1)} k=1のとき g(n,k)=1 k≧2のとき g(n,k)=((k^n)-Σ(i=1tok-1){P(k,i)・A(n,i)})/k! このとき、f=gを証明するにはどうすればいいでしょうか。 例えば、k=2のときはf(n,2)=Σ(i=0to(n-2)){C(n-1,i)・1}          =Σ(i=0to(n-1)){C(n-1,i)}-C(n-1,n-1) =2^(n-1)-1 g(n,2)={2^n-P(2,1)・1}/2!          =2^(n-1)-1     で等しくなりますが、k≧3の場合にどうやればいいのか、わかりません。 kに関する帰納法でない解法でも結構です。