#参照透過性の歴史的背景
関数型JavaScriptへの入門#1(純粋関数とは)で参照透過性を調べてみたら、参照透過性のサーヴェイ記事の翻訳[2]を見つけ、これによると、この言葉は、ラッセル、クワインらが行った分析哲学の指示論に由来するということで驚きました。さらにこれの歴史の重要点であるクワインの理論を少し掘り下げてみました。プログラミングとは直接的な関係はないですが、一応、記事として残しておきます。
☓参照透過性 ○指示的透明性
調べてみると、クワインの『ことばと対象』(クワイン著、大出晃訳、勁草書房)に「referential transparency」という術語が見いだせて1、そこでは、「指示的透明性」(p.237)と訳されています。referential transparencyが哲学の指示論に由来し、この背景を考慮するのであれば、こちらのほうが正確な訳であると思われます。
#純粋に指示的な位置
クワインのテクストをもう少し読み解いていきます。まずクワインは、ある文(論理式)における「純粋に指示的な位置」(purely referential position)という概念を導入します。これはつまり、文(論理式)の変項のことです。そして、ある文における単語の位置が「純粋に指示的な位置」かどうかを判定するためのテスト方法も提示します。それは、同一者置換可能性、つまり、同一性記号($=$)の代入規則によるものです。具体例を見てみましょう。
(イ) イチローは日本一有名なMLBプレイヤーだ。
(ロ) イチロー = 鈴木一郎
(ハ) 鈴木一郎は日本一有名なMLBプレイヤーだ。
(ロ)より、文(イ)のイチローを鈴木一郎に置換しても、文(ハ)の真偽は変化しません。このように同一の対象を表示2する単称名辞で置き換えても真偽が変化しないような文の位置を「純粋に指示的な位置」と言います。つまり、変項$x$に置き換えることで、$x$には同一の対象を指示する異なる単称名辞をそれぞれ代入できます。
(ホ) $x$は日本一有名なMLBプレイヤーだ。
では、次はどうでしょうか
(へ) "イチローは日本一有名なMLBプレイヤーだ"、にカタカナの「チ」が含まれている。
(ト) "鈴木一郎は日本一有名なMLBプレイヤーだ"、にカタカナの「チ」が含まれている。
(ヘ)は真ですが(ト)は偽です。そのため、(ホ)の変項(指示的に透明な位置)に同一の対象を指示する単称名辞をそれぞれ代入しているにも関わらず、このようなことが起こったのは「"X"にカタカナの「チ」が含まれている。」という文脈がその単称名辞の指示の透明性を無効にしてしまっているからです。クワインは、「引用は名辞の指示的な力をさえぎるものであるため、指示的透明性(referential transparency)を欠いているということができよう。」(『ことばと対象』, p237)と言います。
#指示的透明性
続けて彼は、次のように指示的透明性を特徴づけます
指示的透明性は、構文[..]に大きく関係している。つまり、含まれ方、とりわけ、単称名辞や文が単称名辞や文のうちでどういう含まれ方をしているかに関係している。わたくしが含み方$\Phi$を指示的に透明と呼ぶのは、次の場合である。すなわち、単称名辞$t$が名辞もしくは文$\psi(t)$を含む名辞もしくは文$\Phi(\psi(t)))$においても$t$が純粋に指示的に現れている場合である。(ibid, p237)
例えば
$\psi(x):=x$は日本一有名なMLBプレイヤーだ。
とします。また、
$\Phi(\psi(x)):="\psi(x)"$、にカタカナの「チ」が含まれている。
とする。このとき先程確認したように$\Phi(\psi(イチロー))$と$\Phi(\psi(鈴木一郎))$ではイチローと鈴木一郎の指示対象が現実の個体を指しているのかそれとの字面を指しているのか、曖昧になってしまっているため指示的透明性に欠いています。また、そのため真偽も変化します。別の例を見てみましょう
$\Phi'(\psi(x)):=\psi(x)$、と太郎は信じている。
構文$\Phi'(\psi(x))$は太郎という人物の信念の文脈であり、そこにおいては$\Phi'(\psi(イチロー))$は真であっても、$\Phi'(\psi(鈴木一郎))$が偽であることも考えられます。つまりこの場合$\Phi'$における鈴木一郎とイチローという単称名辞の指示対象の透明性は太郎の信念に依存しています。そして、このような信念様相の文脈において指示対象の透明性が不安定になるため、クワインは様相論理に対して批判的な立場を取ります。
指示的に透明な構文の例としてクワインは真理関数をあげます。例えば、次のような例はどうでしょうか
$\Phi''(\psi(x)):=\psi(x)$、かつ、大谷翔平は日本一有名なNPBプレイヤーだ。
この場合、$\Phi''(\psi(x))$の$x$にどのような名辞が代入されたとしても、それが指し示す対象が同じものであるならばこれの値(真偽)は変化しません。そのため、この文脈$\Phi''(\psi(x))$は指示的に透明であると言えます。
#関数一般に拡張
上記をまとめると、$\Phi$が指示的に透明であるとは、$\Phi$における指示的に透明な位置$x$に「同じ対象(値)を指示する異なる表現」をそれぞれ代入したときに、同じ結果(上記の場合は真偽)を出力するということです。$\Phi$を次のような型を持つ関数と考えましょう。
$$
\Phi:\it{Name}\to \{\text{true},\text{false}\}
$$
$\it{Name}$を固有名全体の集合とします。この関数に同じ対象を指示する異なる固有名を入力した場合、常に同じ真偽値を返すのであれば、$\Phi(x)$は指示的に透明でそうでなくければ不透明(opaque)となります。赤字の部分を形式的に書くと次のようになるでしょう。
$$(I).\forall a,b\in Name(a=b\Rightarrow \Phi(a)=\Phi(b))$$
指示的透明性の条件である$(I)$という性質は、[1]において言及されている点になります(翻訳は[2]に従います)。
哲学者・論理学者の考え方では、あるコンテキストが参照透過であるということは、そのコンテキスト内のある expression が、それと同一の実体を指す expression(同一指示の(coreferential)expression)と交換可能であることを言うのです。
もともとのクワインがの「指示的透明性」(上の赤字)が言っているのはまさにここで言及されていることです。さらに、これまでのクワインの例では、$\Phi$の出力は真偽値に限定されているように見えますが、この同じものを入力したら同じ結果(値)を返すという条件を関数一般($f$)に拡張したものが次です。
$$(II).\forall a,b\in X(a=b\Rightarrow f(a)=f(b))$$
この性質$(II)$は自明に成り立ちますが、$f$が関数であることが前提とされています。そうでなければ成り立ちません。従って、この条件を満たすということが指示的透明性の条件であるならば、指示的透明性は関数の条件をまず満たしていなければならないのです。
#まとめ
つまり、同一者置換可能性によって$\Phi(x)$の指示的透明性をテストする際に何をテストしているかというと、$(I)$や$(II)$を通して、$\Phi(x)$が関数になっているかどうかをテストしていると言えるでしょう。
#参考サイト
[1] What is referential transparency?
[2]「参照透過である」とは、何から何への参照がどういう条件を満たすことを言うのか