クリエイター手抜きプロジェクト[503]雑ネタ編 シュレーディンガーの猫/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,300文字)



もし、この宇宙がコンピューターだったら、という気が向いたら適当に書いているネタの続きです。今回は「シュレーディンガーの猫」です。これは量子力学で出てくる有名なネタです(思考実験であり、実際に猫をどうこうするわけではありません)。

https://ja.wikipedia.org/wiki/シュレーディンガーの猫

「シュレーディンガーの猫」で検索すると、難しい内容の文章やページがずらずらと出てきます。よく分からないのでネタとなるキーワードだけを取り上げると

"死んでいる猫と生きている猫が同時に存在する。観測によって生死が決定される。"

というものです(で、いいかなあ、と。まあネタですので違っていても許してください……)。

箱の中に入れた猫は、生きているか死んでいるかは観測するまで分からない。毒で死んでしまっているかもしれないし、死んでいないかもしれない。





この宇宙(世界)がコンピューター上に表現されている場合、死んだ状態と生きた状態の両方を「同じ場所(アドレス)」「同じ時間」に存在させることができるものでしょうか。

結論から言えば、それができるかどうかはコンピューターの設計によります。同時に存在させることができるコンピューターもありますし、そうでないコンピューターもあります。

昔(1980年代前半)のいくつかのコンピューターは「同じアドレス」「同じ時間」に複数の状態(値)を存在させることができました。CPUからアクセスするアドレスは同じなのですが、同じメモリ空間をごっそり切り替える「バンク切り替え」という機能があったのです。

私が使っていたマシン(SHARP mz-700)で説明します(というか、他のマシンは分からないので)。なお、16進数は先頭に$を付けて表現します。メモリアドレス$D000を読み出すには以下のようになります。

LD HL,$D000
LD A,(HL)

これでレジスタAにメモリアドレス$D000の内容(0〜255)が入ります。が、ここで問題があります。mz-700には$D000のメモリバンクが二つあるのです。

以下のページ内の「メモリマップ」の部分になります。上位機種のmz-1500では、さらにメモリバンクがありますが、今回は無視してください。

・mz-700のI/O
http://www.maroon.dti.ne.jp/youkan/mz700/mziomap.html

レジスタAに読み出した値は、どちらのバンクにあるメモリなのでしょう? この場合、どちらを読み出したかはわかりません。

電源投入時であれば、特定のバンクになっていることが保証されていますが、その後プログラムでバンクを切り替えてしまった場合は、わからなくなります。そこで、読み出す場合は、以下のようにバンクを指定してから行うことになります。

OUT ($E1),A
LD HL,$D000
LD A,(HL)

これで目的とするメモリの内容を読み出すことができました。この場合、観測(読み出し)によって猫の生死が決定するのではなく、「自分で決めて」「猫の生死が決定する」ということになります。

コンピューター上の世界において、プログラマは神様ですから、こういうところは思い通りにできてしまうわけです(多分、ここが「Wikiのシュレーディンガーの猫」にかかれている "「波動関数の収縮」が、人間の「意識」によるもの" の文章に該当しそう)。

バンクを指定しない場合でも、どちらかが生、どちらかが死という内容があれば、読み出した時点で生死がわかることになります。

バンクがランダムに切り替わっているとすれば、確率的に読み出したバンクによって、猫の生死が決まってしまうわけです。この方が「シュレーディンガーの猫」に近いかもしれません。

宇宙が複数のバンクを持つタイプのコンピューターであれば、ひとつの場所に複数の状態があってもおかしくない。が、それは読み出すまで(観測するまで)わからないということになります。

場合によっては、観測してもどちらの状態か決定しないこともあります。さらに、バンク切り替えのような仕組みであれば、猫が死んだからといって、生きている猫がすぐに消えるわけではありません。

プログラマがそのバンクを使用しなければ、残ったままになります。猫は死んだわけではなく、生きているけど時間が停止したままという感じになります。

(基板上の時間=クロック/水晶震動子は動いているけど、メモリ内容を操作するプログラム的な時間が停止している、という解釈。TSS:タイムシェアリングシステムやプリエンティブマルチタスクあたりを想像してもらえばよいかと思います。こうなると、宇宙がコンピューターだと時間も二つ以上ないとうまくいかない気がします)。

バンクが二つあると、猫の生と死の二つの状態を取ることができますが、これは「重なりあった状態」と言えるのでしょうか。CPUから見たメモリアドレスは同一ですが、とても重なり合った状態とは言えません。

基板上を見ても別のメモリチップであり、重なり合ってはいません。でも、バンク切り替えを知らないコンピューターの中の住人であれば、「同じアドレスに二つ、もしくは複数の状態が存在する……1ビットは0か1ではなく0.5もありうる」という謎解釈をしてしまいそうです。

重ね合わせということにしておけば、二つのバンクにある二つのメモリをひとつのメモリとして扱える、というところなのでしょうけど、何かしっくりきません。

あと、8ビットマシンであれば、ひとつのメモリについてバンクが256個あればすべての状態を取れる(持てる)わけですが、やはり重なり合っているわけではありません。

ということで、重ね合わせがないというオチになってしまいましたが、よくわからなくなってきたので、数学に詳しい銀色の髭の方にお任せしたい……です。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

なんと昔懐かしいmz-80Cが手のひらサイズで販売されるとのこと。6/1予約で10月中旬発売予定だそうです。

mz-80cは今回のネタで出てきたmz-700のルーツとなるマシンです。エミュレーターを搭載しているのでマシン語で作成した昔のプログラムも動くそうです。

mz-80Cにはバンク切り替え機能がないので、「重ね合わせ」ということはできません。が、30年前の過去と未来を重ね合わせて体験できるのは面白いですね。

・PasocomMini
https://www.pcmini.jp/

・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936/
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/

・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591/
https://www.amazon.co.jp/dp/4844397605/

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP/
http://digiconcart.com/dccartstore/cart/info/2561/218591

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/