\subsubsection{Statements} The following statement types are supported by Promela: \begin{itemize} \item \texttt{skip}: Does not change the state (except the location counter). Always executable \item \texttt{assert(E)}: Aborts execution if \texttt{E} evaluates to zero, otherwise is equivalent to \texttt{skip}. Always executable \item Assignment: \texttt{x = E} assigns value of \texttt{E} to variable \texttt{x}. For arrays, use \texttt{a[n] = E}. Always executable \item \texttt{s1;s2} (Sequential composition): Executable if \texttt{s1} is executable \item Expression statement: Evaluates expression \texttt{E}, executable if \texttt{E} evaluates $\neq 0$. \texttt{E} must be \bi{side effect free}. \end{itemize} In addition, selection statements (i.e. if / switch) and repetitions (loops) are supported: \begin{code}{promela} if :: s1 -> code; :: s2 -> code; :: code; // The else statement, executes if no other option executable fi do :: s1 -> loop_body_1; // We can use this technique to combine if and loops :: s2 -> loop_body_2; :: else -> break; od \end{code} Then, we have atomic statements, which has signature \texttt{atomic \{ s \}}, which executes \texttt{s} atomically.