\documentclass{bschlangaul-aufgabe}
\bLadePakete{mathe,tabelle,syntax}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe zum Grundwissen},
  Thematik = {Grundwissen},
  Referenz = SOSY.Testen.Formale-Verifikation.Grundwissen,
  RelativerPfad = Module/40_SOSY/05_Testen/10_Formale-Verifikation/Aufgabe_Grundwissen.tex,
  ZitatSchluessel = sosy:ab:8,
  ZitatBeschreibung = {Seite 1},
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Formale Verifikation, wp-Kalkül, Hoare-Kalkül, Partielle Korrektheit, Totale Korrektheit, Invariante, Terminierungsfunktion},
}

\begin{enumerate}

%%
% (a)
%%

\item Geben Sie zwei verschiedene Möglichkeiten der formalen
Verifikation\index{Formale Verifikation} an.
\footcite[Seite 1]{sosy:ab:8}

\begin{bAntwort}
\begin{description}
\item[1. Möglichkeit:]

formale Verifikation mittels \emph{vollständiger Induktion} (eignet sich
bei \emph{rekursiven} Programmen).

\item[2. Möglichkeit:]

formale Verifikation mittels \emph{wp-Kalkül}\index{wp-Kalkül} oder
\emph{Hoare-Kalkül}\index{Hoare-Kalkül} (eignet sich bei
\emph{iterativen} Programmen).
\end{description}
\end{bAntwort}

%%
% (b)
%%

\item Erläutern Sie den Unterschied von partieller\index{Partielle
Korrektheit} und totaler Korrektheit\index{Totale Korrektheit}.

\begin{bAntwort}
\begin{description}
\item[partielle Korrektheit:]

Das Programm verhält sich spezifikationsgemäß, \emph{falls} es
terminiert.

\item[totale Korrektheit:]

Das Programm verhält sich spezifikationsgemäß und es \emph{terminiert
immer}.
\end{description}
\end{bAntwort}

%%
% (c)
%%

\item Gegeben sei die Anweisungssequenz $A$. Sei $P$ die Vorbedingung
und $Q$ die Nachbedingung dieser Sequenz. Erläutern Sie, wie man die
(partielle) Korrektheit dieses Programmes nachweisen kann.

\begin{bAntwort}
\begin{tabular}{|>{\raggedright\arraybackslash}p{6cm}|l|l|}
Vorgehen & Horare-Kalkül & \text{wp}-Kalkül \\\hline

Wenn die Vorbedingung $P$ zutrifft, gilt nach der Ausführung der
Anweisungssequenz $A$ die Nachbedingung $Q$. &

$\{P\}A\{Q\}$ &

$P \Rightarrow \text{\text{wp}}(A,Q)$

\end{tabular}
\end{bAntwort}

%%
% (d)
%%

\item Gegeben sei nun folgendes Programm:

\begin{minted}{python}
A_1
while(b):
    A_2
A_3
\end{minted}

wobei $A_1$, $A_2$, $A_3$ Anweisungssequenzen sind. Sei $P$ die
Vorbedingung und $Q$ die Nachbedingung des Programms. Die
Schleifeninvariante\index{Invariante} der while-Schleife wird mit $I$
bezeichnet. Erläutern Sie, wie man die (partielle) Korrektheit dieses
Programmes nachweisen kann.

\begin{bAntwort}
\begin{tabular}{|>{\raggedright\arraybackslash}p{3.8cm}|l|l|}
Vorgehen & Horare-Kalkül & \text{wp}-Kalkül \\\hline

Die Invariante $I$ gilt vor Schleifeneintritt. &
$\{P\} A_1 \{I\}$ &
$P \Rightarrow \text{\text{wp}}(A_1,I)$\\\hline

$I$ ist invariant, d. h. $I$ gilt nach jedem Schleifendurchlauf.&
$\{I \land b\} A_2 \{I\}$ &
$I \land b \Rightarrow \text{\text{wp}}(A_2, I)$\\\hline

Die Nachbedingung $Q$ wird erfüllt.&
$\{I \land \neg b\} A_3 \{Q\}$ &
$I \land \neg b \Rightarrow \text{\text{wp}}(A_3, I)$\\
\end{tabular}
\end{bAntwort}

%%
% (e)
%%

\item Beschreiben Sie, welche Vorraussetzungen eine
Terminierungsfunktion\index{Terminierungsfunktion} erfüllen muss, damit
die totale Korrektheit gezeigt werden kann.

\begin{bAntwort}
Mit einer Terminierungsfunktion $T$ kann bewiesen werden, dass eine
Wiederholung terminiert. Sie ist eine Funktion, die

\begin{itemize}
\item ganzzahlig,

\item nach unten beschränkt (die Schleifenbedingung ist \emph{false},
wenn $T = 0$) und

\item streng monoton fallend (jede Ausführung der Wiederholung
verringert ihren Wert)

ist.

\end{itemize}
Im Hoare-Kalkül muss $\{I \land b \land (T = n)\} A \{T < n\}$ gezeigt
werden, im wp-Kalkül $I \Rightarrow T \geq
0$.
\bFussnoteUrl{https://osg.informatik.tu-chemnitz.de/lehre/aup/
aup-07-AlgorithmenEntwurf-script_de.pdf}
\end{bAntwort}

\end{enumerate}
\end{document}
