\usepackage{float}
\usepackage{color}
\usepackage{xspace_spezial}
%\usepackage{amsmath}
%\usepackage{amssymb}
\usepackage{alltt}
\usepackage{fancybox}
\usepackage{stmaryrd}
\usepackage{verbatim}
\usepackage{epsfig}
%\usepackage{multicol}
\usepackage{longtable}
\newlength{\textwid}
\setlength{\textwid}{\textwidth}
\addtolength{\textwid}{-4ex}
\newlength{\textfighei}
\setlength{\textfighei}{\textheight}
\addtolength{\textfighei}{-10ex}
\DeclareSymbolFont{blackboard}{OT1}{bbm}{m}{sl}
\DeclareMathSymbol{\IR}{0}{blackboard}{"52}
\DeclareMathSymbol{\IN}{0}{blackboard}{"4E}
\DeclareMathSymbol{\IF}{0}{blackboard}{"46}
\DeclareMathSymbol{\IP}{0}{blackboard}{"50}
\DeclareMathSymbol{\IK}{0}{blackboard}{"4D}
\DeclareMathSymbol{\IZ}{0}{blackboard}{"5A}
\DeclareMathSymbol{\IQ}{0}{blackboard}{"51}
\DeclareMathSymbol{\IC}{0}{blackboard}{"43}
\parindent 0mm
\renewcommand{\unlhd}{<}
%\renewcommand{\lhd}{<\!\!|}
%\renewcommand{\rhd}{|\!\!>}
%\definecolor{blue}{rgb}{0,0,1}
%\definecolor{red}{rgb}{1,0,0}
%\definecolor{green}{rgb}{0,1,0.3}
%\definecolor{bluered}{rgb}{1,0,1}
%\definecolor{bluegreen}{rgb}{1,0.3,0}
%\newcommand{\black}[1]{\textcolor{black}{#1}}
%\newcommand{\red}[1]{\textcolor{red}{#1}}
%\newcommand{\blue}[1]{\textcolor{blue}{#1}}
%\newcommand{\green}[1]{\textcolor{green}{#1}}
%\newcommand{\bluered}[1]{\textcolor{bluered}{#1}}
%\newcommand{\bluegreen}[1]{\textcolor{bluegreen}{#1}}
\reversemarginpar
%\newcommand{\commentary}[1]{\marginpar[\tiny #1]{\tiny #1}}
%\newcommand{\commentaryforKlaeren}[1]{\marginpar[\tiny #1]{\tiny #1}}
\newcommand{\commentary}[1]{}
\newcommand{\commentaryforKlaeren}[1]{}
%\newcommand{\commentaryN}[1]{\marginpar[\tiny #1]{\tiny #1}}
\newcommand{\commentaryN}[1]{}
\newcommand{\subsec}[1]{\textbf{\medskip\\\large #1\medskip}}
%
% figure - Einstellungen
%
\def\textfraction{0}
\def\topfraction{1}
\def\bottomfraction{1}
\def\floatpagefraction{0}
\renewcommand{\floatpagefraction}{0.9}
%\def\dbltopfraction{1}
%\def\dblfloatpagefraction{1.0}
\newcommand{\indexentry}[2]{\item[] #1 \dotfill #2\qquad\qquad\vspace{-0.8em}}
\newcommand{\sub}{\textrm{\,$\sqsubseteq$\,}\xspace}
\newcommand{\nsub}{\text{\,$\not\sqsubseteq$\,}\xspace}
\newcommand{\ecap}{\mbox{$\,\sqcap\,$}}
\newcommand{\ecup}{\mbox{$\,\sqcup\,$}}
\newcommand{\pre}{\mbox{$\,\preceq\,$}}
\newcommand{\botam}{{\{\, \bot,\ \amalg \,\}}\xspace}

%
% Substitutions
%
\newcommand{\subst}{\textrm{$\expbf{subst}{\normaltset}$}}

%
% Signaturen
%
\def\einf#1#2{\mbox{$(#1,~#2)$}\xspace}
\newcommand{\sig}{\einf{\normalbtermset}{\Theta}}
\def\typesig{\einf{\simpletype}{TC}}
\newcommand{\einsig}{\einf{\normaltermset}{F}\xspace}
\newcommand{\msig}{\einsig}
\newcommand{\mssig}{\einf{\equivtermset}{F_{ms}}\xspace}
\newcommand{\ossig}{\einf{\normaltset, \sub}{F_{os}}\xspace}
\def\einfm#1#2{\langle #1,\ #2 \rangle}
\def\pos#1#2{\einf{#1,\ \sqsubseteq}{#2}}
\def\posm#1#2{\pos{#1}{#2}}
\def\posSO#1{\pos{#1}{F}}
\def\posSIG#1{\pos{S}{#1}}
\newcommand{\posig}{\pos{S}{\Sigma}}
\newcommand{\overposig}{\pos{\overline{S}}{\overline{\Sigma}}}
\def\fsf#1#2#3{\mbox{$#1^{(#2,#3)}$}\xspace}
\def\Sigmaa#1#2{\fsf{F}{#1}{#2}\xspace}
\newcommand{\Sigmaws}{\Sigmaa{w}{s}}
\newcommand{\Sigmawt}{\Sigmaa{w}{\theta}}
\def\mathrmtt#1{\mbox{\rm \texttt{#1}}}
\def\set#1{\{\,#1 \,\}}
\newcommand{\termset}[3]{\textrm{$\exp{#1_{#2}}{#3}$}\xspace}
\newcommand{\normaltset}{\termset{T}{\Theta}{TV}}
\newcommand{\normaltermset}{\termset{T}{\Theta}{TV}}
\newcommand{\simpletype}{\textrm{$\expsf{SType$_{\mathit{TS}}$}{BTV}$}\xspace}
\newcommand{\QMextends}[1]{\textrm{\tt ?\,extends}\,#1}
\newcommand{\QMextendsabbr}[1]{\textrm{\tt ?\,ext.}\,#1}
\newcommand{\QMsuper}[1]{\textrm{\tt ?\,super}\,#1}
\newcommand{\alltype}{\textrm{$\expsf{Type$_{\mathit{TS}}$}{BTV}$}\xspace}
\newcommand{\lambdatype}[2]{\textrm{$\#\, #1 \, (#2)$}}
\newcommand{\funtype}[3]{\textrm{\exptype{{\texttt{Fun}}\textit{#1}}{$#2 , #3$}}}
\newcommand{\funtypett}[3]{\textrm{\exptype{{\texttt{Fun}}\texttt{#1}}{$\mathtt{#2} , \mathtt{#3}$}}}
\newcommand{\functiontype}[2]{\textrm{\exptype{{{\texttt{Function}}}}{$#1,#2$}}}
\newcommand{\functiontypett}[2]{\textrm{\exptype{{\texttt{Function}}}{$\mathtt{#1} , \mathtt{#2}$}}}
\newcommand{\funtypestar}[3]{\textrm{\exptype{\texttt{Fun#1}\$\$}{$#2$,$ #3$}}}
\newcommand{\funtypestarsmall}[3]{\textrm{\exptype{\small\texttt{Fun#1}\$\$}{$#2, #3$}}}
\newcommand{\funtypestartt}[3]{\textrm{\exptype{{\texttt{Fun}}\texttt{#1\$\$}}{$\mathtt{#2} $,\linebreak[0]$\mathtt{#3}$}}}
%\newcommand{\funtypestartt}[3]{\textrm{\exptype{{\rm \texttt{Fun}}\texttt{#1}$*$}{$\mathtt{#2} , \mathtt{#3}$}}}
\newcommand{\funtypettsmall}[3]{\exptype{\smallmathtt{Fun{#1}}}{\smallmathtt{#2} ,\smallmathtt{#3}}}
\newcommand{\funtypestarttsmall}[3]{\exptype{\smallmathtt{Fun{#1}*}}{\mbox{\smallmathtt{#2},}\smallmathtt{#3}}}
\newcommand{\lambdatypett}[2]{\lambdatype{\mathtt{#1}}{\mathtt{#2}}}
\newcommand{\extsimpletype}{\textrm{$\expsf{ExtSType$_{\mathit{TS}}$}{BTV}$}\xspace}
\newcommand{\normalbtermset}{\termset{T}{TC}{BTV}}
\newcommand{\equivtermset}{\textrm{$\exp{T_{\Theta_{\sim}}}{TV}$}\xspace}
\newcommand{\equiva}[1]{[#1]_{\sim}}
\newcommand{\popoSIG}[1]{\einf{\normaltset,~\sqsubseteq}{#1}}
\newcommand{\poposig}{\popoSIG{F}}
%\newcommand{\poss}{polymorphically order-sorted signature\xspace}
%\newcommand{\posa}{polymorphically order-sorted algebra\xspace}
\newcommand{\polyosalg}{\textrm{\rm \textbf{PolyOSAlg}$_{\SigO}$}}
\newcommand{\polyalg}{\textrm{\rm \textbf{PolyAlg}$_{\SigM}$}}
\newcommand{\SigO}{\textrm{$\Sigma_{\textit{os}}$}\xspace}
\newcommand{\FuO}{\textrm{$F$}\xspace}
\newcommand{\SigM}{\textrm{$\Sigma_{\textit{ms}}$}\xspace}
\newcommand{\FuM}{\textrm{$F$}\xspace}
\newcommand{\Sig}{\textrm{$\Sigma$}\xspace}
\newcommand{\SigE}{\textrm{$\Sigma_{\textit{ext}}$}\xspace}
\newcommand{\objprogram}{\textrm{$<\Sig, \, E>$}\xspace}

%
% Algebren
%
\let\oldsqsubseteq=\sqsubseteq
\renewcommand{\sqsubseteq}{\leq}
\def\alg#1#2{\textrm{{\rm (}$#1;#2${\rm )}}\xspace}
\def\algm#1#2{(#1;#2)}
\def\algME#1{\alg{#1}{\alpha}}
\def\algABB#1{\alg{A}{#1}}
\def\algebra{\alg{A}{\alpha}}
\def\termalg{\mbox{$\algm{T_{\text{\rm posig}}}{\iota}$}}
\def\termalgm#1{\algm{T_{\text{#1}}}{\iota_{\text{#1}}}}
\def\OStermsetvar#1{\textrm{$T_{\SigO}#1$}\xspace}
\def\OStermset{\OStermsetvar{(V)}}
\def\OStset{\OStermsetvar{}\xspace}
\def\OStermsettypevar#1#2{\textrm{$T^{#1}_{\SigO}#2$}\xspace}
\def\OStermsettype#1{\OStermsettypevar{#1}{(V)}}
\def\ops{\exp{Ops}{A}}
\def\exp#1#2{#1(\,#2\,)\xspace}
%\def\exptt#1#2{\exp{\text{\tt #1}}{\text{\tt #2}}}
%\def\exptt#1#2{\exp{\texttt{#1}}{\texttt{#2}}}
\def\exptt#1#2{\exp{\mbox{$\mathtt{#1}$}}{\mbox{$\mathtt{#2}$}}}
\def\expsyn#1#2{\exp{\syn{#1}}{\syn{#2}}}
\def\expbf#1#2{\exp{\textbf{#1}}{#2}}
\def\expsf#1#2{\exp{\textsf{#1}}{#2}}
\def\exptype#1#2{#1\texttt{<}#2\texttt{>}\xspace}
\def\exptypett#1#2{\texttt{#1<#2>}\xspace}
%\def\exptypett#1#2{\mathtt{#1}\mathrm{{\tt <}}\mathtt{#2}\mathrm{{\tt >}}\xspace}
\def\smalltt#1{\texttt{\small #1}}
\def\smallmathtt#1{\textrm{\small $\tt #1$}}
\def\term{\textrm{$\exp{f}{t_1, \ \ldots \ ,t_n}$}\xspace}
\def\hverbandm#1#2{\textrm{$(#1,~#2)$}}
\def\partord#1#2{\hverbandm{#1}{#2}\xspace}
\def\eval#1{eval_{\left<#1\right>}\xspace}
\def\evalA{$\eval{\algm{A}{\alpha}}$\xspace}
\def\la#1#2{\mbox{$\lambda#1.#2$}\xspace}
\def\set#1{\{\, #1 \,\}}

\newcommand{\inletters}[1]{
  \ifx\the
  first
  \fi}

%\newcommand{\olsub}{\textrm{$\, \ol{\sqsubseteq} \,$}\xspace}
\newcommand{\olsub}{\textrm{$\, \leq^\ast \,$}\xspace}
\newcommand{\lessdotQM}{\textrm{$\,\lessdot_?\,$}}
\newcommand{\olsubneq}{\textrm{$\, \lneq^\ast \,$}\xspace}
\newcommand{\olsubprime}{\textrm{$\, \ol{\sqsubseteq}' \,$}\xspace}
\newcommand{\nolsub}{\textrm{$\, \not\sqsubseteq^* \,$}\xspace}
\newcommand{\hverband}{\partord{S}{\sqsubseteq}\xspace}
\newcommand{\qverband}{\partord{\exp{\ol{T}_{\Theta}}{V}}{\olsub}}
\newcommand{\cloqverband}{\partord{\exp{T_{\Theta}}{V}}{\olsub}}
\newcommand{\hord}{\mbox{$(S,~\sqsubseteq)$}\xspace}
\def\einschr#1{|_{#1}}
\def\uppereinschr#1{|^{#1}}
\def\lowereinschr#1{_{#1}\!|}
%\newcommand{\lsem}{[\hspace*{-0.3ex}[}
%\newcommand{\rsem}{]\hspace*{-0.3ex}]}
\newcommand{\lsem}{\llbracket\hspace{.5ex}}
\newcommand{\rsem}{\hspace{.5ex}\rrbracket}
\newcommand{\lsemm}{\lsem}
\newcommand{\rsemm}{\rsem}
\newcommand{\semantic}[1]{\lsem #1 \rsem\xspace}
\newcommand{\ol}[1]{\overline{#1}}
\newcommand{\ul}[1]{\underline{#1}}
\newcommand{\dps}{\displaystyle}
\newcommand{\sema}[3]{{\cal #1}_{#2}\semantic{#3}}
\newcommand{\sem}[2]{\sema{#1}{}{#2}\xspace}

% TI for FGJ wildcards
\newcommand\rulename[1]{\textup{\textsc{(#1)}}}
\newcommand{\generalizeRule}{General}
\newcommand{\generics}[1]{\ensuremath{\mathtt{\texttt{<} {#1} \texttt{>} }}}
\newcommand{\expr}[1]{\texttt{#1}}
\newcommand{\lessdotCC}{\ensuremath{\lessdot^{\texttt{c}}}}

\newcommand{\wtv}[1]{\ensuremath{\tv{#1}_?}}
\newcommand{\ntv}[1]{\ensuremath{\underline{\tv{#1}}}}

\newcommand{\rwildcard}[1]{\ensuremath{\mathtt{#1}}}
\newcommand{\wildcardEnv}{\ensuremath{\mathbb{W}}}
\newcommand{\wildcard}[3]{\ensuremath{\mathtt{#1 : [#3 .. #2]}}}
\newcommand{\wcNtype}[2]{\exists #1 .\ntype{#2}}
\newcommand{\wctype}[3]{\exists #1 .\exptype{#2}{#3}}
\newcommand{\wtype}[1]{\mathit{#1}}
\newcommand{\ntype}[1]{\mathtt{#1}}

\newcommand{\highlight}[1]{\begingroup\fboxsep=0pt\colorbox{yellow}{$\displaystyle #1$}\endgroup}

%
% Programming languages
%

\newcommand{\haskell}{\textsf{Haskell}\xspace}
\newcommand{\gofer}{\textsf{Gofer}\xspace}
\newcommand{\objp}{\mbox{\textsf{OBJ--P}}\xspace}
%\newcommand{\java}{\mbox{\textsf{G--JAVA}}\xspace}
\newcommand{\javafive}{\mbox{\textsf{Java 5}}\xspace}
\newcommand{\java}{\mbox{\textsf{Java}}\xspace}
\newcommand{\javaseven}{\mbox{\textsf{Java 7}}\xspace}
\newcommand{\javaeight}{\mbox{\textsf{Java 8}}\xspace}
\newcommand{\javaten}{\mbox{\textsf{Java 10}}\xspace}
\newcommand{\javatx}{\mbox{\textsf{Java-TX}}\xspace}
\newcommand{\javafx}{\mbox{\textsf{JavaFX}}\xspace}
\newcommand{\javalam}{\mbox{\textsf{Java}$_\lambda$}\xspace}
\newcommand{\javabyte}{\mbox{\textsf{Java Byte Code}}\xspace}
\newcommand{\jvm}{\mbox{\textsf{JVM}}\xspace}
%\newcommand{\oldjava}{\mbox{\textsf{JAVA}}\xspace}
\newcommand{\oldjava}{\mbox{\textsf{Java}}\xspace}
\newcommand{\pizza}{\mbox{\textsf{PIZZA}}\xspace}
\newcommand{\gj}{\mbox{\textsf{GJ}}\xspace}
\newcommand{\sml}{\mbox{\textsf{SML}}\xspace}
\newcommand{\ocaml}{\textsf{OCAML}}
\newcommand{\obj}{\mbox{\textsf{OBJ--3}}\xspace}
\newcommand{\objtwo}{\mbox{\textsf{OBJ--2}}\xspace}
\newcommand{\scala}{\mbox{\textsf{Scala}}\xspace}

\def\pot#1{{\cal P}(\, #1 \,)\xspace}
\def\partf{\overset{\text{\tiny part}}{\longrightarrow}\xspace}
% 
% Deduktionssystem
%
\newcommand{\byrule}[1]{\raisebox{1.5ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\byruleok}[1]{\raisebox{1.5ex}[0ex][0ex]{{{\rm \small #1}}}}
\newcommand{\byrulewb}[1]{\raisebox{2.5ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\byruleokwb}[1]{\raisebox{2.5ex}[0ex][0ex]{{{\rm \small #1}}}}
\newcommand{\byrulesli}[1]{\raisebox{3.0ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\inter}[1]{\bigwedge \hspace{-.55em} \bigwedge_{#1}}

%
% ARRAY WITH ARGUMENTS
%
\newcommand{\sarray}[2]{\begin{array}[t]{#1} #2 \end{array}}
\newcommand{\sarrayt}[2]{\begin{array}[t]{#1} #2 \end{array}}
\newcommand{\sarrayb}[2]{\begin{array}[b]{#1} #2 \end{array}}
\newcommand{\sarrayc}[2]{\begin{array}[c]{#1} #2 \end{array}}
\newcommand{\sarrayo}[2]{\begin{array}{#1} #2 \end{array}}

%
% INFERENCE RULES
%
\newcommand{\byrulenew}[1]{\raisebox{2.1ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\postcond}[1]{\raisebox{2.1ex}[0ex][0ex]{#1}}
\newcommand{\lef}[1]{\multicolumn{1}{@{}l}{#1}}
\newcommand{\ri}[1]{\multicolumn{1}{r@{}}{#1}}
\newcommand{\ce}[1]{\multicolumn{1}{c}{#1}}
\newcommand{\axiom}[2]{\textrm{[}\textbf{\small #1}\textrm{]} & \lef{#2}}
\newcommand{\irule}[4]{&\multicolumn{1}{@{}l@{}}{\bf [#1]}\\ & \sarray{c}{#2}\vspace{1ex}\\\cline{2-2}
  \vspace{-2ex}\\ %\byrulenew{#1} 
  & \sarray{c}{#3} & \postcond{$#4$}
}
\newenvironment{irules}{$\begin{array}{@{}l@{}c@{}l@{}}}{\end{array}$}

%
% Kategorien
%
\newcommand{\funs}[1]{\mbox{$F^S_{ERR}$(\, #1 \,)}\xspace}
\newcommand{\funa}[1]{\mbox{$F^A_{ERR}$(\, #1 \,)}\xspace}
\newcommand{\funh}[1]{\mbox{$F^H_{ERR}(\, #1 \,)$}\xspace}

%
% Typherleitungen
%
%\let\oldrhd=\rhd
%\newcommand{\rder}{\hspace*{0.5ex} \rhd_{\textrm{\tiny $\Sig$}} \hspace{0.5ex}}
\newcommand{\rder}{\hspace*{0.5ex} \rhd \hspace{0.5ex}}
%\newcommand{\lder}{\hspace*{0.5ex} \lhd_{\textrm{\tiny $\Sig$}} \hspace*{0.5ex}}
\newcommand{\lder}{\hspace*{0.5ex} \lhd \hspace*{0.5ex}}
\newcommand{\rderStmt}{\hspace*{0.5ex} \rhd_{Stmt} \hspace*{0.5ex}}
\newcommand{\rderExpr}{\hspace*{0.5ex} \rhd_{Expr} \hspace*{0.5ex}}
\newcommand{\rderIdent}{\hspace*{0.5ex} \rhd_{Id} \hspace*{0.5ex}}

\let\oldblacktriangleright=\blacktriangleright
%\newcommand{\fder}{\hspace*{1ex} \textrm{$\blacktriangleright_{\textsl{\tiny \hspace{-1ex}\Sig}}$}}
\newcommand{\fder}{\hspace*{1ex} \textrm{$\blacktriangleright$}}

\newcommand{\newtheo}[3]{\newtheorem{#1}[defhalbordnung]{#2}
                         \begin{#1} {\rm #3} \label{#1} \end{#1}}
\newcommand{\der}[2]{\mbox{$#1 \rhd\ #2$}\xspace}
\newcommand{\derl}[2]{#1 \lhd_{\textrm{\tiny $\Sig$}} #2\xspace}
\newcommand{\derr}[2]{#1 \rhd_{\textrm{\tiny \hspace{-1ex}$\Sig$}} #2\xspace}
\newcommand{\derf}[3]{( \, #1, \, #2 \, ) \fder #3\xspace}

\newcommand{\deri}[1]{\der{A}{K}{#1}\xspace}
\newcommand{\derif}[1]{\derf{A}{K}{D}{#1}\xspace}
\newcommand{\arity}[3]{\textrm{$\alpha^{(#1,#2)}_{#3}$}\xspace}
\newcommand{\coarity}[2]{\textrm{$\beta^{(#1,#2)}$}\xspace}
\newcommand{\sodaprg}{\textrm{$(\,\textsl{csig},\ D\,)$\xspace}}

%
% Typen
%
%\newcommand{\typ}[3]{\textrm{$ #1 \times \ldots \times #2 \rightarrow #3$}\xspace}
\newcommand{\typ}[3]{\textrm{$( #1 \ldo #2) \rightarrow #3$}\xspace}
\newcommand{\syn}[1]{{\rm \texttt{\small #1}}}
\newcommand{\sigmatyp}{\typ{\sigma_1}{\sigma_n}{\sigma}\xspace}
\newcommand{\sigmadef}{\mbox{$\sigma_1 \times \ldots \times \sigma_n$}\xspace}
\newcommand{\tautyp}{\typ{\tau_1}{\tau_n}{\tau}\xspace}
\newcommand{\tautypsup}[1]{\typ{\tau^{#1}_1}{\tau^{#1}_n}{\tau^{#1}}\xspace}
\newcommand{\taudef}{\mbox{$\tau_1 \times \ldots \times \tau_n$}\xspace}
\newcommand{\thetatyp}{\typ{\theta_1}{\theta_n}{\theta_0}\xspace}
\newcommand{\typea}{\text{$\text{TYPE}_T(\,S,\ V\,)$}\xspace}
\newcommand{\ptype}{\expsf{Type}{\normaltset}\xspace}
\newcommand{\ptypea}{\text{$\text{TYPE}_T(\,\Theta,\ V\,)$}\xspace}
\newcommand{\types}{\text{$\text{TYPE}_s(\,S,\ \Gamma\,)$}\xspace}
\newcommand{\extends}[1]{{}_{?}#1}
\newcommand{\super}[1]{{}^{?}#1}

\newcommand{\epsbox}[2]{
  %\begin{center}
    \setlength{\fboxsep}{4mm}
    \fbox{\epsfxsize=#1 \epsfbox{#2}}
  %\end{center}
    }

\newcommand{\epsxybox}[3]{
  \begin{minipage}[t]{#1}
    \setlength{\fboxsep}{4mm}
    \fbox{\epsfysize=#2 \epsfbox{#3}}
  \end{minipage}}

\newenvironment{program}{\begin{alltt}\small}
               {\normalsize\end{alltt}\vspace*{-1em}}
\floatstyle{plain}
\newfloat{soda}{htp}{lop}
\floatname{soda}{SODA-Program}

%\sodaprog
% 1. width
% 2. figure
% 3. file
\newcommand{\sodaprog}[3]{
  \begin{figure}%[#2]
    %\begin{center}
      \begin{Sbox}
        \begin{minipage}{#1}
          \small
          \begin{alltt}
            \verbatiminput{#3.soda}
          \end{alltt}
          \normalsize
        \end{minipage}
      \end{Sbox}
      \setlength{\fboxsep}{2mm}
      \fbox{\TheSbox}
    %\end{center}
    \caption{SODA module \texttt{#3}}
    \label{fig:#3}
  \end{figure}
  }

%
% Theorem
%
\newcommand{\QED}{\rule{1.1ex}{1.1ex}}
%\newenvironment{proof}{\par \bigskip \noindent {\bf Proof:}
%          }{\mbox{ } \hfill \QED \par \smallskip}
%\newenvironment{remark}{\par \bigskip \noindent {\bf Remark}
%          }{\par \smallskip}
%\newtheorem{definition}{Definition}[chapter]
%\newtheorem{example}[definition]{Example}
%\newtheorem{theorem}[definition]{Theorem}
%\newtheorem{corollary}[definition]{Corollary}
%\newtheorem{lemma}[definition]{Lemma}
%\newtheorem{algorithm}[definition]{Algorithm}
%\newenvironment{abstract}{\small \begin{center} {\bf Abstract}\\[2ex]
  %\begin{minipage}{0.85\textwidth}}{\end{minipage} \end{center}}
\newenvironment{Zusammenfassung}{\small \begin{center} {\bf Zusammenfassung}\\[2ex]
  \begin{minipage}{0.85\textwidth}}{\end{minipage} \end{center}}
\newlength{\level}
\newlength{\wid}


%\newcommand{\thelb}{
\def\notunlhd{\mathrel{\unlhd\!\!\!\!\!\mid}}
\def\In#1#2{#1 \! \in \! #2}
\def\Leq#1#2#3{#1 \! \leqslant \! #2 \! \leqslant \! #3}
\def\Lequ#1#2#3{#1 \leqslant #2 \leqslant #3}
\newcommand{\ma}[1]{\text{``}#1\text{''}\xspace}
\newcommand{\ttm}[1]{\mbox{\tt #1}\xspace}
\newcommand{\ret}[2]{\ttm{r}^{\ttm{\footnotesize #1}}_{\ttm{\footnotesize #2}}\xspace}
\newcommand{\retm}[2]{\ttm{r}^{#1}_{#2}\xspace}
\newcommand{\re}[2]{\displaystyle r^{#1}_{#2}\xspace}
\newlength{\qwert}
%\newcommand{\htext}[1]{\settowidth{\qwert}{#1} \addtolength{\qwert}{-0.65ex} \hspace*{\qwert}}
\newcommand{\htext}[1]{\settowidth{\qwert}{#1} \hspace*{\qwert}}
\newcommand{\leng}[1]{\settowidth{\qwert}{#1} \qwert}
\newcommand{\ldo}{, \ldots , }
\newcommand{\tvar}[1]{\textit{$\mathtt{#1}$}\xspace}

%
% Algorithmus
%
\newcommand{\nll}{\newline\hspace*{\level}}
\newcommand{\nlevel}{\addtolength{\level}{0.4cm}}
\newcommand{\llevel}{\addtolength{\level}{-0.4cm}}
\newcommand{\ifc}[1]{\textbf{if} \nlevel #1 \llevel}
\newcommand{\elsifc}[1]{\textbf{elsif} \nlevel #1 \llevel}
\newcommand{\foreachc}[2]{\textbf{foreach} #1 \nlevel #2 \llevel}
\newcommand{\thenc}[1]{\textbf{then} \nlevel #1 \llevel}
\newcommand{\ifthenc}[2]{\textbf{if} #1 \textbf{then} \nlevel #2 \llevel}
\newcommand{\elsec}[1]{\textbf{else} \nlevel #1 \llevel}
\newcommand{\eifc}{\textbf{endif}\\}
\newcommand{\casec}[2]{\fbox{\textbf{case} #1}\ \nlevel \nlevel #2 \llevel \llevel}
\newcommand{\letc}[2]{\textbf{let} \nlevel \\ #1 = \nlevel #2 \llevel \llevel}
\newcommand{\letbf}[1]{\textbf{let} \nlevel \\ #1 \llevel}
\newcommand{\inc}[1]{\textbf{in} \nlevel #1 \llevel \nopagebreak\\ \textbf{end}}
\newcommand{\lam}[2]{\textbf{fn } #1 \textrm{$\, \Rightarrow \,$} #2}
\newcommand{\inputc}[1]{\nll \textbf{Input:} \nlevel #1 \llevel}
\newcommand{\outputc}[1]{\nll \textbf{Output:} \nlevel #1 \llevel}
%\newcommand{\letforeachc}[3]{\textbf{let-foreach} \nlevel #1:\\ \ul{#2} = \nlevel #3 \llevel \llevel}
\newcommand{\letforeachc}[3]{\textbf{let-foreach} \nlevel #1:\\ #2 = \nlevel #3 \llevel \llevel}
%\newcommand{\letuc}[2]{\textbf{let} \nlevel \\ \ul{#1} = \nlevel #2 \llevel \llevel}
\newcommand{\letuc}[2]{\textbf{let} \nlevel \\ #1 = \nlevel #2 \llevel \llevel}
%\newcommand{\letu}[2]{\nlevel\\ \ul{#1} = \nlevel #2 \llevel\llevel}
\newcommand{\letu}[2]{\nlevel\\ #1 = \nlevel #2 \llevel\llevel}
\newcommand{\letnc}[2]{\nlevel\\ #1 = \nlevel #2 \llevel\llevel}
\newcommand{\misc}[1]{\nlevel\\ #1 \llevel}
\newcommand{\least}{\textrm{$\top$}\xspace}
\newenvironment{algocommands}{
 \setlength{\level}{2mm}
 \renewcommand{\\}{\nll}
 \noindent
 }{\renewcommand{\\}{\newline}
 \vspace{1ex}
  }
\newenvironment{algo}{\begin{algorithm} \rm %\mbox{}\\
    \begin{algocommands}
 }{\end{algocommands}
 \end{algorithm}
  }

\newenvironment{boxedalgo}{
  \begin{Sbox}
    \begin{minipage}{\textwid}
      \begin{algo}
        }{\end{algo}
    \end{minipage}
  \end{Sbox}
  \fbox{\TheSbox}
  }

%\newcommand{\red}[1]{\textcolor{red}{#1}}
%\newcommand{\blue}[1]{\textcolor{blue}{#1}}
%\newcommand{\green}[1]{\textcolor{green}{#1}}
%\newcommand{\bluered}[1]{\textcolor{bluered}{#1}}
%\newcommand{\bluegreen}[1]{\textcolor{bluegreen}{#1}}
\newcommand{\tabularfield}[1]{
  \begin{tabular}{@{}l@{}}
    #1
  \end{tabular}
  }

\newenvironment{Liste}{\begin{list}{\textbf{--}}{\setlength{\parsep}{0pt
          plus0.0ex} \setlength{\itemsep}{0pt} \item[]}}{\end{list}}

\newenvironment{Listenullparsep}{\begin{list}{\textbf{--}}{
      %\setlength{\topsep}{-5ex}
      \setlength{\topsep}{0ex}
      %\setlength{\parsep}{0pt plus1ex}
      \setlength{\parsep}{0pt}
      \setlength{\labelwidth}{2ex}
      \setlength{\itemsep}{0pt}
      \setlength{\leftmargin}{\labelsep +\labelwidth}
    }}{\normalsize \end{list}}


%\landscapeonly
%\portraitonly
%\slidewidth9.7in
%\slideheight8.2in
%\slideframewidth0in
%\slideframesep0in
\newcounter{begriffnr}
\setcounter{begriffnr}{1}
\newcommand{\nextbegriff}[1]{\thebegriffnr. #1 \addtocounter{begriffnr}{1}}

\newcommand{\bflarge}[1]{\textbf{\large #1}}
\newcommand{\portraitslidey}[3]{
  \begin{slide*} 
    \section*{#1}
    \medskip
    \begin{center}
      \epsfysize#2
      \epsfbox{#3}
    \end{center}
  \end{slide*}}
\newcommand{\portraitslidex}[3]{
  \begin{slide*} 
    \section*{#1}
    \medskip
    \begin{center}
      \epsfxsize#2
      \epsfbox{#3}
    \end{center}
  \end{slide*}}
\newcommand{\landscapeslidex}[3]{
  \landscapeslide{#1}{
    \begin{center}
      \epsfxsize#2
      \epsfbox{#3}
    \end{center}
  }
}
\newcommand{\landscapeslidexoffset}[3]{
  \landscapeslide{#1}{
    \vspace*{-0.5cm}
    \begin{center}
    \hspace*{-2cm}
      \epsfxsize#2
      \epsfbox{#3}
    \end{center}
  }
}
\newcommand{\landscapeslidexlabel}[4]{
  \begin{slide} 
    \section*{#1}
    \medskip
    \begin{center}
      \epsfxsize#2
      \epsfbox{#3}
    \end{center} 
    #4
  \end{slide}}
\newcommand{\landscapeslidexcomment}[4]{
  \begin{slide} 
    \section*{#1}
    \medskip
    \begin{center}
      \epsfxsize#2
      \epsfbox{#3}
    \end{center}
    \comment{#4}
  \end{slide}}
\newcommand{\landscapeslidexsubsub}[3]{
  \begin{slide} 
    \subsubsection{#1}
    \medskip
    \begin{center}
      \epsfxsize#2
      \epsfbox{#3}
    \end{center}
  \end{slide}}

\newcommand{\landscapeslidextocsuboffset}[3]{
  \landscapeslidetocsub{#1}{
    \vspace*{-0.5cm}
    \begin{center}
    \hspace*{-2cm}
      \epsfxsize#2
      \epsfbox{#3}
    \end{center}
  }
}
\newcommand{\landscapeslidexoTnormal}[2]{
  \begin{frame} 
    \begin{center}
      \begin{minipage}[t]{#1}
      %\vspace*{-5truecm}
      %\vspace*{-2truecm}
      \epsfxsize#1
      %\hspace*{-5truecm}
      %\hspace*{-3truecm}
      \epsfbox{#2}
      \end{minipage}
    \end{center}
  \end{frame}}
\newcommand{\landscapeslidexoT}[2]{\landscapeslidexoTXY{0cm}{0cm}{#1}{#2}}
\newcommand{\landscapeslidexoTXY}[4]{
  \begin{frame} 
    \begin{center}
      \begin{minipage}[t]{\textwidth}
      \hspace*{#1}
      \vspace*{#2}
      \epsfxsize#3
      \epsfbox{#4}
      \end{minipage}
    \end{center}
  \end{frame}}
\newcommand{\landscapeslidexoTcomment}[3]{
  \begin{slide} 
    \begin{center}
      \begin{minipage}[t]{\slidewidth}
      %\vspace*{-5truecm}
      \vspace*{-2truecm}
      \epsfxsize#1
      %\hspace*{-5truecm}
      \hspace*{-3truecm}
      \epsfbox{#2}
      \end{minipage}
    \end{center}
    \comment{#3}
  \end{slide}}
\newcommand{\landscapeslidexoTlabel}[3]{
  \begin{slide} 
    \begin{center}
      \begin{minipage}[t]{\slidewidth}
      %\vspace*{-5truecm}
      \vspace*{-2truecm}
      \epsfxsize#1
      %\hspace*{-5truecm}
      \hspace*{-3truecm}
      \epsfbox{#2}
      \end{minipage}
    \end{center}
    #3
  \end{slide}}
\newcommand{\landscapeslideyoT}[2]{
  \begin{slide} 
    \begin{center}
      \begin{minipage}[t]{\slidewidth}
      %\vspace*{-5truecm}
      \vspace*{-3truecm}
      \epsfysize#1
      \hspace*{3truecm}
      \epsfbox{#2}
      \end{minipage}
    \end{center}
  \end{slide}}
\newcommand{\landscapeslidey}[3]{
  \begin{slide} 
    \section*{#1}
    \medskip
    \begin{center}
      \epsfysize#2
      \epsfbox{#3}
    \end{center}
  \end{slide}}

%\newcommand{\landscapeslide}[2]{
%  \begin{slide} 
%    \section*{#1}
%    \medskip
    
%      #2
%  \end{slide}}

\newcommand{\landscapeslide}[2]{
  \frame{
    \frametitle{#1}
    #2 
    }
}

\newcommand{\landscapeslidetocsub}[2]{
    \subsection{#1}
    \landscapeslide{#1}{#2}
}
\newcommand{\landscapeslidetocsubsub}[2]{
  \begin{slide} 
    \subsubsection{#1}
    \medskip
    
      #2
  \end{slide}}

\newcommand{\landscapeslidetoc}[3]{
    \section{#1}
  \landscapeslide{#2}{#3}
}
\newcommand{\landscapeslidetoctitle}[2]{
  \landscapeslidetoc{#1}{#1}{#2}
}
\newenvironment{landscapeslideenv}[1]{
  \begin{frame}
    \frametitle{#1}
    }
  {\end{frame}}

\def\landscapesl#1{
  \begin{slide} 
    \section*{#1}
    \medskip}

%1.Breite links
%2.Inhalt links
%3.Breite oben rechts
%4.Inhalt oben rechts
%5. Inhaly Folie
\newcommand{\landscapeslideObenBild}[5]{
  \begin{frame}
  \frametitle{#2}
    \begin{minipage}[b]{#1}
      #5
  \end{minipage}
  \hfill
  \parbox[b][\textheight-1cm]{#3}{
  %\begin{minipage}[b]{#3}
    \setlength{\epsfxsize}{#3}
    \epsfbox{#4}
  %\end{minipage}
    \vfill
    }
  %#5
\end{frame}}

\newcommand{\portraitslide}[2]{
  \begin{slide*} 
    \section*{#1}
    \medskip
      #2
  \end{slide*}}

\definecolor{black}{rgb}{0,0,0}
\definecolor{blue}{rgb}{0,0,1}
\definecolor{blueA}{rgb}{0.2,0,0.4}
\definecolor{blueB}{rgb}{0.2,0,0.6}
\definecolor{blueC}{rgb}{0.2,0,0.8}
\definecolor{blueD}{rgb}{0.2,0,1.0}
\definecolor{blueE}{rgb}{0,0,0.8}
\definecolor{red}{rgb}{1,0,0}
\definecolor{redA}{rgb}{0.6,0,0.2}
\definecolor{green}{rgb}{0,1,0.3}
\definecolor{greenA}{rgb}{0.2,0.6,0}
\definecolor{greenB}{rgb}{0.2,0.6,0.2}
\definecolor{greenC}{rgb}{0.2,0.6,0.4}
\definecolor{bluered}{rgb}{1,0,1}
\definecolor{blueredB}{rgb}{0.4,0,0.6}
\definecolor{blueredC}{rgb}{0.4,0,1}
\definecolor{blueredD}{rgb}{0.6,0,1}
\definecolor{bluegreen}{rgb}{0.8,0.5,0}
\definecolor{yellow}{rgb}{1,1,0}
\definecolor{yellowA}{rgb}{1,0.8,0}
\definecolor{yellowB}{rgb}{1,0.6,0}
\definecolor{yellowC}{rgb}{1,0.4,0}
\definecolor{gray}{rgb}{0.662,0.662,0.662}
\definecolor{grayA}{rgb}{0.9,0.9,0.9}
\newcommand{\black}[1]{\textcolor{black}{#1}}
\newcommand{\red}[1]{\textcolor{red}{#1}}
\newcommand{\DHBWred}[1]{\textcolor{DHBWrot}{#1}}
\newcommand{\redA}[1]{\textcolor{redA}{#1}}
\newcommand{\blue}[1]{\textcolor{blue}{#1}}
\newcommand{\blueA}[1]{\textcolor{blueA}{#1}}
\newcommand{\blueB}[1]{\textcolor{blueB}{#1}}
\newcommand{\blueC}[1]{\textcolor{blueC}{#1}}
\newcommand{\blueD}[1]{\textcolor{blueD}{#1}}
\newcommand{\blueE}[1]{\textcolor{blueE}{#1}}
\newcommand{\green}[1]{\textcolor{green}{#1}}
\newcommand{\bluered}[1]{\textcolor{bluered}{#1}}
\newcommand{\blueredB}[1]{\textcolor{blueredB}{#1}}
\newcommand{\blueredC}[1]{\textcolor{blueredC}{#1}}
\newcommand{\blueredD}[1]{\textcolor{blueredD}{#1}}
\newcommand{\bluegreen}[1]{\textcolor{bluegreen}{#1}}
\newcommand{\greenA}[1]{\textcolor{greenA}{#1}}
\newcommand{\greenB}[1]{\textcolor{greenB}{#1}}
\newcommand{\greenC}[1]{\textcolor{greenC}{#1}}
\newcommand{\yellow}[1]{\textcolor{yellow}{#1}}
\newcommand{\yellowA}[1]{\textcolor{yellowA}{#1}}
\newcommand{\yellowB}[1]{\textcolor{yellowB}{#1}}
\newcommand{\yellowC}[1]{\textcolor{yellowC}{#1}}
\newcommand{\gray}[1]{\textcolor{gray}{#1}}
\newcommand{\grayA}[1]{\textcolor{grayA}{#1}}
