*(I overheard this at UW, from a graduate student who told me he doesn’t know the original author of this mnemonic either.
Please do not attribute it to either of us* 😛*).*

In PL and formal logic, there exists a common notation, which I personally consider the worst possible notation choice of all times. Let’s say you have an expression $E$, in which you want to replace every occurrence of a variable $x$ (or any other fixed subexpression, for that matter) with another variable $y$ (again, or any other expression). This operation is called *substitution*^{1}. In formal logic, $\lambda$-calculus, etc. there exists a bewildering soup of notations representing this simple transformation:

- $E[x \to y]$ (“$x$ is transformed into $y$”)
- $E[x \gets y]$ (“$x$ is replaced with $y$”)
- $E[x := y]$ (“assign $y$ to every occurrence of $x$)
- $E[y/x]$ (WTF?)

The first two (and their mirrored alternatives) are confusing on its own – you never know which substitution direction the arrow represents (is it “replace $x$ with $y$” or “replace $y$ with $x$”?). But the last one is notoriously ridiculous in that regard. It is *too symmetric*. How am I supposed to remember which variable substitutes the other one if the only thing denoting this relationship is a meaningless slash character in between? Some say this notation is the easiest to typeset – which is not true, because the third notation also doesn’t use any characters beyond standard ASCII, *and* it is unambiguous. Anyway, I usually tried to avoid the slash notation as much as possible whenever I could.

However, now I know a beautiful mnemonic, which breaks the “almost-symmetrical” relationship between $x$ and $y$:

“Think of it as $y$ falling over and squishing the $x$.”

- The actual formal definition of substitution is trickier, because you have to take into account which variables are free in $E$, and which are bound. The details are outside the scope of this post. ↩