位取り記法の復習
数学には色々な「数」が現れます。自然数、整数、有理数、実数、複素数、は聞いたことがある人も多いでしょう。これらには概念としての包含関係があり、自然数ならば整数、整数ならば有理数、有理数ならば実数、実数ならば複素数となります。
実数や複素数以外にも、有理数を含む「数」の概念として、\( 2 \)進数、\( 3 \)進数、\( 5 \)進数、\( 7 \)進数、\( 11 \)進数、……というように、各素数\( p \)ごとに\( p \)進数という概念が存在します。つまり、\( p \)進数とは、\( p = 2 \)の時は\( 2 \)進数のことに他ならず、\( p = 3 \)の時は\( 3 \)進数のことに他ならず、\( p = 5 \)の時は\( 5 \)進数のことに他なりません。素数\( p \)を具体的に1つ固定したくない時(固定しなくても\( p \)に依存しない議論ができる時)に、\( p \)を変数のように残したまま何の素数も代入せずに\( p \)進数と呼びます。
このように色々な「数」の概念が現れると、そもそも「数」とは何なのか? という疑問が湧いてきます。困ったことに「数」という概念に数学的な定義であって広く普及しているものは存在しないので、客観的な答えを出すことは難しいでしょう。しかしその疑問を持ったまま\( p \)進数の話に入ってもモヤモヤしてしまうので、まずは中学までに習う「数」について復習することで「数」とは何かを自分の中で再認識しましょう。
前提として、「数」には色々な書き表し方がありますが、「数」の定義自体はその書き表し方と独立に与えられるということを意識して下さい。ここを混同して、「数」をある方法で書き表した文字列そのものが「数」の定義と思い込んでしまうと、\( 1 = 0.999 \cdots \)のような等式の「意味」をあれこれ考えようとして混乱してしまうことがあります。「数」そのものとそれを表示した文字列の違いに要点を置いて何度も強調しつつ、「数」とその表示方法を見ていきましょう。
自然数と位取り記法
まず自然数は物の個数(0個、1個、2個、……)や序数(1番目、2番目、3番目、……)を表すためによく使われる「数」で、\( 0{} \)、\( 1 \)、\( 2 \)、\( 3 \)、……と無限に存在します*1。
さて、無限種類ある自然数をそれぞれ別々の文字で表すには無限種類の文字を用意しなければなりません。もちろん無限種類の文字を定義してもよいのですが、有限種類の文字だけを使って自然数を書き表せた方が記憶力の節約になります。そこで役に立つのが自然数の位取り記法です。いわゆる\( 2 \)進法表記や\( 10 \)進法表記や\( 16 \)進法表記のことですね*2。\( 2 \)以上の自然数\( n \)に対して\( n \)進法表記は、\( 0{} \)から\( n-1 \)までの\( n \)種類の数字という特別な文字を用い、1文字だけではなく有限の長さの文字列を使うことで全ての自然数を表す方法です。\( n \)が\( 2 \)の時は\( 0{} \)と\( 1 \)のみを用い、\( n \)が\( 10 \)の時はそれらに加えて\( 3 \)と\( 4 \)と\( 5 \)と\( 6 \)と\( 7 \)と\( 8 \)と\( 9 \)も用い、\( n \)が\( 16 \)の時はそれらに加えて\( A \)と\( B \)と\( C \)と\( D \)と\( E \)と\( F \)を用いることが多いです*3。
よくある誤解は、自然数の定義を「\( 10 \)進法表記の文字列」そのものと思い込んでしまうことです。自然数の定義*4はその表示方法と別にあり、\( 10 \)進法表記はあくまでその1つに過ぎないということに注意して下さい。普段はその違いを気にする必要がないのは、ただ\( 10 \)進法表記で相異なる2つの文字列が必ず相異なる自然数を表すという性質のおかげです。実際その性質によって、\( 10 \)進法表記の文字列を使って直接自然数と等価な概念を定義とすることも可能です。
\( 10 \)進法表記の文字列を自然数そのものと思い込んでいると、あたかも\( 10 \)という数が特別なものであり、特に\( 2 \)と\( 5 \)がとても良い性質を持つように感じてしまうことがあります。例えば\( 10 \)進法表記では「偶数か否か、\( 5 \)の倍数か否か、\( 10 \)の倍数か否か」をそれぞれ「右から\( 1 \)桁目が偶数か否か、\( 5 \)の倍数か否か、\( 0{} \)か否か」という一目で分かる情報に翻訳することが出来ますが、「\( 3 \)の倍数か否か」は「各桁の和が\( 3 \)の倍数か否か」という少し計算の必要な情報に翻訳され、「\( 7 \)の倍数か否か」は「\( 3 \)桁ごとに区切った時にその各\( 3 \)桁の和が\( 7 \)の倍数か否か」という面倒な計算の必要な情報に翻訳されます*5。しかしこれは、\( 2 \)と\( 5 \)が\( 3 \)や\( 7 \)より扱いやすい自然数であるという意味になりません。あくまで、\( 10 \)進法表記が\( 2 \)と\( 5 \)と相性が良いだけです。
例えば\( 21 \)進法表記では\( 2 \)も\( 5 \)が別段扱いやすくもなく、\( 3 \)と\( 7 \)が扱いやすく感じるでしょう。実際、\( 21 \)進法表記では「\( 3 \)の倍数か否か、\( 7 \)の倍数か否か、\( 21 \)の倍数か否か」をそれぞれ「右から\( 1 \)桁目が\( 3 \)の倍数か否か、\( 7 \)の倍数か否か、\( 0{} \)か否か」という一目で分かる情報に翻訳することが出来ますが、「偶数か否か、\( 5 \)の倍数か否か」はそれぞれ「各桁の和が偶数か否か、\( 5 \)の倍数か否か」という少し計算の必要な情報に翻訳されてしまいます*6。つまり、\( 2 \)や\( 5 \)の扱いやすさは自然数の定義に内在的な性質ではなく、\( 10 \)進法表記という人為的な選択に依存した性質であるということです。\( 10 \)進法表記が特別なものに感じるのは、人間の手の指の本数が\( 10 \)であるということと、既に\( 10 \)進法表記が広く普及し見慣れていることが理由です。これは本当にたまたまの話で、自然数の中で\( 10 \)が特別な数ということを表しません。以上を踏まえると、自然数そのものとそれを人為的に表示する文字列の違いが分かっていただけると思います。
有理数と循環小数表示
次に有理数は個数の比などを表すためによく使われる「数」で、自然数を含む概念です。非負の有理数を書き表す方法の1つが分数表示で、これは非負の有理数に対応する自然数の比を上下に並べて横線で区切ったものです*7。具体的には、非負の有理数\( q \)が自然数\( N \)と\( M \neq 0 \)の比である*8時、\( \frac{N}{M} \)という文字列で\( q \)を表します。
ここで気を付けると良いことは、非負の有理数の分数表示はあくまで表示方法の1つであり、定義そのものではないということです。つまり、文字列として相異なる分数が同じ有理数を表すことがあります。例えば\( \frac{1}{3} \)と\( \frac{2}{6} \)は相異なる文字列ですが、同じ有理数を表します。このように、「数」の表示方法を1つ与えた時に、1つの「数」が複数パターンの文字列で表されることがありえます。
非負の有理数を書き表す方法は分数表示だけではありません。小数点という記号を導入することで、自然数の\( n \)進法表記を非負の有理数の小数表示に「自然に」拡張することができます。これは\( n \)種類の数字を用い、有限の長さだけでなく無限の長さの文字列も使うことで非負の有理数を表す方法です。ただし、小数点の左側は有限の長さで、かつ小数点の右側は有限の長さであるかまたは途中から循環するという制約を課します*9。
具体的には、非負の有理数\( q \)が自然数\( N \)と\( n^r \)(ただし\( r \)は自然数)の比である時、\( N \)の\( n \)進法表記の右から\( r \)桁目と\( r+1 \)桁目の間に小数点を打って得られる有限の長さの文字列*10で\( q \)を表します。また\( q \)が自然数\( N \)と\( n^r(n^s-1) \)(ただし\( r \)は自然数で\( s \)は正の自然数)の比である時、\( N = (n^r - 1) \times M + R \)と\( R < n^s \)を満たす唯一の自然数\( M \)と正の自然数\( R \)の組を用いて\( n^r \times M + R \)の\( n \)進法表記の右から\( r \)桁目と\( r+1 \)桁目の間に小数点を打ってその右端に、\( R \)の\( n \)進法表記の左端に適宜\( 0{} \)を補って\( s \)桁の文字列にしたものを巡回させて得られる無限桁の文字列で\( q \)を表します*11。
分数表示と同様に、小数表示もあくまで表示方法の1つであり、文字列として相異なる小数が同じ有理数を表すことがあります*12。例えば\( 1 \)と\( 0.999 \cdots \)は相異なる文字列ですが、\( 10 \)進法表記の小数表示で同じ有理数を表します。ここはしばしば混乱を生じるところですが、有理数という概念には表示方法と独立に定義がある、ということに注意すれば納得しやすいと思います。
実数と小数表示
さて、非負の有理数の小数表示で与えられる文字列は、有限の長さのものか、または右に無限の長さであって途中から巡回するものに限られました。つまり、\( n \)種類の文字を用いた右に無限の長さの文字列であってどこからも巡回しないものは、非負の有理数の小数表示としては現れません。中学の数学からは、そのような文字列も何らかの「数」の\( n \)進法表記の小数表示とみなします。そのような「数」こそが、非負の実数です。
もちろん実数もまた、表示方法(特に小数表示の進数の\( n \)の選び方)とは独立に定義されます*13。つまりあくまで定義ではなく定理として、全ての実数に対して\( n \)進法表記における小数表示を与える具体的な方法があり、その方法は有理数の\( n \)進法表記における小数表示の方法を拡張するということが成り立ちます。従って、\( n \)進法表記の小数であるような2つの相異なる文字列が同じ実数を表すことがあります。実際、有理数は実数であり、有理数でそのような現象を確認しました*14。
この実数という概念を見ると、「数」とは何かについて少し参考になると思います。実数の定義は本当に形式的なもので、それを見てもあまり自然数や有理数ほど自然には現れません。もちろん自然界を熟知した科学者なら世界を見渡すだけで自然に実数という概念を無から思い付くかもしれませんが、それはかなりの離れ業です。よく「実数は実在する数のことである」と断言する人がいますが、そういった人の中には実数を厳密な定義ではなく漠然とした雰囲気でしか認識していない人が少なくないと考えています。詳しくは次を参照して下さい。
それでも私達は実数を紛れもなく「数」と呼ぶわけです。詰まるところ「数」とは「数」と呼ばれる対象のことであるというトートロジーに落ち着くのだと思います。複素数だって皆が「数」と呼んでいるから数ですし、逆に誰かがある対象を「数」と呼ぶならば、それはその人にとって立派な「数」なのだと思います。それでもある程度一貫した傾向として、「数」とは自然数の定義や表示方法を「自然に」拡張する形で得られる数学的対象の呼び名であることが多いと思います。
「数」の表記と拡張
ここまでの流れを復習すると、自然数の\( n \)進法表記を導入し、それを「自然に」拡張して非負の有理数の\( n \)進法表記における小数表示を定義し、更に途中から循環するとは限らない全ての小数に対応する形で実数を定義していくことになりました。
ここで、非負の有理数の\( n \)進法表記における小数表示は、自然数の\( n \)進法表記を「自然に」拡張したものであると述べました。あくまで自然なだけで、唯一無二のものではありません。実は、自然数の\( n \)進法表記を「自然に」拡張して非負の有理数の\( n \)進法表記における小数展開を定義する方法が、もう1つあるのです。
先程までは非負の有理数の小数表示を、左に有限桁で右に無限桁のものを定義として考えていましたが、逆に右に有限桁で左に無限桁のものを定義として考えることが出来ます。すると、左に無限桁の小数であって非負の有理数の小数表示では現れないものがやはり存在するので、そういった文字列も何らかの「数」の小数表示とみなします。
\( n \)が素数ではない時、そのような「数」はあまり良い性質を満たしません。しかし、\( n \)が素数である時、そのような「数」は実数に匹敵するほど良い性質を持ちます。素数\( n \)を\( p \)と置いて、そのような「数」を\( p \)進数と呼びます。もちろん、\( p \)進数もまた、その表示方法である小数表示とは独立に定義が存在します。しかし実数では成り立たなかった重要な性質として、文字列として相異なる2つの小数は必ず相異なる\( p \)進数を表すということが成り立ちます。従って、小数表示そのものを使って\( p \)進数という概念を定義することが出来ます。実際、Encyclopedia of \( P \)-adic Numbersでは小数表示を使って\( p \)進数をまず定義し、後で他の定義と比較をして等価であることを証明していきます。
また逆に、実数は進数の\( n \)と独立に定義できて各\( n \)ごとに\( n \)進法表記における小数表示が定義されるという性質がありましたが、\( p \)進数は\( p \)という素数を1つ固定するごとに定義され、それが結果的に自然数の\( p \)進法表記のみと相性が良くなり\( p \)進法表記における小数表示を持ちますが、他の素数を進数とする小数表示は持ちません。しかも最初に述べたように、\( 2 \)進数、\( 3 \)進数、\( 5 \)進数、……は互いに異なる概念であり、つまり\( p \)ごとに互いに等価でない「数」の概念が生まれます。
さて、ここまではあくまで1つの小話であって、まだ\( p \)進数の厳密な定義をしたわけではありません。以上を踏まえて、いざ実際に\( p \)進数の定義を見ていきましょう。
*1 &mathjax{0{}};を自然数とみなすか否かは人や文献によって異なりますが、それはあくまで流儀の問題なので、一貫性があればどの流儀を採用しても構いません。[[Encyclopedia of &mathjax{P};-adic Numbers>FrontPage]]では&mathjax{0{}};を自然数とみなす流儀を採用します。
*2 位取り記法の進数を表す数字には&mathjax{2 \times 5};進法表記を用いています。つまり&mathjax{10};進法は&mathjax{2 \times 5};進法のことで、&mathjax{16};>進法は&mathjax{2^4};進法のことです。
*3 つまり&mathjax{A};は&mathjax{2 \times 5};を、&mathjax{B};は&mathjax{A + 1};を、&mathjax{C};は&mathjax{B + 1};を、&mathjax{D};は&mathjax{C + 1};を、&mathjax{E};は&mathjax{D + 1};を、&mathjax{F};は&mathjax{E + 1};を表します。
*4 実は自然数の厳密な定義は少し難しいです。
*5 興味がある人は証明してみましょう。
*6 興味がある人は証明してみましょう。
*7 もちろんこの記法は容易に拡張され、自然数の分数だけでなく有理数の分数も定義されます。
*8 つまり&mathjax{N = q \times M};であるということです。
*9 小数点の右側が有限の長さのものは、無限の長さであって途中から&mathjax{0{}};が循環していると考えることも出来ます。
*10 &mathjax{N < n^r};の場合は&mathjax{N};の&mathjax{n};進法表記が&mathjax{r};桁以下になってしまうので、適宜左側に&mathjax{0{}};を補って下さい。
*11 非負の有理数の小数表示の説明に収束概念を用いることもあり、もちろんそれも正しいですが、ここに記したように収束概念を用いなくても循環小数としての表示方法を四則演算で定義することが可能です。
*12 何故ならば、先程説明した非負の有理数&mathjax{q};の小数表示方法において、2パターンの場合分けが排他的でなくどちらのパターンにも属する状況があるからです。
*13 実数の厳密な定義を習うのは大学で&mathjax{\epsilon};-&mathjax{\delta};論法を学んでからであることが多く、中学まででは漠然と数直線の各点に対応する数と理解することが多いかもしれません。それでは数直線の定義は何か、という問いに答える必要があるわけですが、やはりその厳密な定義には&mathjax{\epsilon};-&mathjax{\delta};論法等が必要になると思われます。
*14 実はそのような現象は有理数であるような実数に特有のものです。