平等和等同之间有什么区别?

Tri*_*ick 31 math computer-science symbols

我读过几个使用等价符号的数学和计算机科学实例?(基本上是一个带有三行的'='),对我来说,读这个就好像是平等一样.这两个概念有什么区别?

Eug*_*ota 15

维基百科:等价关系:

在数学中,等价关系是集合中两个元素之间的二元关系,它们将它们组合在一起,以某种方式"等同".设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;
    }
... 

}
Run Code Online (Sandbox Code Playgroud)

以上等于实现打破了对称性,因为CaseInsensitiveString知道String类,但String类不知道CaseInsensitiveString.


dre*_*ves 13

我把你的问题看作是数学符号而不是编程.您引用的三重等号可以用≡HTML或\equivLaTeX 编写.

a≡b最常见的意思是"a被定义为b"或"令a等于b".

所以2 + 2 = 4但是φ≡(1 + sqrt(5))/ 2.

这是一个方便的等价表:

Mathematicians      Computer scientists
--------------      -------------------
      =                      ==
      ?                      =
Run Code Online (Sandbox Code Playgroud)

(关于等价关系的其他答案也是正确的,但我认为这些并不常见.还有一个≡b(mod m),发音为"a与b,mod m一致",并且用程序员的说法表示作为mod(a,m)== mod(b,m).换句话说,a和b在用m修改之后是相等的.)


Mic*_*hel 12

许多语言区分对象的相等性和这些对象的值的相等性.

例如,Ruby有3种不同的方法来测试相等性.第一个,相等?,比较两个变量,看它们是否指向同一个实例.这相当于一种C风格的语言,即检查2个指针是否指向同一地址.第二种方法==,测试值相等性.所以3 == 3.0在这种情况下是正确的.第三个,eql ?,比较值和类类型.

Lisp还有不同的平等概念,具体取决于您要测试的内容.

  • +1这对程序员来说是一个很好的实用描述.平等意味着"a是b".等价意味着"a就像b". (3认同)

Rob*_*ble 8

在我所看到的区分平等和等价的语言中,平等通常意味着类型值是相同的,而等价意味着只有值是相同的.例如:

int i = 3;
double d = 3.0;
Run Code Online (Sandbox Code Playgroud)

我和d将具有等价关系,因为它们代表相同的值而不是相等,因为它们具有不同的类型.其他语言可能有不同的等价思想(例如两个变量是否代表同一个对象).


小智 5

上面的答案是正确的/部分正确的,但它们并没有解释到底有什么区别。在理论计算机科学中(可能在数学的其他分支中),它与对逻辑方程的自由变量的量化有关(即我们同时使用两个符号时)。

对我来说,理解差异的最好方法是:

  1. 根据定义
    A ? B
    表示
    对于 A 和 B 中自由变量的所有可能值,A = B

    或者

    一种 ?B <=> [A = B]

  2. 举例
    x=2x
    iff(实际上 iff 与 ? 相同)
    x=0

    X ?2x
    iff(因为对于 x 的所有可能值,x = 2x 不是这种情况)
    False

我希望它有帮助

编辑:

我想到的另一件事是两者的定义。

A = B 定义为 A <= B 和 A >= B,其中 <=(较小等于,不暗示)可以是任何排序关系

一种 ?B 被定义为 A <=> B(当且仅当,隐含双方),值得注意的是,蕴涵也是一种排序关系,因此可以(但不太精确且经常混淆)使用 = 而不是 ? .

我想结论是,当您看到 = 时,您必须根据上下文找出作者的意图。