プログラムを哲学する 1. 言及
これから書くのは、言葉や論理と、その意味に関する話だ。フレーゲらによる、物事を厳密に考える言葉の探求は、現代論理学や分析哲学の出発点になった。まずは、その哲学を探りながら、関数プログラミングの話でよく耳にする「参照透過性」という概念を理解することを最初の目標にしたい。
言及
Reference (Stanford Encyclopedia of Philosophy)
普通、記号には表す対象が存在している。記号と記号が表す対象との間にある関係を、言及(reference)という。*1たとえば、「東京タワー」や「港区にある電波塔」という言葉は建造物の《日本電波塔》への言及だし、「港区」や「東京タワーのある区」という言葉は場所の《東京都港区》への言及だ、などという。*2このような、記号の意味とは言及対象のことなのだという考えは、いろいろある意味の捉え方のうちのひとつだ。(直接言及論 Direct reference theory - Wikipedia, the free encyclopedia)
意味の合成性原理
Compositionality (Stanford Encyclopedia of Philosophy)
複合表現の意味がその表現の構成要素の意味のみに依拠し決定されるという原理を、意味の合成性原理(compositionality)という。意味の合成性原理は、複合表現の一部分を、同じ意味を持つ別の表現に置き換えたときも、複合表現全体の意味も変わらないということを主張している。
たとえば、次の文を考える。
1. 東京タワーの高さは東京スカイツリーの高さよりも小さい。
文1の「東京タワー」という部分を、意味が同じ「港区にある電波塔」に置換すると、文2ができる。
2. 港区にある電波塔の高さは東京スカイツリーの高さよりも小さい。
意味の合成性原理から、文1と文2は同じ意味だと主張できる。意味の合成性原理は、代入の根拠となっている。
「意義と意味について」
ゴットロープ・フレーゲは、「意義と意味について」(ドイツ語原題: Über Sinn und Bedeutung)において、文の意義(Sinn)と意味(Bedeutung)の区別を主張した。*3
http://www.amazon.co.jp/%E7%8F%BE%E4%BB%A3%E5%93%B2%E5%AD%A6%E5%9F%BA%E6%9C%AC%E8%AB%96%E6%96%87%E9%9B%86%E3%80%881%E3%80%89-%E5%8F%8C%E6%9B%B8%E3%83%97%E3%83%AD%E3%83%96%E3%83%AC%E3%83%BC%E3%83%9E%E3%82%BF-G-%E3%83%95%E3%83%AC%E3%83%BC%E3%82%B2/dp/4326198761www.amazon.co.jp
意義
意味とは言及対象だと考えると、「明けの明星は宵の明星と同じものだ」という文の意味と、「明けの明星は明けの明星と同じものだ」という文の意味は、意味の合成性原理から、同じだということになる。しかし、このふたつは本当に同じ意味なのだろうか。前者は何か新しい知識を与えてくれるのに対して、後者は単なる同語反復にすぎない。フレーゲはそのことを、異なる認識価値(Erkenntniswert)を持っていると表現した。認識価値が異なる文が、同じ意味を持っているということになるが、これはどう考えればよいのだろうか。
フレーゲは、記号に結びつくものとして意味の他に意義があると考えた。「明けの明星」と「宵の明星」は、意義は異なるが、どちらも《金星》を意味している。フレーゲは、通常の命題文の意味は真理値だと考えた。*4「明けの明星は宵の明星と同じものだ」という文と「明けの明星は明けの明星と同じものだ」という文も、意義は異なるが、どちらも《真》という対象を意味している。
副文の意味
フレーゲは認識価値との結びつきである意義と、言及対象との結びつきである意味の区別を主張する中で、同じ表現であっても意味が異なる場合について考えを進めており、副文の意味は真理値ではない場合があると考えている。
「コペルニクスは、惑星の軌道は円であると信じた」という真の文について、「惑星の軌道は円である」が偽だからといって、「東京タワーは東京スカイツリーより高い」という別の偽の文を代入して「コペルニクスは、東京タワーは東京スカイツリーより高いと信じた」に変えては、文の真理値が変わってしまう。フレーゲの考え方に従えば、「コペルニクスは、東京タワーは東京スカイツリーより高いと信じた」という文中の「東京タワーは東京スカイツリーより高い」の意味は、真理値ではなく思想だということになる。
このような、同じ表現でも意味が異なる場合があるという考えは、今後referential transparencyの話につながってくる。
意味をもたない表現・意味が定まらない表現
フレーゲは、名詞句を作る副文についても考えを進める。論理的な議論をする上で、表現の意味が一意に存在するということは重要だった。言語のすべての表現について、その意味が一意に定まる性質を、言語の完全性という。
たとえば、「0/0」や「4の平方根」という表現は意味を持たなかったり、複数持っていたりするので、解析学で使われている言語は不完全だ。フレーゲは、言語の不完全性を約定(Festsetzung)によって解決しようとした。フレーゲは「発散無限級数は数0を指示するという約定」を例に挙げている。要は、どのような表現も意味が一意に定まるように、言語を設計するということだ。
この考え方はプログラミング言語ではよく見られるもので、たとえばJavaScriptでは0/0
の値はNaN
、Math.sqrt(4)
の値は2
と決まっている。プログラミング言語の意味とは式の値だと定義すれば、どのプログラムも一意に値が定まるということがプログラミング言語の完全性ということになる。*5
コラム: さまざまな用語
言葉や記号や意味について議論するのに使えそうな言葉を挙げてみる。
sense, reference, referent, denotation, connotation, extension, intension, signifier, signified, expression, representation, token, idea, image, sign, interpretant, identifier, value, entity, object.
昔から、これらの言葉を使った様々な論が出されているが、その考え方すべてを簡単にまとめることはできそうもない。似た意味で異なる言葉を使っていたり、同じ言葉が少し異なる意味で使われていたりする。おいおいこれらの言葉の関係について考察をしようと思うが、とりあえずは必要な言葉を定義することにする。
*1:referenceの訳語は悩んだ。指示、参照、言及などが候補に挙がった。どの言葉にしても日常の用語と違った意味に聞こえてしまうが、命令を印象させる指示や、物事を参考にすることを印象させる参照などよりは、より自然な表現に聞こえるだろうということで、言及を選んだ。情報科学では、referenceの訳語に参照を使う。訳語に言及を使うことは他ではあまりないが、self-referenceという用語は自己言及と訳されることが多いので、突飛な訳語というわけでもないと思う。
*2:2016年9月3日追記: 英語のreferenceはreferentの意味で使われることがある点で、日本語の「言及」と意味合いがずれているので注意がいる。「表示」と訳されるdenotationも、意味するところは「表示されるもの」なので難しいところだ。
*3:SinnもBedeutungも類義語だが、日本語ではSinnを意義、Bedeutungを意味と訳し分ける場合がある。英語ではSinnをsense、Bedeutungをreferenceと訳すことがある。
*4:命題の真理値は人間の信念に関係なく客観的に決まっているという考えが根底にある。
*5:この定義の上では、JavaScriptは完全でない。たとえば、例外を投げる場合や、無限ループが発生する場合に、式は値を持たない。完全・不完全を議論する上では、何を意味だと考えているかに注意する必要がある。