In article <100908100311.M0134633@utogw.gssm.otsuka.tsukuba.ac.jp> kuno@gssm.otsuka.tsukuba.ac.jp writes:
>>>  こういうのはどうなんでしょう?
>>>  main() {
>>>    int i = ...
>>>    if(...) {
>>>      int i = ...
>> それは、どっちかというと「同姓同名」に近い。
>> この場合の「i」は「固有名詞」なのでは?
>> この場合「同音異義」には含めないのが普通でしょう。
>  すみません、「同姓同名」と「同音異議」の違いが分からなくなりま
>した。どちらも「識別に使用する文字列」が同じだけれど「識別される
>本体」が別のもの、という点で同じような気がします。
確かに、そういう意味では同じですね。
ただ、一般に「同音異義」という用語を用いる場合、
「同姓同名」は除外して考えるのが普通です。
つまり、「固有名詞」について起る現象と
「普通名詞」(=固有名詞でない全ての名詞)について起る現象は
似て非なる現象であるという前提で、
前者の重複命名を「同姓同名」と呼び、後者の重複命名を「同音異義」と呼ぶ
というのが、一般的な用法でしょう。

そうすると、「固有名詞」とは何かという話になりますが、
これって、実はかなり難しいですよ。
ただまあ、粗っぽく定義してしまえば、
固有名詞は「個体識別」のための文字列だと言って良いと思います。
「個体」って何なんだというのが大問題なんですけど、
逆に言えば、そこさえ乗り切ってしまえば、後は問題にならないでしょう。

#この定義だと、囚人に与えられる「識別番号」も
#固有名詞ということになります。
#気色悪いかもしれませんが、これで正当な定義だと思いますよ。

物理的実体のあるものを指す場合に限定して考えると、
固有名詞の場合には、物理的に異なる存在であれば
異なる文字列を割り当てるのが本来あるべき状態であり、
同じ文字列を割り当ててしまえば「同姓同名」ということになります。

一方の一般名詞の場合には、物理的に異なる存在を同じ文字列で識別しても、
それが双方に共通する属性に着目しての識別であれば、
それは当然の結果であって、重複命名でも何でも無い。
でも、着目している属性が異なるのに同一文字列になったら、
それは重複命名であって「同音異義」に該当します。

例えば2枚の紙があるとします。
一方が厚み1.0mmで、他方が厚み1.1mmだったとして、
双方とも「あついかみ」と呼んだとしても、それは重複命名でも何でも無い。
それに対して、一方は厚みは1.0mmで温度が15℃、
他方は厚みが0.05mmで温度が80℃だったときに、
双方を「あついかみ」と呼んだら、それは「同音異義」です。

>      1文字の変数名は固有名詞ぽくないですし :-)           久野
でも、プログラム言語の「識別子」は、一般論として固有名詞だと思います。
「個体識別のために与える名前」ですから。
「囚人の識別番号」よりは固有名詞っぽいでしょ^_^;

確か、識別子とキーワードの区別が流動的な言語があったと思いますが、
そういうのは、例えば「土左衛門」が「水死者」を意味する
一般名詞に転用されるというような現象に対応するんだと思います。

                                戸田 孝@滋賀県立琵琶湖博物館
                                 toda@lbm.go.jp