Not all Unicode codepoints are allowed in variable names.
In particular, ∃
(U+2203) is in Unicode category Sm (Symbol, math). Some of the characters in Sm are parsed as identifiers, and some of them are parsed as binary and/or unary operators. When it wasn’t clear whether a character should be an identifier or an operator, we chose not to allow it at all for the time being.
∃
is not currently allowed because it wasn’t clear whether it should be an identifier character or some kind of (unary?) operator. If there is a compelling case for one choice or the other, we can always add it to the list of allowed characters in the future without breaking any code.
π
, in contrast, is in Unicode category Ll (Letter, lowercase). All category-Ll characters are allowed in identifiers — no case-by-case decision is required.
Note that most languages, even those like Python 3 that allow Unicode identifiers, don’t allow any category-Sm characters in identifiers. That’s probably because the official Unicode recommendation for identifier characters is extremely conservative; in Julia we went beyond this recommendation to allow a much wider range of characters in order to support common mathematical notations.