0. この記事の要点
Section titled “0. この記事の要点”- 割り算 は「 に掛けて になる数」のことです。この定義に戻ると、ゼロ除算が禁止される理由が計算だけで見えてきます。
- のとき、 に何を掛けても にしかなりません。だから は答えが 1 つもなく、 は答えが多すぎる(すべての数が答えになる)のです。
- 「 の逆数」を 1 つでも認めると、分配法則から が出て、その数の世界にある数はすべて になります。禁止は道徳ではなく、体系の自壊を避けるための処置です。
- のグラフを見ると、 を に右から近づければ 、左から近づければ へ行きます。近づき方で行き先が違うので、 での値を「極限で埋める」こともできません。
- ただし逃げ道はあります。複素数にもう 1 点だけ を足したリーマン球面、 型の極限を扱う微分、そして「 と決めてしまう」計算機上の流儀。どれも「割り算」の意味を作り変えることで折り合いをつけています。
1. 動機:なぜ先生は理由を教えてくれないのか
Section titled “1. 動機:なぜ先生は理由を教えてくれないのか”小学校で「 で割ってはいけません」と習います。理由を聞くと、たいてい「決まりだから」「答えがないから」で終わります。中学・高校になっても、分母が になる場面では「 とする」という但し書きが黙って付くだけで、なぜそこを避けるのかは説明されないことが多いのです。
そのせいで、この禁止はしばしば「数学界の謎ルール」のような扱いを受けます。電卓に 1 ÷ 0 = と入れると Error が出る。表計算ソフトは #DIV/0! と怒る。プログラムを書けば例外で止まる。まるで機械が全員で口裏を合わせているようです。
しかし理由は、実はとても単純です。割り算という言葉の定義に戻れば、 で割った答えが「存在しない」か「決まらない」かのどちらかになることが、その場で確かめられます。 さらに一歩進めて「それでも無理に答えを 1 つ決めたらどうなるか」を追いかけると、数の体系そのものが崩れる様子が見えます。この記事ではその 2 段階を、計算を全部書きながら追います。
数学のルールの多くは、この「禁止」と同じ構造をしています。恣意的な禁令に見えるものが、実は定義から出てくる帰結にすぎない。ルールを暗記の対象ではなく帰結として読む練習については 数学はなぜ難しいのか、とくに 証明とは何か(定義 4.1)[数学はなぜ難しいのか] も参考にしてください。記号の意味を先に決めてから答えを出すというこの手順は、1 は 0.999… と等しいか の 無限小数の値の定義(定義 2.2)[1 は 0.999… と等しいか] でも同じ形で使われています。
2. 準備:割り算とは何だったか
Section titled “2. 準備:割り算とは何だったか”まず「割り算」の意味をはっきりさせます。 が正しいのはなぜでしょうか。 だからです。つまり割り算は、掛け算を逆向きにたどる操作です。
定義 2.1(割り算(積の逆演算))
, を実数とする。方程式
の解 がただ 1 つ存在するとき、その解を (または )と書き、 を で割った商という。解が存在しないとき、または解が 2 つ以上存在するときは、 は定義されない。
「ただ 1 つ」という条件を強調しておきます。記号 は 1 つの数を指す名前です。名前が指すものが無かったり、複数あったりしては、名前として使えません(逆に、1 つの数に複数の名前が付くのは構いません。 と が同じ数の別名であるのがその例です — 小数展開の二重表現(定理 6.1)[1 は 0.999… と等しいか])。 を「 乗して になる数」と定義しないで「 乗して になる非負の数」と定義するのも、同じ事情です。
定義 2.2(逆数)
実数 に対し、 を満たす実数 がただ 1 つ存在するとき、それを の逆数といい または と書く。
のときは逆数が存在します。たとえば なら です。そして が成り立ちます。実際 なので、 は確かに 定義 2.1 の方程式の解です。
すべての鍵を握るのは、次の補題です。「 に何を掛けても 」は当たり前に見えますが、これは決まり文句ではなく、分配法則から証明できる事実です。
補題 3.1(ゼロの吸収律)
任意の実数 に対し が成り立つ。
証明(補題 3.1)
は加法の単位元なので です。両辺に を掛けて、分配法則を使うと
ここで は 1 つの実数ですから、その加法の逆元 が存在します。上の等式の両辺にそれを足すと、左辺は
右辺は
となります。したがって です。
この補題が言っているのは、掛け算という操作の中で はブラックホールだということです。何を放り込んでも しか出てこない。すると、逆向きにたどる割り算は当然おかしくなります。
証明(命題 3.2)
を満たす実数 が存在したとします。交換法則より であり、補題 3.1 を に適用すると です。よって となり、 という仮定に矛盾します。したがってそのような は存在しません。
証明(命題 3.3)
任意の実数 に対し、交換法則と 補題 3.1 より です。よって方程式 の解は実数全体であり、少なくとも つ(たとえば と )あります。解が一意でないので、商として選ぶべき数を決められません。
つまり、ゼロ除算の困りかたには 2 種類あります。 は候補がゼロ個で、 は候補が無限個です。前者は「答えがない」、後者は「答えが決まらない(不定)」と呼び分けます。どちらも という記号が 1 つの数を指せないという点では同罪です。
flowchart TD A["方程式 b × x = a の解を探す"] --> B{"b ≠ 0 か"} B -- はい --> C["解はちょうど 1 個<br/>x = a × (1/b)"] B -- いいえ --> D{"a ≠ 0 か"} D -- はい --> E["解は 0 個<br/>(5 ÷ 0 の場合)"] D -- いいえ --> F["解は無限個<br/>(0 ÷ 0 の場合)"]
例 3.4(クッキーで考える)
4. 「 の逆数」を認めると世界が潰れる
Section titled “4. 「000 の逆数」を認めると世界が潰れる”ここで、粘り強い人はこう考えます。「答えが無いなら、作ればいいのでは。 だって答えが無かったのに という新しい数を作ったじゃないか」と。
これは筋のいい反論です。数学は実際、その手で数の世界を広げてきました。引き算ができないから負の数を、割り算ができないから分数を、 が解けないから虚数を作った。では同じ手で「 を満たす新しい数 」を作ればよいのではないか。
答えは「作れますが、そのとき四則計算の法則のどれかを捨てなければなりません」です。次の定理が、その代償の大きさを教えてくれます。
定理 4.1(ゼロに逆元を与えると全体が潰れる)
を、加法・減法・乗法が定義され、加法の単位元 と乗法の単位元 を持ち、結合法則・交換法則・分配法則が成り立つ集合(可換環)とする。もし のある元 が
を満たすならば、 のすべての元は に等しい。すなわち であり、とくに である。
証明(定理 4.1)
この結果は強烈です。 の逆数を 1 つ認めただけで、 も も も もすべて になり、数直線が 1 点に潰れてしまいます。区別できる数が ただ 1 つしか残らない世界では、方程式も関数もグラフも意味を失います。虚数を導入したときは何も壊れませんでした(実数の四則計算はそのまま複素数の中で通用します)。それどころか のような新しい関係まで見つかっています(オイラーの公式(定理 4.1)[オイラーとラマヌジャン])。ゼロ除算はそこが決定的に違います。
系 4.2(どんな数の体系にも 0 の逆数はない)
であるような可換環(整数全体、有理数全体、実数全体、複素数全体、実数係数の多項式全体などはすべてこれに該当する)には、 を満たす元 は存在しない。
証明(系 4.2)
存在したとすると 定理 4.1 より となり、 という仮定に矛盾します。
逆に言えば、 を認める体系はちょうど 1 つだけあります。元が しかない零環です。この世界では確かに で割れます()。ただし数が 1 つしかないので、割り算に限らずすべての計算が になるだけです。ゼロ除算を許した代償として、数学が完全に沈黙します。
ゼロ除算の禁止を破ると具体的にどう間違えるのか。有名な「証明」を見ておきます。
例 4.4(1 = 2 の偽証明)
5. グラフで見る: は の近くで何をしているか
Section titled “5. グラフで見る:1/x1/x1/x は 000 の近くで何をしているか”代数の側からは「答えが無いか多すぎる」でした。解析(グラフや極限)の側から見ると、また違う顔が見えます。 のグラフを描いてみましょう。
右側の枝は、 が に近づくほど天井知らずに上がっていきます。左側の枝は、同じく に近づくほど床を突き抜けて下がっていきます。この様子を数値で確かめます。
例 5.1(1/x の値の表)
を に近づけたときの の値です。
右から近づくと の方へいくらでも大きくなり、左から近づくと の方へいくらでも小さくなります。両者の差は縮まるどころか、 に近づくほど開いていきます。 では上下の値の差が もあるのです。
この「いくらでも大きくなる」を、感覚ではなく式で押さえておきます。どんなに大きな目標値を決めても、それを超えさせるほど に近い が必ず取れる、という点が要になります(この「いくらでも小さい正の数が取れる」ことを保証しているのが実数のアルキメデス性です — アルキメデスの原理(補題 3.6)[1 は 0.999… と等しいか])。
定義 5.2(正の無限大に発散する)
( が正の値を取りながら に近づく)のとき、関数 が正の無限大に発散するとは、どんなに大きな数 を持ってきても、それに応じて を選んで
とできることをいう。このとき と書く。負の無限大への発散も同様に、 を に置き換えて定める。また ( が負の値を取りながら に近づく)の場合は、条件 を に置き換えて同様に定める。
命題 5.3(1/x の片側極限)
証明(命題 5.3)
前半を示します。 を任意に取り、 と定めます( なので です)。 とすると、 と はともに正なので、両辺に正の数 を掛けても不等号の向きは変わらず
すなわち が得られます。 は任意でしたから 定義 5.2 の条件が満たされ、 です。
後半は、 のとき であり、 に前半を適用すれば すなわち となることから従います。
系 5.4(x を 0 に近づけた極限は存在しない)
は、実数としても としても としても存在しない。
証明(系 5.4)
極限が存在するとは、右から近づいたときと左から近づいたときの行き先が一致することです。命題 5.3 より右からの行き先は 、左からの行き先は で、一致しません。より具体的に言えば、 をどれだけ小さく取っても(区間が狭いほど主張は強いので としてよい)、区間 の中には となる (たとえば )と となる (たとえば )が両方存在します。したがって の値が 1 か所に集まることはありません。
の定義域から を除くのは、単に「そこで値が大きくなりすぎるから」ではありません。近づき方によって行き先が食い違うため、どんな値を割り当てても関数が連続にならないからです。仮に と決めたとしても、 での値 と での値 の間で、グラフは の周りで跳ね回るだけです。
5.1. 型は「答えが何にでもなる」
Section titled “5.1. 0÷00 \div 00÷0 型は「答えが何にでもなる」”の不定性は、極限の言葉にすると生々しく見えます。
例 5.5(同じ 0 ÷ 0 の形から違う答えが出る)
6. それでも割りたい人のために
Section titled “6. それでも割りたい人のために”ここまでは「できない」話でした。では数学は で割ることを永久に諦めたのかというと、そうでもありません。割り算や数の意味を作り変えれば、限定的に許すことはできます。 代表的な 3 つを挙げます。
その 1:リーマン球面。 複素数全体 に、無限遠点と呼ばれる新しい点 をただ 1 つ付け加えた集合 を考えます。ここでは に対して 、 と定めます。定理 4.1 と矛盾しないのは、この集合が「加減乗除がすべて成り立つ数の体系」ではないからです。実際 、、、、そして は定義されないまま残されます。左右で行き先が違う問題も、複素数平面では のまわりをぐるりと回って近づけるので、 と が同じ 1 点 につながり、解消されます。値段は「引き算の自由」でした。
その 2:極限による迂回。 例 5.5 で見たとおり、 型の式は具体的な近づき方を指定すれば値が決まります。微分・積分はこの方針を徹底したもので、ロピタルの定理のように 型を系統的に処理する道具まで整備されています。ここでは「 で割る」のではなく「 に近い数で割った結果の行き先を見る」ことをしています。実数には「 に最も近い正の数」が無い(実数に無限小はない(系 5.2)[1 は 0.999… と等しいか])以上、 に迫るにはこの「行き先」を追いかけるしかありません。
その 3:便宜上 と決める。 Isabelle/HOL や Coq のような定理証明支援系、あるいは一部のプログラミング言語の整数除算では、 と定義してしまうことがあります。「 で割ったら未定義」という但し書きを毎回書く手間を省くための工学的な妥協です。この規約でも 定理 4.1 と矛盾しません。 の逆数を作ったわけではなく、 という記号に「 なら商、 なら 」という 2 段構えの意味を与えただけだからです。代わりに という割り算の基本性質が のとき壊れます。
その 4(おまけ):浮動小数点数。 電卓やコンピュータの実数計算(IEEE 754 規格)では、 は inf、 は -inf、 は nan(not a number、非数)という特別な値を返します。これは 命題 3.2 と 命題 3.3 の区別を、そのまま値として実装したものです。「解なし」には無限大、「不定」には非数。よくできています。
import numpy as np
with np.errstate(divide="ignore", invalid="ignore"): print(np.float64(1.0) / np.float64(0.0)) # inf print(np.float64(-1.0) / np.float64(0.0)) # -inf print(np.float64(0.0) / np.float64(0.0)) # nan
# 整数の割り算は例外になるtry: 1 // 0except ZeroDivisionError as e: print("ZeroDivisionError:", e)nan は「どんな数とも等しくない」という性質を持ち、nan == nan は偽になります。答えが決まらないことを、値そのものが自己申告しているわけです。
歴史的には、 で割る試みは古くからありました。7 世紀インドの数学者ブラフマグプタは、 を数として扱う規則を体系的に書いた最初期の人物ですが、 と述べています(現代の目には誤りです)。12 世紀のバースカラ 2 世は を「無限量」とみなす立場を取り、リーマン球面の発想に近いところまで来ていました。 が「無」ではなく計算対象の数になった時点で、この問題は避けて通れないものになったのです。数の歴史を作った人々については 有名な数学者(ラマヌジャン、オイラー) も合わせて読んでみてください。同じインドの数学の系譜に連なるラマヌジャンの逸話は 1729 の話(例 6.1)[オイラーとラマヌジャン] にあります。
演習 7.2標準
次の「証明」の誤りを、どの行で何をしたのが不当かを明示して指摘してください。
「 とする。このとき である。両辺から を引くと 。左辺を因数分解して 。両辺を で割って 。よって 。 と仮定したので である。」
演習 7.3標準
次の極限を求めてください。答えだけでなく、途中の変形が での割り算になっていないことも説明してください。
解答
(1) 分子を因数分解すると です。 の極限では が に近づく途中の値だけを見ればよく、 そのものは考えません。よって としてよく、 で約分できます。
右辺は で に近づくので、答えは です。
(2) 分子を展開すると です。(1) と同じく で約分して
極限は です。(これは の における微分係数 の計算そのものです。)
(3) 分子は で に近づき、分母 は正の値を保ったまま に近づきます。 型ではないので約分は起きません。実際、 のとき なので
(最後の不等号は のとき による)。命題 5.3 より右端は で に発散するので、 です。
3 問とも、約分で消したのは「 に近い でない数」であって そのものではありません。ここがゼロ除算と極限の分かれ目です。
第 6 節で紹介した「 と定義してしまう」規約を採用したとします。この規約のもとでも 定理 4.1 と矛盾しないことを説明し、その代わりに失われる性質を具体例で 1 つ挙げてください。
解答
矛盾しない理由。 定理 4.1 が禁じているのは、 を満たす元 が数の集合の中に存在することです。この規約は新しい数を作っていません。実数の集合はそのままで、記号 に
という 2 段構えの意味を与えただけです。 と書いても、 の逆数を だと主張しているわけではありません(もしそう主張すれば 、すなわち 補題 3.1 より となって潰れます)。したがって加減乗の法則は何も壊れません。
失われる性質。 割り算の一番基本的な性質
が で成り立たなくなります。実際 , とすると、規約より なので
同様に「 ならば 」も成り立ちません。つまりこの は、もはや 定義 2.1 の意味での「掛け算の逆」ではありません。 という条件を書き忘れたまま を使うと誤った結論が出るので、この規約を採る体系では、その条件を定理の側に明記する責任が残ります。手間が消えたのではなく、移動しただけです。
- 松坂和夫『代数系入門』岩波書店、1976 — 環と体の章。 の逆元が存在しないこと、零環についての標準的な扱い。
- 杉浦光夫『解析入門 I』東京大学出版会、1980 — 第 I 章。極限と発散の厳密な定義。
- Lars V. Ahlfors, Complex Analysis, 3rd ed., McGraw-Hill, 1979 — 第 1 章。リーマン球面と無限遠点の導入。
- Kim Plofker, Mathematics in India, Princeton University Press, 2009 — ブラフマグプタとバースカラ 2 世によるゼロの扱い。
- IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019) — 除算における
infとnanの規定。
Appendix: 「例外」と「特別な値」のどちらがよいか
Section titled “Appendix: 「例外」と「特別な値」のどちらがよいか”プログラミングの現場では、ゼロ除算の扱いが 2 通りに分かれます。 整数の割り算では例外を投げて計算を止める言語が多く、浮動小数点数では inf や nan を返して計算を続ける実装が主流です。前節の Python の例は、この 2 つが同じ言語の中に同居している様子でした。
どちらにも理由があります。 例外で止める方式は、間違いを見逃さない点で安全です。分母が になったのは大抵プログラムの論理ミスなので、その場で止まってくれた方が原因を特定しやすい。一方 nan を返す方式は、大量の数値計算を途中で止めたくない場面で威力を発揮します。たとえば 万点のデータのうち 点だけ分母が になったとき、その 点を nan として残り全部を計算し終える方が実用的です。nan は「これは信用できない値だ」という札として、以後の計算に伝播していきます(nan を含む足し算・掛け算の結果はすべて nan になります)。
共通しているのは、どちらも「普通の数を返す」ことだけは避けている点です。 もし が黙って を返したら、その は正当な計算結果と区別がつかず、誤りが下流へ静かに広がります。命題 3.2 と 命題 3.3 が言っているのは、まさに「返すべき普通の数が無い」ということでした。例外も nan も、この数学的事実をそれぞれのやり方で正直に報告しているだけなのです。
この記事の誤りを報告する ・運営: 夢現技研合同会社 ・料金プラン ・利用条件 ・特定商取引法に基づく表記
© 2026 夢現技研合同会社 ・本文の LLM への入力は自由です。コード例は MIT ライセンスです。