% vim:set spelllang=nl:
\section{Smurf in structurele operationele semantiek}
\label{sec:sos}
We willen ook laten zien hoe de definities van Smurf eruit zien als
je de structurele operationele semantiek gebruikt. In principe maakt het voor
de analyse van Smurf niet uit of je natuurlijke semantiek gebruikt of
structurele operationele semantiek. Wij hadden een voorkeur om natuurlijke semantiek te gebruiken omdat we
hier meer bekend mee zijn. Echter willen we ook nog graag laten zien hoe het
eruit zou zien als je structurele operationele semantiek zou gebruiken.

Bij het definiëren van de structurele operationele semantiek van Smurf zullen we de
verzameling van transities als een relatie $\Rightarrow$ tussen
$\Pgm\times\Input\times\Output\times\State$ en $\Gamma$ beschouwen. Waarbij $\Gamma$ óf  $\Pgm\times\Input\times\Output\times\State$ óf $\Input\times\Output\times\State$ is. 
Dit schrijven we als
$$\sostransgamma{\stm:\pgm}{\ip}{\op}{\st}{\gamma}	\qquad \text{met\enspace
	\parbox{36mm}{ $\gamma = (\pgm',\ip',\op',\st')$ of \\  $\gamma = (\ip', \op',\st' )$}}$$

De reden dat we hier spreken over $\pgm'$ is omdat de exec regel het programma dat je gaat uitvoeren verandert. In de meeste gevallen zal $\pgm$ = $\pgm'$ gelden maar dat hoeft dus niet. 
\medskip

 Je kunt de structurele operationele semantiek zoals bij de natuurlijke semantiek definiëren aan de hand van de  $\lambda$-regel maar om juist het verschil aan te geven met als je gebruik maakt van compositieregels, hebben wij ervoor gekozen om de structurele operationele semantiek te definiëren gebruik makende van compositieregels. 

De compositieregel is dan als volgt:

$$
\begin{prooftree}
	\sostranseind
		{\stm}{\ip}{\op}{(\stk, \str)}
		{\ip'}{\op'}{(\stk', \str')}
	\justifies
	\sostrans
		{\stm:\pgm}{\ip}{\op}{(\stk,\str)}
		{\pgm}{\ip'}{\op'}{(\stk',\str')}
	\using{\rcompeensos}
	\qquad
\end{prooftree}
$$

\bigskip

De regel voor $\StmExec$ zou in de structurele operationele semantiek als volgt zijn: 
$$
\begin{prooftree}
\axjustifies
	\sostrans
		{\StmExec:\pgm}{\ip}{\op}{(\stk,\str)}
		{\pgm'}{\ip'}{\op'}{(\stk',\str')}
	\using{\rexecsos}
	\qquad
		\text{met $\pop{\stk} = ( \pgm', \stk'')$.}
\end{prooftree}
$$

\bigskip
De regel voor $\StmTail$ zou in de structurele operationele semantiek als volgt
zijn:

$$
\begin{prooftree}
	\axjustifies
	\sostranseind
		{\StmTail}{\ip}{\op}{(\stk,\str)}
		{\ip}{\op}{(\push{s}{\stk'}, \str)}
	\using{\rtailsos}
	\qquad
	\text{met $\pop{\stk} = (c~s,\stk')$.}
\end{prooftree}
$$

De andere regels zoals head en exec zullen we hier niet verder uitwerken omdat deze op een soortgelijke wijzen worden gemaakt. 