9 に答える
数学では、同値関係は、セットの 2 つの要素間のバイナリ関係であり、それらを何らかの方法で「同等」としてグループ化します。a、b、および c をある集合 X の任意の要素とする。このとき、"a ~ b" または "a ≡ b" は、a が b と等しいことを示します。
同値関係 "~" は再帰的、対称的、および推移的です。
つまり、= は同値関係の単なるインスタンスです。
編集: 再帰的、対称的、および推移的であるというこの一見単純な基準は、常に些細なことではありません。Bloch の『Effective Java 2nd ed 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;
}
...
}
上記の equals 実装は、 がクラスを認識しているため、対称性を破ってCaseInsensitiveString
いString
ますが、String
クラスは を認識していませんCaseInsensitiveString
。
私はあなたの質問をプログラミングではなく数学表記についてであると思います。≡
参照するトリプル等号は、HTMLまたは\equiv
LaTeXで記述できます。
a≡bは、最も一般的には「aはbであると定義されている」または「aをbと等しくする」ことを意味します。
したがって、2 + 2 = 4ですが、φ≡(1 + sqrt(5))/2です。
便利な等価表は次のとおりです。
Mathematicians Computer scientists
-------------- -------------------
= ==
≡ =
(同値関係に関する他の答えも正しいですが、それらは一般的ではないと思います。「aはb、mod mと合同です」と発音され、プログラマーの用語で表現される≡b(mod m)もあります。 as mod(a、m)== mod(b、m)。言い換えると、aとbは、mでmod'した後は等しくなります。)
多くの言語は、オブジェクトの等価性とそれらのオブジェクトの値の等価性を区別します。
たとえばRubyには、等価性をテストする3つの異なる方法があります。最初の equal? は、2 つの変数を比較して、それらが同じインスタンスを指しているかどうかを確認します。これは、2 つのポインターが同じアドレスを参照しているかどうかを確認する C スタイル言語でのチェックと同じです。2 番目のメソッド == は、値が等しいかどうかをテストします。したがって、この場合は 3 == 3.0 が真になります。3 番目の eql? は、値とクラス タイプの両方を比較します。
Lisp には、テストしようとしているものに応じて、さまざまな等価概念もあります。
等価と等価を区別する私が見た言語では、等価は通常型と値が同じであることを意味し、等価は値だけが同じであることを意味します。例えば:
int i = 3;
double d = 3.0;
i と d は、同じ値を表すため同値関係にありますが、型が異なるため等価ではありません。他の言語では、等価性の概念が異なる場合があります (2 つの変数が同じオブジェクトを表すかどうかなど)。
上記の答えは正しい/部分的に正しいですが、違いが正確に何であるかを説明していません. 理論的なコンピューター サイエンス (およびおそらく数学の他の分野) では、論理方程式の自由変数の量化に関係しています (つまり、2 つの表記法を同時に使用する場合)。
私にとって、違いを理解するための最良の方法は次のとおりです。
定義により
、A ≡ Bは 、A と B の自由変数のすべての可能な値について、A = B を
意味します。また
A ≡ B <=> [A = B]
例
x=2x
iff (実際には iff は ≡ と同じです)
x=0x ≡ 2x
iff (x のすべての可能な値に対して x = 2x ではないため)
False
役立つことを願っています
編集:
私の頭に浮かんだもう 1 つのことは、2 つの定義です。
A = B は、A <= B および A >= B として定義されます。ここで、<= (より小さい等しい、意味しない) は、任意の順序関係にすることができます。
A ≡ B は A <=> B として定義されます (両側を意味する場合のみ)。含意は順序付け関係でもあるため、代わりに = を使用することが可能です (ただし、精度が低く、しばしば混乱を招きます)。の≡。
結論としては、= が表示された場合は、文脈に基づいて作者の意図を理解する必要があるということです。
プログラミングの領域の外に出てください。
(31) 等しい -- (他のものと同じ量、価値、または尺度を有する;「平等な条件で」;「すべての人は法の前に平等である」)
同等、同等 -- (本質的に何かと同等であること; 「それは金と同じくらい良かった」; 「命令と同等の願い」; 「彼の発言は罪を認めることと同等だった」
少なくとも私の辞書では、「同等性」はオリジナルの十分な代用品を意味しますが、必ずしも同一ではありません。
null == 0 # true , null is equivelant to 0 ( in php )
null === 0 # false, null is not equal to 0 ( in php )
(代わりに ≈ を使用して同一でない値を表す人もいます )
違いは、何よりも、2 つの概念が導入されるレベルにあります。「≡」は形式論理の記号であり、2 つの命題a と b が与えられたとき、a ≡ b は (a => b AND b => a) を意味します。
'=' は、代わりに集合上の同値関係の典型的な例であり、少なくとも集合の理論を前提としています。特定のセットを定義するとき、通常、適切な同等の概念を提供します。これは、等価関係の形式になり、記号「=」を使用します。たとえば、有理数の集合 Q を定義する場合、ad = bc (ad と bc は整数) の場合にのみ、a/b = c/d (a/b と c/d は有理数) と定義します。 、他の場所ですでに定義されている整数の等価性の概念)。
ときどき、f(x) ≡ g(x) という非公式な表記法を見つけることがあります。ここで、f と g は関数です。これは、f と g が同じドメインを持ち、そのような各 x に対して f(x) = g(x) であることを意味します。ドメイン (これも同値関係です)。最後に、同値関係を表す汎用記号として ≡ (または ~) を見つけることがあります。
同じ真理値を持つ 2 つのステートメント (同等) または同じ (同等) の 2 つのステートメントを持つことができます。同様に、「等号と 3 本のバー」は「次のように定義されている」という意味にもなります。
実際、平等は特別な種類の等価関係です。次の言葉の意味を考えてみましょう。
0.9999999999999999... = 1
これは、等価性が「文字列番号」(Z -> {0,...,9} からの関数としてより正式に定義されている) の単なる等価関係であることを示唆しています。そして、このケースからわかるように、等価クラスはシングルトンでさえありません。