%!TEX root = report.tex
%
\chapter{Types}
\label{chap:types}
The grammar of Diderot types is as follows:
\begin{Grammar}
\TypeRULES{}
\end{Grammar}%
\section{Value types}
Diderot supports four types of concrete values: booleans, integers, strings, and tensors.
The grammar of these types is
\begin{Grammar}
\ValueTypeRULES{}
\DimensionsRULES{}
\end{Grammar}%
The tensor type \mbox{\kw{tensor}\kw{[}$d_1,\ldots{},d_n$\kw{]}} is the of type order-$n$ tensors
with shape $d_1,\ldots{},d_n$.
Tensors include scalars (order-0) and vectors (order-1).
Because these types are frequently used, Diderot supports the following predefined type definitions:
\begin{center}
\begin{tabular}{r@{$\quad\equiv\quad$}l}
\kw{real} & \texttt{\kw{tensor}\kw{[}\kw{]}} \\
\kw{vec2} & \texttt{\kw{tensor}\kw{[}2\kw{]}} \\
\kw{vec3} & \texttt{\kw{tensor}\kw{[}3\kw{]}} \\
\kw{vec4} & \texttt{\kw{tensor}\kw{[}4\kw{]}}
\end{tabular}
\end{center}%
\section{Images}
Images are rectangular arrays of tensor data that are used to represent the data sets
that Diderot programs are analysing, as well as other data.
The syntax of an image type is
\begin{center}
\kw{image}\kw{(} $n$ \kw{)} \kw{[} $d_1,\ldots{},d_n$ \kw{]}
\end{center}%
where $n$ is the dimension of the field (typically 2 or 3) and $d_1,\ldots{},d_n$ is the
shape of the tensor data (\ie{}, the elements of the image are tensors
of type \kw{tensor[}$d_1,\ldots{},d_n$\kw{]}).
\section{Fields}
Fields are functions from some $n$-dimensional vector space to some tensor type.
The syntax of a field type is
\begin{center}
\kw{field}\kw{\#} $k$ \kw{(} $n$ \kw{)} \kw{[} $d_1,\ldots{},d_n$ \kw{]}
\end{center}%
where $k \geq 0$ is the number of levels of differentiation supported by the field,
$n$ is the dimension of the field (typically 2 or 3), and $d_1,\ldots{},d_n$ is the shape of the field.
Probing the field will produce a tensor of type \kw{tensor[}$d_1,\ldots{},d_n$\kw{]}.
\section{Kernels}
Kernels are abstract types that represent the \emph{convolution kernels} used
to reconstruct continuous fields from image data.
The syntax of a kernel type is \mbox{\kw{kernel}\kw{\#}$k$}, where
$k \geq 0$ gives the number of levels of differentiation supported by the
kernel.