\chapter{Introduction}

Naming values is a common practice in mathematics and engineering, e.g., $\pi$, $\tau$ (2$\pi$), $\phi$ (golden ratio), MHz (1E6), etc.
Naming is also commonly used to represent many other numerical phenomenon, such as days of the week, months of a year, floors of a building (basement), specific times (noon, New Years).
Many programming languages capture this important software-engineering capability through a mechanism called an \Newterm{enumeration}.
An enumeration is similar to other programming-language types by providing a set of constrained values, but adds the ability to name \emph{all} the values in its set.
Note, all enumeration names must be unique but different names can represent the same value (eight note, quaver), which are synonyms.

Specifically, an enumerated type restricts its values to a fixed set of named constants.
While all types are restricted to a fixed set of values because of the underlying von Neumann architecture, and hence, to a corresponding set of constants, e.g., @3@, @3.5@, @3.5+2.1i@, @'c'@, @"abc"@, etc., these values are not named, other than the programming-language supplied constant names.

Fundamentally, all enumeration systems have an \Newterm{enumeration} type with an associated set of \Newterm{enumerator} names.
An enumeration has three universal attributes, \Newterm{position}, \Newterm{label}, and \Newterm{value}, as shown by this representative enumeration, where position and value can be different.
\begin{cquote}
\small\sf\setlength{\tabcolsep}{3pt}
\begin{tabular}{rccccccccccc}
\it\color{red}enumeration & \multicolumn{7}{c}{\it\color{red}enumerators}	\\
$\downarrow$\hspace*{25pt} & \multicolumn{7}{c}{$\downarrow$}				\\
@enum@ Weekday \{				& Monday,	& Tuesday,	& Wednesday,	& Thursday,& Friday, 	& Saturday,	& Sunday \}; \\
\it\color{red}position			& 0			& 1			& 2				& 3				& 4			& 5			& 6			\\
\it\color{red}label				& Monday	& Tuesday	& Wednesday		& Thursday		& Friday 	& Saturday	& Sunday	\\
\it\color{red}value				& 0			& 1			& 2				& 3				& 4			& 5		& 6
\end{tabular}
\end{cquote}
Here, the \Newterm{enumeration} @Weekday@ defines the ordered \Newterm{enumerator}s @Monday@, @Tuesday@, @Wednesday@, @Thursday@, @Friday@, @Saturday@ and @Sunday@.
By convention, the successor of @Tuesday@ is @Monday@ and the predecessor of @Tuesday@ is @Wednesday@, independent of the associated enumerator constant values.
Because an enumerator is a constant, it cannot appear in a mutable context, e.g. @Mon = Sun@ is meaningless, and an enumerator has no address, it is an \Newterm{rvalue}\footnote{
The term rvalue defines an expression that can only appear on the right-hand side of an assignment.}.
