Depending on context, \(x = y\) can mean any of:

- \(x\) is
*known*to be equal to \(y\) - \(x\) is
*assigned*to be equal to y - \(x\) is
*defined*to be equal to \(y\). - We’re trying to show \(x\) is equal to \(y\)
- The Boolean relation of \(x = y\)

I get around this by using distinct forms of the equals sign for each of the nuances above.

I only use the equals sign when I know \(x\) is equal to \(y\).

If I’m using \(x = y\) to mean “let \(x\) be equal to \(y\)”, I use either \(x \gets y\) or \(x := y\).

If I’m defining \(x\) to be equal to \(y\), I use \(x \equiv y\) or more
often \(x \stackrel{def}{=} y\) because my triple equals sign looks terrible when
handwritten. The spacing is *always* off.

When I’m trying to show 2 sides are equal, I use \(\stackrel{?}{=}\). This has the advantage of making it clear that it’s wrong to transform both sides because I don’t know that they’re equal.The question mark conveys the idea of “dunno if they’re equal”.

For the last one, I use `==`

like in programming. I’m used to it.

These distinctions may be overkill, but I think they make intent clearer, which is all the more valuable when you’re in a thicket of symbols without a map.