英語の冠詞とオブジェクト指向プログラミングと、アリストテレス

私は英語がたいへん苦手です。

特に英語の冠詞については、何をしたいのかよくわかりません。数えられる、数えられない、とか何を言っているのでしょう。

『日本人の英語』という本では、冠詞が主体で、それに Pen や Cat などの名詞をつけるのだ、といいます。

この言葉をヒントにあれこれ考えていたところ、英語の冠詞と、オブジェクト指向と、アリストテレスが、実は同じアイデアの元にあるものなのではないか…と思い当たりました。

英語の名詞と冠詞(a, the) の関係は、クラスとインスタンスの関係によく似ているなと。という訳で、オブジェクト指向プログラマのための(?)、a と the についての妄想です。

オブジェクト指向プログラミング

コンピュータプログラミングの手法に「オブジェクト指向」というものがあります。

これは大きなプログラムを作るときに、全部をひとかたまりで作ってしまうと、訳が分からなくなってしまうので、ある範囲に閉じた「オブジェクト」という部品の集まりとして書くことで、楽に作れるようにする手法です。

その手法では、まず「クラス」という設計図を決めた後、その実物(インスタンス(実例)と呼びます)をつくる様になっています。車にタイヤが4つある場合、タイヤのクラスを一つ作った後、そこから4つの実物を作り出す感じでしょうか。

C++という言語風に書くと以下のような感じです。(正確ではありません)

まずクラスの設計図を定義します。

class Tire {…定義…}

クラスは定義した後、 new という単語(演算子)をつけると、実物にすることができ、できたものには名前をつけることができます。(左側がつけた名前)

tire1 = new Tire();
tire2 = new Tire();

ここで注意しないといけないのは、Tire は設計図で、実物になった new Tire() とは違う。ということです。

クラスと実物は違う。実物化していないタイヤを、車につけようとするな。というわけです。

オブジェクト指向プログラミングをしている人なら、クラスと実物(インスタンス)をきちんと区別しているわけですね。

普遍論争

ところで、西洋やインドのの哲学の本を読んでいると、一般名詞と個別の名前の違いは一体何なのか?みたいな議論を延々とされることがあります。こういう議論は「普遍論争」と呼ばれています。

個別のネコ「ミケ」や「タマ」がいるのは良いとして、一般名詞の「ネコ」というのは何なのだ?を議論しているわけです。

そしてこれは結局、オブジェクト指向のクラスと実物(インスタンス)を分けるのと、発想が同じなわけです。

似たような議論を、西欧でもインドでもしているのは「インド・ヨーロッパ語」に何か原因があるのではないか…なんて疑ってしまいます。

英語の冠詞

で、ここで気がつくわけです。

This is a cat.

はOKなのに、

This is cat.

がエラーなのはなぜなのか…?

どうも英語は、オブジェクト指向言語のように、実物とクラスをはっきりと分けている様なのです。

This は、「ミケ」や「タマ」などの個別の実物なのに、一般名の「ネコ」はクラスだから、同じではありえません。だから「This is cat.」はエラーになるわけです。

そこで、さっきのC++で「new」をつけたように、英語では「a」をつけるわけです。

My や The などの冠詞は、既に実体化したものがあるときに、それを参照するための記号と言えそうです。1)更に言えば、プログラミング言語での配列が、複数形になるのでしょう。

Earth や(西洋の)God はそういくつもあるわけではありませんから、The をつけとけば良いわけです。同様に、皆さん既にご存知の場合にも「The」をつけてよいようです。

かぞえられる?

さて『日本人の英語』にはおかしな英語の例とて以下のようなものも出てきます。

I ate a chicken.

正解は以下の文だそうです。

I ate chicken.

上の文は、チキンが具体的すぎて、まるごとのニワトリを貪り食っている様に感じるそうです。

先程の話だと、せっかく実物にして食べたのに、なんで抽象的なクラスのニワトリを食べたのが正解なのでしょう?

 アリストテレスの形相因と質量因

そこでもう一度普遍論争に戻ります。
西洋の普遍論争の議論の根っこには、古代ギリシアのアリストテレスの考え方があります。

アリストテレスには、四原因と言われるものがあります。
「これはなんですか?」の答えに、「質料因(材質)」「形相因(形)」「目的因」「作動因」の4つの方法で答えるように整理したものでしょうか。

ここで重要なのは、「質料因(材質)」と「形相因(形)」です。この2つをはっきりと分けるのです。

そして、アリストテレスは、形相因(形)がに質料因(材質)が入ることで物ができていると考えました。

ガラスのハートや、鉛のハートというのは、心臓という「形(形相因)」に、ガラスや鉛の「材質(質料因)」を流し込んで作られたものだ、という理解をしているようなのです。

実物にできる条件とは?

そして、アリストテレスは、「形(形相因)」が一番重要な性質だと考えました。つまり、どんなものであれ、形が無ければこの世に存在ができない、というわけです。

ここで、「数えられる」で言いたいことがなんとなく分かってきます。先程のオブジェクト指向で言うと、材料(質料因)には形がないから、a をつけても「実物化」できないというのが、基本的な考え方にあるようなのです。材質は設計図ではないのです。

さて、ここで「I ate chicken.」に戻ります。

I ate a chicken.

という文章は、先程のオブジェクト指向で考えると、「a (new)」をつけることで、「chicken」を実物化をしています。そして、実物化できるのは「形」があるものでした。

つまり、ここではニワトリの「形」をしたものを食べた、と言っているわけです。

しかし、ここでいいたいのは「鶏肉を食べた」ことです。ではどうすればいいのか。

「chicken」 の場合、たまたまニワトリの形(形相因)と材料(質料因)(鶏肉)に同じ言葉「chicken」が当てられているのです。だから、材料(質料因)をそのまま使えばいい。ということのようです。

I ate chicken.

では、常にそれが出来るのか、というとそうではありません。形しかない言葉、材質しかない言葉、もあるわけです。それが、数えられる、数えられない、の正体のようなのです。

I want a water. [Error]

は、water という形のない材料を、無理やり実体化しようとしているから、「水の形って?」というエラーになるようです。
で、形を与えるために、

I want a grass of water.

I want some water.

などという面倒なことして、コップなどで形を与える訳です。
(some は、何らかの形を持っているらしい)

chicken の場合、形と材質の両方の意味を持っていたために、エラーにならずに、おもしろ文章になった様です。

でも、だったら「材質(質料因)」である、water をくれ、と言っても良さそうなものですが…これだけでは説明しきれませんね…。

終わりに

さて、私は英語がたいへん苦手なので、鵜呑みにはしないように…。

References   [ + ]

1. 更に言えば、プログラミング言語での配列が、複数形になるのでしょう。