いろいろな意味論 #01 文章とプログラムのギャップを考える

 

こんにちは。センケイです。

 

せっかくブログを書いていますから、

今回はふとした疑問を追求してみます。

 

今回、特に注目したいのは、

文章と(プログラミングの)プログラムって

なんとなく似ている気がすること。

 

それならば2つをまとめて1つの切り口から

理解しようとしてもよさそうなのに、

なぜだかそういう試みが

未だ少なそうだということ。

 

これを追い求めてみようと思います。

 

あわよくばごく小さな研究にできないか

狙っていきたいところです。

 

ただ、いずれにせよまずは、

疑問をもう少し精緻にしたり、 

まずは日本語でどんな議論があるのかを

振り返ったりします。

 

 

ふとした疑問・・・本とプログラムは似ている?

 

自分はプログラムも好きで、

どちらもよく読みます。

その上で、「この2つって似ているな」と

たびたび思うのでした。

 

もちろん第一に、「言語」で書かれている、

という点があります。

 

しかし本質的には、

以下が似ているのではないかと思います。

 

短くしようとしすぎると、

意味をなさなくなる。

 

この点です。

 

エンジニアのかたなら、

よく実感されているかもしれません。

 

短くサッと書こうと思っても、

一定の機能を実現しようとすると、

どうしても大きなプログラムへと

なってきてしまうわけですね。

 

本も同様に思います。

1つの主張をするために、

もし短くすることが可能なら、

「一冊の本」にはならないはずですね。

 

ではなぜ短くできないのか。

 

それは、

たとえ遠くに書かれた箇所同士であっても、

お互いに関係を持つから。

この理由ではないでしょうか。

 

なぜこの理由だと考えているかは、

前に下の記事を書くことで

一定の理解を得たので、

詳しくは立ち入らず、概略だけ述べます。

a16777216.hatenablog.com

 

要するに、

複雑な主張や複雑な機能は一般に、

近くに書かれている箇所同士だけでなく、

遠くに書かれている箇所同士もまた

関係を持つようなのです。

 

というか、これこそがまさに

「複雑」であることの定義だといっても

大きな間違いではないでしょう。

 

少し思考実験をしてみましょう。

 

本の前半部分をバッサリ消してしまうと、

後半部分は理解できなくなったり、

最悪、意味が変わってしまうでしょう。

 

プログラムも同様に、

起動後最初に動く箇所を変更すると、

多くの場合、

最後に動く箇所も影響を受けるでしょう。

 

そうでなくとも、

最初に動く箇所をバッサリ削ると、

最悪、プログラムとして

意味をなさなくなるでしょう。

 

フラクタルという概念をご存じのかたには

これをイメージしていただくと

ピンと来やすいかもしれませんね。

 

 

疑問から野望へ

 

さて、もし本とプログラムが似ているなら。

 

自分のように、

似ているものを探すのが好きな人間は、

さっそく悪だくみを考えてしまいます。

 

  1. 文章に関する知見と、プログラムに関する知見は、お互いにもう一方のために活かせるのではないか。
  2. この両者を機械で同じように取り扱えるのではないか。

 

このような野望を抱かざるを得ません。

 

実は 1., 2. は、もし両方とも可能ならば、

さらに大きな効果を持つようになっています。

 

「機械で同じように取り扱」うのは

プログラムですから、

自分で自分を取り扱えるようになります。

 

こうなったら儲けものです。

言ってみれば部分的に

「シンギュラリティ」なわけです。

 

好循環というか、

正のフィードバックループというか、

雪だるま式に可能なことが増えるでしょう。

 

・・・しかし今、

実際の世の動きを見ていると、

文章を自在に扱う機械や、

自分でプログラムを書くプログラムは

そうスクープとして出てきていません。

 

いったい何が壁なんでしょうか。

 

実は 1. の時点で案外、

文とプログラムの理解がお互いに

まだ繋がっていないのでしょうか。

 

実際、文章を扱う書籍と、

プログラムを扱う書籍とで、

意外なほどギャップがあるように見えます。

 

以降は、

実践的な興味というよりは、

りくつに寄った話にはなります。

 

が、両者を理解する試みの間に

いったいどんなギャップがあるのか。

これを以降で整理してみます。

 

 

日本語の書籍からギャップを直感してみる

 

今回、それなりに

難しいことをしていると思います。

 

このため、いきなり厳密にとらえるのではなく、

まずは自分の直感を頼りに、

文とプログラムとのギャップを考えてみます。

 

実際に正確な議論をしようとするときも、

ここで浮かんだ仮説が手掛かりになるでしょう。

 

それも、まずは査読論文からではなく、

概観をつかみやすい母国語の書籍から

観点を整理したいと思います。

 

 

言語学の意味論 

 

言語学の本で自分の手元にあり、

かつ包括的にまとまっているものは

下記のものです。

 

www.iwanami.co.jp

特に私が購入したのは

2004年の版で少し古いですが、

意味論にどのような分野があるかを

ある程度網羅できるものと思います。

 

特に章構成や、章構成を解説した

「学習の手引き」に着目すると、

把握がしやすそうです。

 

具体的には、2、3、4章がそれぞれ

別の(言語学の)意味論へと

対応していそうです。

 

2章は、

大雑把に言えば「形式意味論」を

扱っているようです。

 

つまり、

言語は厳密には論理式ではないところを、

論理式に直して理解する、

このような営みをしていると言えるでしょう。

 

 

3章は、

これは「認知意味論」のようです。

 

これは一言で言い表すのが難しいです。

が、誤解を恐れずに言えば、

人間が文を読むときの

(いい意味での)クセに着目した、

そういったアプローチではないでしょうか。

 

例えば、「花」見といえば桜のことを指す、

そんな人間の理解や習慣があります。

確かにこれは、

論理だけで表現するのはやや困難でしょう。

 

このように、同じ花の中でも、

花らしい花に重みづけをするといった方法が

ここでの代表的な題材になります。

 

 

4章は、

表題「意味と計算」を見た感じでは

情報科学っぽさがあります。

 

しかしよく読んでみると、

ちゃんと言語学のジャンルである

「概念意味論」に概ね対応していそうです。

 

これもかなり大雑把に理解するなら、

文や単語の意味を、

骨組みとスロットに分解する取り組みだと

理解できるでしょう。

 

「go」と「change」は一見違う意味合いですが、

何かから別の何かへ移る、という意味では

一定の枠組みを共有しています。

これが骨組みです。

 

いっぽうで、同じ「go」であっても、

何を起点として何へ移るかは

いろいろと変えられます。

 

I went to Osaka from Tokyo.

この大阪と東京は

いろいろに変えられるというわけですね。

この起点スロットと着点スロットがある、

というわけです。

 

 

以上で見てきたように、言語学の意味論は、

すべてを網羅的に拾ったわけではないですが、

少なくとも3つの大きな柱がありそうです。

 

文章を論理とみなして意味を考える方法。

 

人間の認識に寄り添って意味を考える方法。

 

骨組みとスロットに分けて意味を考える方法。

 

ここで、

「意味を考える」、と

あいまいな言い方をしました。

 

というのも、以上の方法というのは、

必ずしも意味を抽出するのに用いるのでなく

すでに意味の分かっている文について

その意味になる理由を説明するのにも

用いられているようだからです。

 

「花見」がなぜ桜を見る意味になるのか、

あとからその理由を分析する。

このような場合も多いようなんですね。

 

このことは後からじわじわ効いてきます。

 

 

さて、ではいよいよ、

プログラムの意味論へと移りましょう。

 

 

プログラムの意味論

 

言語学の意味論を見てきたうえで、

「プログラムの意味論」という言葉をきくと、

論理の話題だけではなく、

骨組みとスロットの話題についても

出てきそうな予感がしました。

 

しかし実際のところ、

かなり論理に特化しているようなのです。

 

ここで自分が参照したのは以下です。

プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)

プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)

 

 

ここで書かれている主な営みは、例えば、

足し算を論理から一歩一歩積み上げて

構成しているといったものです。

 

直感的には足し算それ自体

”論理的” に感じますが、

厳密に論理で組み上げるには

意外にハードルが高いわけです。

 

マリオメーカーに足し算をやらせてみる

下記のような動画で

実感いただけるかもしれません。

www.nicovideo.jp

 

プログラムでは数値計算は頻繁に使うので、

丁寧に1つずつ計算を構築するのは

必要かつ重要なことでしょう。

 

しかし言語学で見た意味論と比べると

やはりかなり異なるものに感じられます。

 

その理由について素朴ながら、

以下で少し仮説を考えてみます。

 

 

なぜギャップが出るのかを考えてみる

 

プログラムは上で見たように、

かなり論理の構築に特化していました。

 

確かにプログラムは着実な動作を目的にするし、

寸分たがわぬ再現ができてこそ

本領発揮するたぐいの「書かれたもの」です。

だからこそ、上のような性質を持つのでしょう。

 

さてここで、その寸分たがわぬ動作の理由は、

用法の明確さにあると思います。

 

プログラミング言語は正真正銘の人工言語で、

大雑把に言えば、

使用したときの効果が確実に規定されます。

つまり、規定が効果に先立ちます。 

 

効果も意味の一種だとするなら、

規定が意味に先立つ、というわけです。

 

 

いっぽうで、

言語学が扱う対象である普通の言語、

つまり自然言語は、

「規定があるからその意味になる」とは

なかなか主張しにくい状態にあるでしょう。

 

言語学は、

完全に「意味が規定に先立つ」とまでは

いかないまでも、

かなりそれに近い印象を持っています。

 

このように、プログラムと言語学では

何が先立つかについて違いが見えました。

これに伴い、

それぞれの意味論が目指すゴールも

両者でずいぶん違っているように見えます。

 

プログラムの意味論は、私が理解する限り、

ある意味を獲得するための方法を

目的としているように見えます。

 

一方で、言語学の意味論は、

少し上で述べたように、

すでに意味の与えられた文に対し

なぜその意味になるのか説明するほうが

重視されているように見えます。

 

 

ここまでをまとめると、以下の対立軸が

見えてきます。

 

①ルール(の規定)が先か、意味が先か。

 

あるいはこの言いかえとして、

 

①' 使いこなすのが目的か、理解するのが目的か。

 

先にルールが与えられているプログラムは、

そのルールをどう使うかが争点になり、

自然に、使いこなすことが目的になるでしょう。

 

一方、ほぼゲームプレイの様子だけが

先に見えている言語学のほうは、

後からさかのぼってルールを理解する営みが

有意義になってきます。

 

というわけで、

プログラムの意味論と言語学の意味論は、

この対立軸において、

それなりに両サイドに割れている。

このような仮説が浮かんできます。

 

 

 

上で少し触れましたが、①に近い軸として

以下も思い浮かべられます。

 

②人工か、自然か。

 

あるいは、プログラムの硬さ、

文の柔軟さを思えば、

以下の軸も頭に浮かんできます。

 

③書き方に自由度がないか、あるか。

 

しかし、③の対立軸は①や②と比べると、

プログラミング言語自然言語とを

ハッキリと区別しないように思います。

 

プログラミング言語でも、

かなりの自由度があるわけです。

 

変数名をどのように名付けるか。

一塊の機能を関数として切り分けるか。

どのような説明をコメントで付けるか。

 

ここには人間の「つもり」というか、

情緒が現れてきます。

分かりやすさ、といった質の良しあしさえ

ここに立ち現れてきます。

 

いっぽうで、自然言語のほうも

それなりに自由は制限され、

だからこそ緻密な議論も可能になります。

 

③の、自由度の大小という軸を見ると、

(個人的には)むしろ文とプログラムとが

近く感じられてきます。

 

そうであれば、プログラムの意味論の中で、

「つもり」や、わかりやすくする工夫が

なぜ扱われてこないのか。

このような疑問が新たに出てきます。

 

あるいは、③と近い軸として、

 

④人間のカンに頼るか、頼らないか。

 

という軸も考ええます。

この軸も③と同様で、

プログラムにおいても意外と、

変数名の付け方など

人間の直感が反映されるときがある、と

気づかせてくれます。

 

(もちろん、プログラムの動作と結果には

 直感が入り込む余地がかなり少ないですが。)

 

 

まとめと次回予告

 

今回は自分の興味というのを追求して

話を膨らませてきました。

 

文とプログラムは似ているように見える

すると、これと呼応するかのように、

どちらにも「意味論」が存在している

さあ、これは面白そうです。

 

しかしその両「意味論」の間には、

それなりにギャップがありました。

 

この理由がなぜなのかを自分なりに考えると、

以下のいくつかの対立のせいではないか、

そういう仮説が思い浮かびました。

 

意味が先にあるか、規定が先にあるかが違う。

自然か、人工かが違う。

自由か、自由でないかが違う。

 

3つのうち最初の2つは確かに、

ギャップの理由になりそうな感じがします。

(もちろん、さらなる精査は必要です。)

 

しかし、自由度の大小は、

ギャップをうまく説明できそうにありません。

 

むしろ、

プログラムにも人の「つもり」が書かれる

自由度の高さがあると気づかされます。

 

これについてはやはり、

文章とプログラムを同じ枠組みで扱う

そういう分野があってほしくなります。

 

また、

ギャップのできる理由が複数あろうとも

やはり文章とプログラムを同様に扱えたら

利便性はかなり大きそうな気がします。

だからこの同列に扱える枠組みを、

なんとか実現したくなります

 

あきらめずに探してみると、

母国語で刊行されている範囲内でも、

以下のような書籍に気づきます。

記号と再帰 新装版: 記号論の形式・プログラムの必然

記号と再帰 新装版: 記号論の形式・プログラムの必然

 

 

いかにも、

言語学とプログラミングとを

橋渡しそうなタイトルではありませんか。

 

次回はこの本の見地から、

残されたギャップが埋められるかを

検証していきたいと思います。

 

↓ 次回の記事です。

a16777216.hatenablog.com

 

 

それでは、

ここまでありがとうございました。

 

 

参考文献

 

www.iwanami.co.jp

郡司 隆男 著編 , 阿部 泰明 著 , 白井 賢一郎 著 , 坂原 茂 著 , 松本裕治 著

2004/07/06

 

 

概念意味論の基礎 (開拓社言語・文化選書)

概念意味論の基礎 (開拓社言語・文化選書)

  • 作者:大室 剛志
  • 出版社/メーカー: 開拓社
  • 発売日: 2017/06/20
  • メディア: 単行本
 

 出版社サイト

 

 

プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)

プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)

 

出版社サイト

 

 

記号と再帰 新装版: 記号論の形式・プログラムの必然

記号と再帰 新装版: 記号論の形式・プログラムの必然

 

出版社サイト