0の0乗

「0の0乗」については、数学をやっている人とそうじゃない人で割と認識に差がありそうだと思う。そこで、(まだ青二才の学生ではあるが)数学をやっている者の端くれとして思うことを書いておく。

まず、(たぶん)世間でよく言われている「0の0乗を1とすべき理由」と「0の0乗が不定となる理由」について述べ、それを踏まえて、数学をやる上での「それでも0の0乗を1とする理由」を述べる。

0の0乗を1とすべき理由

高校で習ったと思うが、二項定理という定理がある。(高校の教科書では二項係数の記号は \(\binom{n}{k}\) じゃないかもしれない)\[(a+b)^n=\sum_{k=0}^n \binom{n}{k} a^{n-k}b^k\]

この定理が \(a=0\) または \(b=0\) の時にも成り立つためには、 \(0^0=1\) となっていて欲しい。これが、「0の0乗を1とすべき理由」の一つである。

あるいは、多項式やべき級数を\[f(x)=\sum_{k=0}^{\text{ほにゃらら}} a_k x^k\]と書くことがあるが、こう書いた場合には当然 \(x=0\) のときの値は \(f(0)=a_0\), つまり \(x=0\) のときも \(x^0=1\) となることを想定している。

0の0乗が不定となる理由

一方で、0の0乗は不定だ、という主張もある。そういう主張の中身は、大きく2つに分けられると思う。

0の0乗が不定となる理由・その一

1以上の自然数 \(n\) について、数の \(n\) 乗というのはそもそもどういうものだったかというと、 \(a\) を \(n\) 回かけたもの\[a^n=\underbrace{a\cdots a}_{n \text{個}}\]であった。(後で、これを「素朴な定義」と呼ぶ)

この段階では1以上の自然数 \(n\) についてしか \(a^n\) が定まっていないわけだが、これを0や負の数も含む整数 \(n\) に拡張しよう。

\(n\) が1以上の自然数のときは\[a^{n+1}=a\cdot a^n\]という関係式が成り立っていた。累乗を拡張するにあたっては、(「数を \(n\) 回かける」という素朴な概念はもはや通用しないため)この関係式がほぼ唯一の拠り所である。

そこで、 \(a\ne 0\) のときにさっきの関係式の両辺を \(a\) で割ると、\[a^n=\frac{a^{n+1}}{a}\]が得られる。これを使うと、\(a\ne 0\) のときに、累乗の定義を任意の整数 \(n\) に拡張できる。

しかし、\(a=0\) のときに、これと同じように \(a^0\) を決めようとすると、\(0/0\) が出てきてしまう。これが、「0の0乗を不定とすべき」一つの理由だろう。

0の0乗が不定となる理由・その二

もう一つの理由は、実数 \(x\), \(y\) について \(x^y\) を考えたとき、\(x\to 0, y\to 0\) の極限が定まらないというものである。

「\(0^x\) について \(x\to{+0}\) としたら極限が0だから0の0乗は0だ」という主張もこれに含めることにする。

それでも0の0乗を1とする理由

数学の定義というのは所詮人間が考えたもので、人間様の便利なように決めるものである。「便利なように」というのは、その定義を採用すれば大事な定理が簡潔に書けるとかそういうものである。

(数学をやっている者の間でも、分野・立場によって同じ名前の概念に異なる定義を採用することがある。定義というのは約束事であって、絶対的なものではない。)

(ということは、究極的には \(a^0=42\) と「定義」しても構わないし、\(a^0=334\) と「定義」しても構わない。ただ、そういう「定義」を採用すれば、 \(a^{n+m}=a^n\cdot a^m\) みたいな式が成り立たなくて誰も得しないよ、という話である。)

だから、「素朴な」定義が通用しないという状況でも、辻褄が合ってなおかつ便利であればそのように定義を拡張することが多い。

(複素解析で、最初はべき級数で素朴に定義していた関数を解析接続で拡張する、というのはそういう例といえるだろう)

累乗の場合は「\(a=0\) または \(b=0\) の場合でも二項定理が成り立って欲しい」というのがまさにそれで、素朴な定義(数を \(n\) 回かける)が通用しなくても、二項定理が成り立って欲しいから \(a^0=1\) と定義するのである。逆に、\(0^0\) を1以外の決まった値(\(0^0=334\) とか)とする理由は、(実数の実数乗を考えない限りは)ない。

さて、 \(a^0=1\) を「定義」としてしまえば、「0の0乗が不定となる理由・その一」はもはや問題とならない。同その二については、私が思いつく処理方法を2つ挙げておく。

実数の実数乗をどう扱うか・その一

まず、0の0乗が1となって欲しいのは、(筆者の主観では)大抵は底(\(a^b\) の \(a\))が任意で指数(\(a^b\) の \(b\))が整数の場合である。(最初に書いた「0の0乗を1とすべき理由」でもそうだった)

そこで、「数の整数乗」と「実数の実数乗」は、たまたま記法が被っていて、関連性があるだけの別概念として考えて、前者の場合は \(0^0=1\) とし、後者の場合は \(0^0\) は不定のままとする、という案が考えられる。

「記法が被っている」と言ったが、 \(a^b\) という数式があったときに、それが「数の整数乗」であるか「実数の実数乗」であるかは文脈で判断できる。つまり、\(b\) が整数しかありえない場合(二項展開やべき級数など)は前者で、 \(b\) が実数の値を取りうる場合(極限を考える場合など)は後者だ。(逆に、\(0^0\) という式だけをポンと与えられても、文脈がないので、この式はナンセンス、ということになる)

「数の整数乗」と書いたが、数学者は、日常的に出てくる数(実数)だけではなくて、もっと一般的な「数」(一般の環や体)の概念を扱う。そういう場合、実数乗というのはよくわからなくても、自然数乗や整数乗というのは問題なく定義できる。むしろ、「実数乗」というのは底が実数の時にしか定義できない、特殊で異常な概念という過激な見方もできる。

(底が実数じゃない場合でも「実数乗」が定義できる場合はあるが、いちいち取り扱っていると記事が収束しないのでカットする)

プログラミングをやったことのある人向けに言うと、ここで書いた考え方は、引数の型による関数のオーバーロードみたいな感じである。あるいは、(Haskellがそうだが)「数の整数乗」と「実数の実数乗」に別の関数・演算子を割り当てるようなものだ。

実数の実数乗をどう扱うか・その二

「0の0乗が不定となる理由・その二」で、 \(x^y\) についての \(x\to 0, y\to 0\) の極限に言及した。この極限を考えるというのは、実数(の部分集合)の上での関数 \(\mathrm{pow}(x,y)=x^y=\exp(y\log x)\) について考えている、と言うこともできる。

この関数 \(\mathrm{pow}\) について、 \(x=0, y>0\) の場合は \(\mathrm{pow}(x,y)=0\) (★)であり、 \(x>0, y=0\) の場合は \(\mathrm{pow}(x,y)=1\) (◎)となることに異論はないだろう。

問題は \(x=0, y=0\) の場合で、\(\mathrm{pow}(0,0)=1\) とすれば(★)に反し、\(\mathrm{pow}(0,0)=0\) とすれば(◎)に反する。あっちを立てればこっちが立たず、こっちを立てれば…、という状況だ。困った。

だがちょっと待って欲しい。「困った」とは、何が「困った」なのか。仮に \(\mathrm{pow}(0,0)=1\) として、\[\mathrm{pow}(0,y)=\begin{cases} 0 & y>0 \\ 1 & y=0 \end{cases}\]となることの何が問題なのか。

それはもちろん、\(\lim_{y\to{+0}} \mathrm{pow}(0,y)\ne\mathrm{pow}(0,0)\) となってしまう、つまり、\(\mathrm{pow}\) が連続でなくなるからだ。

しかし、\(\mathrm{pow}\) が \((x,y)=(0,0)\) で連続である必要がどこにある?そもそも \(\mathrm{pow}\) は \(x=0, y<0\) や \(x<0\) の場合は(実数の範囲では)定義できないわけで、そういう意味では \((x,y)=(0,0)\) は定義できるかできないかの瀬戸際なのだ。

(TODO: 平面に \(\{(x,y)\mid x>0\}\cup\{(0,y)\mid y>0\}\) を描いた図を載せる)

こういう「定義できるかできないかの瀬戸際」の場合、

  • \((x,y)=(0,0)\) を定義域から外してしまう(実数の実数乗をどう扱うか・その一)か、
  • \(x^y\) は \((x,y)=(0,0)\) でも定義する……!定義するが……今回まだ『連続である』とまでは言っていない つまり我々がその気になれば 『\(x^y\) は \((x,y)=(0,0)\) で不連続』ということもありうる……ということ……!

の二択である。そして、これまでに書いた(0の0乗を1とする)理由から、\(x^y\) の連続性は諦めて「\(x=y=0\) のときでも \(x^y=1\) とする」のはぶっちゃけアリだと思う。

この記事で取り扱わなかったこと

集合論的にどうのこうの:まあ、うん、そうだね。

複素数の複素数乗:そもそも多価だし話がこじれるだけだと思った。というか、 \(x^y\) なんて表記は使わずに、\(\log\) のブランチを一個決めた上で \(\exp(y\log x)\) と書いてください。(もっと言うと、実数乗の場合も \(x^y\) と書かずに \(\exp(y\log x)\) と書いてくれ)

こういう、定期的に出てくる「わかってる人とそうでないひとで認識が違う」話題について自分の考えを記事の形で表明しておくことは大事だと思うので、こうやって書いておく次第である。今後自分の周りでこの話題が出てきたら「私の考えはこれです」と言ってこの記事のURLを貼れば良い。