\documentclass{article}

\usepackage[dutch]{babel}

\author{Camil Staps}
\title{Semantiek \& Correctheid\\\Large{Leertaak 1}}

\usepackage{senc}
\usepackage{multicol}

\begin{document}

\maketitle

\begin{multicols}{2}

\section*{Opdracht 1.8}
\begin{alignat*}{3}
    \B{\lnot(\x=1)}\s &= \tt         && \text{want}\\
    \B{\x=1}\s        &= \ff         && \text{want}\\
    \A{\x}\s          &\neq \A{1}\s  && \text{want}\\
    \s\x              &\neq \N{1}    && \text{want}\\
    3                 &\neq 1.
\end{alignat*}

\section*{Conditionele And en Or}
\begin{align*}
    \B{b_1 \AND b_2}s &= \begin{cases}
            \ff & \text{als $\B{b_1}s=\ff$}\\
            \ff & \text{als $\B{b_2}s=\ff$}\\
            \tt & \text{anders}\\
        \end{cases}\\
    \B{b_1 \OR b_2}s &= \begin{cases}
            \tt & \text{als $\B{b_1}s=\tt$}\\
            \tt & \text{als $\B{b_2}s=\tt$}\\
            \ff & \text{anders}\\
        \end{cases}
\end{align*}

De conditionele And verschilt van de gewone And: de rechteroperator wordt alleen ge\"evalueerd als de linkeroperator tot $\tt$ evalueert. De twee zijn equivalent wat betreft de uitkomst (niet wat betreft eventuele bijwerkingen).

\section*{And en Or in Java}
\texttt{result1} zal \texttt{true} zijn. Eerst wordt \texttt{f()} ge\"evalueerd. Dit geeft \texttt{false}. Hierom wordt \texttt{!f()} ook ge\"evalueerd. Dit geeft \texttt{true}. De waarde van de Or is dan ook \texttt{true}.

\texttt{result2} zal \texttt{false} zijn. Aan het begin is \texttt{b} \texttt{true}. Dan wordt \texttt{!f()} ge\"evalueerd, tot \texttt{false}. Hierom wordt de rechterkant van de And niet meer ge\"evalueerd en wordt \texttt{false} teruggegeven.

Er verandert niets aan het uiteindelijke resultaat als we een gewone And en Or gebruiken, omdat deze equivalent zijn met de conditionele And en Or. Wel zal de laatste \texttt{f()} nog worden ge\"evalueerd, waardoor \texttt{b} aan het eind \texttt{true} zal zijn in plaats van \texttt{false}.

\end{multicols}

\end{document}

