WolframLang: Equality Test

By Xah Lee. Date: . Last updated: .
SameQ[expr1, expr2]

🔸 SHORT SYNTAX: ===

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

SameQ

{a,b,c} === {a,b,c}
(* True *)

{a,b,c} === {a,b,{c}}
(* False *)

3 === 3
(* True *)

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

🔸 SHORT SYNTAX: ==

  • return True if two expressions are semantically equal. (e.g. 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 False even for obvious cases such as {} == 2. It's designed that way because leaving the structure as is allows you to later replace parts of the expression such as by ReplaceAll and then get True or False. If it became False right away, the expression became inert.

{} == 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