The reserved characters in Elf are
% one-line comment or pragma %{ }% delimited comment, braces must match : colon, type or kind declaration . period, end of signature entry ( ) parentheses, for grouping terms [ ] brackets, for lambda abstraction { } braces, for pi quantification
All other characters can be included inside identifiers which are separated by whitespace or reserved characters. In particular, A->B is an identifier, whereas A -> B stands for the type of functions from A to B.
An uppercase identifier is one which begins with an underscore _ or a letter in the range A through Z. A lowercase identifier begins with any other character except a reserved one. Numbers also count as lowercase identifiers and are not interpreted specially. Identifiers of the form 'id' override the infix status of operators (see below). Free variables in a signature entry (declaration) must be uppercase, bound variables and constants may be either uppercase or lowercase identifiers. The identifiers sigma, #pr#, ` (backquote), and #`# are not treated special lexically, but predeclared (see below) and thus perhaps better not used in user programs at present.
Constants have static scope, which means that they can be shadowed by later subsequent declarations. A shadowed identifier (which can no longer be parsed) is printed as %id%.