\subsection{Algebraic structures} We can represent algebraic structures like semi-groups, rings and $R$- module in our language using Sigma-types. In the following example we will represent semi-groups: \begin{itemize} \item We have a type prop for propositions, a type set for sets and prop, and a type type for set.
Specials = $\{$ prop, set, type$\}$. \item We have axioms stating that prop has type set and set has type type.
Axioms = $\{($ prop,set$),($ set,type$)\}$. \item We have a rule for implication, a rule for quantification over propositions, and a rule for constructing function-types on sets.
PiRules = $\{($ prop,prop,prop$),($ set,prop,prop$),($ set,set,set$)\}$. \item We have rules for constructing several kinds of pair-types.
SigmaRules = $\{($ prop,prop,prop$),($ set,prop,set$),($ set,set,set$),($ type,set,type$)\}$. \end{itemize} A semi-group consists of a set $A$, an equivalence relation eq on $A$, and an associative operator $*$. We can represent such an algebraic structure by a tuple consisting of $A$, $eq$, $*$, and proofs that $eq$ is reflexive, symmetric and transitive, and $*$ is associative. We will present the properties of eq as $\dots$, because we have treated them already in the previous example an integers.
%\table %m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=m\=\kill \noindent {\sf Definition}(
\hspace*{2mm}{\tt subject=} semi-group,
\hspace*{2mm}{\tt body=}{\sf SigmaType}(
\hspace*{4mm}{\tt local=}$A$,
\hspace*{4mm}{\tt fsttype=} set,
\hspace*{4mm}{\tt sndtype=}{\sf SigmaType}(
\hspace*{6mm}{\tt local=} eq,
\hspace*{6mm}{\tt fsttype=}{\sf PiType}(
\hspace*{8mm}{\tt domain=}$A$,
\hspace*{8mm}{\tt range=}{\sf PiType}(
\hspace*{10mm}{\tt domain=}$A$,
\hspace*{10mm}{\tt range=} prop))
\hspace*{6mm}{\tt sndtype=}{\sf SigmaType}(
\hspace*{8mm}{\tt local=}$*$,
\hspace*{8mm}{\tt fsttype=}{\sf PiType}(
\hspace*{10mm}{\tt domain=}$A$,
\hspace*{10mm}{\tt range=}{\sf PiType}(
\hspace*{12mm}{\tt domain=}$A$,
\hspace*{12mm}{\tt range=}$A$))
\hspace*{8mm}{\tt sndtype=}{\sf SigmaType}(
\hspace*{10mm}{\tt local=} eq\_refl,
\hspace*{10mm}{\tt fsttype=}$\dots$
\hspace*{10mm}{\tt sndtype=}{\sf SigmaType}(
\hspace*{12mm}{\tt local=} eq\_sym,
\hspace*{12mm}{\tt fsttype=}$\dots$
\hspace*{12mm}{\tt sndtype=}{\sf SigmaType}(
\hspace*{14mm}{\tt local=} eq\_trans,
\hspace*{14mm}{\tt fsttype=}$\dots$
\hspace*{14mm}{\tt sndtype=}{\sf PiType}(
\hspace*{16mm}{\tt local=}$x$,
\hspace*{16mm}{\tt domain=}$A$,
\hspace*{16mm}{\tt range=}{\sf PiType}(
\hspace*{18mm}{\tt local=}$y$,
\hspace*{18mm}{\tt domain=}$A$,
\hspace*{18mm}{\tt range=}{\sf PiType}(
\hspace*{20mm}{\tt local=}$z$,
\hspace*{20mm}{\tt domain=}$A$,
\hspace*{20mm}{\tt range=}{\sf Application}(
\hspace*{22mm}{\tt function=}{\sf Application}(
\hspace*{24mm}{\tt function=} eq,
\hspace*{24mm}{\tt argument=}{\sf Application}(
\hspace*{26mm}{\tt function=}{\sf Application}(
\hspace*{28mm}{\tt function=}$*$,
\hspace*{28mm}{\tt argument=}$x$)
\hspace*{26mm}{\tt argument=}{\sf Application}(
\hspace*{28mm}{\tt function=}{\sf Application}(
\hspace*{30mm}{\tt function=}$*$,
\hspace*{30mm}{\tt argument=}$y$)
\hspace*{28mm}{\tt argument=}$z$))
\hspace*{22mm}{\tt argument=}{\sf Application}(
\hspace*{24mm}{\tt function=}{\sf Application}(
\hspace*{26mm}{\tt function=}$*$,
\hspace*{26mm}{\tt argument=}{\sf Application}(
\hspace*{28mm}{\tt function=}{\sf Application}(
\hspace*{30mm}{\tt function=}$*$,
\hspace*{30mm}{\tt argument=}$x$),
\hspace*{28mm}{\tt argument=}$y$)),
\hspace*{24mm}{\tt argument=}$z$)))))))))))),
\hspace*{2mm}{\tt type=} type) %<\table>