■
[小ネタ] の逆関数を求める
久々の投稿ではあるが,めっちゃ小ネタである.実は仕事のソフトを書いていてこの問題にぶつかった.の濃度がの濃度に等しいということの証明として,対応を具体的に と与えることができる.という具合にの作る平面を斜めに切るように数える,よく知られたものである.さて,問題はプログラムでループ変数をにして,の方を求める,つまり逆関数が欲しいと思ったのである.ところが意外にもこの対応の逆関数を陽に表した公式が Webで見つからないのである.頼みの綱のstack overflowにも『全単射なんだから逆対応の存在は明らか』みたいなのしかなくて困ったが,一つだけ手がかりとして,『 』というのが見つかった.このヒントは,確かにをにらむと見えては来るが,数値で計算してみると,を切り上げたり切り捨てたりしても合ってはいない.いろいろ試行錯誤の挙句,次のような公式を得た.
ここにはを切り上げて整数化する記号である.
ちょっと試してみよう.
のときで,.切り上げてなので 0.
のときで,.切り上げてなので 1.
のときで,.切り上げてなので 1.
のときで,.切り上げてなので 2.
のときで,.切り上げてなので 2.
のときで,.切り上げてなので 2.
とかなりきわどいもののイケている.もっと先の方を適当にやってみると,
のときで,.切り上げてなので 53-2=51=20+31 とこれも正しい.
がわかると なので逆関数は求まったことになる.
さて,上の公式を証明しよう.
と置く.の切り上げがに等しいということは,であることと同値である.まず,を示す. もし, ならで,
は矛盾である.よって.
同様に なら,.
は矛盾.よって □