🗺️

回帰する「生成の不可視」

に公開

noteからの転載です。
フランス現代思想とプログラミングを両方知っている方におすすめです。
私の記事は基本そうですが。

https://note.com/kasamaru_hatsuka/n/n4d36fdb335a1

洗練されたプログラミングと計算機の本質

プログラミングは基本的に言って、入力された情報に対する処理のアルゴリズム(処理手順)を記述するもの、時間の流れの中でどのように入力された情報を加工するかを記述するものです。それによって生まれたプログラムは記述された手順に従って演算結果を出力します。

しかし、現代のプログラミングはそれが洗練されればされるほど、処理手順を書く以上に、マッピング(入力と出力など情報と情報を対応関係で結ぶこと)をすることがその主要な関心になっていく傾向があります。例えばいくつかのプログラミングのパラダイム、関数型プログラミング、宣言型プログラミング、オブジェクト指向型プログラミング(特にドメイン駆動設計)はまさにその傾向にあります。

関数型プログラミングにはしばしば用いられる map という処理があります。これは与えられた複数のデータに対して、それぞれに同じ処理を繰り返し適用し、投入されたデータと同数の処理結果を出力するものです。これが map という名を持っているのは、ある集合に対して、それぞれの要素に対して同じ処理を施し新しい集合を作ることを map と呼ぶためです。マッピングとは厳密にはこの集合間の要素の対応関係を指します。

宣言型プログラミングにおいて、例えば、データベースへの問い合わせをする SQL や Web ページの表示を担う HTML のような宣言型言語は、「こうして欲しい」という関係だけを記述し、それをどう実現するかの処理手順の記述を省略します。必要なデータの条件のみを記述し、その問い合わせや生成の処理手順そのものを記述しません。問い合わせや生成の指示内容と実際のデータが処理手順の詳細ぬきで対応づけられます。

※SQL 文はデータベースシステムの処理を考慮して書かれることはあり得ますが、それは SQL 文の本質ではありません(内部のアルゴリズムが変わっても同じ SQL 文から同じデータが出れば宣言型言語として成立するためです)。

オブジェクト指向言語も、特にその洗練された利用としてのドメイン駆動設計は現実の業務(ドメイン)を反映したモデルを記述することに焦点を当てます。プログラムのコードで表現したモデルと現実の業務のロジックをそのまま対応させるのです。

このような、処理からマッピングへの関心の移行の背景には、人間の認知能力資源への配慮があります。複雑なコードになりがちな処理の記述を隠蔽し、単純で抽象化された記述ができるようにすることで、その部分への認知負荷を減らし、人間の能力、創造性が本当に必要とされている場面、上位のどの情報とどの情報を組み合わせて新しい何かを作り出すのかに集中しやすい環境作りがされていると言えます。

このようなマッピングによるプログラミングはある種の階層を織りなしています。関数型プログラミングも関数の適用自体はマッピングとして適用されても、関数の定義自体には入力に対する処理の流れとその結果が記述されます。

あるいは、低レベルなプログラミングでは、メモリ管理、ポインタ演算、レジスタ制御など、ハードウェアとの直接的なやりとりが主で、必要な情報が抽象的な構造として存在せず、「マッピング」というより、「操作と反応の因果的連鎖」に近いものがあります。

しかし、さらに低レベルな階層を見ると、マッピングを行っている階層が存在します。現代の計算機の稼働原理であるチューリングマシンは、記録媒体である磁気テープの状態を規則に従って書き換える装置として生まれました。これは「ある記号列(テープ)に対して、状態変化と記号更新のマッピングを繰り返すことで、入力から出力を得る装置」であると見ることができます。

規則に応じた状態の書き換えを行っていることが計算機が演算をしているということなのです。ここではマッピングと演算の区別がほとんど融解しています。マッピングはこのレベルでは演算そのものなのです。ある意味で高度なプログラミングがマッピングに帰結するのは、計算機そのものの本質が要請することであると言えます。


見える結果と見えない過程から生まれた思想

さらに、以上のようなマッピングには興味深い特性があります。これらは演算の入力値と出力結果のみを描写し、その演算の中身がどうなっているかは問わないということです。

先に述べたように、関数型言語の map は写像であり、それは適用時には関数の処理は記述されません。宣言型言語も書かれたコードからデータを取得、生成する手順はブラックボックスです。オブジェクト指向言語も、処理の内容を隠蔽していくことに特徴があります。

これはある意味で、初期状態から演算結果の状態だけが残るという演算のうちでその過程を捨象し「見えるもの」だけを問題としていると言えます。上記のようなマッピングは情報の対応を記述するものの、その演算の過程を問わないのです。厳密な写像がまさにこのようなもので、関数の処理を捨象します。

これはヒュームの認識論やある種の経済学に類似しています。ヒュームの認識論では、人間は現象の隣接と継起を知るのみでその間がどうなっているかはわかりません。

ヒュームによれば、人間の知覚が捉えられるのは、「印象の連続・近接・習慣」による因果の感覚であって、因果そのものの実体(「なぜそうなるのか」)は不可知であるといいます。

火に触れば熱いということに「因果がある」と感じるのは習慣であって、因果そのものは知覚できない。つまり、われわれが知るのはマッピングされた対応(火→熱)であり、その「内部」はわからないと主張します。

また、経済学も交換の結果が指標となって出てきますが、具体的に交換がどう行われるかは問われません。経済学は市場で「需要」と「供給」が出会い、価格が決まるということを説きますが、そこで観察できるのは価格と取引量(=マッピングの結果)であり、実際の交換過程(交渉、心理、偶然、政治力など)はモデルの外にあります。その背後の個人の選好・交渉・文化的力学は、抽象化によって排除されます。

ここから考えられるのは、ある種の形式的な情報処理においては、私たちは結果しか見ることができないという問題が存在するということです。このような問題はある意味で思想的な潮流さえ呼び起こしたと言えます。それはフランスの思想における、構造主義とポスト構造主義の対立に見られます。

構造主義とポスト構造主義は、20世紀の哲学・人文学・社会科学に大きな影響を与えた思潮で、フェルディナン・ド・ソシュールの言語学に起源があります。

ソシュールは近代言語学の父と呼ばれ、その理論は言語を構造として分析するという発想を打ち立てました。ソシュールは言語は次の2つの要素によって成立するとします。

  • ラング:社会的・集団的な言語体系(文法や語彙などの構造)
  • パロール:個人が実際に発話する具体的な言葉

そして、「ラング=構造」が先にあり、パロール(発話)はその構造の中で可能になると主張しました。ここで重要なのはラング(言語体系)は社会的・構造的な規則の総体ですが、誰もそれを直接知覚したり、単独で持ったりはできないという点です。

私たちが知るのはつねに「パロール(発話)」=結果として現れた具体的な表現であり、ラングは、構造的に仮定されるものであるが、その構造自体の生成は不可視であるといいます。

それは私たちが日本語を簡単にしゃべるのに、いざ動詞の活用を述べよと言われるとそれを言葉にするのが難しいということや、日本語が常に歴史の中で緩やかに変動し続けているのを誰も完全にはその全貌を正確に捉えることができないということに例示できると思います。

私たちは結果として文法が成立しているのは理解します、しかし、その生成の瞬間をみることができません。ここに見える構造(結果)と不可視の生成(過程)という構図が生まれ、その後の構造主義もそれを継承します。

例えば、南米の先住民の親族構造を分析したレヴィ=ストロースなどは、すべての意味や文化、主体は構造(差異と関係)の中で定義されるとします。しかし、その構造は常に後から仮定されるものであって、それ自体の生成の動的過程を示すことができません。つまり、構造主義は本質的に「出来上がった結果(システム)」しか扱えず、そこに「生起する」「創発する」「揺らぐ」といった運動性は示さないと批判されました。

ここから、ジャック・デリダなどのポスト構造主義は、まさにこの「構造の静態性」に反発し、意味は固定されず、無限にずれていくという動的な概念(差延)を提唱、追求していくことになります。しかし、このような試みは固定された意味そのものからの脱出を図るがゆえに、言葉遊びとなってしまったという批判もあります。

このような対立は、「結果として見えるもの」と「過程の不可視」と同一的な関係を持っています。なぜこのような関係が思想の対立と潮流の出現にまで見られるのでしょうか?私はそれは人間の知の本質、「情報」という存在の本質にその起源があると考えます。


「生成の不可視」の起源

情報理論における情報とは、ある母集団の事象の集合の中から一つの事象(要素)が発生する確率として表現されます。情報理論における情報がなぜこのように表現されるのか、それは情報の量とは「予測のしづらさ、わからなさ」によって定義できるためです。

例えば、私たちがある出来事について全知である状態を考えます。その時、私たちはその出来事のうちある状態から次の状態に遷移するとき、何が起こるか、はっきり答えられるはずです。これは、ある状態から次の状態を100%選択できるということに言いかえられます。

逆に何も知らないときはどうなるでしょうか。その時は次の状態が何か全く分からない、選択を行っても外す確率が極めて高いということを意味します。

さて、このとき私たちが次の予測の答えを教えてもらうとして、その情報に高い価値があるのは、前者のケースでしょうか、あるいは後者のケースでしょうか。もちろん後者です。情報の量はこのようにして定義されます。1の確率で起こることを知っているとき、その時得られる情報量は0であり、後者は外す確率が得られる情報の量ということになります。

このため、情報の量は確率によって定義されるということになります。それは「わからなさ」の量的表現と言っていいと思います。

さて、この情報の概念ですが、興味深い性質を持っています。情報理論においてある状態から次の状態にうつるときの情報を考えるとき、それは遷移の確率のみを問題とし、「なぜその変化が起きるのか」は一切問わないのです。情報の次元では物理的因果関係、人間による理由付け、そういったものは問題になりません。ただ遷移の確率、相関の確率だけが問題となります。

これは実は先に述べたヒュームの認識論と情報理論の情報の概念が、まったく同型の構造を示していることを意味します。

繰り返しますが、ヒュームによれば私たちは「AのあとにBが何度も続く」という経験から「AがBを引き起こす」と信じますが、実際には、「A→B」の因果そのものを知覚することはできません。

これは統計的関連性(頻度)をもとにした帰納的学習のモデルに極めて近いものです。私はこのヒュームの考え方は認識論として妥当な話をしていると思います(物理世界に因果が存在しないと言い切るのは過剰だと思いますが)。

人間の認識は最初から物理世界のすべてが得られるわけでなく、経験的に学ばれ、因果関係を特定していきます。それはとどのつまりいわば統計的に起こりやすいものを学ぶということに帰着するしかないためです。たとえ生得的な知識があるとしても、それもまた積み上げられた淘汰の結果であり、統計的な結果の反映です。

私たちは遷移の連続を学びます。しかしそれは世界そのものではなく、情報に映し出されたものです。ゆえに、このようなある種の断絶は克服できない。私は構造主義とポスト構造主義の対立は突き詰めればこの問題が思想的に表面化していたのだと思います。

情報処理の主体にとって情報というものは、そもそも結果しかわからない。ゆえに情報の本質に起因する「生成の不可視」はプログラミング、認識論、経済学、言語学、文化人類学、あらゆる情報処理の階層にその原理が回帰していくのだと思います。私たちの認識にはどこまでいっても情報しか存在しないからです。

だから、「生成」というものはある意味で、「見ること」、「知ること」に反するものであり、それ自体をとらえることは出来ないのだと思います。それは事後的に「情報」としてその形を知ることしかできない。しかしながら、その場所は本質的な意味で人間から生まれる未知性の根源であり、人の持つ創造性はこのような情報の彼方、形の彼方から訪れるのだと思います。

Discussion