ゆくゆくは有へと

おかゆ/彼ノ∅有生 の雑記

複数指示系の意味論

plural logic (Mckayのやつ)を自分なりに理解しようとした。ほぼポエムだよ。

いんとろ

問題点のおさらい。plural logic を使わなきゃいけないというのには主として2つの理由がある。

非分配的な述語の存在

「x はクラスメイトだ」「x は色々な国の出身だ」とかいう述語は x に複数形(英語ならね)が入るようなものだけれど、 ふつうの述語論理に与えるモデル意味論では項に1つの対象を対応させるので、こういった述語に対応できない。

ふつうのモデル意味論では、項に1つの対象を対応させようとする。こういうのを「単指示系のモデル」と呼ぶことにします。 こういうモデルの下では、項は個体領域にある1つの対象へ、述語は外延的意味として個体のn-tupleの集合に解釈されるわけです。

単指示系のモデルでも上のような述語を取り扱おうとすることはできます。たとえば、こういう述語の項は集合と対応させればいいんじゃないか? 集合は確かに1つの対象ですし、単指示系でも取り扱えます。でも、たとえば「xは人間だ」という述語の x に複数形が入るような表現もよく見ます。 このアイデアの下では、そういった文は「1つの集合が人間だ」ということになります。 ううん、でも実際に言いたいのは、その集合に属する個々のものたちが人間だ、ということですよね。

しかも、「xはこの学校の生徒であり、クラスメイトだ」というような場合、前半では彼ら一人ひとりについて言及し、後半では彼ら全体について言及しています。 1つの対象と対応させようとする単指示系では、この類の述語を上手く扱えません。

ontological innocence

最初とも関連しますが、述語のとある項に集合という1つの存在を割り当てるためには、個体領域の中にその集合を用意しておかねばなりません。 pluralist(複数主義者?)たちはこれに抗議するわけです。「なんだその得体のしれない抽象的な実体は!」。ふむふむ。 たしかに複数形を使うとき、その名詞で複数のものを指示してはいますけど、集合のような数学的な存在を指示しているわけではないですもんね。

・・・

まあ、というわけで、何がやりたいかをものすごく簡単にいえば、「複数形名詞みたいなものを形式言語にも実装したい」ということで、 その上で「集合のような数学的な存在を個体領域には置きたくない」ということです。

で、そのような問題意識のもと、Mckay(とか他の複数主義者)は複数定項とかそういう「複数なんたら」っていう記号を導入していくわけです。

が、ここでなんか微妙にもやもやするわけですな。

彼らは「複数定項は複数のものを意味する/指示する」っていうんですが、それって「複数のもの」っていう存在者を立ち上げてないの? なんかそう考えると、集合とは別の抽象的な存在者を個体領域に置いただけで、根本的な解決になってなくない?

ってずっともやもやもやもやしていました。が、これ、言い方が悪いんですね。実際はこう言うべきなのです:複数定項はものを複数に指示する

pluralistどもは、「従来のモデルの構造、特に指示に関するところをもう少しちゃんと評価しようや」と言っていると私は理解するようにしました。

というわけで複数指示系

単指示系のモデルでは、指示というのはモデルの構成要素にありません。というのも、単指示系では解釈関数は項記号と対象を直に対応させてしまうからです。

 I(t_1) = d_1

 t_1 は項記号、 d_1 は個体領域  D の要素で、 I(\cdot) は解釈関数的なあれですな。

で、じゃあなんで単指示系では「指示の仕方」について気を使わなくてよかったかといえば、それはそりゃ「単指示だから」ですね。 記号が単指示的に対象を指示するのであれば、その指示の過程もこっち(解釈関数側)でやっちゃえるわけです。 その結果、ふつうのモデルでは、解釈関数には項記号と対象に対応させるという役割が持たせられるわけです。

それでは、複数指示系、pluralismの言うような「記号が対象を複数に指示する」ような場合ではどうでしょう?

うーむ。端的にいって、解釈関数には荷が重すぎます!単指示系でやらされていた「指示の過程」を彼にやらすのは無理難題です。

とにかく、複数指示系において、解釈関数に「指示の過程」もやらせることはできないわけですから、仕方がない、その記号がどんな指示をするのかだけ割り当てさせましょう。

というわけで、複数指示系を理解するにあたっては、個体領域  D とその個体領域の中のそれぞれの個体に向かう指示の集まり  F_D を用意します。
ひとまず、モデルを記述するためのメタ言語では集合を使っていきましょう。そうすると、

 D = \{a, b, c, ...\}:個体領域;個体からなる集合
 F_D = \{ f_a, f_b, f_c, ... \}:指示集合;各個体に向かう指示からなる集合

そして、解釈関数  I は、項記号に個体領域に属する対象を割り当てるのではなく、指示集合の部分集合(あるいは  x \in 2^{F_D})を割り当てます。

その記号が何を指示するのかを与えてしまえば、解釈関数はもう十分に仕事をしていると思います。実際、これ以上の仕事を求める必要もないでしょう。

それから、これが一番大事なことですが、解釈関数の仕事を減らしてあげたおかげで個体領域に数学的な存在を用意せずに済んだのです!わーい! 指示の割り当てに集合を使っていますが、これはメタ言語側の仕様ですので無問題です。

もうひとつだけ。この場合、n-述語記号はどうなるんでしょう?単数指示系では D \times Dでしたが、複数指示系(かつこのメタ言語)では  (2^{F_D})^{n}の集合 、つまり、指示集合の部分集合からなるn-tupleからなる集合が割り当てられます。で、実際それで十分でしょう。

これ以降は単数指示系と同じように進みますので割愛します。

複数論理で出てくる among の関係というのは、このメタ言語での記述によれば、2つの記号のもつ指示の包含関係と等価です。つまり、「左の記号が指示するものはすべて、右の記号も指示している」という関係です。

言っちゃえば、「指示というクッションを置いてやれば、個体領域にへんなものを入れなくて済むよ」ってことです。なんだそれだけか。

複数指示系をきほんにしちゃおう宣言

ここまではメタ言語に集合を用いる言語(これ自体は未だ単指示な言語です)を使っていました。単指示系の言語をメタ言語として使っている限り、複数指示系の言語の「複数性」を補うために集合とかそういった集まり系の存在者が出てくることになります。まあメタレベルでそういうのが出てくるのは別にいいと僕は思うんですけど、pluralismはそういうのも嫌みたいです。わがままなんだからっ!

というわけで、メタ言語にも複数指示系の言語を使うことにしましょう。え、そんなのアリなの?そもそも、単数指示系のメタ言語を使うときだってなんらかの暗黙的な意味論に従っているんですから、事情は同じです。少なくとも、複数指示系の言語を単数指示系の言語で説明できる(さっきのやつね)ことは分かったので、複数指示系に疲れたらまた戻ってこればいいわけです。もちろん、形式的な意味論を想像せずとも、ぼくらが単数指示系の言語をなんとなくで使っていたときと同じように、『なんかそんな感じ』で複数指示系の言語を使うというスタンスもいいでしょう。

さて、複数指示系のメタ言語複数指示系のオブジェクト言語を説明しましょう。

まず、個体領域  D があります。それから、解釈関数  I も用意します。もちろん、解釈関数は記号に指示様式を与えるだけのお仕事をします。

以上!あれ?指示のあつまりは?あれはメタ言語が単数指示系だったから必要だっただけなのです。複数指示系のメタ言語を使えば、指示のあつまりは必要ありません。 言い換えれば、あの指示のあつまり的なやつはメタ言語の意味論に組み込まれてるので、ここで持ち出す必要がなくなりました(このメタ言語を単数指示系の言語で記述したいときはまた登場させてね)。

これで、解釈関数は項記号に指示様式を与えることができるようになりました。

 I(a) = A

 a はオブジェクトレベルの項記号、 A は対象を(複数的に)指示するメタレベルの記号です。たとえば、

 I(a) = Ants

のように、英語(英語は複数形名詞がありますから複数指示系です)をメタレベルの言語として採用してみると、雰囲気がつかみやすいですか?

あれ?んー。少しもやもやしませんか?今までは意味を与えるというのは、個体領域の中の対象を「はい、どうぞ!」と記号に渡すことでした。 でも今やっているのは…、同じ指示様式をもつメタ言語の記号を割り当てているだけです。んー…、これって、解釈というより翻訳では?

はい、まさに。というか、今までは単数指示系の言語を使って、解釈関数に過重労働を強いていたからきちんと「解釈」しているように見えてましたが、 実際のところ、私たちがしていたのは、数学的な形式言語への翻訳でしかなかったのでしょう。「意味を与えるというのは、十分に意味論がはっきりしている(ので、暗黙化できる)別の言語と対応付けること(すなわち、他言語への翻訳)だ」というのは面白い感じがします。でも、実際そうなんですよね。たとえば、

 D = {京子, あかり, 結衣, 千夏}

というようなときに、単数指示系のメタ言語

 I(a) = あかり

と解釈したとき、これは "a" はあかりという人物を指示するということであって、"a" = "あかり" ではないわけですから。単数指示系を用いていたからこそ、記号と対象の間の指示に無頓着でいられ、記号と対象を同一視してしまっていた(クワインのいう「言及」と「使用」の混同)のでしょう。そもそも、意味を与えるというのは、相当する指示を有するメタ言語の記号と対応付けるということなのでしょう。

話がそれましたが、えっと、項記号の解釈をやりました。それじゃあ述語記号の方は? メタ言語の n-tuple に解釈すればOK。なのですが、少しだけ注意を。

n-tupleの話をする前に。複数指示系の言語で、関数っていうのはどういう働きがあるのでしょう?たとえば、

 f(a) = b

というとき、 f は一体何をしているのでしょう?正解は「指示様式の変換」です。この関数は、"a" の指示様式を "b" の指示様式に変換するようなものだといえます。

さて、n-tuple というのは、言ってみれば、n個の記号をとって、それっぽい(抽象的な)存在を指示するものです。このとき、タプルの内部にあるn個の記号を何を指示しているのでしょう? 単数指示系では、n-tuple というのは  D^{n} で、個体領域の対象 n個を中に押し込んだものでした。

複数指示系では、ぶっちゃけて言うと、中の記号は何も指示していません。n-tuple を n-引数の関数と捉えるなら、n個の指示様式の組から、1つの指示を返す関数といえます。

少しもどかしいかもしれません。あえて説明するなら、n-tupleというのは「n個の指示様式を寄せ集めた手続き」のようなものです。n個の指示様式が書かれた設計図です。もちろん、適切な関数を用意することで、ここから1つの指示様式を取り出したりすることができるはずです。でも、n-tupleそれ自体は、そのn個の指示様式のどれを使うこともなく、その(抽象的な)設計図を指示します。

で、述語記号はそのいわゆる「指示様式の設計図」を複数的に指示すると考えます。それで、結局

 Px_1x_2...x_n が真である iff  \langle I(x_1), I(x_2), ..., I(x_n) \rangle Among I(P)

となります。

おわり

というわけで、変項に関する対象列の話は残っていますが、そんな難しい拡張ではありません。記号の解釈とは指示の付与である!というのが pluralist の主張だと僕は考えます。

複数指示系は、その指示の仕方のところに(単数指示系のいう)集合を使用しています。ですから、記述力としては複数指示系の言語は2階の述語論理と同じ威力をもちます。複数論理は、平たく言えば自然言語複数形名詞を形式言語にもちこんだものですから、自然言語は(複数形名詞を用いる場合は)少なくとも2階の述語論理の記述力をもっているということになりそうです。

まあようやくこの理解に辿りついたわけですが、なんというか「ただのことばあそびやんけ!」と思いつつ、まあそういうもんなのかなという気分です。ま、でも私たちが自然言語で運用している複数指示の直観を形式言語でも使えるようにしたというのは偉大にも思います。

非決定計算については僕が詳しくないので何も言えないんですが、複数論理では分配的な関数だけでなく非分配的な関数も取り扱います。もしかしたらこの点が非決定計算と異なるかもしれません。