Domanda

Ho letto alcuni casi nella lettura di matematica e informatica che usano il simbolo di equivalenza , (fondamentalmente un '=' con tre righe) e per me ha sempre senso leggi questo come se fosse uguaglianza. Qual è la differenza tra questi due concetti?

È stato utile?

Soluzione

Wikipedia: relazione di equivalenza :

  

In matematica, un'equivalenza   relazione è una relazione binaria tra   due elementi di un insieme che raggruppa   insieme come " equivalente " nel   in qualche modo. Lascia che a, b e c siano arbitrari   elementi di alcuni set X. Quindi " a ~ b "   oppure " a & # 8801; & B quot; indica che a è   equivalente a b.

     

Una relazione di equivalenza " ~ " è riflessivo, simmetrico e transitivo.

In altre parole, = è solo un'istanza di relazione di equivalenza.

Modifica : questi criteri apparentemente semplici di essere riflessivo, simmetrico e transitivo non sono sempre banali. Vedi Bloch's Effective Java 2nd ed p. 35 ad esempio,

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;
    }
... 

}

L'implementazione di cui sopra equivale a rompere la simmetria perché CaseInsensitiveString conosce la classe String, ma la <=> classe non conosce <=>.

Altri suggerimenti

Prendo la tua domanda sulla notazione matematica piuttosto che sulla programmazione. Il triplo segno uguale a cui ti riferisci può essere scritto &equiv; in HTML o \equiv in LaTeX.

a & # 8801; b più comunemente significa " a è definito come b " o " sia a uguale a b " ;.

Quindi 2 + 2 = 4 ma & # 966; & # 8801; (1 + sqrt (5)) / 2.

Ecco una comoda tabella di equivalenza:

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

(Anche le altre risposte sulle relazioni di equivalenza sono corrette ma non penso che siano così comuni. C'è anche un & # 8801; b (mod m) che è pronunciato " a è congruente con b, mod m " e nel linguaggio del programmatore sarebbe espresso come mod (a, m) == mod (b, m). In altre parole, aeb sono uguali dopo la modifica di m.)

Molte lingue distinguono tra uguaglianza degli oggetti e uguaglianza dei valori di quegli oggetti.

Il rubino, ad esempio, ha 3 modi diversi per testare l'uguaglianza. Il primo, uguale ?, confronta due variabili per vedere se puntano alla stessa istanza. Ciò equivale in un linguaggio di tipo C a fare un controllo per vedere se 2 puntatori si riferiscono allo stesso indirizzo. Il secondo metodo, ==, verifica l'uguaglianza dei valori. Quindi 3 == 3.0 sarebbe vero in questo caso. Il terzo, eql ?, confronta sia il valore che il tipo di classe.

Lisp ha anche diversi concetti di uguaglianza a seconda di ciò che stai cercando di testare.

Nelle lingue che ho visto distinguere tra uguaglianza ed equivalenza, l'uguaglianza di solito significa che il valore di tipo e è lo stesso mentre l'equivalenza significa che solo i valori sono gli stessi. Ad esempio:

int i = 3;
double d = 3.0;

i e d avrebbero una relazione di equivalenza poiché rappresentano lo stesso valore ma non l'uguaglianza poiché hanno tipi diversi. Altre lingue possono avere idee diverse di equivalenza (ad esempio se due variabili rappresentano lo stesso oggetto).

Portalo fuori dal regno della programmazione.

  • (31) uguale - (con la stessa quantità, valore o misura di un altro; " a parità di termini " ;; " tutti gli uomini sono uguali prima del legge quot &;)

  • equivalente, equivalente - (essendo sostanzialmente uguale a qualcosa; " era buono come l'oro " ;; " un desiderio che era equivalente a un comando quot ;; " la sua dichiarazione equivaleva a un'ammissione di colpa "

Almeno nel mio dizionario, "equivelance" significa che è un sostituto abbastanza buono per l'originale, ma non necessariamente identico, e allo stesso modo "uguaglianza" trasmette identico completo.

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

(Alcune persone usano & # 8776; per rappresentare invece valori non identici)

La differenza risiede soprattutto nel livello in cui vengono introdotti i due concetti. '# 8801 &;' è un simbolo di logica formale in cui, date due proposizioni a e b, a & # 8801; b significa (a = > b AND b = > a).

'=' è invece l'esempio tipico di una relazione di equivalenza su un insieme e presume almeno una teoria degli insiemi. Quando un definisce un insieme particolare, di solito gli fornisce una nozione adeguata di uguaglianza, che si presenta sotto forma di una relazione di equivalenza e usa il simbolo '='. Ad esempio, quando definisci l'insieme Q dei numeri razionali, definisci uguaglianza a / b = c / d (dove a / b e c / d sono razionali) if and only if ad = bc (dove ad e bc sono numeri interi, la nozione di uguaglianza per numeri interi è già stata definita altrove).

A volte troverai la notazione informale f (x) & # 8801; g (x), dove f e g sono funzioni: significa che f e g hanno lo stesso dominio e che f (x) = g (x) per ogni x in tale dominio (questa è di nuovo una relazione di equivalenza). Infine, a volte trovi & # 8801; (o ~) come simbolo generico per indicare una relazione di equivalenza.

Le risposte sopra sono giuste / parzialmente giuste ma non spiegano quale sia esattamente la differenza. Nell'informatica teorica (e probabilmente in altri rami della matematica) ha a che fare con la quantificazione su variabili libere dell'equazione logica (cioè quando usiamo le due notazioni contemporaneamente).

Per me il modo migliore per capire la differenza è:

  1. Per definizione
    A & # 8801; B
    significa
    Per tutti i possibili valori delle variabili libere in A e B, A = B

    o

    A & # 8801; B & Lt; = & Gt; [A = B]

  2. Per esempio
    x = 2x
    iff (in effetti iff è uguale a & # 8801;)
    x = 0

    x & # 8801; 2x
    iff (perché non è il caso che x = 2x per tutti i possibili valori di x)
    False

Spero che sia d'aiuto

Modifica

Un'altra cosa che mi è venuta in mente sono le definizioni dei due.

A = B è definito come A < = B e A > = B, dove < = (minore di uguale, non implica) può essere una relazione di ordinazione

A & # 8801; B è definito come A & Lt; = & Gt; B (iff, if e only if, implica entrambe le parti), vale la pena notare che l'implicazione è anche una relazione di ordinamento e quindi è possibile (ma meno preciso e spesso confuso) usare = invece di & # 8801;.

Immagino che la conclusione sia che quando vedi =, devi capire l'intenzione degli autori in base al contesto.

Potresti avere due affermazioni che hanno lo stesso valore di verità (equivalente) o due affermazioni uguali (uguaglianza). Anche il & Quot; segno uguale con tre barre & Quot; può anche significare " è definito come. "

L'uguaglianza è davvero un tipo speciale di relazione di equivalenza, in effetti. Considera cosa significa dire:

0.9999999999999999... = 1

Ciò suggerisce che l'uguaglianza è solo una relazione di equivalenza su " string numbers " (che sono definiti più formalmente come funzioni da Z - > {0, ..., 9}). E possiamo vedere da questo caso, le classi di equivalenza non sono nemmeno singoletti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top