この記事は 第25回日曜数学会(2022.10.15) で発表した内容に加筆したものです。
Twitter で話題になった、すべての有理数を産み出す式について、いろいろ遊んでいたところ、作り方のレシピがわかったのですが、そのレシピがとても面白かったので記事にしました。
(話題になった @TamasGorbe さんのツイート)
Consider the function
— Tamás Görbe (@TamasGorbe) September 18, 2022
f(x) = 1 / ( ⌊x⌋ + 1 − {x} )
and the sequence of numbers
0, f(0), −f(0), f(f(0)), −f(f(0)), f(f(f(0))), −f(f(f(0))), ...
Congratulations, you've just listed every rational number exactly once! pic.twitter.com/NRlNnx49Ql
なお、この記事では原則として有理数は既約分数で表すこととします。また、説明を簡単にするため、自然数は分母が
元ネタのツイートではプラスとマイナスを交互に並べて「すべての有理数」を作る式としていましたが、この記事では簡単のためプラスの場合だけ考え、「すべての正の有理数」を作る式として考えることにします。
「整数部分」を
(整数部分)
(小数部分)
定義より、
まず、例の式を作るためのレシピを確認しましょう。
先にいい感じの数列を作ってから、漸化式をつくる方針で作ることができます。
○ ユークリッドの互除法(最大公約数を求めるやつ)
○ 二進数
これだけ知っていればこの記事の内容が理解できると思います。
なお、この記事では二進数を
では、さっそくいい感じの数列を作りましょう。
次のような操作を考えます。
この操作をすると、どんな正の有理数から始めても、必ず最後は
なぜなら、この操作はユークリッドの互除法で分母と分子の最大公約数を求める操作と本質的に同じであり、既約分数の分母と分子の最大公約数は
(例1)
一般の分数では分母と分子が最大公約数になったところで止まる
(例2)
既約分数の場合は
この操作を逆にみると、「
ここでちょっと面白いことを考えます。
「
・
・ 「分子の数を分母に加える」ときは文字列に
・ 「分母の数を分子に加える」ときは文字列に
できあがった文字列を二進数と解釈することで、それぞれの有理数に対応する自然数を作ることができます。
一対一対応ですから、自然数を引数にして有理数を返す関数をつくることができます。
ここからは、こうやって作った自然数に対応する有理数を返す関数を
全ての正の有理数が現れる数列の冒頭部
この数列は、( 英語版Wikipedia によれば)カルキン・ウィルフ数列と呼ばれています。
これで、「正の有理数をもれなくダブりなく、いい感じに一列に並べた数列」を作ることができました!
次は「
また、
つまり
この操作を繰り返すことで、次のように拡張できます。
ここでちょっと話が変わり、
「分子の数を分母に足した数」は必ず
また、「分母の数を分子に足した数」は元の数より
つまりこう評価できます。
したがって、
漸化式を作る準備が整うまであともう一息です!
二進数で
全部の桁が
・ 二進数で
・ 文字列操作として解釈
右側の
ようやく漸化式を作る準備が整いました!
とおきます。
順に代入して
ここで
なので
できました!
これが「すべての正の有理数を作る式」です!
さて、日曜数学会のスライドの最後に
「分子の数を分母に足す」「分母の数を分子に足す」と、
第
このすぐ下に解答を置きますので、自分で考えたい人のために少しスキマをあけておきます。
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
(問題
「分子の数を分母に足す」「分母の数を分子に足す」と、
これは記事中の計算を単純に入れ替えるだけでOKです。
実際にやってみると
順に代入して
ここで
なので
この式もまた、全ての正の有理数をもれなくダブりなく1回ずつ産み出す式となっています!
2つの「すべての正の有理数を作る式」
双対らしさを感じていただけますでしょうか。
この
(問題
まずは本当にそうなるのか確かめてみましょう。
の方は
の方は
となり、確かに分子・分母ともにフィボナッチ数になっています。
実は、カッコの中にある
となります。
見てのとおり、
と、
その結果、
(余談)
日曜数学会のニコニコ生放送では、@tsujimotter さんがこの問題を休憩時間で解いてしまいましたね!
しかも紙を使わず、休憩時間ほぼピッタリで解くというカッコよさ。
カッコよく解いてもらって作問者冥利につきました。
(問題
第
まずは第
第n項の分母と、第n+1項の分子に注目
お気づきいただけましたでしょうか。どの位置を見ても
第
となっていますね!
それでは、第
となります。
したがって
ですから、
とおくと
となります。
つまり、
最初にこの「すべての正の有理数を産み出す式」を作った人は誰でしょうか。
冒頭で紹介した、@TamasGorbe さんのツイートによれば、ケプラーが
なお、「カルキン」と「ウィルフ」はどちらも
英語版 Wikipedia の Calkin–Wilf tree の項目の注釈 によれば、この式とほぼ同じ式が 2003 年の The American Mathematical Monthly に掲載されているようですが、私には読むことができませんでした。
……というわけで、誰がどうやってこの式を作ったのかは実は私は知らないのですが、たぶん、この記事の内容と同じような方法で作ったのではないかと想像しています。
今回は、試行錯誤してるうちに例の式の導出方法に自然にたどりついて、これほど自然にこんなシンプルな式にたどりつくとは!と、感動した体験をもとに記事を書きました。
この感動が少しでも伝えられていたら幸いです。
また、今回の記事では触れませんでしたが、カルキン・ウィルフ数列は、スターンの二原子数列や、連分数とも関連していて、実に遊びがいのある数列だと思います。
スターンの二原子数列との関係については、@tb_lb さんのこちらの記事が詳しくて読みごたえがあります。
ほにゃらら実験室:スターンの2原子数列に関する記事群の目次
みなさんもいろいろ遊んでみてください。
そして、何か情報がありましたらコメント等で教えてください。