2006-04-09
■オーバーロードされた数学上の記法 再び
を読んで、\(2^{a}\) という数学上の記法が、3重4重にオーバーロードされているのが混乱を生んでいるのだろうか、とふと思ったので。
1.日常的文脈で。
\(2^{n}\) で、2をn個掛け合わせたもの。
つまり、
\(2^{n}~=~\underbrace{2~\times~2~\times~2~\times~...~\times~2}_{n}\)
ということ。
2.集合を扱っている時の普段の文脈で。
\(2^{A}\) でAのべき集合――部分集合の集合――のこと。
つまり、
\(A~=~\{1,~2,~3\}\) の時、
\(2^{A}~=~\{\phi,~\{1\},~\{2\},~\{3\},~\{1,~2\},~\{2,~3\},~\{1,~3\},~\{1,2,~3\}\}\)
ということ。
3.集合を扱っている時でかつ無限集合の濃度について語っている時で。
\(2^{A}\) でAの濃度を持つ集合のべき集合の濃度のこと。
例えば、
\(2^{\aleph_{0}}~=~\aleph\)
で、「可算無限集合のべき集合の濃度は連続無限集合の濃度に等しい」
ということ。
特に、2.と3.のオーバーロードがややこしい……のかなぁ? と思った次第。
■無限大の過大評価
まぁ、そうはいっても、という感じで、
に対する直接のコメントをば。
そもそも無限級数を考えるのに、「可算無限集合のべき集合」とか「可算無限集合」とかを持ち出す余地は無い。
だって、級数で取り扱う式――数列の各項を加算した式――は有限の項しか持たないのだから。
そのことを4ページ目でわざわざ「僕」が説明してくれている。
\(\sum_{k=1}^{\infty}~\frac{1}{k}\) と書くと、kを1から∞とまで変化させて\(\frac{1}{k}\) を足し合わせるみたいに読める。まぁ、そう考えても悪い訳ではないけれど、∞という数がどこかにあって、そこまで*1kを変化されるというのは正確な表現じゃない。
\(\sum_{k=1}^{\infty}~\frac{1}{k}~=~\lim_{n~\to~\infty}~\sum_{k=1}^{n}~\frac{1}{k}\)
ここで右辺を見る。出てくる式は「n個の項を持つ可算の式」だ。「n個の項」っていうのは――すごく当たり前の事だけど――「有限の項」だ。
\(\lim_{n~\to~\infty}\)
に惑わされてはいけない。nがどんなに大きくなっても「n個の項からなる可算の式」であることには変わりはない。いつか、どこかで、「無限の項からなる可算の式」になったりすることは、決してない。
だから、そもそも「無限集合」なんて概念が出てくる余地は、ない。
もひとつ。
\(~S_{2^{m}}~\geq~1~+~\frac{m}{2}\)
は、
\(~S_{1}~\geq~1~+~\frac{0}{2}\)
\(~S_{2}~>~1~+~\frac{1}{2}\)
\(~S_{4}~>~1~+~\frac{2}{2}\)
\(~S_{8}~>~1~+~\frac{3}{2}\)
を「一般化*2」した表現。
数列\(S_{n}\) の\(2^{m}\) 番目の項は\(1~+~\frac{m}{2}\) に等しいか大きい
と読めばいいのであって、ここでも無限集合だとかべき集合がでてくる余地は、ない。
*1 引用元では傍点による強調。あぁ、傍点使いたい!
*2 ミルカさんとコンボリューション 4章。
2006-04-08
■クイズです 5秒以内に答えてみてください
「ネクロノミコン」という書物は実在する。YesかNoか?
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
答えは「Yes」。元来は Cthulhu mythos に登場する架空の書物ではある。が、のちに何人かの作家がこれを著述するという仕事に挑戦している。それは確かに出版物、つまり書物として世に出ている。したがって答えは「Yes」。Amazon.co.jpでネクロノミコンや、Amazon.comでnecronomiconと検索すると何件か出てくる。
2006-04-07
■私の見つけた宝物
読んだ。
そして、私は別の宝物を見つけた。いや、宝物へと続く道を見つけた、ぐらいか?
p4
「∞は無限大という数ですね」
「無限大は《数》じゃない。少なくとも普通は、数として扱わない。たとえば、実数に∞は含まれていない」
p16 の注釈
*2 数ではない∞が等式に表われている。このときの等号(=)の意味を考えよう。
なるほど、私の3/17の日記
にコメントをもらったのは、結城さんがこのお話を書いている途中だったからなのかな? と思った。
さて、p4 の「僕」の台詞が意味深だ。
少なくとも普通は、
とわざわざ制限したのは「僕」の知識に依るもの? だとしたら「僕」はかなりの数学好きなんだな、と思った。
「無限大」を「数」として取り扱う公理系が存在する。「そこ」では「無限大」も「数」の仲間だ。「そこ」は「無限大」という「数」が無限に存在する世界。「超現実数」という世界。
私の知識はそこまで。「そんなのもあるんだ」ぐらいしか知らなかった。
ところが、p27 「世界に素数がふたつだけなら」に入ったあたりで、私の頭の中は物語から離れはじめる。いや、過去に――去年の11月に――戻っていった。
p28
さて、2または3だけを素因数に持つ正の整数は、この和のどこかに必ず一度だけ現れるよね。
p29
「ふむ。素因数分解の一意性のことか。《すべての整数は素数の積で一意に書くことができる》ので、《世界に素数が2と3しかなかったら、5や7や10なんて整数はない》と言いたいんだね。(略)」
「全ての整数は素数の積で一意に書くことができる」
「素数は無限にある」
「素数の集合は可算無限集合である」
「『素数の集合』の部分集合の集合は、連続無限集合となる」
に繋がる!?
「『素数の集合』の部分集合の集合から有限の集合だけを取り出す。その元となる集合に含まれている素数の積を考える。それは自然数の集合になる」
そこまでは考えていた。
じゃ、余った無限集合の元は?
「『素数の集合』の部分集合の集合には無限集合が元として含まれる。それに含まれる素数の積を考える」
これは無限大に発散し、したがって自然数ではない。
と以前書いた。
「これ」を「無限大」という「数」だと捉えたら?
「超現実数」の世界では「無限大」という「数」は無限にある、という話は聞きかじりの知識として知っている。
もしかしたら、素数の集合に対して「無限大」という超現実数を導入したら、「無限大」という数は連続無限集合の濃度を持つ無限集合になるのではないだろうか?
ならば、実数の世界、\(\aleph\)
の濃度を持つ連続無限集合の世界に「無限小」「無限大」という超現実数を導入すると、その濃度は……一体?
さて、この道はどこに続くのか。
追記 2005.4.8
「無限大」という数は連続無限集合の濃度を持つ無限集合になるのではないだろうか?
と上に書いたがその補集合べき集合*1もまた「超現実数」であり……、「無限大」や「無限小」の濃度を考えることに意味はないことに気がついた。
「さて、この道はどこに続くのか」と締めたわけだけど、その道がどこに続くのかは知っている。
に、その答えはきっとある。
外出先で「テトラちゃんとハーモニック・ナンバー」を読んでいた最中に、「無限大」を「数」として捉えること、を思いついた瞬間、ぜひとも読みたくなって買ってきた。
著者に注目。「テトラちゃんとハーモニック・ナンバー」はLaTeXを使って書かれたものだけど、そのLaTeXはTeXから派生したヴァリエーション。この本の著者は、TeXの作者 Donald E. Knuth その人。
「テトラちゃんとハーモニック・ナンバー」の参考文献の[4]、『The Art of Computer Programming』もKnuth先生の著書。
結局、Knuth先生の後ろを追いかけているだけなのだな。
「至福の超現実数」を読んでみて目を剥いたのは下の文だった。
p142
2×π≡π+πを正当に証明できるけど、π+πを有限回の手順で計算できるとは限らないってことね。神様だけが計算を終えられるけど、人間にできるのは証明を終わらせることだけってこと。
理解するにはほど遠いのだけど、面白い本だ。
追記 2005.4.9
至福の超現実数を一読して、一日の時間が経った。あらすじらしきものをまとめられるぐらいには消化できたらしい。
ま、要するに、空集合φから出発して「数」という概念を厳密に定義しなおす、という小説だ。1や2といった日常的な数さえも自明ではないという所が出発点。
最初の日(第ゼロ日と表記されている)に0(らしきもの)が現れ、翌日には1(らしきもの)と-1(らしきもの)が現れる。その翌日には……、と続いていく。どんな自然数もいつかは姿を現わすのだろう。
それらの「数らしきもの」に推移律(x≦y かつ y≦z なら x≦z)が成立することを検証し、0(らしきもの)と1(らしきもの)の間が存在することを発見し……、やがて「数らしきもの」が本当に「日常的な数」の様な性質を持っているのか? ということを考えはじめる。「日常的な数」にある様々な性質が、「数らしきもの」でも成立することを証明していく。
そして、その果てに「実数」や「無限大」や「無限小」が姿を現わす。
で、ここにきて、
はおろか、
までもが、この小説と根っこのところで繋がっていることに気がついた。
11月から12月にかけて、「素数の集合のべき集合で自然数を表現する」とか「2のべき乗の集合のべき集合で自然数を表現する」とか、「自然数は有限の桁数で表現される」なんてことを考えていなかったら、今この本を読んでも(例え表面的なものであっても)理解が追いついたかどうか? 多分無理だったんじゃないか?
いやいや、11月から12月にかけてそんなことを考えていたからこそ、「テトラちゃんとハーモニック・ナンバー」を読んでいる途中で「無限大」や「無限小」にいたるモデルを想像することができたのだし、この本を読もうという決心ができたとも言える。
そう思うと、様々なことが「いいタイミング」で起こった結果として、この本に出会えたのかなぁ、などと考えるのであった。
追記
無限上昇螺旋階段付音楽室 は G.E.B. か、バッハの「音楽の捧げもの」の「螺旋カノン」を参考文献に書くべきだったのでは?
*1 「部分集合の集合」のこと。最初に書いた時に、誤って補集合と書いてしまっていた。
2006-04-06
■検索語
「○○って検索語で来る人増えたなぁ。どっかで話題にでもなってるのかなぁ」なんて思うことがあったけど、よく考えたら「○○という単語で検索したときのページ順位が上がった」ということでしかないだなぁ、と思った。
それだけ。
2006-04-05
■例外を吐くコンストラクタって
このプログラムは"null"が出力されるのか、"not null"が出力されるのか?直感的には"null"になりそうだが、out of order書き込みの可能性を考えると、一概にそうとは言えないかもしれない。
lethevert is a programmer - Java : コンストラクタで例外
経験的にはnullだ。
早速実験。
public class ExceptionalObject {
public ExceptionalObject() {
throw new RuntimeException();
}
public int intValue() {
return 5;
}
}
public class Object1 {
public static void main(String[] args) {
Object obj = null;
try{
obj = new ExceptionalObject(); //例外発生
}catch(Exception e){}
if (obj == null) {
System.out.println("null");
}else{
System.out.println("not null");
}
}
}
結果は
null
次。
public class Object1 {
public static void main(String[] args) {
int i = 3;
int j = 0;
try{
j = (i++) + (new ExceptionalObject()).intValue();
}catch(Exception e){}
System.out.println("i="+i);
System.out.println("j="+j);
}
}
int の +演算子は左結合のはずだから、(i++)が先に評価される。
でも+演算子の右で例外発生。+演算子も=演算子も評価されないはず。
では(i++)はどうなるのか。これが(++i)なら4だろうと想像できるのだけど、さて?
結果。
i=4
j=0
i++によるインクリメントはちゃんと実行されている。
へー。そうなんだ……。
余談。
RuntimeExceptionではない例外を吐くコンストラクタ。
public class ExceptionalObject2 {
public ExceptionalObject2() throws java.io.IOException {
throw new java.io.IOException();
}
}
うわ。気持ち悪い*1。
public class Object2 {
ExceptionalObject2 obj = new ExceptionalObject2();
static ExceptionalObject2 staticobj = new ExceptionalObject2();
public Object2() {
}
}
とか書けません。
public class Object2 {
ExceptionalObject2 obj = null;
{
try {
obj = new ExceptionalObject2();
}
catch (java.io.IOException e) {}
}
static ExceptionalObject2 staticobj = null;
static {
try {
staticobj = new ExceptionalObject2();
}
catch (java.io.IOException x) {}
}
public Object2() {
}
}
と書かざるをえない。ダサダサ。
というかコンストラクタでRuntimeExceptionじゃない例外を吐く様なものを、クラスやインスタンスの初期化で書くのがまずい。
そんなことになったら、どっか設計がおかしいと思って見直すべし、だなぁ。
追記
public class Object1 {
public static void main(String[] args) {
int i = 3;
int j = 0;
try{
j = (i++) + (new ExceptionalObject()).intValue();
}catch(Exception e){
System.out.println("i="+i);
}
System.out.println("i="+i);
}
}
ってどうなるんだ? と思った。
i=4
i=4
だった。catchに入る前に i++ によるインクリメントされてるってことか。
■Palm TX買った!
英語デバイス初めて!
J-OS初めて!
ネットワークでHotSyncしたいのにマシン名が出てこない!
Linuxマシンの名前は出てくるのに?
初めてづくしだ〜。
ハードリセットだ〜。あはは〜。
*1 極端な形で書いたから気持ち悪いのであって、コンストラクタがIOExceptionなどをthrowするのは、java.ioパッケージなどでは当たり前の話。

