\chapter{Abstract Syntax and Semantics}

In this section we present abstract syntax and semantics of \lama. The syntax is given in the form of \emph{abstract syntax tree} (AST) format,
and the semantics~--- in the form of a \emph{big-step operational semantics}. In addition we present a part of static semantics of the language
in the form of \emph{attribute system}, which can be considered as a form of simplictic type system. Only the core constructs of the languge
are considered here.

Basic syntactic and semantic categories and their brief descriptions are given in Tab.~\ref{categories}. Apart from those, we will use the
following notations: for a mapping $f : X\to Y$ we use the following definition:

\[
f [x\gets y] = \lambda\,z\,.\,
\left\{
\begin{array}{rcl}
  y    &,& x = z \\
  f\;x &,& x\neq z
\end{array}
\right.
\]

Empty mapping (undefined everywhere) is denoted $\Lambda$, the domain of a mapping $f$~--- $\primi{dom}{f}$, and we abbreviate

\[
  \Lambda[x_1\gets y_1][x_2\gets y_2]\dots[x_k\gets y_k]
\]

as

\[
  [x_1\gets y_1,\,x_2\gets y_2,\,\dots,\,x_k\gets y_k]
\]

For lists, we use notation $h\circ t$ for decomposition lists into heads and tails, $\epsilon$~--- for empty lists,
$|l|$~--- for list length and

\[
l[i:j]\qquad l[:n]\qquad l[n:]
\]

for taking sublists from $i$-th to $j$-th elements, $n$-last and $n$-first elements respectively; the numbering
of elements is left-to-right, starting from $0$. We also will enclose elements of lists which have a
composite structure in square brackets ``$[\dots]$'' to separate them properly.

\input{02.01.categories}
\FloatBarrier
\input{02.02.abstract_syntax}
\input{02.03.operational_semantics}
%\input{02.04.wellformedness}
