В чем разница между равенством и эквивалентностью? - PullRequest
28 голосов
/ 23 ноября 2008

Я читал несколько примеров в чтении математики и информатики, в которых используется символ эквивалентности (в основном '=' с тремя строками), и мне всегда имеет смысл читать это как если бы это было равенство. В чем разница между этими двумя понятиями?

Ответы [ 9 ]

14 голосов
/ 23 ноября 2008

Википедия: отношение эквивалентности :

В математике эквивалентность отношение является бинарным отношением между два элемента множества, какие группы они вместе как "эквивалентные" в каким-то образом. Пусть a, b и c произвольны элементы некоторого множества X. Тогда "a ~ b" или «a ≡ b» обозначает, что a является эквивалентно б.

Отношение эквивалентности "~" рефлексивно, симметрично и транзитивно.

Другими словами, = это просто пример отношения эквивалентности.

Редактировать : Этот, казалось бы, простой критерий рефлексивности, симметрии и переходности не всегда тривиален. См. Эффективная Java Блоха, 2-е изд. 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.

12 голосов
/ 02 декабря 2008

Я принимаю ваш вопрос скорее о математической нотации, чем о программировании. Тройной знак равенства, на который вы ссылаетесь, может быть написан ≡ в HTML или \equiv в LaTeX.

а & экв .; b чаще всего означает «a определено как b» или «пусть a будет равно b».

То есть 2 + 2 = 4, но & phi; & Эквив; (1 + SQRT (5)) / 2.

Вот удобная таблица эквивалентности:

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

(Другие ответы об отношениях эквивалентности тоже верны, но я не думаю, что они такие же общие. Есть также & экв; b (mod m), который произносится как «a соответствует b, mod m» и в программист язык будет выражаться как mod (a, m) == mod (b, m). Другими словами, a и b равны после mod'ing с помощью m.)

11 голосов
/ 23 ноября 2008

Многие языки различают равенство объектов и равенство значений этих объектов.

Например, в Ruby есть 3 различных способа проверки равенства. Первая, равная?, Сравнивает две переменные, чтобы увидеть, указывают ли они на один и тот же экземпляр. Это эквивалентно в языке C-стиля делать проверку, чтобы видеть, ссылаются ли 2 указателя на тот же адрес. Второй метод, ==, проверяет равенство значений. Так что 3 == 3,0 будет верно в этом случае. Третий, eql?, Сравнивает как значение, так и тип класса.

Лисп также имеет различные концепции равенства в зависимости от того, что вы пытаетесь проверить.

7 голосов
/ 23 ноября 2008

В языках, которые я видел, которые различают равенство и эквивалентность, равенство обычно означает, что значения типа и одинаковы, а эквивалентность означает, что только значения одинаковы. Например:

int i = 3;
double d = 3.0;

i и d будут иметь отношение эквивалентности, поскольку они представляют одинаковое значение, но не равенство, поскольку они имеют разные типы. Другие языки могут иметь разные представления об эквивалентности (например, представляют ли две переменные один и тот же объект).

4 голосов
/ 01 августа 2012

Ответы выше верны / частично верны, но они не объясняют, в чем разница. В теоретической информатике (и, вероятно, в других разделах математики) это связано с количественным определением свободных переменных логического уравнения (то есть, когда мы используем две записи одновременно).

Для меня лучший способ понять разницу:

  1. По определению
    A ≡ B
    означает
    Для всех возможных значений свободных переменных в A и B, A = B

    или

    A ≡ B <=> [A = B]

  2. К примеру
    х = 2x
    если (на самом деле, если он такой же, как ≡)
    х = 0

    x ≡ 2x
    если (потому что это не тот случай, когда x = 2x для всех возможных значений x)
    Ложные

Надеюсь, это поможет

Edit:

Еще одна вещь, которая пришла мне в голову, это определения двух.

A = B определяется как A <= B и A> = B, где <= (меньше равно, не подразумевает) может быть любым отношением порядка </p>

A ≡ B определяется как A <=> B (если только в том случае, если и только если подразумевает обе стороны), стоит отметить, что импликация также является отношением упорядочения, и поэтому возможно (но менее точно и часто вводит в заблуждение) используйте = вместо ≡.

Полагаю, вывод таков: когда вы видите =, тогда вы должны выяснить намерение авторов на основе контекста.

4 голосов
/ 23 ноября 2008

Разница заключается прежде всего в уровне, на котором вводятся эти два понятия. «≡» является символом формальной логики, где, учитывая два предложения a и b, a ≡ b означает (a => b AND b => 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) для каждого х в такой области (это снова отношение эквивалентности). Наконец, иногда вы найдете find (или ~) как общий символ, обозначающий отношение эквивалентности.

4 голосов
/ 23 ноября 2008

Возьмите это за пределы сферы программирования.

  • (31) равно - (имеющее то же количество, значение или меру, что и другое; «на равных условиях»; «все люди равны перед законом»)

  • эквивалентно, равнозначно - (по сути, равно чему-то; «оно было так же хорошо, как золото»; «желание было эквивалентно команде»; «его высказывание равносильно признанию вины»

По крайней мере, в моем словаре слово «equivelance» означает его достаточно хорошее замещение для оригинала, но не обязательно идентичное, а также «равенство» выражает полную идентичность.

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

(Некоторые люди используют & asymp; для представления неидентичных значений)

2 голосов
/ 23 ноября 2008

Равенство действительно является особым видом отношения эквивалентности. Подумайте, что значит сказать:

0.9999999999999999... = 1

Это говорит о том, что равенство - это просто отношение эквивалентности на «строковых числах» (которые более формально определяются как функции из Z -> {0, ..., 9}). И из этого случая видно, что классы эквивалентности даже не являются синглетонами.

2 голосов
/ 23 ноября 2008

Вы можете иметь два утверждения, которые имеют одинаковое значение истинности (эквивалент), или два утверждения, которые одинаковы (равенство). Также «знак равенства с тремя столбцами» также может означать «определяется как».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...