WolframLang: Equality Test

By Xah Lee. Date: . Last updated: .

There are two functions for testing equality.

SameQ[expr1, expr2]

🔸 SHORT SYNTAX: ===

return True if two expressions are symbolically identical, else False.

examples:

  • {a,b,c} === {a,b,c} return True because they are the same expression term-by-term.
  • 3 === 3.0 return False because one is exact number while the other is approx.
  • 3 === xyz return False because xyz is a symbol. (unless it has a value of 3)

SameQ

x = 3;
y = 3.0;
x === y
(* False *)
Equal[expr1, expr2]

🔸 SHORT SYNTAX: ==

  • return True if two expressions are semantically equal. (example: 3 vs 3.0)
  • return False if two expressions are not semantically equal.
  • return whole expression as is, if semantic equality cannot be determined easily or WolframLang quirk.

Equal

3 == 3
(* True *)

3 == 3.0
(* True *)

{3} == {3.0}
(* True *)

🛑 WARNING: Equal does not return True or False even for obvious cases.

{} == 2
(* return expression as is. Version 13 *)

(* using Reduce makes it true *)
Reduce[ {} == 2 ] === True
(* WARNING *)
{{1}} == {2}
(* return expression as is. Version 13 *)

{{1.0}} == {2.0}
(* return expression as is *)
WolframLang equality bug 2022-09-18 k93F6
WolframLang equality issue 2022-09-18

Inequality

UnsameQ

🔸 SHORT SYNTAX: =!=

Same as Not[SameQ[x, y]] .

UnsameQ

Unequal

🔸 SHORT SYNTAX: !=

Same as Not[Equal[x, y]].

Unequal

💡 TIP: What Function to Use for Equality Test

WolframLang Boolean