我读过几个使用等效符号 ≡
的数学和计算机科学的实例,(基本上是一个带有三行的'=')它总是有意义的我把它看成是平等的。这两个概念有什么区别?
答案 0 :(得分:14)
Wikipedia: Equivalence relation:
在数学中,是等价的 关系是两者之间的二元关系 组中的两个元素组 他们在一起是“等同”的 某种方式。设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;
}
...
}
以上等于实现会破坏对称性,因为CaseInsensitiveString
知道String
类,但String
类不了解CaseInsensitiveString
。
答案 1 :(得分:12)
我的问题是关于数学符号而不是编程。您引用的三重等号可以在HTML中编写≡
或在LaTeX中编写\equiv
。
a≡b最常见的意思是“a被定义为b”或“让a等于b”。
所以2 + 2 = 4但是φ≡(1 + sqrt(5))/ 2。
这是一个方便的等价表:
Mathematicians Computer scientists
-------------- -------------------
= ==
≡ =
(关于等价关系的其他答案也是正确的,但我不认为那些是常见的。还有一个≡b(mod m),发音为“a与b,mod m一致”,并且在程序员的说法中将表示为mod(a,m)== mod(b,m)。换句话说,a和b在用m修改之后是相等的。)
答案 2 :(得分:11)
许多语言区分对象的相等性和这些对象的值的相等性。
例如,Ruby有3种不同的方法来测试相等性。第一个,相等?,比较两个变量,看它们是否指向同一个实例。这相当于一种C风格的语言,即检查2个指针是否指向同一地址。第二种方法==,测试值相等性。所以3 == 3.0在这种情况下是正确的。第三个是eql ?,比较值和类类型。Lisp也有不同的平等概念,具体取决于你要测试的内容。
答案 3 :(得分:7)
在我看过的区分平等和等价的语言中,平等通常意味着类型和值相同,而等价意味着只有值相同。例如:
int i = 3;
double d = 3.0;
我和d将具有等价关系,因为它们代表相同的值但不相等,因为它们具有不同的类型。其他语言可能有不同的等价思想(例如两个变量是否代表同一个对象)。
答案 4 :(得分:4)
把它带到编程领域之外。
(31)相等 - (具有与另一个相同的数量,价值或尺度;“在平等条件下”;“在法律面前人人平等”)
等同,等于 - (基本上等于什么;“它和黄金一样好”;“一个等同于命令的愿望”;“他的陈述等于承认有罪”< / p>
至少在我的字典中,'equivelance'意味着它是原始的,但不一定完全相同,同样“平等”表示完全相同。
null == 0 # true , null is equivelant to 0 ( in php )
null === 0 # false, null is not equal to 0 ( in php )
(有些人使用≈代表不相同的值)
答案 5 :(得分:4)
差异首先在于引入两个概念的水平。 '≡'是形式逻辑的符号,其中给定两个命题 a和b,a≡b表示(a => b AND b =&gt; a)。
'='是集上的等价关系的典型示例,并且至少假定集合理论。当一个定义一个特定的集合时,通常他会为它提供一个合适的相等概念,它以等价关系的形式出现并使用符号'='。例如,当你定义有理数的集合Q时,你定义相等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(这又是等价关系)。最后,有时你会发现≡(或〜)作为通用符号来表示等价关系。
答案 6 :(得分:4)
上面的答案是正确的/部分正确的,但它们没有解释确切的区别。在理论计算机科学中(可能在数学的其他分支中),它与逻辑方程的自由变量的量化有关(即当我们一次使用两个符号时)。
对我而言,理解差异的最佳方法是:
根据定义
A≡B
意味着
对于A和B中所有可能的自由变量值,A = B
或
A≡B&lt; =&gt; [A = B]
以示例为例
X = 2×
iff(实际上iff与≡相同)
x = 0的
x≡2x
iff(因为对于x的所有可能值,x = 2x不是这种情况)
假
我希望它有所帮助
修改强>
我想到的另一件事是两者的定义。
A = B定义为A&lt; = B且A&gt; = B,其中&lt; =(小于等于,不暗示)可以是任何有序关系
A≡B被定义为A =&lt; =&gt;。 B(iff,当且仅当,暗示双方都有),值得注意的是暗示也是一种排序关系,因此使用=而不是≡是可能的(但不太精确且常常令人困惑)。
我猜结论是,当你看到=时,你必须根据上下文找出作者的意图。
答案 7 :(得分:2)
你可以有两个具有相同真值的语句(等价)或两个相同的语句(相等)。同样,“三条等号”也可以表示“被定义为”。
答案 8 :(得分:2)
0.9999999999999999... = 1
这表明,平等只是“字符串数字”的等价关系(它更正式地定义为Z - > {0,...,9}的函数)。我们可以从这个案例中看出,等价类甚至不是单例。