世の中に $1 = 0.999…$ の証明はありふれてるので、逆に $1 ≠ 0.999...$ の証明をやってみます。
定義からはじめる
小数の記法を以下のように定義します。
まず、$x$ を正の有理数として、$f(x) = \lfloor x \rfloor \bmod 10$ つまり、 $f(x)$ を 「$x$ を切り捨てで整数に丸めた値を、$10$ で割った余り」とします。
このとき、正の有理数 $a$ を小数として書き表す場合、以下の各 $f(x)$ を計算して得られた整数を順番に書きならべる。
...f(\frac{a}{100})f(\frac{a}{10})f(a).f(a × 10)f(a × 100)...
ただし、$...000$ のように左方向に無限に並ぶ $0$ を省略してよい。この省略によって、「$.$」が先頭に来た場合、先頭に$0$を書き足す。
$000...$ のように右方向に無限に並ぶ $0$ も省略してよい。この省略によって、「$.$」が末尾に来た場合、この「$.$」も省略する。
この $f(x)$ は、プログラムなどで特定の桁の数字を取得したい場合にも使用されるような関数で、すべての桁について対応する整数値を求めれば、その数値の小数表現が得られるよという話です。
例えば、$a = \frac{6}{5}$ のとき
\displaylines{
f(a) = \lfloor \frac{6}{5} \rfloor \bmod 10 = 1 \\
f(a × 10) = \lfloor 12 \rfloor \bmod 10 = 2
}
で、それ以外は $0$ なので $1.2$ と書き表せます。
1 ≠ 0.999...の証明
\displaylines{
1 = 0.999... と仮定する \\
\\
小数の記法の定義に基づいて 0.999... の一の位に着目すると\\
0 = f(0.999...) \\
仮定より、f(1) = f(0.999...) \\
f(x)の定義より、f(1) = \lfloor 1 \rfloor \bmod 10 = 1 \\
0 = f(0.999...) = f(1) = 1 \\
となり矛盾\\
\\
よって、1 ≠ 0.999...
}
補足:
ここの $1 ≠ 0.999$ はそれらが異なる数を指すということではなく単に $1 = 0.999...$ ではないという意味です。先述の定義の元では $1$ を$0.999...$ と書くことは許されず、 $0.999...$ と表記される数がそもそもありません。
よくある 1 = 0.999... の証明①への反論
\displaylines{
\frac{1}{3} = 0.333... \\
3 × \frac{1}{3} = 3 × 0.333... \\
1 = 0.999...
}
各ケタに対して掛け算をしてよいという計算則が定義から導けないため、$3 × 0.333... = 0.999...$ が不正な演算である
よくある 1 = 0.999... の証明②への反論
\displaylines{
a に対して小数で書き表した各桁を d_k とする \\
(小数第一位をk=1として、kが増えるほど右側の桁を指す)\\
このとき a = \sum_{k}\frac{d_k}{10 ^ k} が成り立つ\\
\\
a が 0.999... と書き表せるとき \\
a = \sum_{k=1}^{∞}\frac{9}{10 ^ k} = 1 \\
よって、0.999... = 1 \\
}
「$a が 0.999… と書き表せる ⇒ a = 1$」であることを証明してはいるが、逆の「$a = 1 ⇒ a が 0.999… と書き表せる$」が成り立つとは限らない。
つまり、$0.999...$と書き表せる有理数自体が存在しておらず「$a が 0.999… と書き表せる$」という仮定自体が偽であるため、「仮定が偽であれば命題が真」という事実によって、「$a が 0.999… と書き表せる ⇒ a = 1$」という命題が真になってるだけである。
なにがおかしかったか?
さて当然ですが、 何かがおかしいです。$1 ≠ 0.999...$ という結論は一般論とは異なります。そのような結論が出るのは、何かが一般論と違っているからです。
ここでは小数の記法の定義が違っています。一般的には $\sum\frac{d_k}{10 ^ k}$ のような累積和で小数の記法を定義します。つまり、 $0.999...$ は $\frac{9}{10} + \frac{9}{100} + \frac{9}{1000} + ...$ のような無限級数の和になるように定義するわけです。
これらの記法を区別するため、冒頭の記法を「床関数による記数法」、一般的な記法を「一般的な記数法」と呼ぶことにします。
この「床関数による記数法」と「一般的な記数法」とはほとんどの場合は同じです。ただ1点、「床関数による記数法」では 0.999... のような 9 が循環する循環小数に対応する有理数が存在しないように定義しており、「一般的な記数法」では無限級数を使うことで 9 が循環する循環小数でも問題なく扱えるものとしてます。
この記事の趣旨は?
「$1 ≠ 0.999...$」という主張がしたいという趣旨ではありません。「$1 ≠ 0.999...$」と主張する人がどのような思考に基づいてるのかをひも解くのが狙いです。
「床関数による記数法」を前提に考えると、$1 ≠ 0.999...$派の人たちが、$0.999...$をどうとらえているのかという疑問に対して答えを出すことができます。
Q. なぜ 「$1 = 0.999...$」 に対して違和感を持つのか?
A. $1$ を書き表す時に一の位に書くべき数字は $1$ であり、ここを $0$ と書いてる時点で記法のルールを破ってるから
Q. なぜ 「$1 = 0.999...$」 の証明に対して納得できないのか?
A. 記法の定義から導出していないすべての証明について「床関数による記数法」を前提にして考えてた場合に、どこかしらに論理の飛躍があるから。定義の合意がとれていないのに証明を行っても正しい証明には見えないから
Q. なぜ、「$\frac{1}{3} = 0.333...$」は認めて、「$1 = 0.999...$」 は認めないのか?
A. 「床関数による記数法」に従って $\frac{1}{3}$ に対して各桁の $f(x)$ を求める計算を行うと $0.333...$ になるが、$1$ に対して各桁を求める演算を行うと $1.000...$ にしかならず $0.999...$ にはなり得ないから
Q. なぜ「一般的な記数法」ではなく、「床関数による記数法」を採用してしまうのか?
A. 小中高で習う循環小数の導入は割り算の筆算の過程で割り切れない場合に循環があらわれることからで、仮にその割り算の筆算操作に基づいて循環小数表現を定義すると $9$ で循環する循環小数が現れないせいで未定義となり、「床関数による記数法」と同等のものになってしまうから
すべての$1 ≠ 0.999...$派がこのような思考に基づいているというわけではありませんが、それでもなぜ$1 = 0.999...$に違和感を持つのかを理解する一助になると思います。
なぜ、「一般的な記数法」を採用するのか?
2つの記数法には根本的な部分に思想の違いがあります。「床関数による記数法」はまず値があってその値に対して相応の表記を与えるという思想から出発しており、「一般的な記数法」ではまず表現があってそれに相当する値を算出するという思想が見えます。
表現できる以上はその表現に対して何かしら合理的な定義を与えたくなるというのが、数学者の習性というものです。
たとえば、$負の数×負の数$、$n^{負の数}$、$1.5$の階乗など、これらの演算は原始的な定義の時点では未定義だったはずです。そこから「その表現に対して何らかの値を当てはめるとしたら何になるか?」と考えていくことで定義を拡張し、より数学を便利にしてきました。
$0.999...$ についても割り算の筆算による原始的な定義ではカバーされていなかった表現であったが、定義を拡張して許容される表現の幅を増やしたと考えるのがよさそうです。
1 = 0.999...を主張する上で思うこと
$1 ≠ 0.999...$ 派が非論理的であるとか無限級数や極限を理解していないというのはややずれた考えのように感じます。$1 = 0.999...$であるべきという主張とは循環小数をどう定義するかの差しかなく、異なる定義から出発してればどちらも論理的でありえます。
つまり、$0.999...$ が $1$ ではなく、未定義や解なしになるように定義を行っても無矛盾であるし、そのような記数法でも有理数を循環小数として表現するという用途において困ることはありません。
$1 = 0.999...$ は、あくまで数学としての哲学や慣習や利便性から、そうなるような定義を採用したいという話であり、否定派との論争は、論理性バトルではなく、哲学や利便性バトルになるべきように思います。
1 ≠ 0.999...派に対して思うこと
よくある $0.999...$ は、$1$ より無限小だけ小さい値であり、 $1 > 0.999...$ であるというような主張は筋が悪く感じます。そのような体系では $\frac{1}{3} > 0.333...$ になりがちで、そうなると循環小数の定義が割り算の筆算による原始的な定義からずれてしまいます。これでは循環小数を有理数の表現として使えなくなってしまい利便性バトルで勝機を失ってるように見えます。そういう数を扱いたいなら少なくとも別の記号を使用したほうが良いのでは?と思ってしまいます。
むしろ、$0.999…$ を定義をしないことの利便性を説いたほうがまだ筋がよさそうです。
例えば、以下のような論旨を持ち出した方が、まだ勝機がありそうです。
- $0.999…$ は、まるで、その整数部分が(本当は$1$であるにもかかわらず) $0$ であるというような誤解を生む表現であり、数学の証明を一種のコミュニケーションと考えるならば、そのような誤解の余地がある表現は避けるべきである
- $0.999…$ を定義することで、明確に楽になる証明や、計算が存在していない。「一般的な記数法」は無限級数の略記でしかないので、$0.999...$ のように「床関数による記数法」では未定義になる表現については略記をせず無限級数のまま書き記せばよいだけである。実際、$\frac{1}{2}+\frac{1}{4}+ \frac{1}{8}+ ...$ のような無限級数をあつかうとき、わざわざ二進数の $0.111...$ に変換しないと困るわけでもない。$\frac{9}{10} + \frac{9}{100} + \frac{9}{1000} + ...$ に対応する循環小数表現がなくなっても別に困らない
- $0.999…$ を定義することで、明確に楽になる証明や計算が存在していないなら、オッカムの剃刀的にそれを定義する必要がない
さいごに
この記事は以下のツイートを受けて書きました。
私としても $1 = 0.999...$ は、真理ではなく慣習であるように思っていたので、$1 = 0.999...$ に感じる気持ち悪さをなるべく言語化するべく記事を書きました。
少なくとも私にとって「$1 = 0.999...$」に感じる気持ち悪さは、無限の扱いに対して感じる気持ち悪さではなく、整数部分が $1$ であるにも関わらず、「$.$」の左側に $0$ と書くことを許す記法に対する気持ち悪さでした。では、それを許さないような記法を定義した場合、何が起こるのかという切り口で文を書きました。
そういう記法を採用したとしても、単なる記法の話なので無矛盾で成立します。十進数を使っても二進数を使ってもそのせいで何か矛盾が発生したりしないのと同じです。
$0.999...$ のような表現をあえてしないといけない数学分野もあまりなく、$0.999...$ を許さないような記数法を使ってたとしてもそれが表出することはほとんどありません。つまり、「一般的な記数法」と「床関数による記数法」で一致してる部分の表現しか行わず、乖離してる表現について触れないように振る舞っても問題が生じません。
ただ記法というものは、結局は主流であるものが利便性バトルで勝つと思ってるので、これからもみなさん $1 = 0.999...$ な世の中を生きていきましょう。