web-dev-qa-db-ja.com

同等性と同等性の違いは何ですか?

等価記号(基本的には3行の「=」)を使用する数学およびコンピュータサイエンスを読んだ例をいくつか読んだことがあります。これは平等であるかのようです。これら2つの概念の違いは何ですか?

31

Wikipedia:等価関係

数学では、同値関係は、セットの2つの要素間の2項関係であり、何らかの方法でそれらを「等価」としてグループ化します。 a、b、cを任意のセットXの任意の要素とします。「a〜b」または「a≡b」は、aがbと同等であることを示します。

同値関係「〜」は、再帰的、対称的、推移的です。

つまり、=は同値関係の単なる例です。

編集:再帰的、対称的、推移的であるというこの一見単純な基準は、常に簡単ではありません。 Blochの効果的なJava第2版p。35などを参照)

public final class CaseInsensitiveString {
...
    // broken
    @Override public boolean equals(Object o) {
        if (o instance of CaseInsensitiveString)
            return s.equalsIgnoreCase(
                ((CaseInsensitiveString) o).s);
        if (o instanceof String) // One-way interoperability!
            return s.equalsIgnoreCase((String) o);
        return false;
    }
... 

}

CaseInsensitiveStringStringクラスを認識していますが、StringクラスはCaseInsensitiveStringを認識していないため、上記の実装は対称性を破っています。

15
Eugene Yokota

私はあなたの質問を、プログラミングではなく数学表記についてとらえています。あなたが参照する三重の等号は≡ HTMLまたは\equiv LaTeXで。

a≡bは、最も一般的には「aがbとして定義されている」または「aをbに等しくする」ことを意味します。

したがって、2 + 2 = 4ですが、φ≡(1 + sqrt(5))/ 2です。

便利な等価表は次のとおりです。

Mathematicians      Computer scientists
--------------      -------------------
      =                      ==
      ≡                      =

(同等関係に関する他の答えも正しいですが、私はそれらが一般的であるとは思いません。「aはb、mod mに合同である」と発音されるa≡b(mod m)もあり、プログラマーの言い回しは次のように表現されます。 as mod(a、m)== mod(b、m)つまり、aとbはmでmodした後は等しくなります。)

12
dreeves

多くの言語は、オブジェクトの同等性とそれらのオブジェクトの値の同等性を区別しています。

たとえば、Rubyには同等性をテストする3つの方法があります。最初のequal?は、2つの変数を比較して、同じインスタンスを指しているかどうかを確認します。これは、Cスタイルの言語では、2つのポインターが同じアドレスを参照しているかどうかをチェックするのと同じです。 2番目のメソッド==は、値の等価性をテストします。したがって、この場合、3 == 3.0はtrueになります。 3番目のeql?は、値とクラスタイプの両方を比較します。

LISPには、テストしようとしているものに応じて、等しいという異なる概念もあります。

12
Michel

同等性と同等性を区別することを私が見た言語では、同等性は通常、タイプand値が同じであることを意味しますが、同等性は値だけが同じであることを意味します。例えば:

int i = 3;
double d = 3.0;

iとdは同じ値を表すので等価関係になりますが、型が異なるので等価ではありません。他の言語では、同等の考え方が異なる場合があります(2つの変数が同じオブジェクトを表すかどうかなど)。

8
Robert Gamble

上記の答えは正しい/部分的に正しいですが、違いが正確に何であるかを説明していません。理論的なコンピューターサイエンス(およびおそらく他の数学の分野)では、論理方程式の自由変数に対する定量化と関係があります(つまり、2つの表記を同時に使用する場合)。

私にとって、違いを理解する最良の方法は次のとおりです。

  1. 定義により
    A≡B
    手段
    AおよびBの自由変数のすべての可能な値について、A = B

    または

    A≡B <=> [A = B]

  2. 例として
    x = 2x
    iff(実際、iffはasと同じです)
    x = 0

    x≡2x
    iff(xのすべての可能な値でx = 2xとなるわけではないため)
    誤り

それが役に立てば幸い

編集:

私の頭に浮かんだもう1つのことは、2つの定義です。

A = Bは、A <= BおよびA> = Bとして定義されます。ここで、<=(小さい方が等しい、暗黙ではない)は任意の順序関係になります。

A≡BはA <=> Bとして定義され(両側を意味する場合に限り異なる)、含意は順序関係でもあるので、代わりに=を使用することは可能です(ただし、正確性が低く、多くの場合混乱します)。 ofの。

結論としては、=が表示された場合、コンテキストに基づいて著者の意図を理解する必要があると思います。

4
Pawel

プログラミングの領域から外してください。

  • (31)等しい-(数量、値、または測定値が別のものと同じ、「等しい条件で」、「すべての男性は法律の前で平等である」)

  • 同等、同等-(本質的に何かに等しい;「それは金と同じくらい良かった」;「コマンドと同等の願い」;「彼の発言は罪悪感を認めることに相当した」

少なくとも私の辞書では、「平等」とは、オリジナルの十分な代用を意味しますが、必ずしも同一である必要はなく、同様に「平等」は完全に同一であることを意味します。

null == 0   # true , null is equivelant to 0 ( in php ) 
null === 0  # false, null is not equal to 0 ( in php )  

(一部の人々は代わりにuseを使用して同一でない値を表します)

4
Kent Fredric

違いは何よりも、2つの概念が導入されるレベルにあります。 '≡'は形式論理のシンボルであり、2つの命題 aおよびbが与えられると、a≡bは(a => b AND b => a)を意味します。

「=」は代わりにsetの同値関係の典型的な例であり、少なくとも集合の理論を前提としています。 1つのdefinesが特定のセットである場合、通常、彼はそれに同等の適切な概念を提供します。これは、同値関係の形で現れ、記号「=」を使用します。たとえば、define有理数のセットQである場合、define等式a/b = c/d(a/bおよびc/dは有理) ad = bcの場合に限り(adおよびbcは整数であり、整数の同等性の概念は他の場所で既に定義されています)。

時には、非公式な表記f(x)≡g(x)を見つけるでしょう。ここで、fとgは関数です。つまり、fとgが同じドメインを持ち、f(x) = g(x)このようなドメインの各xについて(これも同値関係です)。最後に、≡(または〜)が等価関係を表す記号。

4

同じ真理値を持つ2つのステートメント(同等)または同じ2つのステートメント(同等)を持つことができます。同様に、「3本の棒の等号」は「次のように定義されている」を意味することもあります。

2
BobbyShaftoe

実際、平等は実際には特別な種類の同値関係です。それが言うことの意味を考慮してください:

0.9999999999999999... = 1

これは、等価性が "文字列番号"(より正式にはZ-> {0、...、9}の関数として定義されている)の等価関係であることを示唆しています。そして、このケースからわかるように、等価クラスはシングルトンでさえありません。

2
Purfideas