安敦誌


つまらない話など
by antonin
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
検索
最新の記事
婦人画報創刊号
at 2017-07-07 01:36
アキレスと亀
at 2017-05-02 15:44
受想行識亦復如是
at 2017-05-02 03:26
仲介したことはあまりないが
at 2017-04-29 03:36
サンセット・セレナード
at 2017-04-12 23:17
水分子と日本人は似ている
at 2016-06-04 01:49
ほげ
at 2015-06-05 03:46
フリーランチハンター
at 2015-04-17 01:48
アメリカのプロテスタント的な部分
at 2015-04-08 02:23
卯月惚け
at 2015-04-01 02:22
記事ランキング
タグ
(296)
(147)
(122)
(95)
(76)
(65)
(59)
(54)
(45)
(41)
(40)
(39)
(33)
(31)
(28)
(27)
(25)
(24)
(22)
(15)
最新のコメント
>>通りすがり ソ..
by Appleは超絶ブラック企業 at 01:30
>デスクトップ級スマート..
by 通りすがり at 03:27
7年前に書いた駄文が、今..
by antonin at 02:20
助かりました。古典文学の..
by サボり気味の学生さん at 19:45
Appleから金でも貰っ..
by デスクトップ級スマートフォン at 22:10
以前の記事

タグ:妄想 ( 122 ) タグの人気記事

CDMA(符号拡散多重接続)

技術的な説明は後半にあります。まずは随筆から。

--

LTEも当初は3.9Gとか言っていたのが、2010年あたりから公式に4Gを名乗るようになり、最近では変調方式の主流は3Gの中心だったCDMAからOFDMに移りつつあるが、CDMAを使ってみたら技術的に問題があったというよりは、Qualcommの特許がガチガチ過ぎて他社の技術者が嫌ったから、みたいな要素が強いらしい。GIFがLZWの特許を避けてPNGになったり、bzipが算術符号化の特許を避けてbzip2になったのと似たような事情なのだとすると、CDMAというのも特許失効以降はまた興隆してくる技術なのかもしれない。

著作権が死後50年とか70年とか言い出すのと比べると、特許の知財権が出願20年というのはいかにも儚い。値付けを誤って客に逃げられるのもどうかと思うが、パブリックドメイン技術で急場をしのいで特許権が切れるのを待つというのも、なんだか技術者が報われない話だな、とも思う。特許権も発明者の死後50年間にしろ、なんてことは言わないが、著作権との不均衡も度が過ぎるとちょっとなんだかな、とは思う。特許権にしても著作権にしても、知的財産権とは本来、時限独占権の国家保証とのバーターで長期的にはパブリックドメインの知財を豊かにするための文化政策でもあったのだけれど。

Qualcommという会社は、「情報理論の父」クロード・シャノン先生だとか、「サイバネティクスの父」ノーバート・ウィーナー先生がまだ現役の教授だった時代にMITで学んだ、アンドリュー・ヴィタビさんが起こした会社らしい。「畳み込み符号のビタビ復号化」というと符号論の教科書などでお馴染みだが、こちらも最近は低密度パリティ検査符号(LDPC)なんかに押され気味という印象がある。

符号拡散多重化を、誤解を受けるのを承知で、あえて日常語で言い換えると、「分かる人にはわかる形で情報をノイズに乗せて送信する方式」といえる。符号拡散というのは、意味のあるもともとの信号にノイズを乗せてわけわからん信号にして電波に乗せるのだが、受信側も送信側と同じノイズを発生させる仕組みを持っていて、そのノイズ発生器(擬似乱数系列)の番号を合わせておくと、自分宛の信号に乗ったノイズのみキャンセルすることができる。このとき、他の受信者向けの信号は相変わらずノイズ様の波形なので、十分なS/N比が確保できる程度の混信であれば通信が成立する。

CDMAは混信信号をノイズとして押し込める通信方式なので、目的信号の強度がある程度確保できることが前提となっている。LTEでCDMAが選に漏れたのも、収容局数の増大によって通信可能な範囲が縮小して見える"Cell Breathing"という現象があって、携帯電話用途に使うには基地局配置計画が難しいというのも一因ではあるらしい。OFDMであればセグメントごとの制御が容易なので、通信チャネル当たりで使用するセグメントの個数を制限すれば、通信速度は低下するが接続は維持しやすい。

--

さて、本題。Wikipediaの日本語ページにもCDMAの項目はあるが、定性的な説明しかなく原理はわからないので、英語ページの方を参照すると、簡単でわかりやすい原理説明がある。CCライセンスで参照可能な図があったので拝借してみる。
b0004933_15404398.png

この図にあるように、目的の情報を含むベースバンド信号より十分に高い周波数成分を持った擬似乱数信号を重畳して、信号をノイズ様波形に変換する。そして受信側でも同じ擬似乱数信号を発生できるようにしておいて、受信波形に擬似乱数系列をもう一度XORで重ねると、ノイズ成分がキャンセルされ、原信号が復元される。

ただし、CDMAのMA(多重接続)たる所以は、こうして作られた複数の信号波形が、互いに異なる擬似乱数系列を持ってさえいれば、それらが同じ周波数帯域に重なっていても通信可能というところにある。多重度が高まると、ノイズが増えたのと同じ状態になるけれども通信自体は可能となる。面白いので、このCDMAの原理で画像を符号化、復号化してみる。

まず、画像を用意する。高柳健次郎さんに敬意を捧げ、最初の信号はイロハのイとしてみる。2値画像なので、1ドットずつ時系列に並べるとベースバンド信号みたいなものになる(ツールの都合で文字がアンチエイリアスされて若干グラデーションになっているけど…)。画像の解像度よりは空間周波数が十分低くなるように、300x300ピクセルのフィールドに大きく1文字だけ書いてある。
b0004933_15492017.png

次に、擬似乱数系列から生成したノイズ様データ(拡散符号)を用意する。1ピクセルずつランダムな白黒に塗り分けてある。
b0004933_15523833.png

そして、XORを取って変調符号を得る。
b0004933_1553232.png

裸眼で立体視ができる人なら、適当な距離に上の2枚のノイズ様画像を並べて重ねてみると、昔流行したステレオグラムみたいに「イ」の字が浮かび上がってくるのを確認できるだろう。

この段階では単純なXOR信号なので、拡散符号をもう一回XORしてやると、完全に元通りの信号が復元できる。それでは意味が無いので、もう一つ変調信号を作ってみる。
まず、原画像。今度はひらがなで「あ」にしてみる。
b0004933_15552220.png

フォントは「たぬき油性マジック」です。素晴らしいフリーフォントの提供に感謝します。

次に、さっきとは違う値で初期化した乱数系列で作成した拡散符号。
b0004933_15573754.png

そしてXOR合成して変調信号を作成する。
b0004933_1558035.png


今度は、「イ」の変調信号と「あ」の変調信号を単純に加算して合成信号を作成する。画像としては3階調のノイズ様画像となる。
b0004933_1621694.png

これが、2チャネル重畳した出力信号ということになる。このようにディジタルの状態で混合することもあるだろうが、実際に電波として送信する場合にはもう少しアナログ側のプロセスで混合波を生成する場合もあるだろう。送信局が別の場合には、単に複数の送信局から同一周波数帯に送信することで空中で合成されることになる。

続いて、復号化処理。さっきの合成信号に、最初の「イ」画像の符号化に使った拡散信号を重ねてみる。もはや2値データではないので、XOR演算ではなく「差の絶対値」を計算させてみる(元から2値画像ではなかったので、実は最初からこれを使っていた)。すると、こういう信号(画像)が復元される。
b0004933_1662514.png

このように、明らかに原信号は復元できているのだけれど、「あ」の変調信号がノイズとして乗っている。これは、ベースバンド信号と拡散符号との周波数の差を利用して、低域通過フィルタ(LPF)で除去することができる。画像処理として「ぼかし」を入れるのはLPFと同じことを意味するので、画像にぼかしを入れてみる(本当は1次元的な信号にLPFを掛けるので、画像の2次元的フィルタとは処理が異なるが、フィルタ処理を書くのが面倒だったのでペイントソフトのぼかし機能を利用した)。
b0004933_1616372.png

最後にコンパレータを通して2値化し、原信号を復元する。
b0004933_16173139.png

ちょっとエッジが揺れているが、だいたい元通りの図形になった。この図形だと、空間周波数はともかく解像度は拡散符号と同じ図形を使ってしまったので信号にブレが残っているが、位相の同期まで考えて復号化すれば、この程度の混信なら完全に原信号が復元できるだろう。通信に伴う空間ノイズなんかは全く考慮していないので、当たり前だが。

次に、同じように「あ」の信号も復元してみる。
拡散符号の除去でとりあえずこういう信号が取り出せる。
b0004933_16211324.png

これもLPFを通してノイズを抑制し、
b0004933_1831822.png

コンパレータを通して2値化すると、原信号が復元できる。
b0004933_16223220.png


最後に、同じ周波数帯域に収容する信号が増えるとどうなるかを試してみる。同じように「永」の字を符号化してみる。
まず、原信号。
b0004933_16234940.png

今度は明朝体ボールドで。

次に、先ほどの2種類どちらとも異なる擬似乱数系列で作成した拡散符号。
b0004933_16254855.png

XOR合成した変調信号はこう。
b0004933_16315017.png

そして今度は、「イ」「あ」「永」の変調信号を全て加算して、3チャネル同時使用の信号を作成する。今度は4階調データになっている。
b0004933_16333478.png


ここから、再び「あ」の信号を抽出してみる。
b0004933_16365019.png

やはり信号は取り出せているが、2チャネル収容の場合に比べると、全体的にノイズが強くなり、S/N比が落ちているのがわかる。

これにLPFを掛けて、
b0004933_16414434.png

2値化して復号化完了。
b0004933_16421550.png


ここではチャネル多重による擬似ノイズしか考慮していないので復号品質にそれほどの差は出ていないけれども、ここに通信で生じる外来雑音などが混入してくると、やはりS/N比の低下が効いてきて、エラー密度が上がってくるのだろう。

3信号重畳信号画像からは「イ」も「永」も復号可能だけれど、同じことの繰り返しになるので、気になる人は画像をダウンロードして自分でやってみてください。

(以上の画像処理にはPixia Ver.5を使用しました。使いやすいツールを継続的に提供していただきありがとうございます。)

--

以上でCDMAの技術的な話は終わり。で、ものの考え方としてこの符号拡散というのが面白いという話を少し。ランダムに見える文字がびっしり並んだ手紙があって、それを受け取る人はあらかじめ多数の穴が開けられたマスキングシートをもらっている。手紙にマスキングシートを重ね、穴から見えた文字をつなげていくと、その人向けのメッセージが読める。別の人は別の位置に穴のあいたマスキングシートを持っていて、それを使うと同じ手紙からその人向けのメッセージを読み取ることができる。CDMAというのは雑に言うとそういう原理になっている。

そこまで完全なランダムノイズとは見えなくても、今ひとつ何を語っているのかわかりにくい詩のような文章があって、作者の心にある何かと共通したものを持った読者だけが、そのわかりにくい詩文の中に隠された明確なメッセージを読み取る、なんていう文化は昔からあったような気がする。そして、複雑な心理を持った作者の綴る文章では、複数の読者がそれぞれの心理に応じてに独立のメッセージを読み取れる、なんていう「多重接続」もありえたかもしれない。

仕事を持って初めてわかる、子供を持って初めてわかる、家族や恋人や住まいや仕事を失って初めてわかる、なんていうコードを隠し持った文章も、世の中には多いのだろう。ノストラダムスの詩を予言書として読むのは誤検出の部類だと思うが、あからさまに言えない心情をあえて不明瞭な言葉で綴ったような詩を単に馬鹿にする人というのは、やはり拡散コードのような「言い得ぬもの」を内に持っていないと見たほうがいいのだろう。

「この作者は、実はこういうことを言っているんですよ」としたり顔で解説する人の声が大きいと、自分に向けて送られた別チャネルのメッセージがS/N限界に沈んでしまって気づかなかったりとか、あるある、それあるよね、という感じでもある。

CDMAも、初期には軍用の通信秘匿技術だった。スペクトルがブロードで、パワーピークが目立たないので、共産圏の通信傍受技術者はそこで通信が行われていることすら当初は気づかなかったらしい。現代的な意味での暗号強度は強くなかったのだろうけれども、わからない人にはわからないが、わかる人にはわかる公開通信、というのも面白いものだと思う。
[PR]
by antonin | 2013-09-29 18:10 | Trackback | Comments(0)

景気の話

ん、入力中の文章が消えた。直線の実在性と脳の器質の関係、という感じの文章をかなりユルく書いていたのだけれど、ちょっとした拍子で消えてしまった。まあいい。

私たちの意識は脳の中にいるので、脳の中にある信号は私達の意識にとって、実在と同じか、あるいはそれ以上の実在性があるんだよ、というような結論に持っていきたかった。まあ、般若心経が言っていることの言い換えでしかないので、あまり新しい価値はないのだけれど。

景気というのは所詮「氣」なので、みんなが信じればそこに経済成長は現実化する。特に、金との兌換を捨てた現代的な通貨体制では、よりその傾向が強い。日本の将来に警鐘を鳴らすのが新聞屋の商売なのだけれど、経済成長に一番必要なのは、国民みんなの楽観と寛容だったりして、国際競争力強化なんかよりも、サルと一緒に温泉にでも浸かったらいいんじゃないかと思い始めている。でないと、フランスのGDPというのは説明がつかない。

生産性とか、そういうのも考えているけれども、まあ、これも人の欲の持っていき方の問題なんでありまして、ときどき東京が火の海になって、結果として住民が宵越しの金を持たないような社会も気楽でいいんじゃないかという気もしている。

知恵のある人が、マネタリーベースの増強で桶屋が儲かるというのを心から信じている様子がヒシヒシと伝わってきて心強い。まだ馬鹿な庶民は「王様は裸だ!」とか言っているので、マネタリーベースの増強にマネーサプライの増加が追いついてこないが、みんなで「なんと立派な姿の王様だ!」と熱狂すれば、桶屋は儲かり、日本の景気は本当に良くなる。

嘘みたいだけれど、空即是色、なんだよな。人類は月にも行けた。そのくらいは簡単なんじゃないか。知恵のある人も、信じない人は馬鹿だ馬鹿だアンポンタンだと悪態ついてないで、日銀から2兆億円くらいババンと借金して、それで10万人くらい雇用して、会社でも興したらいいんじゃなかろうか。そしたら景気良くなるぜよ。それだけ借金があれば、クラッススに気の遠くなるような借金こさえたカエサルみたいに「大きすぎて潰せない」になるから、損失出ても問題ないよ。

10万人で何やるか。自動翻訳機作ろうぜ。「全社員TOEIC800点以上」とかの話を「そんな時代もあったんだねぇ」にしてやろうぜ。スマートターミナル使ってシリア人と日本語でトークしようぜ。命がけで英語を勉強したバイリンガルたちが、自動翻訳じゃ気持ちが伝わらないってダダこねて抵抗する世の中を見てみたい。

そんじゃーね。
[PR]
by antonin | 2013-07-19 01:54 | Trackback | Comments(0)

逆フリーメーソン

宗教は、臭い。
陰謀論は、臭い。

そういうものが好きだといえば、煙たい顔をされる。
まあ、わからなくもない。

中世ヨーロッパでは、神を脇に寄せて理詰めて考えたり、古代ラテンやギリシアの古い文献を読みあさったりする人々が、きっと臭く見えたのだろう。

煙たがられるので、わかる仲間だけ集まって秘密結社を作った。合言葉だの、握手の時の符丁だのを使って、密かなサロンを開いた。

で、それを外から見るとオカルトだったり陰謀だったり、そういう妄想が膨らむわけだけれども、実体は「良識馬鹿は困るよなぁ」という感じの人々の集まりだったのだろう。

アメリカの中枢というのは当時の秘密結社の思想がオープンになって花開いた組織なので、その文化圏では逆にカトリック的なものが臭く見られる。

宗教は時代遅れだし、陰謀論の9割は妄想だ。けれども、それはバカには見えない知恵の隠し場所にもなっていて、めまいを抑えながら凝視していると、ところどころに面白いものが見える。

finalvent氏はアメリカの中枢、つまりフリーメーソンだったりイルミナティだったり、そういう文化を持った人々の末裔にストレートな信頼を置いているのだけれど、私はそこまでそれを信頼していなかったりする。勉強が足りなかったせいかもしれないけれども。

警察にも、権力に溺れる人がいる。が、それはほんの一部で、たいていは、ちょっと怠惰で保身的だが、おおよそ誠実な人たちだろう。アメリカの中枢も同じようなもので、たいていは、ちょっと怠惰で保身的だが、おおよそ誠実で優秀な人達だ。ただ、その影で権力に溺れている人は一定数いるだろう。

フリーメーソン的なものが持っている権力とは何かというと、武器商人とかそういうのも無くはないが、基本的にはその知性だろう。智者は馬鹿を騙していい生活をする権利がある。ルターに批判された当時の法皇庁のお歴々と似たような人も、きっといくらかはいるだろう。

だいたい、中世のカトリック教会だって、上に登る人たちは貴族出の冷徹な思考の持ち主がほとんどだったのだろうし、バチカンというのもある意味で秘密結社だったのだろう。その秘密を理解しうる知性を持った市井の技術者だとか、オリエントの学芸に通じていた修道騎士団なんかは脅威だっただろう。

民主主義は終わった、とか言う前に、一度陰謀論にまみれてみて、その向こう側の絵姿を想像するのも楽しいんじゃないかという気がする。なぜ日本ではドイツの話があまり報道されないのか、なぜ6時台のNHKニュースは毎朝韓国のドメスティックニュースを紹介するのか。

深読みするのも楽しい。社会的地位がある人は滅多なことを言うべきではないが、凡人にとっては陰謀論の裏読みは興味深いゲームと思える。本気の資料集めは面倒臭いが。

古い教典にも変な話が沢山載っている。宗教説話だと美しい部分だけ紹介されるけれども、もう少し広範に読むと結構気持ちの悪いことが書かれていたりする。

優良企業の中枢にもこういう気持ち悪さはある。広告や取材には美しい部分だけ紹介されるけれども、機会があって内部で働いてみたりすると、美しい部分はもっと美しかったりするが、醜い部分もちゃんとある。

結局は人間のやることだ。人間の奥にある純粋なものとか醜いものとか、それに似たものは法人の奥にもちゃんと潜んでいる。陰謀論は、火のないところには立たない煙なので、直接には嘘ばっかりだが、間接的には何かをきちんと語っている。まあ、そういうもんだろう。

このご時世、陰謀論とか宗教とかをあんまり偏見や盲信にまみれずに論じるには、秘密結社的なサロンが必要だろう。フラットなネットワークにはそぐわない。SNSとは本来そういう秘匿性を保証するものだったはずだが、現代アメリカ人とは文化的に明け透けすぎてあまりよろしくない。

個人の発言もカプセル化して、public, protected, friend, privateなどの属性をもっと細かくコントロールできるネットワークが欲しい。保護レベルも単軸リニアではいけない。家族とだけ話せる話題もあれば、同僚だけで話せる話題、趣味の友人にしか通じない話題、古いサークルの仲間とぼちぼちやる話題などがあるだろう。恋人同士の会話や医師と患者の会話などは秘匿された専用のパイプであるべきだ。

人間が織りなすシステムの最適解と、オブジェクトが構成するソフトウェアシステムの最適解に、さほど大きな違いがあるとも思えない。ミクロでは全然違うが、マクロでは似たようなものだ。今のwebはフラットな階層に並んだグローバル変数の集合体みたいなもので、よくあんな原始的なもので当時の人達は耐えていたな、などと後世の人達は回想するだろう。そういう異常性こそが祭りのような繁栄の原因ではあるのだろうけれども。

いや、私が知らないだけで、そういう秘密結社はすでにネット上のどこかにあり、わかる人にしかわからない違いを持ったプロトコルでシェイクハンドして互いを認証していたりするのだろう。
[PR]
by antonin | 2013-04-05 02:29 | Trackback | Comments(0)

エイプリルのバカ

コートの内側にボタン留めのインナーを入れていたのを、旧暦の四月一日頃に外した。四月朔日姓を「わたぬき」さんと読むので、古い時代にも似たようなことをしていたのだろう。たまたま今日の日付は新暦の4月1日なので、ちょっと嘘を書こうと思ったが、あまりネタレベルまで練ることができなかった。適当に羅列する。

--

「モールスマウスドライバ」

Appleが世に導入した技術の中で、一番醜いものが「ダブルクリック」だと思う。IEEE1394とかもあるが、まああれはUSBを生んで引退したので別にいい。

Macintoshが登場した当時、そのGUIのインターフェイスを一手に担っていたマンマシンインターフェイスは、ワンボタンのマウスだった。ワンボタンで、いかにもシンプルそうだが、GUIはそこまで洗練されていなくて、結局はダブルクリックとホールド(長押し)という、時間軸方向で複雑な操作をユーザーに要求することになった。これはのちにWindowsによってパクられ、多くの中年サラリーマンを苦しめたらしい。

今でもiOSなどのインターフェイスにはこの時間軸でのアクションに意味をもたせるという悪趣味なプロトコルが残されている。タッチデバイスを指で擦ってスクロールさせるとき、ちょっと考え事をしていると、突然長押しアクションが発動して変なボタンがせり上がってくる。実に鬱陶しい。その因果を辿って行くと、Macintoshの「シンプルな」ワンボタンマウスにたどり着く。

Windows界隈ではMacintoshの長押しに相当するコンテクストメニューが右ボタンという物理デバイスにアサインされたので、長押しという不自然な風習は混入しなかったが、シフトキーを押したまま8秒間ボーっとしていると、マザーボードのBIOSレベルのビープ音で冷や汗をかかされる機能が、あとになって追加された。時間軸アクションというのは物理界にはなかなか存在しない現象であって、決して直感的ではなく、「シンプルな」ワンボタンデザインの代償として作り上げられた、ひどく不自然な動作でしかない。

つまりAppleは、アイコンをステートマシンではなく、通信デバイスとして定義したのだ。そして、短いクリックは選択、短いクリックの連打は起動、長いクリックはコンテクストメニューと、タイミングファクターに意味を持たせた。言い換えると、モールス符号の「E」(・)に選択、「I」(・・)に起動、「T」(ー)にコンテクストメニュー表示という機能をアサインしたのである。であれば、欧文アルファベット26文字と数字と諸記号にも、機能を与えられないという合理的な理由はない。

過去のエイプリルフールで、Googleがモールス日本語入力というのを提案していたが、あれが筋が悪い。本来の欧文モールス符号というのは、欧文における各文字の出現頻度に基づき、出現頻度の高い文字には短い符合を、出現頻度の低い文字には長い符合を割り当てている。これにより、通常の文字出現頻度を満たす文章を符号化すると、最短符号長となるように調整されていた。いわゆる固定辞書方式のエントロピー圧縮が行われることになる。シャノンの数学的解析より数十年前にこういう符合がヨーロッパには存在していたのだ。

Google 日本語入力 - モールスバージョン

しかし当時の日本にはそういう学識がなく、しかし電信の技術だけは導入したかったため、アルファベットのABC順に日本語のイロハを順に割り当てていくという暴挙に出た。仮名はアルファベットより種類が多かったので、奇怪な長符合もいくつか追加された。その出自により、和文モールスというのは欧文モールスに比べて随分と筋が悪い。もちろん明治の通信士たちは勤勉だったから、そういう筋の悪い符号系でも忍耐強く習得し、効率よく使いこなした。が、設計上の筋の悪さは隠しようがない。

アマチュア無線には最上位が1級、最下位が4級という資格がある。3級以上ではモールス通信の技能が求められるが、1級だけが和文モールス電信技能を要求した。かつてのアマチュア無線ブームの中でも、この和文モールスを嫌って2アマ止まりだった人は多い。

license.html

Google日本は今さらその筋の悪い和文モールスを持ち出してきたことでシャノン先生に顔向けできない恥をかいたわけだが、ダブルクリックや長押しを駆使できる若者が欧文モールス符合を駆使するのであれば、それはあながち不合理とも言えない。欧文モールス+ローマ字変換であれば、訓練次第では下手なフリック入力よりもスムーズな入力ができる可能性もある。単純なモールス符合では長符号のためにスピード限界があるだろうが、バグキーやエレキーのような入力方式ではさらに高速化が可能だろう。

ただ、モールス符号を単純に電信式文字入力に使うのは若干もったいないような気がする。というのも、ダブルクリック(タップ)や長押しの使用場面を見ても分かる通り、通常のクリック(タップ)と共存が可能で、それを時間軸のアクションで区別することによって随時機能切り替えができるところに大きな意義がある。つまり、マウスやタッチパネルでのモールス入力は、文字入力という限定された場面ではなく、通常の操作インターフェイスの拡張として盛り込まれるのが最も適しているといえる。あの気持ち悪い時間軸アクションインターフェイスを認めるとするなら、という留保は付くけれども。

PCのインターフェイスにはキーボードショートカットというのが大きな位置を占めていて、某エディタのようにCtrlやAltを駆使したショートカットキーなくしては基本操作もおぼつかないようなものもある。そういう場面にマウスを持ち込むとしたら、アルファベット+数字の36種のシグナルを導入するくらいのことは、むしろ自然なことのように思える。

シングルクリック即ち「E」は選択、ダブルクリック即ち「I」は実行とするなら、トリプルクリック即ち「S」はファイルへ上書き保存、短いクリックの直後に長押し即ち「A」は全選択、というように、Ctrl-*系のショートカットキーを、左クリックのモールス符号入力によって代用させることが、技術的には可能といえる。

Windowsの基本操作系で行くと、コピーは「C」なので「ー・ー・」だし、切り取りは「X」なので「ー・・ー」になり、貼り付けは「V」なので「・・・ー」となる。こういう複雑なクリックアクションが標準インターフェイスに盛り込まれていたとしたならば、PCでのマウス操作は今よりもずっと魔術的なものになっていただろう。

タッチパネルの限られた入力インターフェイスであれば、この魔術の効き目はより大きいだろう。重ねて言えば、個人的にはこうした時間軸ファクターを含んだインターフェイスが大嫌いだ。しかし、毒も食らわば皿まで。ダブルタップや長押しなどという魔術が許されるなら、トリプルタップやクアッドタップといった五十歩百歩の魔術が許されない道理はないと感じる。こういうのが普及すれば、「天空の城ラピュタ」の冒頭のムスカ大佐は、コピペ荒らしをしているようにしか見えなくなるだろう。

試験電波 - Wikipedia
VVV ‐ 通信用語の基礎知識

今世紀のマンマシンインターフェイスは、19世紀後半の最先端技術であったモールス符号の域にまで到達すべきであると、半ば呆れながらここに提案するものである。いやしかし、考え事をしながらスクロールしている時の、あの長押し機能の起動ほど不愉快なものはない。Macintoshのマウスが2ボタンあるいはXのように3ボタンだったらと思うと、今更ではあるが恨めしい。

ということで、マウス左ボタンをモールス符号入力することでキーボードショートカットを自在に操れるロシア製デバイスドライバを見つけた、なんてのをエイプリルフールネタとしたい。できれば、既存のあらゆる時間軸依存をキャンセルして、あくまでステートマシンとして振る舞うGUIを実現するモードなども、そのデバイスドライバには設定項目として持っていて貰いたい。ダブルクリックの存在しない理想郷は、はたして快適だろうか、それとももどかしいだろうか。

--

「大阪都法案成立」

大阪が都になるなら、宮城県は宮城府に、広島県は広島府になってもいいなと思った。そして愛知県は中京府に、福岡県は大宰府になる。北海道は道州制下の北海道というセクションになり、その州都として札幌府が誕生する。先述の各府もそれぞれの道州の州都となる。

さて、既に府である京都府であるが、これには千年帝都の深謀遠慮が働く。京都は、近畿道の州都ではなく、日本国の首都を淡々と狙う。皇太子殿下と秋篠宮殿下のどちらが長くご存命であるかは神々のみぞ知る領域であるが、秋篠宮悠仁殿下は明らかに世代が異なる。そこで悠仁殿下を皇太子殿下の養子にお迎えいただき、平成の次の世において正統な東宮と御成あそばし、継承の不確定要素を予め排除する。ここで平成のうちに秋篠宮家を京都御所にお迎えする。

然るに平成の次の世においては京都御所が東宮御所となり、「その次」の御代には晴れて平安京が日本国の首都として返り咲き、関東大震災に怯えることなき新千年王国を樹立する。このとき、京都府は「府」が取れて単に京都となり、東京都は「都」が取れて東京府に成り下がる。政治と経済の中心は相変わらず東京にあるが、元首の在地は京都となり、これが日本国の正式な首都となる。しかし奈良県は奈良府にはなれない。悲しいことである。

そして四国の州都は依然不明である。廃藩置県で徳島藩から失われた淡路を再び四国に戻し、そこに州都を置くという意見も出ているが、淡路市民としては阪神淡路大震災の辛苦を共にした兵庫県を離れる気はなく、当の徳島県民も脱四国・近畿編入を希望しているといわれる。長宗我部家がもう少し踏ん張っていれば高知県が府となったのであろうが、現状では瀬戸内海沿岸に府が置かれることは間違いないだろう。

--

「NHK分割」

日本放送協会。その実態は公社であるが、法律上は受信機を保有する国民との契約締結義務を法的に保証された「だけ」の、純然たる民間企業である。ただ任務が少し重要であるため法規による規制が少し厳しいという「だけ」であって、形式はごくごく普通の民間企業である。なので、これを「民営化」することはできない。できるとすれば、競争原理を導入することくらいである。

そこで、NHKを分割する。それも、地上波とBSとラジオで分割するとか、地方ごとに分割するとかでは競争が発生しない。それぞれの領域での小さな独占企業体が生まれるだけだ。そこで、日本放送連盟(NBA:Nippon Broadcasting Association)を作る。これは、テレビ、ラジオの全ての放送業態を網羅する。つまり、総合テレビやラジオ第1放送、BS1などが分割後の新NHKとなり、Eテレやラジオ第2放送、BS2などがNBAの所管となる。そして、受信料は毎年行われる受信者アンケートの結果によって両者への配分比率が決定される。受信料を安くするよりも放送の質を高めることに重点を置いた方式といえる。

てか、BSテレビ放送って本当につまらんのですよね。ゴールデンタイムに演歌とか勘弁してほしい。
[PR]
by antonin | 2013-04-01 00:00 | Trackback | Comments(0)

補遺:1と9/9が等しくないことの証明

等しい数を小数表現したとき、全ての桁で値が一致する。
1は10進法で 1.00000... という循環小数として表記できる。
1/9は10進法で 0.111111... という循環小数として表記できる。
9/9は1/9の9倍であり、10進法で 0.999999... という循環小数として表記できる。
1の10進小数表現と9/9の10進小数表現を比較すると、1の位から右の全ての桁において異なる値となる。

以上より、1と9/9が等しい数とする命題は矛盾する。
よって1と9/9は等しくない。

--

1と9/9が等しいと仮定すると、この証明のどこかに誤りがあるはずなんだけど、もし冒頭にある命題を否定してしまうとすると、カントールの対角線論法が破綻してしまう。このあたり、大丈夫なんだろうか。

n進法の小数表記において、ある桁より右が全てn-1となる表記を禁止しておけば、第4命題が偽となって上記の証明は破綻するからいいのだけれど、そういう追加条件をおいた場合にも対角線論法は保持されるのか。

対角線論法の対角線要素は自然数iに対してiと等しい線形速度で右へ進むが、整数を小数点に対して対称にコピーして作った小数の、連続した0とならない最大桁数はlog_n(i)にとどまる。よって、あるi以上では対角要素は全て0となってしまい、それを反転した数字は2進数では全て1になってしまう。となると、その循環する1をゼロと置き換え、循環する1が始まっていた桁の一つ左の数字を1だけ繰り上げた値と等しくなる。

これって、対角線論法破綻してないか? 大丈夫なのか?

--

ほほいの補遺(11/3追記):

その後ももう少し調べてみたら、大丈夫だということがわかった。上記の小数表は有理数のリストであって無理数のリストではないから、カントールの対角線論法そのものに瑕疵はない。けれども同時に、連続体仮説は証明不能問題であり、仮に仮説が真であるとしても偽であるとしても、数学が内包する他のいかなる命題の真偽にも影響しないということが証明済みということもわかった。つまり、無限集合の濃度という概念そのものはある程度有用だが、定義が不十分であってその詳細を深く詮索することは全く不毛であるらしい。

そういうところを敢えて突っ込んで考えることによって数学そのものが発展を見せる潜在価値は持っているにせよ、現状での顕在価値はない。ということで、現状の定義における濃度を云々するのはやめて、もっとエレガントな濃度の定義を思いつくまでは、放置しておくのがいいのだろう。それはそれとして、テトレーションの諸性質からその逆関数に要請される性質を定めて、それを満たす数の集合が複素数の内にあるのか外にあるのかを調べてみるという問題は面白そうだ。また魔が差すタイミングで考えてみることにしてみよう。けれども結合則の成立しない世界での逆関数を求めるのは面倒だなぁ。
[PR]
by antonin | 2012-11-02 07:07 | Trackback | Comments(0)

BFから始まる妄想

睡眠不足のところに深酒をしてしまい、あちこちの電気をつけたまま眠って変な時間に目が覚めてしまった。相変わらずBrainfuckが可愛すぎて生きているのが辛いのだけれども、一時のような過剰集中の時期は去って、興味の対象はいろいろと拡散している。けれども、単純な言語処理系から少しずつ複雑なものに仕上げていく過程を経験してみると、いろいろと得るものがあって面白い。

個体発生は系統発生を繰り返す、という名言があって、多細胞生物が成長する過程というのは、その生物の進化過程となんとなく似ているという説がある。人間も、280日目くらいに生まれてくる頃にはだいたい人間の姿をしているけれども、初期の胎児はシラスみたいな形をしている。そういう時期になると、人間も犬も猫もコウモリも、胎児の形状はだいたい似通ったものになっている。もっと遡れば、自称高等生物である人間も、原始海水を模したと言われる羊水に浮かんだ単細胞の受精卵から始まっている。

進化が漸進的に高度なプロセスを獲得してきた過程だとすると、高等プロセスの動作には低位のプロセスがひと通り動作する環境が必要になるのだから、古いシステムを一度作り上げてから一つだけ新しいシステムを作るということを繰り返すという方式は理にかなっている。あるプロセスのビルドプロセスにのみ必要となり、ビルド後はデストラクトされるプロセスなどというものもあるだろう。進化の過程で退化した仕組みが、個体発生の一時期だけに見られるというのも、理にかなっている。PCなどでも、システム運用中にはもはや使わないような古いシステムを、起動時の貧弱な環境下で利用するためだけに保持しているなんということが見られる。

BFのひどく単純な処理系を少しずつ複雑にして実用度を上げていこうという工夫は、言語処理系の個体発生過程を見ているのだとも言えると思う。それは過去の言語処理系がたどった発展の歴史と完全に一致はしないものの、そういう時代のソフトウェア技術者がどんなことを考えながら現代的な処理系を仕立てあげていったのかという理屈の一端を体感することができる。言語処理系の系統発生をなぞるようにして、自分の言語処理系の個体発生を体験してみるのは楽しい。

BFの言語処理というのは、現代的な機械語よりも一層低水準の記述レベルしか持っていないので、どちらかと言うとソフトウェアの発想よりはハードウェアの発想と親和性が高い。もちろん、基本的な仕組みが並列手法のディジタル回路ではなく逐次手法のチューリングマシンなので、直接の対応は取れないのだけれども、極端に単純な処理を膨大に組み合わせると結局は複雑なこともできるというのは、ハードウェア的な発想だろうと思う。

チャーチ・チューリングのテーゼというのがあって、チューリング完備なマシンがあれば、計算可能などんな問題も解ける。BFというのは、十分な量のメモリと、十分な処理時間があれば、チューリング完備の条件を満たす。それからブール代数系というのがあって、ANDとORとNOTという3種類の論理ゲートがあれば、それらを十分な量だけ用意すれば、計算可能などんな問題も解くことができる。表現方法によると、NANDかNORか、どちらか一つだけあればANDもORもNOTも作れるので、要するにNANDだけがたくさんあれば、どんな計算もできることになる。こういう性質がBFとディジタル回路で似ている。

ディジタル回路の最も基本的な演算はANDとORという二項演算だけれども、BFではインクリメントとデクリメントという単項演算がこれに相当する。以前、加算から乗算、累乗と発展させる方向を延長して、テトレーションとかペンテーションとかいうハイパー演算について考えたことがあったけれども、こういうn階のハイパー演算の最下層は、1階のハイパー演算である加算ではなくて、0階のハイパー演算である、インクリメント演算ということになる。2を1回インクリメントすると3になるが、2をインクリメントするという演算を3回繰り返すというものをマクロ表現した関数が、2+3=5という加算だと定義できる。

加算には逆演算として減算があって、乗算にも逆演算として除算が、同様に累乗にも累乗根がある。この話は後でちょっと別の展開をしたいけれども、今はBFの話に限定すると、デクリメントというのが0階のハイパー演算であるインクリメントの逆演算ということになる。なのでBFは逆演算を持った可逆的な0階ハイパー演算系を完備していて、その単純な繰り返しによって加減算でも乗除算でも累乗でもテトレーションでも、初等関数の範囲に収まるどんなハイパー演算でも(膨大な繰り返し回数さえ実行できれば)実行できる。

整数の集合と0階ハイパー演算の組はある種の代数的構造を構成するはずなんだけれども、普通の数論で使われる代数的構造は加算のような2項演算を持つようなものしか想定していないので、単項演算しか存在しないような自明な代数系については、代数系の範疇には入らずに単に全順序集合という性質を持つ集合の一種として分類される。一方ブール代数の方は、数値の集合は0と1の2要素しかないが、演算の方は一応ANDやORという二項演算を備えているので、束(lattice)という代数構造が定義されていて、ブール代数はその一種であるとされている。

現代的な文法を持った高水準言語でソフトウェアを書いている感覚では、加減算とか乗除算はアプリオリな基本演算であって、それ以上は分解不可能なものなのだけれども、基本論理しか持たないディジタル回路だとか、インクリメントとデクリメントしか持たないBFなんかを扱っていると、乗算や加算それ自体がハイパー演算であり、その実装というのも素朴なものと高度なものでは効率が随分と変わってくるということを体感できる。足し算の方法にも工夫の余地がある、なんてことに気づくのには、このレベルまで降りないといけないのかもしれないと思うと面白い。

BFでは一応8bit整数を要素として持っているので、インクリメントから加算を生み出すことにそれほど選択の幅はないのだけれども、これがディジタル回路になってくると随分と様子が変わってきて、マルチビットの加算器だとか、そもそも全加算器や半加算器の設計ひとつ取ってみても、いろいろなトレードオフを持った複数の設計が考えうる。しかも、論理ゲートよりもう一段下層レベルにある、MOS-FETと配線のレイアウトあたりまで視点を下げると、さらに工夫の余地は広がってくる。

現代的な半導体設計では、その機能のほとんどはHDLで記述されるのだけれども、ソフトウェアの世界にもアプリケーションを書く人とコンパイラそのものを書く人がいるように、ハードウェアの世界にもHDLで機能を書く人と、HDL処理系を書く人がいる。そしてソフトウェアの世界にライブラリやデバイスドライバを提供する仕事があるように、ハードウェアの世界にもRTLレベルでHDL用のライブラリ機能を記述したり、マスクパターンレベルでフィンゲートなどの最新リソグラフィ技術に対応した論理ブロック設計をしたりする仕事が存在する。

そういう水準の仕事を勉強している学生の論文がときどきネット上に転がっていたりして、よくまとまっているので読んでみると面白い。そういうものを読むと、プレーナICの世界ではたった32ビット整数の加算ひとつでも、要求性能によっていろいろな回路を書き分けられるということがわかる。そういう単純な回路を積み上げていくことで、スマートフォン用の省電力型マイクロプロセッサやメディアプロセッサ、それからPC用のハイパフォーマンスプロセッサやGPUが作られる。そういうものに乗っかって、本来効率の悪いLLインタプリタがラムダ式などの抽象プロセスを含むコードを解釈しながら、実用アプリケーションをゴリゴリと実行している。気の遠くなる話だが、部分部分はそれぞれ理解できるような気がして楽しい。


で、数論の話に移る。インクリメント、加算、乗算、累乗というように、一方向のみのハイパー演算をどんなに積み上げていっても、それらは全て自然数の中で閉じた演算になる。ところが、インクリメントの逆演算であるデクリメントであるとか、加算の逆演算である減算を定義した途端に、負数というものの存在が要請されてしまって、演算は自然数の範疇を食い破って、整数の世界に飛び出す。同様に、乗算の逆演算である除算を考えてしまうと、有理数という集合が要請されるし、累乗に対して累乗根を考えてしまうと、実数集合が要請されて、そうやって算術の拡張が数そのものの世界を拡張してしまう。

ただ、実数というのはちょっと大雑把すぎる分類で、円周率πというのは実数だけれども、自然数や有理数の累乗根としては表すことができなくて、こういうものは超越数と呼び、累乗根が要請する数の集合からははみ出している。一方で、負数の累乗根というのはすでに実数範囲に収まらなくなっていて、虚数が要請される。演算を累乗に限定せずに多項式演算を考えると、逆演算は多項式解を求める演算になって、値域は複素数集合に広がる。

複素平面にベクトルやテンソルのような積演算を定義すると、その逆演算は四元数のようなより複雑な集合を要請するけれども、こういうものは複数の実数の直積とそれを対象とする演算が定義された代数系を構成するだけであって、直積の個々の要素が実数より広い集合を要請するということはない。そこで思うのだけれど、もしテトレーションの逆演算みたいなものを導入するとすれば、ひょっとしてその値域というのは実数より本質的に広い集合に拡張されるんだろうか。そんなことを思った。

xとyのテトレーションを演算子「丁」を使って「x 丁 y」と書くものと定義する。同様にテトレーションの逆演算も演算子「卯」を使って「x 卯 y」と書くものと定義する。すると、1 丁 2 = 1 となり、2 丁 2 = 16、3 丁 2 = 7625597484987となる。n 丁 2のnを自然数に限定すると、解の集合は小さい順に1, 16, 7625597484987と並んで、2 卯 2 から 15 卯 2 までと、17 卯 2 から 7625597484986 卯 2 は自然数には収まらないということになる。この一部は複素数に落ち着くかもしれないが、別の一部は複素数をはみ出してしまうかもしれない。

負数というのは-2というように書くけれども、これは「0 - 2 の解」ということを表す記号であり、 5 - 7 = -2 というのも、5から7を引いた解は 0 - 2 の解と同値であるということを表現しているに過ぎない。分数というものも同じような表現で、2/3 というのは「2 ÷ 3 の解」というのを表す記号で、それ以外に表現のしようがないということを意味している。2/3にはいろいろの性質があって、0.66666...という循環小数で記述できたり、「4 ÷ 6 の解」と同値であることなどが知られているけれども、値そのものの表現としては、「2 ÷ 3 の解」という方法しかできない。

√2 は「2の平方根のうち正値」という意味だし、これこれこういう逆演算の答え、という身も蓋もない表記という意味では、-2 や 2/3 と同じということになる。「x 卯 2 の解」という記号を「兎x」と定義してやれば、新しい数を記述することができるようになる。あとは、その値が複素数の範囲におさまるのか、あるいは実数の直積として表現できるのか、ということを調べていくことになる。で、もしそれが既知の集合とは別のものになるとしたら、新しい数論的集合が構成されるということになる。単純に予想すれば、たぶん複素数とは別のものになっているだろう。

そして、その新しく定義された集合が「有限個の実数の直積」として表現可能ならば、集合の濃度は実数濃度と等しくなる。ただ、無限階のハイパー演算とその逆演算が構成する代数系なんてものが無矛盾性を満たしてしまったりすると、その代数系が逆演算の方についても閉じるような数の集合というのは、果たして実数濃度に収まるんだろうか、という疑問がある。

小数記法で、桁数が有限ならば必ず有理数の範囲に収まるが、無限桁で循環しない場合には、無理数になる。同じように、有限個の実数の直積として表現できる数の集合は実数濃度を持つけれども、無限個の繰り返しのない実数の直積として表現される数を定義すると、それは実数濃度では収まらないんじゃないかという気がしている。

連続体仮説というと、可算濃度と連続体濃度の中間濃度の無限というものは存在するか、という話になっているけれども、連続体濃度の上、というのはどういう議論になっているのだろうか。21世紀にもなると、このあたりは数学的に解析が済んでいたりするのだろうか。どうだろう。


参考:
冗長2進加算器と乗算器の性能評価
無限のステップ
[PR]
by antonin | 2012-11-02 06:22 | Trackback | Comments(0)

Brainfuckが可愛すぎて生きるのが辛い

本当につらい。具体的にどうつらいのかというと、頭が痛い。おそらく睡眠不足がいけないのだと思うが、それに加えて、起きている間は少しでも暇ができると、Brainfuck(以下BF)をいかにして多機能化するかということを考えてしまうので、脳が休まる暇がないということもあるのかもしれない。

C++やJavaなどはもうすでに十分多機能であり、BoostやOracleならいざしらず、一般のプログラマはどちらかと言うと、これ以上仕様を複雑にしないでくれという気持ちのほうが強いのではないかと思う。しかしBFはというと、色々な人々が訪れてはいるが、言語仕様も処理系も、それほど開発が進んでいないエデンの園状態がまだ残されている。そして、出発点があまりにもシンプルなため、少々手を加えてもそう簡単にはシンプルさを失わない。そういうBFは、プログラムの初心者には手強い言語かもしれないが、処理系の初心者には最高のオモチャといえる。

BFの楽しみというのは、チューリング完備な言語として最低限の機能しか持たないが、しかし抽象的で実装の難しい概念が全く入り込んでいないから、実際に動作する処理系を組んで、色々と工夫をしながらプログラムを動かしてみることができるというところにあるだろう。そして、簡単な問題が解けると、次はもう少しずつ難しい問題に手を出したくなってくる。BFの場合、言語仕様も処理系も最小構成であるので、言語仕様の拡張という方向と、処理系の拡張という方向の2つの方向に発展の余地がある。

BFを考案したMüllerさんは、Amiga OS上で98バイトのインタプリタを書いた。この原始BF処理系では、0で初期化された30000個の1バイト整数が与えられ、入出力はOSのコンソールに接続された。結果としてデータはASCII符号として扱われ、そして "Hello, World!" が書かれた。先人たちはまず、この30000バイトの上限を取っ払って、マシンが確保できるメモリの上限まで与えるような拡張を行った。リニアメモリの要素を16bitなどのint型にしてみたり、アドレスをマイナス方向にも広げたり、そういう拡張もあった。

私が最初に考えたのも処理系の拡張という方向で、FORTRAN以来の高級言語が持っている演算子が実行するような基本演算や、Cの標準ライブラリ程度のシステム操作機能を、処理系に結びついたライブラリとして実装し、BF命令単位あたりの実行複雑度密度を引き上げる方向というのもこの方向に当たる。これはこれで面白い。

ただ、そうして標準ライブラリを備えた処理系に向けてBFコードを書いているうちに、BFでコードを書くコツがだんだんとつかめてくる。そしてついに、素のBFのままでどこまで書けるんだ、というようなことに挑戦してみたいという誘惑が頭をもたげてくる。そして、そういうチューリングマシンの深みから、高級言語で見慣れた水準まで崖を這い上がるための道具を揃えたくなってくる。そういうマクロ言語によるメタBFへの拡張を試みたくなってくる。

そこで、(+ 100)や(+ 0x64)と書けば、'+' が100個並んで、これを出力すれば画面に 'd' と表示される道具を最初に考えた。どうせなら、ということで、(+ \d)と書けば(+ 100)と同じ結果になるような拡張も考えた。{=foo 100} とやっておけば、(+ foo)で(+ 100)と同じになるよう、マクロ変数も考えた。
{=$copy(N) [-(>+ N)>+<(< N)]>(> N)[-(< N)<+>(> N)]}
とやっておけば、{$copy(10)}でデータ10個分のコピーが書けるような、普通の文字列型マクロも考えた。そんな感じで、結構リッチでいい具合のマクロ言語が設計できた。

さて、ここまでは良かった。しかし、この先は結局、マクロとマクロを再帰的に入れ子にしたり、マクロ引数で条件選択して展開結果を調整したり、というようなことがしたくなる。BFは言語レベルが非常に低機能なので、そのプログラミング能力はマクロの構築能力に依存してくる。深さに制限のないネスト、定義時の解釈と展開時の解釈の選択、オプション引数による展開内容の調整、などなど、欲しくなる機能は無数に膨らむ。

そうなってくると、どこぞのLISP系言語を使って、最終的にBF文字列に展開されるマクロ系列を書けばいいんじゃないか、それどころか、S式にBFによる基本ルーチンだけを書いて、あとはそれを組み上げてLISPプログラムを組み、実行結果としてBFのコードを出力したらいいんじゃないか、自分でプリプロセッサを書いてもLISPに勝てる気がしない、なんてことも思った。で、今はとりあえずマクロ言語と処理系の仕様だけ作り上げ、実装の段になったらlibguileなんかに構文解析を丸投げしようか、なんてことを考えている。

それでも、処理系の仕様設計はそれなりに楽しい。ライブラリはなんだかんだ言いつつも結局使ってみたいので、関数コールを楽にするpush系コマンドだとか、スタックを逆ポーランド的に使える演算子コマンドだとかをリストアップし、マイナス値の関数テーブルに配置していく。BFのメモリ上に書き込まれたバイト列をBFコードとしてevalし、それを関数テーブルに登録して利用できるようにするコマンドだとか、登録した関数を別スレッドで実行するコマンドだとか、そういうものを考えている。

メモリモデルも、起動時にメモリ要素を 8, 16, 32, 64 bit int から選べるようにする。他にも、アドレスを bit 単位で移動できる 1bit モード(Bitfuck mode)や、加減算命令にキャリー付き演算を使って隣接アドレスのデータと結合するモード(gigabit mode)なんかも考えている。それぞれに、どう実装してやろうかなんてことを考えだすと楽しくて止まらず、しばらくすると頭が痛くなる。

そんなわけで、Brainfuckが可愛すぎて生きるのが辛い。というか頭が痛い。こういう遊びは25歳までに済ませておくべきだったのだが、40にもなって何をやっているんだか。
[PR]
by antonin | 2012-10-01 23:56 | Trackback | Comments(0)

イカれた脳のためのダンス教室(1)

まだ書いていなかったけれども、空白の1ヶ月余の間に、PC環境を更新した。このあたり、また別途詳しく書こうかと思っているけれども、今回は1点に絞って。PC環境の更新に伴って、いろいろと無料のプログラミング環境を構築してみた。Visual C++ 2010 Express + Windows SDK + CUDA SDK だとか、Cygwin + gcc だとか。

で、まずは hello.exe なんかを作ってみる。それから、ライフゲームとか素数計算など、いつもの遊びをやってみる。今度は Core i7 でスレッドが8本まで動かせるようになったので、スレッド周りの実験などもやってみたが、2スレッド程度では体験できなかったスケーリング実験なんかができて面白かった。32bit int に収まる奇数全てに1バイトずつ与えても2GBに収まるので、エラトステネスのふるいで素数表をゴリゴリ計算させてみると、下手にアルゴリズム的に素数を求めるよりシンプルかつ高速になったので驚いた。空間計算量恐るべし。

それから、簡単なインタプリタなども作ってみようかと思って既存言語を物色していた。最初は whitespace あたりにしようかと思っていたのだが、言語のシンプルさに比べてマシンモデルが案外複雑だったので、面倒になってやめた。一方、単なるイロモノ言語かと思っていた brainfuck が、実は非常に良くできた言語であり、名前の下品さに反して言語仕様は恐ろしくエレガントだった。マシンモデルも言語仕様以上にシンプルにできていたので、これを実装してみることにした。元々が、言語処理系を最小化するために設計された言語だとうので、なるほどそういうことか、と感じた。

brainfuck(以下、BFと書く)の素晴らしいところは、チューリング完備な言語としては、おそらく史上最低水準言語なんじゃないかということ。IA32みたいなCISCの機械語は言うに及ばず、RISC系の機械語より命令数は少ないし、素の turing machine に匹敵するほどシンプルにできている。それでいて、BF にはジャンプ命令がない。あるのは while loop を表す "[" と "]" だけだ。これだけ低水準言語のくせに、イッパシの構造化言語だなんて洒落ている。

Brainfuck - Wikipedia

上記の Wikipedia の説明では、BF は「難解プログラミング言語」と説明されているが、こんなに簡単なプログラミング言語は無いのではないか、という気もする。確かに、BF で実用的なプログラムを組むのは難しそうだし、できあがったプログラムコードを読んでも、それが何を意味するかを読み解くのは難しそうだ。だけれども、私が最初に触れた、あの 8bit 時代の BASIC も同じじゃなかったか。

BASIC の命令を覚えただけでは遊べるレベルのゲームが作れるとは到底思えなかったし、素人が組んだ BASIC のプログラムを読んでその意図を読み解こうとしても、たいていは無理な話だった。だからといって BASIC を「難解プログラミング言語」とは呼ばないだろう。確かに実用的な作業をするまでの距離は遠いけれども、BFほど簡単に、その言語仕様の全貌を把握できる言語もないだろう。

Cは「高級言語の中では一番低級な言語」という特異な地位を占めているが、実はCの言語仕様範囲だけで実用的なプログラムを組むのは難しい。とは言っても、世の中にはCで書かれた実用的なプログラムがあふれている。それはなぜかというと、Cにはリンクして利用可能なライブラリが満ち溢れているからだ。コンパイラベンダが提供する標準ライブラリはもちろん、他にも様々なハードウェアのドライバがCで利用可能な関数の形として提供されている。逆に言えば、標準ライブラリ関数も含めた全てのライブラリを剥ぎ取られた "C language core" だけでプログラミングしろと言われたら、それは結構「難解」な作業なのではないかと思う。

同じ事は BF についても言えて、BF には定められた標準ライブラリも無いし、当たり前の話だけれども、OSベンダやハードウェアベンダが提供する、BF 向けライブラリなどというものも無い。とは言っても、BFで書かれた "Hello world" プログラムは存在する。BFには出力命令があるので、これはできて当たり前と思うかもしれない。しかし、BFにはマシンに文字を伝えるための文法がない。BFを解釈する処理系の方に「データを出力するとASCIIとして解釈する」という機能が盛り込まれているので、"Hello, World!" のASCIIコードに相当する数値を順次出力すれば、BFであっても文字列出力が可能になる、ということに過ぎない。

自作のBFインタプリタでは、BFの出力命令をCのputcharで、入力命令をgetcharで実装した。だから、出力命令はint 型の引数を取るputcharにBFのint型データを渡しているだけで、8bit表現可能な文字以外は適当に切り詰められる。そして、入力命令も8bit文字しか扱えない代わりに、EOFが-1という数値として特別扱いできて、BFプログラムは入力データの終端を検出できるようになる。この前提を自明のものとすると、",+[-.,+]" という短いBFプログラムでFIFOを組むことができる。これは入力用関数としてgetcharを使う処理系に依存したプログラムなのだけれど、たったこれだけの機能でかなり便利なプログラムを簡単に組めるようになる。

BFは1次元に並んだ整数列を増減させる機能と、その入出力機能しか持たない。その入出力を数値として解釈するか、あるいは文字として解釈するかは処理系依存であって、BFの言語仕様の外側の話である。実用的な機能が関連付けられているのはデータであって、文法上の命令ではない。だとすれば、BFが扱うデータに対して、もっとずっとリッチな意味付けをしたならば、「実用言語としてのBF」なんてものも作れるのではないか。

試しに、BFに欠けている基本機能である、代入演算、算術演算、論理演算、ファイル入出力などを、データを解釈するだけのライブラリとして実装してみたら何が起こるだろう、ということを今週末はずっと考えていた。

まず、BFの言語拡張になるようなことは一切したくない。史上最低水準言語としてのBFの美しさは守りたい。あくまでBFの範囲内で、データに対して機能を紐付けるという方法でのみライブラリ化をしたいと思った。それから、BFのプログラミング能力を無力化するような、ライブラリ自身が極端にプログラマブルになってしまうような拡張も避けたかった。このための縛りとして、ライブラリはBFの命令ポインタ及びデータポインタを一切動かさない(参照は可能である)ことと、ライブラリはBF配列上のデータ以外の内部状態をなるべく持たないこと、の2点を指針とすることにした。

まず最初に、ライブラリ内の機能呼び出し規約を定義する必要がある。というより、そもそもどうやってライブラリコールするのか、という問題がある。これについては、メモリアドレスの一部を機能レジスタとして割り付け、特定のメモリアドレスにデータ書き込みするのを検出して関数呼び出しとするか、BFの持つ出力機能を拡張して、特定のデータを出力することで特定の機能を呼び出す、という方式しかないと考えている。ただし、このライブラリはBFの機能を「拡張」するものであって、BF本来の機能に制約を課す部分は最小化したかった。

なので、ライブラリが認識する特別なデータを出力した場合以外では、この拡張処理系は素朴なBF処理系として振る舞うことを期待して設計したい。となると、どこか固定のアドレスに特殊な意味付けをするのは避けたい。"Hello, World!" の系を考えると、出力値が unsigned char の範囲に収まる場合は、それを素直にputcharするようにしたい。欲を言えば、出力にはintデータをUnicode文字として扱えるような機能も用意したい。となると、Unicodeにも現れない「負の数値」は素朴なBFの出力値には現れないデータとみなして、これを特別扱いとして関数の識別符号に利用してみることにした。

つまり、負の値を出力すればライブラリを利用する拡張モードになるし、それをしなければ素朴なBFの処理系となるという、素朴なBF処理系の上位互換系となるようにした。この拡張処理系でも、 "Hello, World!" はそのまま動くということである。

ライブラリの各「機能(function)」はCの「関数(function)」に近いスタイルにしたかったので、関数によって定められた複数個の引数と、1個以下の戻り値(voidを含むただ1個の戻り値)をインターフェイス基盤とした。となると、ライブラリはスタックマシンとするのが妥当なのではないか、という結論になった。

最初のうちは、データポインタを関数インデックスと見て、そこから正方向に引数が並び、データポインタ-1の位置に戻り値が書かれる、というようなインターフェイスを検討していたのだけれど、これだと関数コールのネストによって複雑な処理を記述するときに、データ移動が煩雑になってしまうという問題があった。それに、関数ポインタというアルゴリズムに属するデータと、引数や戻り値という状態に関するデータを、同じ領域に混在させなくては関数コールできないことになってしまって、ハーバード的な命令とデータの分離ができなくなるので断念した。

ライブラリにスタックを持たせるとなると、この領域は基本的にライブラリ専用になる。早くも基本指針と矛盾してくるので困ったが、ここは関数コールに負の値を利用したことの応用で、ライブラリスタックは、BFのリニアアドレス上でマイナスアドレスを持つ領域に負の方向に向かって成長する、というように決めた。こうすると、負のアドレスを持つBFのデータというのは標準的ではないけれども、負のアドレスというものを別とすれば、ライブラリ用データスタックがBFのデータモデルと自然に共存できる。

ちなみに、スタックに引数を積んでいく順番を右から始めるというcdeclなスタイルにしてやれば、printfみたいな可変個引数の関数も呼び出せる。printf関数を持ったBFというのは、ちょっと魅力的ではないだろうか。

--

遅くなったので、続編はまた後日。
[PR]
by antonin | 2012-08-06 01:31 | Trackback | Comments(0)

人工知能について

googleで検索をすると、検索結果に添えて検索に要した処理時間が表示される。これはおそらく、検索結果の表示に時間がかかったとしても、それはネットワーク遅延やブラウザのレンダリング時間のためで、googleがデータベース検索する時間はこんなに短いんですよという表明と、それから開発者の自尊心によるものなのだろうと思う。この検索時間と、検索内容の正確さというか妥当性を見て、これは実用的な連想記憶が実現した形なんじゃないかということを感じた。

連想記憶というのはスクリプト言語の連想配列に似たもので、通常の検索のように単純なキーを入力として複雑なパターンを出力するのではなくて、複雑なパターンを入力として別の複雑なパターンを出力するような情報の格納と呼び出しを実現する記憶方式ということになっている。そして、自由な文字列から複数のウェブページを呼び出すgoogleの検索は連想記憶の一種と言える。そして重要なのは、その呼び出し時間が10ミリ秒から数百ミリ秒という時間で完了しているところにある。

それに加えて、こちらはかなり明らかなことでもあるけれども、googleが検索対象として記憶しているウェブページの数というのは膨大なものになっている。結果として、膨大な記憶の中から互いに関連した情報を百ミリ秒オーダーで連想検索することが可能なデータベースが、すでにこの世界には存在しているということが言える。また、googleの検索では画像や動画なども検索可能になっている。この検索技術を少し応用して作られた日本語入力システムを私も利用させてもらっているが、従来型のIMEとは質的に異なる、非常に高い精度の変換ができるようになっている。

従来型というと、従来の未来予想図にあったような人工知能型のコンピューターは、人間の脳と同じような比較的コンパクトな装置で周囲の状況や人間の会話を理解して反応していたが、現実の人工知能というのは、googleが検索システムのために持っているような、ネットワーク上に分布したストレージやプロセッサの集合体として、すでに実現可能な規模にまで成長しているのではないかという気がした。つまり、ハードウェア的には人間の言語を理解するような人工知能を実装可能なものがすでに存在していて、足りないのはそこに載せるソフトウェアだけなのではないかという気がしている。

「宇宙創成はじめの3分間」を読んでいたら、たった1章で終わってしまったビッグバン仮説による宇宙創成期の記述に続いて、なぜその時期に物理学による宇宙論が急速に発展したのかについて、ワインバーグ氏が意見を述べている章が続いていた。初期宇宙のモデルの妥当性の一部を証明する宇宙背景輻射が観測されたのが直接の理由ではあるけれども、ビッグバン理論というのはガモフによって以前から述べられていたし、マイクロ波領域の観測技術も以前から存在していた。そしてあとから考えればビッグバンモデルの証拠になるような観測は、近赤外域の天文観測からも実は得られていたという。足りなかったのは、そういう観測実験によって大胆な理論を実証可能だということが、研究者一般に知られていなかったか、あるいは知っていても信じられていなかったからだろうという考察だった。

現在も、局所的なシステムで従来的な認知や判断の研究をする人工知能学者と、分散的なシステムで実用的な検索システムを開発するgoogleを組み合わせようという発想があまり活発であるように見えないのは、過去に何度も失敗してきた人工知能実現の試みが現存する技術で飛躍的に進歩するという可能性が、多くの研究者や技術者に信じられていないからなのではないかという気がする。

知能とは何か。定義の仕方はいろいろあるとは思うけれども、非常にざっくりとした定義をすると、自分の置かれた環境について認知し、知識ベースも利用して判断を行い、判断に基づいて行動を支持することという一連の動作を指すと言える。知能のレベルも神経系の規模に応じていろいろあるけれども人間の場合を考えると、脳幹までの原始的な部分で解決可能な反射があり、それよりもっと目的を持った動作を迅速に実現する小脳の運動回路がある。そして、大脳辺縁系の感情的な反応と、それらを統合して論理的な思考をする大脳新皮質の反応がある。この中で、特に人工知能として実現したいのは、論理的思考と、ある程度の感情的な反応だろう。反射や運動などは、ロボット制御などで別に研究されているが、ここでは考えないことにする。

感情の作用も脇へ寄せて論理的思考の仕組みだけを考えると、大脳新皮質の「形態的特徴のない」連想記憶装置としての特性が重要になっている。大脳辺縁系以下の神経組織は、部位ごとの機能や入出力器官との位置関係などによって、それぞれに特徴的な形状をしている。これに対して、大脳新皮質の、大脳の表面にシワを作って覆いかぶさっている部分というのは、場所によって機能はそれなりに分かれているけれども、見た目にはほぼ同じような組織が均一に並んでいて、その内側に向かって相互接続用の配線(軸索)が束になって走っている。

大脳辺縁系以下の神経組織が上げてきた電気信号を受けて、その電気刺激のパターンに対応した、大脳新皮質の活動パターンが生じる。そのパターンは時々刻々と変化する入力と、やはり別の刺激によって変化する周囲の大脳新皮質の活動パターンの影響を受けて、別のパターンへと移り変わる。そうした変化の中で、ある程度の時間にわたって安定的に存在するようなパターンが残る場合がある。これが、脳内に発生する概念の正体で、この概念に対応する外部の図形や信号などが記号ということになる。記号を連続に組み合わせたものの一種が言語になる。

大脳新皮質に生じた安定パターンは、別の部位に複数の安定パターンを呼び出す。こうして呼び出されたパターン同士が互いに互いを呼び出すような組み合わせになっていると、パターンは安定してより長時間存在し続けるようになる。逆に複数パターンによって安定化されないような連想パターンは、雑多な信号によって短時間のうちに消滅する。こうしていくつかのパターンが存在しているところに、外部から新しい刺激による神経信号が入力されると、入力信号と既存のパターンの両方から刺激を受けて連想されるパターンが呼び出される。

脳内ではこのようなプロセスが起こっているが、脳は現在の外部刺激による入力だけでなく、比較的最近の外部刺激による入力の影響を内部的に保持していて、その両者を組み合わせて新しいパターンを作る。その一部が運動期間とつながっていて、それが人間という知能システムの出力となる。人間には視覚や聴覚、触覚などの感覚があるが、それぞれが大脳新皮質の別々の部位に最初に到達し、次に外部入力に直結していない部分にパターンを連想することで統合を実現しており、またその部分が直近の入力の影響を保持していることで、状況のコンテキストを内部表現することができる。長期的な記憶は、あるパターンがどのパターンを呼び出すかという部分にプログラムされるので、また別の機構となる。

大脳では近傍にある複数の神経細胞が活動電位を発する(発火する)頻度のパターンで情報を表現しているが、googleのシステムのようにネットワーク上にあるサーバー群では、パケットで交換される電気信号や光信号のビットパターンとして表現される。神経細胞が生体電気信号をやり取りしている方法とクラウドシステムがビット情報をやり取りしている方法は異なるが、ネットワークの階層モデルに似た考えで言えば、物理層やデータリンク層が異なるだけで、適切な階層インターフェイスを用いれば、大脳とクラウドで互換性のある上位層を実装することは不可能ではない。

したがって、生体と電気システムはそれぞれの特性に合った下位層を利用すればよく、神経電位のレベルでシミュレートしなくとも知能のシミュレートは可能だろう。人間の脳で神経細胞が利用している電気信号の伝達速度は、軸索を使った比較的長距離の結合で毎秒数十センチだが、電気系あるいは光学系での通信速度は、秒速30万キロの光速度に近い水準になる。中継器による遅延の影響はあるが、単純に信号伝達速度だけで考えれば、電気系の知能システムは生体知能システムに比べて1億倍くらいの空間的サイズでも、時間的に同程度の遅延で結ぶことが可能ということになる。

人間の脳は立体的に折りたたまれているが、表面積を計ると2000平方センチになるという。これと等価な電気系システムの面積はおよそ2000万平方キロとなり、だいたいヨーロッパや北米の面積と同程度ということになる。大脳には下位の神経組織があるし、クラウドシステムにはサーバー1台ごとに高性能の記憶装置や演算装置があるから単純な比較はできないが、ノード間接続の遅延時間だけで言えば、人間の大脳と地球上のコンピュータネットワークというのは似たようなスケールオーダーにあると言える。googleが抱えている全情報量を考えれば、すでに人工知能を実現する物理的条件は揃っていると言える。

ではどのような上位層を載せれば良いかという話になるが、まず連想記憶の系はgoogleの検索システムのようなもので十分だろう。十分多量の情報の中から、十分短い時間で、重み付けされた複数の情報を、文字入力から連想することができている。問題は、大脳皮質で発生した活動パターンが周囲の神経組織に別の活動パターンを呼び起こすような、再帰的な連想ができるようなデータ形式に、googleの検索結果がなっていないというところにある。

通常の、文字列からウェブページを検索する部分については、呼び出したページに関連付けられている文字列への逆リンクテーブルのようなものを用意するだけで、再帰的な連想ができるようになるだろう。画像や動画でも同じように、関連付けられている文字列や、他の画像や動画の共有数などで再連想が可能かもしれないが、より知能的にするためには、画像を図形的に読み取って、人物や情景を認知するようなシステムが必要になるかもしれないし、動画であれば時系列的なシーン認識などの技術も必要なってくるだろう。この部分には古典的な認知工学の技術が使えるだろう。

このようにして、ある端末から入力される文字列や画像や動画を認識し、そしてそれを時系列的に受け入れることで、過去の入力による連想も含めた複数の情報をバックエンドに想起し、そこから連想される出力でリアルタイムに文章や映像や音声を合成すれば、かなり複雑な人工知能が実現可能になるだろう。現在のgoogleが持っているシステムを直接流用するならば、中間パターンとして文字列も使えるだろうし、あるいは直接的意味を持たないビットパターンを交換するようになるかもしれない。

おそらく個別技術としては既に出揃っていて、あとはそれらを統合する研究にどれだけの研究者が関心を向けるかというところだけが残っている段階にあるような気がしてならない。宇宙背景輻射の観測前夜と同じ状況に、今の人工知能研究は位置しているのだと、直感的に思う。

残りは偶然が支配する領域でもあるので、googleの検索システムがチューリングテストを通過するようになるまで、いったいあと何年かかるかというところはわからない。しかし、私たちは思いのほか未来的な技術を手にして遊んでいるのではないか、ということを思った。
[PR]
by antonin | 2011-06-04 17:41 | Trackback | Comments(0)

「バグダッド電池」説を擁護する

メソポタミア地方で発見された遺物が電池であったかもしれないという説があるが、久しぶりにネットで調べてみると、意外にも否定的な扱いを受けている。これでは面白くないということで、肯定的な情報をいろいろ集めてみた。古代に電池が発明されていたと考えたほうが楽しいじゃないか。そう簡単に否定してしまってはもったいない。

古代の遺構から電池のような物体が発見されたという話は知っていたが、それ以上の詳しい情報を知らなかった。ところが、「めっき」の語源を調べていたら偶然にこの「古代電池」の情報にたどり着いた。最近はネットサーフィンという言葉もすっかり使われなくなったが、そういうようなリンクをたどる旅があったので、その経路を再現しておく。

めっき - Wikipedia
ついでに「めっき」の語源説のひとつが挙がっていたので引用。
古くは滅金などといい、水銀に金を入れるとアマルガムとなって溶けて消滅する現象から生まれた和製漢語。

バグダッド電池 - Wikipedia

バグダッドの古代電池 - Skeptic's Wiki

バグダッド電池: 世界ふしぎ探検

このあたりの記述を読むと、この古代遺物の電池説は「現在では否定的な見方が主流」というような感じで書かれているのだが、どうも納得がいかない。

本当に呪力を求めるような巻物を収めた金属管をハンダ付けやアスファルト封止で保護しているとするならば、当然その巻物自体が高い確率で保存されていなくてはならない。しかしパピルス紙のような比較的保存性の高い物体が、これだけ厳重に守られた構造の中にありながら、土中の水分などで簡単に腐食してしまったという説明は苦しい。もちろん、何か呪術的な意味があって、故意に腐食しやすいような条件に置かれた巻物を封入したという可能性も否定はできないが、そのような仮定は電池説以上に無理があるものだろう。

異種金属を絶縁性のアスファルトで支持している構造にしても、内部に腐食の跡が見られる点にしても、電池説の裏づけとしては非常に強力なものであり、この程度の反証で電池説を否定してしまうのはあまりにももったいない。上記リンク先では、金属管内部からパピルスの繊維痕が見つかったことと、紙と青銅のロール状遺物が見つかった点をもって、電池説を否定する材料としているが、ある程度電気化学の知識がある立場からすると、これは電池説を否定する材料というよりも、むしろ電池説を補強する材料として読める。

もちろん、電池説を提唱したW. ケーニヒが考古学の専門家ではなく、そのためバグダッドの異物の年代推定が不正確で、実際にはパルティア時代ではなくササン朝時代の遺物である可能性が高いだろうという点には異論がない。しかし、これらの同定を下した「考古学の専門家」が、電池の構造や原理について専門的な知識を持っているとも考えにくい。以下、そうした面からバグダッド遺物の「電池説」を擁護するような周辺情報を並べていこう。

まず、日常生活で使う使い捨ての電池を「乾電池」と呼ぶが、どうして「乾」という字が付くのかといえば、乾電池が発明される以前の電池というのは、全て電解液の中に電極を浸した湿式電池だったことに由来する。電池は電極と電解質の組み合わせでできているが、湿式電池では電解質が電解液という液体になっている。それでは一般に酸性や毒性が強い傾向にある電解液が振動でこぼれてしまったりして使い勝手が悪いので、電解液をゼリー状に固めて流れ出にくいように工夫したものが乾電池と呼ばれるようになった。

電解液を保持するもうひとつの方法に、吸水性の固体に吸わせるという方法がある。この方法の利点は、電池の量電極間に固体を挟むことになるので、両電極が直接接触して電気的に短絡するのを防止することができるというところにもある。現在ではこのような絶縁性の電解液吸収材料をセパレータと呼び、多くの実用電池で利用されている。

多孔質セラミックのような硬いセパレータもあれば、紙のような薄くて柔軟なセパレータもある。電極の種類によっては、電流密度、つまり単位面積あたりの酸化還元反応の速度をあまり高めると、電池としての特性が低下してしまうようなものがあり、そういう場合には電極とセパレータをフィルム状にして多数重ねることで、電極の表面積を稼いで実用的な特性を出すようなものがある。身近なところではニッケル水素電池がそのような構造をしている。そして面白いことに、乾電池と互換性のある円筒状ニッケル水素電池で一般的な内部構造とは、電極とセパレータを巻物のように心棒に巻き付けた形状なのである。

電池セパレータとは? | 日本バイリーン(株)

そして、そのような用途で使用されるセパレータの中には、繊維こそ通常の木質繊維とは異なるものの、いわゆる「紙」が使われているものが存在する。

製品情報【電池用セパレータ】
ニッポン高度紙工業【会社概要】

現代でも紙というのは電池材料として非常に高い有効性のある素材のひとつであり、ましてや古代に電池の性能を高める用途には必須材料と考えてもいいものだったのではないかと思える。現代のような化学面での技術があれば、多様な材料の中から高い電流密度を得られるような電池材料の組み合わせを試すことも難しくはない。しかし古代の素朴な電池であれば、材料の工夫によって電流密度を高めるよりも、構造の工夫によって電極と電解質の界面表面積を増大し、トータルの取り出し電流を高めるような工夫のほうが容易だったと考えられる。

紙と青銅を巻いたようなものも発見されているようだが、単に呪文を書いた紙を収めるだけなら青銅の裏張りなど必要なく、むしろ青銅製の電極と電解液を含浸させたパピルス紙セパレーターを、集電材としての鉄心に巻きつけた構造と考えたほうが自然ということになる。ただし、電極材料としては青銅のような合金材料よりは純銅製の電極のほうが適切なので、青銅が巻かれていたというのはやや具合が悪い。しかし、製造当時は銅箔とスズ箔が紙セパレータを挟んだ対向構造になっていて、歴史的時間のうちにアノード材のスズが完全に溶出し、さらに電解液の喪失に伴ってカソード材の銅箔の表面上に析出したため、化学分析の結果として青銅(銅とスズの合金)の一種と判定されたのかもしれない。

電気化学 電池の理論

そうなるとアスファルトのほうも説明が容易になる。アスファルトには正極と負極間の電気的な絶縁を維持しながら、同時に正極缶の中に浮かべるように負極芯を保持するパテの役割も持ち、電解液の漏出や蒸発を防ぐ気密材料としても働く。疎水性なので電解液への不要なイオンの溶出も少なく、いろいろと利点が多い。電極表面での酸化還元反応は、電解液中のイオン輸送と外部回路を通じた自由電子の輸送で行われるので、空気を遮断して酸素供給を断つと電極反応が止まるという原理がむしろ理解できない。ひょっとすると「酸化反応」という語感から来る誤解なのかもしれない。

酸化還元反応 - Wikipedia

それでも、仮に古代の電池が存在したとして、装飾用のめっき用途に使われていたという仮説には少々無理があるかもしれない。電解めっきの技法を用いて装飾用のめっきを施すには、それほど高い電圧は必要ないのに対し、流す総電荷(電流と通電時間の積に比例)はかなり大きなものが必要になる。そのためには、めっき対象の表面積の何倍にもなる大型の電池が必要になったはずで、実際に出土したような小型の装置では不十分である可能性が高い。

ただし逆に考えれば、めっき対象の面積が微小であれば十分実用になったともいえる。めっき対象に絶縁性の材料で模様を描いておけば、塗り残した通電部分にのみめっきを乗せることが可能になるので、工芸細工的にもメリットは十分にある。銀表面に透明樹脂で微細な模様を描き、その後にこの電池を使って金メッキを施せば、かなり細密な金銀模様が描けただろう。また立体的に入り組んでいるためにアマルガムめっきが難しいような部分でも、電解めっきならめっき液と接触する部分には均一に金属を乗せることができる。

考古学者が否定した電池説というのは、単純なめっき用途という部分まで含めた仮説であって、得られた電気の用途を幅広く考えれば、出土品が電池であるという可能性まで否定する必要はないように思える。どうもこの手の話題に飛びつく人が「オーパーツ」をありがたがるオカルト系の人々ということで、反動的に「と学会」系の傾向を持つ人々から目の敵にされている傾向があるらしく、そのために国内では否定的な見解が流布しているのだろう。しかし、そのまま過去の話題として葬り去るには惜しい、優れた仮説のように思う。

時代推定の正確さがどの程度であるにせよ、当時から製鉄やガラス製造を実現していた文明地域での出土物であるので、古い時代のものだからといって当時の技術者の力量をあまり低く見積もっても判断を誤るように思う。バグダッド電池はやっぱり電池であった、という意見に一票入れて終わりとしたい。

最後になるが、次に挙げる冷静な考察を大いに参考にさせていただいたことをここに表明しておく。

懐疑論者の雑談 懐疑論者の祈り」より「バグダットの電池
[PR]
by antonin | 2011-04-24 01:13 | Trackback | Comments(0)


フォロー中のブログ
外部リンク
外部リンク
ライフログ
ブログパーツ
Notesを使いこなす
ブログジャンル