アジマティクス

ここをこうするとおもしろい

はじめてのディリクレ関数

「ディリクレ関数」という病的な関数があります。こんなのです。

f(x) =\left\{ \begin{array}{l} 1 \ \ (xは有理数)\\ 0 \ \ (xは無理数) \end{array} \right.

f(x)」とは「xに関する関数ですよ」ってことです。すなわちディリクレ関数f(x)とは、「x有理数を入力すると1が、無理数を入力すると0が出てくる関数ですよ」ということを意味しています。

例えば\frac{22}{7}有理数なのでf\left(\frac{22}{7}\right)=1\frac{\sqrt{2}}{2}無理数なのでf\left(\frac{\sqrt{2}}{2}\right)=0ということになります。

あ、「ディリクレ」は人名です。こういう関数を考えた人がいたよってことです。

f:id:motcho:20160520134927j:plain
ペーター・グスタフ・ルジューヌ・ディリクレ
(Johann Peter Gustav Lejeune Dirichlet, 1805 - 1859)

なんか便利そう

それ自体の有用性はいろいろあるとは思うし、この関数は「いたるところで不連続」というかなり面白い特徴を持つ関数なんですが、今回の話はそこではありません。

有理数のとき1、無理数のとき0」っていう定義、なんか便宜的っぽいですよね。あぁたしかにそんな関数あったらなんかに使えそうだし、定義しといてもいいよね、って感じで。しかしなんとこの関数、一つの閉じた式として表せるのです。それがこちら。

\displaystyle f(x) =\lim_{n \to \infty}\lim_{k \to \infty} \left(\cos \left(n!\pi x\right)\right)^{2k}

n,kは整数とします。なかなかビックリじゃないですか? 有理数無理数との場合分けを表すのにコサインや階乗が出てきて、しかもそれでちゃんと場合分けが表せているなんて。今回の記事はこれの解説です。読んだ後にはきっとコサインや階乗が出てくる意味に納得できているはずです。

①内側の極限 ─それぞれの役割─

とりあえずなんかよくわからん「リム」とか「2ケーじょう」とか「エヌ!」とかは置いといて、まずは 「\cos \left(\pi x \right)とはどんな関数か?」ということを考えます。こんな関数です。

f:id:motcho:20160518155437p:plain

xがだんだん大きくなっていくときのyの値を想像するとわかりやすいのですが、とにかく周期2(横)で1と-1の間を行ったり来たりする(縦)ことを繰り返す関数なわけです。\piがあるのは周期を整数にするためです。この\cos \left(\pi x\right)に、

f:id:motcho:20160519181841g:plain

①1を足して、
②縦に半分にして、
③横に半分にすると、

「周期1で、1と0の間を行ったり来たりする関数」になります。確認してみましょう。

f:id:motcho:20160519182027p:plain

なってますね。

というか、考えの順番としては実は逆で、「周期1で、1と0の間を行ったり来たりする関数」がとにかく欲しいわけなので、それを得るには\cos \left(\pi x\right)をどう変形させればいいかな? と考えてこの変形をしたみたいな感じです(もっというと、本当は「入力が整数のとき1で、入力が整数でないとき0」がほしいのです。今のはその前段階です)。

ところで、三角関数の公式の一つに「半角公式」というのがあり、それをあてはめるとさっきの式は

\displaystyle \frac{\cos \left(2\pi x\right)+1}{2}=\left(\cos \left(\pi x \right)\right)^2

となります(「あてはめる」というか、これがその半角公式そのものです)。\displaystyle \frac{\cos \left(2\pi x\right)+1}{2}のままでも別にいいのですが、これは式の表示をより簡潔にするためです。

上記の「周期1で、1と0の間を行ったり来たりする関数」は、x=0のときy=1なので、x=2のときもy=1x=3のときもy=1…となって、これはつまり「入力が整数のとき1で、入力が整数でないとき、0以上で1より小さい値を出力する関数」ともいえます。グラフを見ると明らかですね。

これを「入力が整数のとき1で、入力が整数でないとき0」にしたいのです。つまり「0以上で1より小さい値」の部分を全部「0」にしちゃいたい、というわけです。どうすればよいか。

そうだね。めちゃくちゃべき乗していけばいいね。

「0以上で1より小さい値」は、どんどんべき乗の値を増やしていくことによって0に限りなく近づきます。例えば\frac{1}{3}の2乗は「\frac{1}{3}\frac{1}{3}」、3乗は「\frac{1}{3}\frac{1}{3}\frac{1}{3}」なわけです。0にぐんぐん近づいてますよね。これが「0.999999」とかでも、べき乗を繰り返せば0に近づくことは変わりません。

それに対して、1は何乗しても1のままです。

というわけで、「入力が整数のとき1で、入力が整数でないとき、0以上で1より小さい値を出力する関数」である\left(\cos \left(\pi x\right)\right)^2は、べき乗しまくることにより「入力が整数のとき1で、入力が整数でないとき0」にぐんぐん近づいていくことがわかりました。

視覚化するとこんな感じです。

f:id:motcho:20160519225449g:plain

これが、内側の極限\displaystyle\lim_{k \to \infty} \left(\cos \left(n!\pi x\right)\right)^{2k}がやっていた仕事だったわけです(n!についてはこのあとすぐ)。\displaystyle\lim_{k \to \infty}というのがつまり「kを限りなく大きくしていいよ」ってことなんですね。

\cos」は、周期的な関数を実現するため。

\pi」「^{2}」は、周期を整数にするため。

\lim」「^{k}」は、1と0にくっきり分けるため。

それぞれが果たしていた役割がおわかりいただけたでしょうか。

ここまでのまとめ

今手にしているものを確認します。それは「入力が整数のとき1で、入力が整数でないとき0」という関数でした。コサインと極限にがんばってもらいました。そして最終的な目標は何だったか? というと、それは「入力が有理数のとき1で、入力が有理数でない(無理数の)とき0」という関数でした。

つまり、有理数1」無理数⇒0」という構造が欲しいのです。ここまでで手に入ったのは「整数⇒1」「非整数⇒0」でした。これに加えて、「有理数⇒整数」「無理数⇒非整数」が手に入ればおいしいわけです。この二つが揃えば、「有理数整数⇒1」「無理数非整数⇒0」になって有理数⇒1」「無理数⇒0」が手に入るという寸法です(推移律)。

②外側の極限 ─なぜ階乗か─

天下り的に言ってしまうと、n!xは、nがじゅうぶん大きければ、x有理数のときは整数になり、無理数のときは非整数になります。それはなぜか。

xが無理数のとき

まずx無理数のときを考えます。「n!」の「!」とは階乗のことで、例えば8!=8\cdot 7\cdot 6\cdot 5\cdot 4\cdot 3\cdot 2\cdot 1を意味します。nは整数でした(そう定義した)。整数×整数=整数なので、n!も整数になります。0!=1なので、n!は「0でない整数」ということになります。0でない整数×無理数=無理数なので、x無理数のとき、「n!x」はnがなんであれ無理数であり、どうあがいても整数にはなれません。これで、「無理数⇒非整数」が手に入りました。

xが有理数のとき

もう一つの、「x有理数ならn!xは整数」を考えます。

そもそも有理数とは、\frac{整数}{整数}(整数ぶんの整数)と表すことができる数のことでした。そんな有理数xに対して、nがじゅうぶん大きいn!をかければ、n!xは必ず整数になります。

はい。意味わかりませんね。つまりはこういうことです。

ある有理数を例えばで\frac{1103}{9801}としてみます。これにn!をかけるわけですが、まずnが、この有理数の分母である9801以上ならば、n!はその因数に必ず9801を含んでいることになります。例えば10000!はその途中に「\cdots9803\cdot 9802\cdot 9801\cdot 9800\cdots」という部分があります。実際の10000!の値はデカイので計算は面倒ですが、少なくともそれは「9801がかかっている数である」ということは確実なわけです。これにより、10000!\times\frac{1103}{9801}という計算をすると、分子の因数9801によって分母の9801が「払われて」、分母が1になるということが分かります。分子は整数×整数で整数なので、これはつまり全体としても整数になったことを意味します。

xの分母がどんな整数でも、つまりxがどんな有理数でも、n!nをじゅうぶん大きく取れば、 分子の因数の中のどこかに必ず分母の数が現れるので、xを整数にすることができる。ということです。これこそが階乗を使った意味だったのです。なんというか、まるで魔法のようです。

ということで、「有理数⇒整数」が手に入りました。

2つを統合する

ここまで来たところで、最初の式を見返してみます。

\displaystyle f(x) =\lim_{n \to \infty}\lim_{k \to \infty} \left(\cos \left(n!\pi x\right)\right)^{2k}

内側の極限は、「整数のとき1で非整数のとき0」という働きをしていたわけです。そのために「\cos」「\pi」「^{2k}」などを使ったのでした。その旨を書いてみると、こんな感じになります。

\displaystyle f(x) =\lim_{n \to \infty}\left( \right.整数のとき1で非整数のとき0を返す関数\left(n!x\right)\left. \right)

「整数のとき1で非整数のとき0を返す関数」に「n!x」が入力されている、という表示だと思って下さい。x有理数のときを考えると、さっきの解説の通り、n!によって有理数が整数になるので、関数はこうなります。

f(有理数) =整数のとき1で非整数のとき0を返す関数(整数)

f(有理数) =1

 やった!ちゃんと1が出てきた! 無理数のときは省略しますが明らかですね。

まとめ

・「有理数⇒1」「無理数⇒0」という場合分け関数が一つの式で表せる。でもどうやって?

・「\displaystyle \lim_{k \to \infty}」「\cos」「\pi」「^{2k}」を使って、「整数⇒1」「非整数⇒0」が実現できる

・「\displaystyle \lim_{n \to \infty}」「n!」を使って、「有理数⇒整数」「無理数⇒非整数」が実現できる

・二つを組み合わせれば、「有理数⇒1」「無理数⇒0」が実現できる!

 

意外と長い道のりでした。ディリクレ関数について、おわかりいただけたでしょうか。ここまで読んでから最初の式を見返すと、きっと違った見え方がしてくるはずです。

この方法(2重極限のやつ)で有理数無理数の場合分けが表現できることを示したのはディリクレ本人だそうです。やっぱりただ単に「有理数無理数の場合分けするような関数を考えたよ!」ってだけでは数学用語に名前を残せたりはしないみたいですね。がんばりましょう。どんなオチだよ。