2017/08/12 21:26

繰り返しになりますが。プロジェクトの本文や、活動報告についての感想、ご意見、ご質問を、ぜひコメントでお寄せいただければと思います。現在は支援募集期間中であり、本企画の実施期間ではないため、お寄せいただいた感想などについてはリターンとしてではなく、お返事や回答をさせていただきます。

また、私個人についてはこちらをご覧ください。

この記事は、medium.comからの転載を元にしています。


では、本題です。

まず、この記事では、「ガジェット・コンピューティング」にて触れた、S. ウォルフラムの言葉:
>物理的システムは計算システムと考えられており,コンピューターが
>行なうのと同様のやり方で情報を処理していると考えられている。

これに関係しています。

計算のモデルとしては、たぶん4つあります。チューリング・マシンλ計算ユニフィケーション(それより “Warren’s Abstract Machine”、あるいはWAMを挙げた方がいいのかな)、それとスタック・マシンです。スタック・マシンは別扱いにする必要があるのかどうかはわかりませんが。あ、それとデータ・フローやコントロール・フローは、やはり別扱いにしたほうがいいのかもしれません。ですが、とりあえずこの4つということで。

チューリング・マシンはそのあたりのCPUとかとプログラミング言語が相当します。オブジェクト指向とかは書き方の問題なので、ここでは本質的な問題にはなりません。

λ計算は、Lisp系とか関数型の言語、それとLispマシンが相当します。

ユニフィケーションは、一応prologが対応します。昔あったprologマシンというのがどういう程度のものだったのかは知りません。

スタック・マシンは、FORTHとかです。でもスタック付きのチューリング・マシンとかもあるからなぁ。上にも書きましたが別の扱いにするのが適切かどうか。

基本的には、それぞれ等価というわけでもないですけど、同等ということがわかっています。「同等」というのは、どれかのモデルで計算できることは、他のモデルでも計算できるという意味です。

それぞれモデルとしては異なりますが、共通点もあります。というのも、計算が始まる前の状態とか内容とかと、計算が終った時の状態とか内容とかが異なっているということです。つまり、内容Aから内容Bへの変更を行なうことが計算と言えるでしょう。

あるいは、入力Cから出力Dを求めることも計算と言えるでしょう。ですがチューリング・マシンだとテープの内容の変化が内容Aから内容Bへの変更であるとともに、入力Cから出力Dを求めることでもあります。λ計算でも、項Aから項Bへの変更であり、それが入力Cから出力Dを求めることでもあります。まぁ内容A+入力Cから内容B+出力Dを求めることが計算だとしましょう。ただし、入力と出力は必須ではありません。内容の変化に共なう副作用程度のものです。入力は埋め込んでおけばいいことですし、出力は変化した内容(の一部)を出力装置に出すだけですから。

えーと、λ計算は関数型のプログラミング言語のモデルとしてよく使われています。そして関数型の言語では内部の状態が変化しない、あるいはそもそも内部に状態などない方が望ましいと言われています。これはλ計算だからという話ではなく、「関数」型だからという話です。y=2*xとかに内部の状態はありませんよね。そういう話です。λ計算そのものは、λ項の書き換えによって計算をします。

“λ”という文字には意味はありません。例えばΣはサメーションの頭文字をギリシア文字に置き換えたもので演算そのものを意味します。“Π” はプロダクションの頭文字をギリシア文字に置き換えたもので演算そのものを意味します。“∫”はインテグラルですが、これは何なんだろ? でも演算そのものを意味します。つまりどれも “+” とかと同じような演算子です。ですが”λ”は「λ項ですよ」ということを示すだけです。実際の書き換えはαとかβとかよばれる規則で行なわれます。”λ”という文字を使うこと自体、結局それに落ち着いたというだけの事ですし。

チューリング・マシンは、アルゴリズムを書ける計算であればなんでも計算できることが証明されています。その証明は面倒なので省略します。ともかく内容A+入力Cから内容B+出力Dをどうやって求めるのかを書けるなら、どんな計算でも可能なのです。

こうした場合、普通の計算機で行なうことだけが計算ではないことは明らかです。例えばドミノ倒し内容なり状態なりが変化しますので、計算です。あまり計算ぽくないとは思いますが、それでも計算です。まぁ何を計算しているのかは知りませんけど。

さて、そうした場合、「計算ではないこと」というのはあるのでしょうか。 それを考えるには、もう少し計算について考えてみる必要があります。状態や内容が変われば、それは何であれ計算なのでしょうか。そう言ってしまうのはちょっと荒らっぽいように思います。

チューリング・マシンの場合、テープには記号が書かれており、テープを読み書きするヘッドには、読み込んだ内容とヘッド自体が保持している状態に応じてどういう動作をするかというルールが含まれています。実際にどういう計算をするかはともかく、そういうものがチューリング・マシンと定義されています。

λ計算だと上でちょっと触れましたがαとかβとかの書き換え規則があること、そしてそれらを適用することが決っています。

ユニフィケーションでもどうやるかは決っています。

スタック・マシンだとスタックを読んで結果をスタックに戻すということが決っています。

つまり、状態や内容をどのように書き換えるのかの規則や手順が決っています。この「どのように書き換えるのかの規則や手順」というのはプログラムではなく、それぞれのモデルの計算そのものについての定義として決っているということです。それに基づいてどのように、そして何を計算するのかがプログラムにあたりますが、それはその規則とかとは別物です。 そうすると逆に言えば、無秩序に状態や内容を書き換えても、それは計算とは呼ばないわけです。

この段階で、もう一度「計算ではないこと」というものが存在するのかを考えてみます。

プログラムではなく、もっと内側の規則が無い場合、状態や内容が書き変わっても計算とは呼べません。では、人間がやる普通に言う計算を別とすれば、やはり計算機がやっていることだけが計算なのでしょうか?

いや、ちょっと待ってください。例えば恒星や惑星や衛星や恒星系や銀河は重力という規則に従って、状態や内容、つまりそれぞれの位置が書き変わっています。あるいは複数の原子は、おもに電磁気力によって互いに影響し、反応したり化合物を作ったりと、状態や内容を書き換えています。これらは計算ではないのでしょうか? それはわかりません。

あるSFナンセンスコメディ作品では、ディープ・ソートディープ・ブルーという巨大な計算機が登場します。とくに後者は「地球」とも呼ばれていました。 もし重力や電磁気力、量子論、超ひも理論による物理的な状態や内容の書き換えが計算なのだとしたら、宇宙は何を計算しているのでしょうか?

そこでもう一度考えてみましょう。「計算ではないこと」という事柄は存在するのでしょうか? わかりません。何かを計算しているのだとしても、何を計算しているのかはわかりません。

計算については定式化されていますが、ではどこまでそれを敷衍できるのかは結局わからないのかもしれません。もしこの宇宙が何かを計算しているのだとしたら、何兆年か先の冷えきった宇宙が計算の結果なのでしょうか? それともそこに至るまでのどこかが計算結果なのでしょうか? 誰が、あるいは何が計算をさせているのでしょうか? 私やあなたも計算の要素なのでしょうか? どれもわかりません。

そこでもう一度考えてみましょう。「計算ではないこと」という事柄は存在するのでしょうか? わかりません。何かを計算しているのだとしても、何を計算しているのかはわかりません。

正直、「計算ではないこと」というのは存在しないのかもしれません。誰が、あるいは何が計算をさせているのかすらわからずとも。あるいは、計算させている誰か、あるいは何かが存在しないとしても。