Syntactically, *p* and *q* are equivalent if each can be proved from the other.
Semantically, *p* and *q* are equivalent if they have the same truth value in every model.

Logical equivalence is often confused with material equivalence.
The former is a statement *in* the metalanguage, claiming something *about* statements *p* and *q* in the object language.
But the material equivalence of *p* and *q* (often written "*p* ↔ *q*") is itself another statement in the object language.
There is a relationship, however; *p* and *q* are syntactically equivalent if and only if *p* ↔ *q* is a theorem, while *p* and *q* are semantically equivalent if and only if *p* ↔ *q* is a tautology.

Logical equivalence is sometimes denoted *p* ≡ *q* or *p* ⇔ *q*.
However, the latter notation is also used for material equivalence.