こんにちは高木です。

以前は「等値」と「等価」についてやたら神経質になっている発言が多く見られたのですが、最近はあまり見かけなくなりました。もしかしたら私が知らないだけかもしれませんので、念のため当時に考えたことを引っ張り出してみることにします。

まず、国語的には、「等値」は「値が等しいこと」であり、「等価」は「価値や価格が等しいこと」ですが、実際のところそれほど厳密な区別はありません。もちろん、特定分野において、それぞれに明確な定義を行った場合は別です。ここではそれを正確に把握できるほどの情報がありませんので、何ともいえません。

プログラミングの話題で「等値」と「等価」と言う場合は訳語を指すことが多いようで、原文は「equality」と「equivalence」になります。数学では、equalityは等式ですので、A = B のことです。一方、equivalenceは同値のことで、A ⇔ B、すなわち、AならばBとBならばAが同時に成り立つことを意味します。値が同じであることと、意味が同じであることの違いだともいえます。

C言語の場合は、equalityというのは、equality operator(等価演算子)とかequality expression(等価式)とかのことで、==を使った値の比較を意味しています。一方で、equivalence(またはequivalent)はというと、++EとE +=1や、!Eと(0 == E)が同じであることを表すのに用います。

ここで注意しなければならないのは、JIS X3010:2003(C規格の日本語版)では、==を意味するequality operatorを「等価演算子」と呼んでいることです。多くの方はこちらを「等値」だと考えていますし、Javaのような言語ではそう呼ぶそうです。ですので、日本語にした場合は、このような紛らわしい訳語ではなく、もっと明確な語をあてるべきではないかと思います。

すべての事例をひとつひとつ取り上げることはできませんが、別の話の場合は当然別の説明が必要になることでしょう。つまり、文脈に大きく依存するのです。ですので、適切な話の流れや、前提となる背景が必要になります。にもかかわらず、「等値」や「等価」という単語だけに反応して、自分がよく理解しないまま意見する方が少なからずいらっしゃるんですよね。