doc-isac/mlehnfeld/projektbericht.tex
author Walther Neuper <neuper@ist.tugraz.at>
Tue, 17 Sep 2013 09:50:52 +0200
changeset 52107 f8845fc8f38d
parent 52056 src/Doc/isac/mlehnfeld/projektbericht.tex@f5d9bceb4dc0
permissions -rw-r--r--
separated Isac documentation (~~/doc-isac) from Isabelle documentation (~~/src/Doc)
e0726734@42034
     1
\documentclass[a4paper,12pt]{article}
neuper@42035
     2
%
e0726734@42034
     3
\usepackage[ngerman]{babel}
e0726734@42034
     4
\usepackage[utf8]{inputenc}
neuper@42035
     5
\usepackage{ngerman}
neuper@42035
     6
\usepackage{graphicx}
neuper@42035
     7
\bibliographystyle{alpha}
e0726734@42034
     8
e0726734@42034
     9
\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
e0726734@42034
    10
\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
e0726734@42034
    11
e0726734@42034
    12
\begin{document}
e0726734@42034
    13
e0726734@42034
    14
\title{\Large {\bf Verbindung von 'Computation' und 'Deduction' im \isac{}-System}\\~\\
neuper@42039
    15
	Projektpraktikum am Institut für Computersprachen,\\Technische Universit\"at Wien\\
neuper@42039
    16
\vspace{0.7cm}
neuper@42039
    17
\large{Betreuer: Univ.-Prof. Dr. Jens Knoop}}
e0726734@42034
    18
\author{Mathias Lehnfeld\\
e0726734@42034
    19
	{\tt mathias.lehnfeld@gmx.at}}
neuper@42039
    20
%pdflatex creates an empty page 1 and the titlepage on page 2 ?!?...
neuper@42039
    21
%\thanks{Betreuer: Univ.-Prof. Dr. Jens Knoop, Technische Universit\"at Wien\\
neuper@42039
    22
%        Dr. Walther Neuper, Technische Universit\"at Graz}
neuper@42039
    23
\date{30. Mai 2011}
e0726734@42034
    24
\maketitle
neuper@42035
    25
\clearpage
neuper@42035
    26
\tableofcontents
e0726734@42034
    27
\clearpage
e0726734@42034
    28
e0726734@42034
    29
e0726734@42034
    30
\section{Zur Aufgabenstellung}
e0726734@42034
    31
Das \sisac{}-Projekt entwickelt einen {\it math assistant} aufbauend auf den
e0726734@42034
    32
{\it theorem prover} Isabelle. Der Kern des \sisac{}-Systems ist ein
e0726734@42034
    33
{\it Lucas-Interpreter}, der automatisch Benutzerführung für schrittweises
e0726734@42034
    34
Problemlösen erzeugt: Der nächste Schritt wird von einem Programm
e0726734@42034
    35
berechnet ({\it computation}); {\it deduction} wird gefordert, wenn der Benutzer
e0726734@42034
    36
eine Formel eingibt (die Ableitbarkeit der Formel aus dem {\it context} ist
e0726734@42034
    37
zu beweisen).\\
e0726734@42034
    38
\\
e0726734@42034
    39
Die Aufgabenstellung im Rahmen des Projektpraktikums besteht darin, das
e0726734@42034
    40
in Isabelle verfügbare Konzept {\it context} in den Lucas-Interpreter
e0726734@42034
    41
einzubauen. Dies schließt grundlegende Design-Überlegungen ein, verlangt
e0726734@42034
    42
tiefes Eindringen in den umfangreichen Code von zwei Softwareprodukten,
e0726734@42034
    43
{\it Isabelle} und \sisac{} und bedeutet daher Zusammenarbeit mit den jeweiligen
e0726734@42034
    44
Entwicklerteams.\\
e0726734@42034
    45
\\
e0726734@42034
    46
Ein erfolgreicher Einbau der Isabelle-{\it context}s in den
e0726734@42034
    47
Lucas-Interpreter wird \sisac{}s Fähigkeit, Benutzereingaben zu
e0726734@42034
    48
interpretieren, wesentlich erweitern: {\it context}s stellen Isabelles
e0726734@42034
    49
automatischen Beweisern die notwendigen Daten bereit.
e0726734@42034
    50
e0726734@42034
    51
neuper@42035
    52
\section{Planung des Projektes}
e0726734@42034
    53
\subsection{Ist-Zustand vor dem Projekt}
e0726734@42034
    54
Das Isabelle Konzept der {\it context}s findet derzeit in \sisac{} noch keine Verwendung. Dadurch entstehen gewisse Einschränkungen bezüglich der Interpretation durch den Lucas-Interpreter, weil Rechenschritte nicht unter Berücksichtigung aller Faktoren ihres Kontexts betrachtet werden können. Derzeit werden Zusicherungen und Umgebungsdaten in einer \sisac{}-spezifischen Datenstruktur verwaltet, die Zugriffe auf Isabelles Prover nicht direkt unterstützen.
e0726734@42034
    55
e0726734@42034
    56
\subsection{Geplanter Soll-Zustand nach dem Projekt}
e0726734@42034
    57
\sisac{}s Lucas-Interpreter ist nun schlanker und nimmt Isabelles {\it context}s bei der Interpretation von Benutzereingaben in Anspruch. Spezifikationen werden mit Isabelles eigenen Datenstrukturen verwaltet. Zusicherungen und Typen von Variablen werden im Lucas-Interpreter in {\it context}s behandelt.
e0726734@42034
    58
neuper@42035
    59
\subsection{Zeitplanung f\"ur das Projekt}
e0726734@42036
    60
Die Planung f\"ur das Projekt sah folgende Meilensteine vor (Details siehe \ref{ms-desc}):
neuper@42035
    61
\begin{enumerate}
e0726734@42036
    62
\item \textbf{Voraussetzungen zum Arbeitsbeginn schaffen} (10.02. -- 18.02.)
e0726734@42036
    63
  %Beschreibung siehe \ref{ms1_desc}
e0726734@42036
    64
\item \textbf{\isac{} auf die letzte Isabelle-Release updaten} (21.02. -- 25.02.)
e0726734@42036
    65
  %Beschreibung siehe \ref{ms2_desc}
e0726734@42036
    66
\item \textbf{Parsen aus \textit{contexts}} (28.02. -- 04.03.)
e0726734@42036
    67
  %Beschreibung siehe \ref{ms3_desc}
e0726734@42036
    68
\item \textbf{Spezifikationsphase mit \textit{context}s} (07.03. -- 11.03.)
e0726734@42036
    69
  %Beschreibung siehe \ref{ms4_desc}
e0726734@42036
    70
\item \textbf{L\"osungsphase mit \textit{context}s} (14.03. -- 18.03.)
e0726734@42036
    71
  %Beschreibung siehe \ref{ms5_desc}
neuper@42035
    72
\end{enumerate}
e0726734@42034
    73
neuper@42035
    74
\section{Konzepte und L\"osungen}
neuper@42035
    75
\subsection{Architektur von \isac}
e0726734@42036
    76
Die Grafik auf Seite \pageref{architektur} gibt einen \"Uberblick \"uber die Architektur von \sisac:
e0726734@42034
    77
neuper@42035
    78
\begin{figure} [htb]
neuper@42035
    79
\begin{center}
neuper@42035
    80
    \includegraphics[width=120mm]{overview.pdf}
neuper@42035
    81
\end{center}
neuper@42035
    82
\caption{Lucas-interpreter und Isabelle}
neuper@42035
    83
\label{architektur}
neuper@42035
    84
\end{figure}
neuper@42035
    85
Die Mathematik-Engine von \sisac{} ist nach dem Konzept eines ``Lucas-Interpreters'' (LI) gebaut. Ein LI interpretiert drei Arten von Daten:
neuper@42035
    86
\begin{enumerate}
e0726734@42036
    87
\item\label{spec}\textbf{Spezifikationen}: diese beschreiben ein Problem der angewandten Mathematik durch die Ein- und Ausgabedaten, die ``precondition'' (Pr\"adikate auf den Eingabedaten) und eine ``postcondition'' (eine Relation zwischen Ein- und Ausgabedaten). Spezifikationen stellen den \textit{applikations-orientierten} Aspekt der Mathematik dar.
e0726734@42036
    88
\item \textbf{Programme}: beschreiben den Algorithmus zur L\"osung des spezifizierten Problems. \sisac's Programmsprache ist funktional und hat keine Ein- oder Ausgabe-Statements \cite{plmms10}. Sie kann aber auf Funktionalit\"aten des Computer Theorem Provers (CTP) Isabelle \cite{Nipkow-Paulson-Wenzel:2002} zugreifen. Programme  stellen den \textit{algorithmischen} Aspekt der Mathematik dar.
e0726734@42036
    89
\item \textbf{Theorien}: beinhalten die Definitionen, Axiome und Theoreme, die einer bestimmten Rechnung der angewandten Mathematik zugrundeliegen. \sisac{} verwendet die ``theories'' von Isabelle in vollem Umfang. Theorien  stellen den \textit{deduktiven} Aspekt der Mathematik dar.
neuper@42035
    90
\end{enumerate}
neuper@42035
    91
e0726734@42036
    92
Die Funktionalit\"at eines LI kann in kurzer Form durch die folgenden drei Anspr\"uche erkl\"art werden\footnote{siehe http://www.ist.tugraz.at/isac/index.php/Description}:
e0726734@42036
    93
neuper@42035
    94
\begin{enumerate}
e0726734@42036
    95
\item \textbf{Benutzereingaben pr\"ufen}: Benutzereingaben sollen so gro\3z\"ugig wie m\"oglich verarbeitet werden. Bei einem gegebenen Problem aus der angewandten Mathematik als formale Spezifikation, wird mit den jeweiligen ``preconditions'' ein ``context'' erzeugt. Nun kann ein Isabelle ``prover'' die Ableitbarkeit einer Benutzereingabe aus dem ``context'' \"uberpr\"ufen. Der ``context'' wird Schritt f\"ur Schritt durch Benutzereingaben erweitert, bis ein Ergebnis vorliegt, das beweisbar die ``postcondition'' aus der Spezifikation erf\"ullt.
e0726734@42036
    96
\item \textbf{Den Benutzer anleiten}: Wei\3 der Lernende nicht mehr weiter, so kann das System den n\"achsten Schritt vorschlagen und den Benutzer so Schritt f\"ur Schritt zum Ergebnis f\"uhren. Ein \sisac{}-Programm wird so interpretiert, wie es bei einem Debugger passiert; die Breakpoints (i.e. Schritte) sind als bestimmte Statements im Programm definiert, die notwendigerweise zum Verlauf der Rechnung bzw. deren Aufbau geh\"oren. An den Breakpoints kann der Benutzer frei entscheiden, ob er den n\"achsten Schritt generieren lassen m\"ochte oder ob er versucht, selbst weiter zu rechnen. Die Herausforderung f\"ur den \textit{Lucas-Interpreter} ist, mit beliebigen Benutzereingaben umgehen zu k\"onnen.
e0726734@42036
    97
\item \textbf{Schritte erkl\"aren}: Bei Interesse hat der Lernende Zugang zu dem Wissen, das f\"ur einen mechanisierten \textit{math assistant} zur L\"osung mathematischer Probleme von N\"oten ist: Definitionen, Axiome und Theoreme (erfasst in ``theories''\footnote{siehe http://www.ist.tugraz.at/projects/isac/www/kbase/thy/index\_thy.html}), Spezifikationen von Problemklassen\footnote{siehe z.B. http://www.ist.tugraz.at/projects/isac/www/kbase/pbl/index\_pbl.html} und Programme, um die Probleme zu l\"osen\footnote{siehe http://www.ist.tugraz.at/projects/isac/www/kbase/met/index\_met.html}. Theoretisch ist dieses Wissen ausreichend, automatisch Erkl\"arungen f\"ur die einzelnen Schritte zu generieren. Das Hintergrundwissen liegt zwar in mathematischer Formulierung vor, es ist jedoch fraglich, wie dies in eine Form gebracht werden kann, die den Lernenden nicht \"uberfordert.
neuper@42035
    98
\end{enumerate}
neuper@42035
    99
neuper@42035
   100
\subsection{Isabelles Konzept von ``contexts''}
e0726734@42038
   101
Die Beschreibung dieses bew\"ahrten Konzeptes findet sich in einem internen Papier zur Implementierung von Isabelles Beweissprache Isar \cite{isar-impl}. Isabelle stellt einen sehr generellen Funktor zur Verf\"ugung:
neuper@42035
   102
neuper@42035
   103
{\tt
neuper@42035
   104
\begin{tabbing}
neuper@42035
   105
xx\=xx\=in\=\kill
neuper@42035
   106
structure ContextData =  {Proof\_Data}\\
neuper@42035
   107
\>~({type T} = term list\\
neuper@42035
   108
\>\>{fun init \_} = []);\\
neuper@42035
   109
\\
neuper@42035
   110
fun insert\_assumptions asms = \\
e0726734@42037
   111
\>\>\>ContextData{.map} (fn xs => distinct (asms@xs));\\
neuper@42035
   112
\\
neuper@42035
   113
fun get\_assumptions ctxt = ContextData{.get} ctxt;\\
neuper@42035
   114
\\
neuper@42035
   115
\\
neuper@42035
   116
val declare\_constraints : \\
neuper@42035
   117
\>\>\>term -> Proof.context -> Proof.context
neuper@42035
   118
\end{tabbing}
neuper@42035
   119
}
e0726734@42036
   120
Das Einzige, was die Definition eines''contexts'' braucht, ist die Spezifikation eines Typs \textit{type T} und einer Funktion \textit{fun init \_} f\"ur den Funktor \textit{Proof\_Data}. Dieser stellt dann die Zugriffsfunktionen \textit{ContextData.map} und \textit{ContextData.get} zur Verf\"ugung.
neuper@42035
   121
neuper@42035
   122
Die Funktion \textit{declare\_constraints} liefert eine wichtige Funktionalit\"at: Ein \textit{term} angewandt auf einen \textit{Proof.context} ergibt einen neuen \textit{Proof.context}, der f\"ur das Parsen von Strings verwendet werden kann:
neuper@42035
   123
{\tt
neuper@42035
   124
\begin{tabbing}
neuper@42035
   125
xx\=xx\=xx\=xx\=xx\=\kill
neuper@42035
   126
fun parseNEW ctxt str = \\
neuper@42035
   127
\>\>\>SOME ({Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
neuper@42035
   128
\>\>\>handle \_ => NONE;
neuper@42035
   129
      \end{tabbing}
neuper@42035
   130
}
e0726734@42036
   131
\textit{Syntax.read\_term ctxt} entnimmt dem ``context'' die Typinformation, die vorher durch \textit{declare\_constraints} zugef\"uhrt wurde. Da die \textit{fun parse} vor Beginn dieses Projektes keine ``contexts'' zur Verf\"ugung hatte, setzte sie mittels \textit{typ\_a2real} einfach alle unbestimmten Typen auf \textit{real}:
neuper@42035
   132
{\tt
neuper@42035
   133
\begin{tabbing}
neuper@42035
   134
xx\=xx\=xx\=xx\=xx\=\kill
neuper@42035
   135
fun parse thy str =\\
neuper@42035
   136
\>(let val t = ({typ\_a2real} o numbers\_to\_string)\\
neuper@42035
   137
\>\>\>\>({Syntax.read\_term\_global thy} str)\\
neuper@42035
   138
\>\>in SOME (cterm\_of thy t) end)\\
neuper@42035
   139
\>\>\>handle \_ => NONE;\\
neuper@42035
   140
      \end{tabbing}
neuper@42035
   141
}
neuper@42035
   142
neuper@42035
   143
\subsection{Die Initialisierung von ``contexts''}\label{init-ctxt}
e0726734@42036
   144
``Contexts'' werden an zwei Stellen von Lucas-Interpretation initialisiert: am Beginn der Spezifikationsphase und zu Beginn der L\"osungsphase.
neuper@42035
   145
neuper@42035
   146
\begin{enumerate}
e0726734@42036
   147
\item\label{init-ctxt-spec}{Die Spezifikations-Phase} dient der Erstellung einer formalen Spezifikation (siehe \ref{spec})\footnote{Da bekannterma\3en formales Spezifizieren schwierig ist, kann es durch entsprechende Dialog-Einstellung dem LI \"uberlassen werden.}. Der ``context'' wird mittels \textit{declare\_constraints} mit den Typdeklarationen aller vorkommenden Variablen initialisiert.
neuper@42035
   148
e0726734@42036
   149
Im Falle eines Rootproblems kommen die Variablen von einer ``formalization'', einer Kurzbeschreibung der Eingabedaten durch einen Autor. Im Falle eines Subproblems kommen die Variablen von den ``actual arguments'' des Subprogrammes.
neuper@42035
   150
e0726734@42036
   151
\item\label{init-ctxt-solve}{Die L\"osungsphase} erzeugt die Rechenschritte aus dem spezifizierten Programm. Zu Beginn der Interpretation des Programmes wird der ``context'' initialisiert mit
neuper@42035
   152
  \begin{enumerate}
neuper@42035
   153
  \item den Typdeklarationen aller in der Spezifikation vorkommenden Variablen mittels \textit{declare\_constraints}
neuper@42035
   154
  \item den ``preconditions'' des (interaktiv oder automatisch) spezifizierten Programmes, genauer: mit den ``preconditions'' des zugeh\"origen Guards, der meist gleich der Spezifikation ist
neuper@42035
   155
  \end{enumerate}
neuper@42035
   156
\end{enumerate}
neuper@42035
   157
neuper@42035
   158
neuper@42035
   159
\subsection{Aufbau von ``contexts'' in der Interpretation}\label{partiality}
e0726734@42036
   160
W\"ahrend der Interpretation eines Programmes baut der Lucas-Interpreter einen ``context'' auf, indem er alle relevanten ``preconditions'', andere Pr\"adikate -- insbesondere ``partiality conditions'' -- einsammelt. Eine ``partiality condition'' ist zum Beispiel $x\not=0$, die eine Division durch $0$ verhindert.
neuper@42035
   161
e0726734@42036
   162
Am Ende eines Programmes soll der ``context'' hinreichend logische Information enthalten, sodass Isabelles automatische Beweiser die ``postcondition'' automatisch beweisen k\"onnen (das ist eine k\"unftige Entwicklungsaufgabe!).
neuper@42035
   163
neuper@42035
   164
\subsection{Transfer von ``contexts'' aus Subprogrammen}\label{transfer}
neuper@42035
   165
``contexts'' folgen den \"ublichen Scope-Regeln von Programmsprachen mit Blockstruktur, wie schon die Initialisierung von ``contexts'' gezeigt hat. Die Behandlung von ``contexts'' bei der R\"uckkehr aus Subprogrammen erfolgt durch folgende Funktionen:
neuper@42035
   166
{\tt
neuper@42035
   167
\begin{tabbing}
neuper@42035
   168
xx\=xx\=xx\=xx\=xx\=\kill
neuper@42035
   169
fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
neuper@42035
   170
\>  let\\
neuper@42035
   171
\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
neuper@42035
   172
\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
neuper@42035
   173
\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
neuper@42035
   174
\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
neuper@42035
   175
\>\>\>\>\>         then transfer fas to\_ctxt\\
neuper@42035
   176
\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
neuper@42035
   177
\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
neuper@42035
   178
      \end{tabbing}
neuper@42035
   179
}
neuper@42035
   180
Folgende Daten werden aus dem Sub-``context'' in den ``context'' des aufrufenden Programmes zur\"uckgegeben:
neuper@42035
   181
\begin{enumerate}
e0726734@42036
   182
\item die R\"uckgabewerte des Subprogrammes, sofern sie vom Typ \textit{bool} sind
e0726734@42036
   183
\item alle \textit{assumptions}, die eine Variable enthalten, die auch einer der R\"uckgabewerte enth\"alt
neuper@42040
   184
\item alle \textit{assumptions}, die eine Variable enthalten, die in einem Term des aufrufenden Programmes enthalten sind\footnote{in diesem Punkt sind die Scope-Regeln schw\"acher als sonst bei Subprogrammen}. Der Unterschied begr\"undet sich darin, dass Rechnungen vorzugsweise mit Variablennamen vorgehen, die block\"ubergreifend g\"ultig sind.
neuper@42040
   185
\item\label{conflict} \textbf{nicht zur\"uckgegeben} werden R\"uckgabewerte des Subprogrammes dann, wenn sie im Widerspruch zum ``context'' des aufrunfenden Programmes stehen \footnote{Dieser Punkt wurde erst zu Ende der vorliegenden Arbeit gekl\"art und ist zur Zeit ihrer Fertigstellung nicht implementiert~!}. Hier ist ein Beispiel:
neuper@42035
   186
\end{enumerate}
neuper@42035
   187
neuper@42035
   188
\begin{tabbing}
neuper@42035
   189
xxx\=xxx\=\kill
neuper@42035
   190
     \`$\mathit{(some)}\;\mathit{assumptions}$\\
neuper@42035
   191
$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
neuper@42035
   192
     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
neuper@42035
   193
\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
neuper@42035
   194
\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
neuper@42035
   195
\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
neuper@42035
   196
     \`$x\not=3\land x\not=0$\\
neuper@42035
   197
\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
neuper@42035
   198
\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
neuper@42035
   199
\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
neuper@42035
   200
\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
neuper@42035
   201
\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
neuper@42035
   202
\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
neuper@42035
   203
\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
neuper@42035
   204
\>\>$[x = 0, x = \frac{6}{5}]$ \\
neuper@42035
   205
     \`$x = 0\land x = \frac{6}{5}$\\
neuper@42035
   206
\>$[{x = 0}, x = \frac{6}{5}]$ \\
neuper@42035
   207
     \`{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
neuper@42035
   208
\>$[x = \frac{6}{5}]$ \\
neuper@42035
   209
$[x = \frac{6}{5}]$
neuper@42035
   210
\end{tabbing}
e0726734@42038
   211
Aufgrund von Punkt \ref{conflict}. oben wird es m\"oglich, aus dem Programm, das obige Rechnung erzeugt, das Statement \textit{Check\_Elementwise Assumptions} zu streichen:
neuper@42035
   212
{\tt
neuper@42035
   213
\begin{tabbing}
neuper@42035
   214
xx\=xx\=xx\=xx\=xx\=xx\=\kill
neuper@42035
   215
Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
neuper@42035
   216
\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
neuper@42035
   217
\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
neuper@42035
   218
\>\>     (L\_L::bool list) =                                   \\
neuper@42035
   219
\>\>\>            (SubProblem (Test',                           \\
neuper@42035
   220
\>\>\>\>                         [linear,univariate,equation,test]\\
neuper@42035
   221
\>\>\>\>                         [Test,solve\_linear])             \\
neuper@42035
   222
\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
e0726734@42036
   223
\>  in {Check\_Elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
neuper@42035
   224
\end{tabbing}
neuper@42035
   225
}
e0726734@42036
   226
Hiermit geht die Entwicklung des Konzeptes von Lucas-Interpretation einen Schritt in die begonnene Richtung weiter, die Verschiebung des Programmieraufwandes von ``computation'' (im herk\"ommlichen Programmieren) auf ``deduction'' (im Spezifizieren von Programmeigenschaften) zu unterst\"utzen.
neuper@42035
   227
neuper@42035
   228
\subsection{\"Uberblick: ``contexts'' bei Lucas-Interpretation}
neuper@42035
   229
e0726734@42036
   230
Im Folgenden betrachten wir ein Bespiel für die Lösung einer Aufgabe durch \sisac. Die gegebenen Codeausschnitte sind nur Teile des gesamten Programmes. Der vollständige Code befindet sich in Anhang \ref{demo-code}.
neuper@42035
   231
e0726734@42036
   232
\paragraph{Formulierung der Aufgabenstellung und Spezifikation}~\\
e0726734@42034
   233
e0726734@42036
   234
Erklärung siehe \ref{init-ctxt-spec}.
e0726734@42036
   235
\begin{verbatim}
e0726734@42036
   236
val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
e0726734@42036
   237
val (dI',pI',mI') =
e0726734@42036
   238
  ("Test", ["sqroot-test","univariate","equation","test"],
e0726734@42036
   239
   ["Test","squ-equ-test-subpbl1"]);
e0726734@42036
   240
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
e0726734@42036
   241
\end{verbatim}
e0726734@42036
   242
\textit{fmz} enthält also die zwei Eingabegrößen und die gesuchte Ausgabegröße, also die Liste aller Lösungen für \textit{x} in der Gleichung $x + 1 = 2$. Die zweite Zeile definiert den Namen der ``theory'' mit dem deduktiven Hintergrundwissen, die Spezifikation in Form einer Liste und das zu verwendende Programm.\\
e0726734@42036
   243
\textit{CalcTreeTEST} erzeugt schlie\3lich die grundlegenden Datenstrukturen für die folgenden Berechnungen. Beispielsweise wird ein ``context'' erzeugt, der nun im Baum \textit{pt} an der Position \textit{p} steht.
e0726734@42036
   244
\begin{verbatim}
e0726734@42036
   245
val ctxt = get_ctxt pt p;
e0726734@42036
   246
val SOME known_x = parseNEW ctxt "x + y + z";
e0726734@42036
   247
val SOME unknown = parseNEW ctxt "a + b + c";
e0726734@42036
   248
\end{verbatim}
e0726734@42036
   249
Dies erzeugt folgenden Output:
e0726734@42036
   250
\begin{verbatim}
e0726734@42036
   251
val ctxt = <context>: Proof.context
e0726734@42036
   252
val known_x =
e0726734@42036
   253
   Const ("Groups.plus_class.plus",
e0726734@42036
   254
       "RealDef.real => RealDef.real => RealDef.real") $
e0726734@42036
   255
     (Const ("Groups.plus_class.plus",
e0726734@42036
   256
         "RealDef.real => RealDef.real => RealDef.real") $
e0726734@42036
   257
       Free ("x", "RealDef.real") $ Free ("y", "RealDef.real")) $
e0726734@42036
   258
     Free ("z", "RealDef.real"):
e0726734@42036
   259
   term
e0726734@42036
   260
val unknown =
e0726734@42036
   261
   Const ("Groups.plus_class.plus", "'a => 'a => 'a") $
e0726734@42036
   262
     (Const ("Groups.plus_class.plus", "'a => 'a => 'a")
e0726734@42036
   263
       $ Free ("a", "'a") $ Free ("b", "'a")) $
e0726734@42036
   264
     Free ("c", "'a"):
e0726734@42036
   265
   term
e0726734@42036
   266
\end{verbatim}
e0726734@42036
   267
Der Output dieser Zeilen zeigt die neue Funktionalität anhand der Erkennung des Typs \textit{real} für die Variablen \textit{x}, \textit{y} und \textit{z} mittels Typinferenz, im Gegensatz zu den Unbekannten \textit{a}, \textit{b} und \textit{c} (unbekannter Typ \textit{'a}.
e0726734@42036
   268
e0726734@42036
   269
\paragraph{Beginn der Interpretation}~\\
e0726734@42036
   270
e0726734@42036
   271
Nach einigen Schritten der Mathematik-Engine ist die Spezifikationsphase beendet und die Interpretation des Programmes kann beginnen. Die ``precondition'' ist in den Assumptions enthalten:
e0726734@42036
   272
\begin{verbatim}
e0726734@42036
   273
get_assumptions_ pt p |> terms2strs
e0726734@42036
   274
\end{verbatim}
e0726734@42036
   275
Output:
e0726734@42036
   276
\begin{verbatim}
e0726734@42036
   277
val it = ["precond_rootmet x"]: string list
e0726734@42036
   278
\end{verbatim}
e0726734@42036
   279
e0726734@42036
   280
\paragraph{Bearbeitung eines Subproblems}~\\
e0726734@42036
   281
e0726734@42036
   282
Einige Ausführungsschritte später startet der Interpreter mit der Gleichung $-1 + x = 0$ ein Subproblem, beginnt dort wiederum mit Spezifikationsphase und setzt mit der Lösungsphase fort.\\
e0726734@42037
   283
In einem Zwischenschritt bestehen die lokalen Assumptions aus der Annahme, dass die Gleichung mit der Gleichheitsregel zu matchen ist:
e0726734@42036
   284
\begin{verbatim}
e0726734@42036
   285
["matches (?a = ?b) (-1 + x = 0)"]: string list
e0726734@42036
   286
\end{verbatim}
e0726734@42036
   287
Nach künstlichem Einfügen zweier Assumptions und Beendigung des Subproblems steht eine Lösung für \textit{x} in den Assumptions:\\
e0726734@42036
   288
\texttt{[\dq{}matches (?a = ?b) (-1 + x = 0)\dq{}, \dq{}x < sub\_asm\_out\dq{}, \dq{}{\bf x = 1}\dq{}, \dq{}precond\_rootmet x\dq{}]: string list}\\
e0726734@42036
   289
\\
e0726734@42036
   290
Bei der Rückkehr aus dem Subproblem könnte eine erzeugte Lösung aufgrund einer Bedingungsverletzung wieder wegfallen, hier ist das nicht der Fall. Die Überprüfung dieser Bedingungen (siehe \ref{partiality}) geschieht beim Transfer des lokalen ``contexts'' in den übergeordneten (hier der des Rootproblems, siehe \ref{transfer}).
e0726734@42036
   291
e0726734@42036
   292
\paragraph{Abschluss der Berechnung}~\\
e0726734@42036
   293
e0726734@42036
   294
Nach den letzten Aufrufen der Mathematik-Engine stehen alle Schritte fest:
e0726734@42036
   295
\begin{verbatim}[
e0726734@42036
   296
(([], Frm), solve (x + 1 = 2, x)),
e0726734@42036
   297
(([1], Frm), x + 1 = 2),
e0726734@42036
   298
(([1], Res), x + 1 + -1 * 2 = 0),
e0726734@42036
   299
(([2], Res), -1 + x = 0),
e0726734@42036
   300
(([3], Pbl), solve (-1 + x = 0, x)),
e0726734@42036
   301
(([3,1], Frm), -1 + x = 0),
e0726734@42036
   302
(([3,1], Res), x = 0 + -1 * -1),
e0726734@42036
   303
(([3,2], Res), x = 1),
e0726734@42036
   304
(([3], Res), [x = 1]),
e0726734@42036
   305
(([4], Res), [x = 1]),
e0726734@42036
   306
(([], Res), [x = 1])] 
e0726734@42036
   307
\end{verbatim}
e0726734@42036
   308
e0726734@42036
   309
\section{Beschreibung der Meilensteine}\label{ms-desc}
e0726734@42036
   310
\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}\label{ms1_desc}
e0726734@42036
   311
Die Komplexit\"at \sisac{}s, welches auf Konzepten von Isabelle aufbaut und die tief ins System eingreifenden Ver\"anderungen in den bevorstehenden Meilensteinen machen eine intensive Auseinandersetzung mit Isabelle, insbesondere mit dem Konzept der ``contexts'', und dem \sisac-Code notwendig. Darunter fallen neben dem Lesen von Dokumentationen auch die gezielte Suche von Anwendungsf\"allen im bestehenden Code, sowie das Studieren von Coding Standards und ein Vertrautmachen mit den im \sisac-Team \"ublichen Workflows.
e0726734@42036
   312
e0726734@42036
   313
\subsection{\isac{} auf die letzte Isabelle-Release updaten}\label{ms2_desc}
e0726734@42034
   314
Die Arbeit mit den Isabelle {\it context}s wird Anfragen in isabelle-dev@
e0726734@42036
   315
erfordern. isabelle-dev@ beantwortet Fragen i.A. nur f\"ur die aktuelle
e0726734@42036
   316
Release. Überraschenderweise wurde zwei Wochen vor Beginn des Projektpraktikums eine neue Release
e0726734@42036
   317
veröffentlicht. Daher muss auf diese vor Arbeitsbeginn upgedatet werden.
e0726734@42034
   318
e0726734@42036
   319
\subsection{Parsen aus {\it context}s}\label{ms3_desc}
e0726734@42036
   320
Bisher nahm \sisac{} für jede Variable den Typ {\it real} an. Variablen, Terme und Pr\"adikate sollen nun beim ersten Auftreten im {\it context} eingetragen werden. User-Input wird mithilfe des {\it context}s mittels Typinferenz typgerecht geparst. Die Verwendungen der bestehenden \textit{parse}-Funktion m\"ussen im ganzen System ersetzt und angepasst werden.
e0726734@42034
   321
e0726734@42036
   322
\subsection{Spezifikationsphase mit {\it context}s}\label{ms4_desc}
e0726734@42036
   323
\sisac{} sah für die Spezifikation eine Datenstruktur vor, die interaktives Spezifizieren effizient unterstützt. Diese Datenstruktur soll nun durch {\it context}s ersetzt werden. Dadurch ist die bisherige Fixierung auf {\it real} aufgehoben und beliebige Typen werden fehlerfrei behandelt. Dieser Schritt macht weitere Eingriffe in grundlegende Funktionen und Datenstrukturen des Systems notwendig.
e0726734@42034
   324
e0726734@42036
   325
\subsection{L\"osungsphase mit {\it context}s}\label{ms5_desc}
e0726734@42036
   326
Der Lucas-Interpreter speicherte Assumptions (precondition, partiality conditions, etc.) in einer eigenen Datenstruktur im Rechenbaum. Nun sollen Assumptions im {\it context} verwaltet werden. Dazu sind Schreib- und Lesefunktionen zu implementieren und alle Verwendungen von Assumptions entsprechend anzupassen.
e0726734@42034
   327
e0726734@42034
   328
\section{Bericht zum Projektverlauf}
e0726734@42034
   329
e0726734@42034
   330
\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}
e0726734@42036
   331
Die Größe der Projekte {\it Isabelle} und \sisac{} sowie deren Abgrenzung haben den Weg zu meinem schließlichen Verständnis der Aufgabenstellung etwas langwierig gestaltet. Dazu kamen nicht geplante, organisatorische Vorbereitungen, wie die Erstellung einer Projektbeschreibung und des -planes. Die lange Vorbereitung hat sich aber positiv auf den weiteren Verlauf des Projektes ausgewirkt.
e0726734@42034
   332
e0726734@42034
   333
\subsection{\isac{} auf die letzte Isabelle-Release updaten}
e0726734@42036
   334
Da die Veröffentlichung der {\it Isabelle}-Version 2009-2 noch nicht lange zurück lag, kam {\it Isabelle2011} mit vielen grundlegenden Änderungen im System kurz vor Projektbeginn sehr überraschend. Die Mailingliste der Entwickler beantwortet nur Fragen zur aktuellen Release, weshalb ein entsprechendes Update von \sisac{} vor Arbeitsbeginn notwendig war.\\
e0726734@42036
   335
Dieser Arbeitsschritt beanspruchte wesentlich mehr Zeit als ursprünglich geplant. Als \sisac{} schließlich erfolgreich kompilierte funktionierte eine große Zahl der Tests nicht mehr. Dies machte die selbstständige Arbeit für mich vorerst unmöglich. Ich konnte jedoch in persönlicher Zusammenarbeit mit Walther Neuper meine Fähigkeiten einbringen. Die Notwendigkeit dieser persönlichen Zusammenarbeit verzögerte den Projektverlauf.
e0726734@42034
   336
e0726734@42034
   337
\subsection{Parsen aus {\it context}s}
e0726734@42034
   338
In diesem Schritt konnte ich besonders Syntax und Funktionsweise von StandardML, die praktischen, {\it Isabelle}-eigenen Operatoren und die Arbeitsweise mit der Entwicklungsumgebung kennen lernen. Dieser Meilenstein konnte in recht kurzer Zeit abgeschlossen werden.
e0726734@42034
   339
e0726734@42034
   340
\subsection{Spezifikationsphase mit {\it context}s}
e0726734@42034
   341
Hier konnte ich sehr viel selbstständig arbeiten. Zu Beginn verlief alles völlig problemlos, die Suche nach einem bestimmten Fehler beanspruchte dann aber mit Abstand die meiste Zeit, hatte jedoch zur Folge, dass ich mich sehr intensiv mit dem System auseinandersetzen musste und damit einige Kernfunktionen kennen und verstehen lernte und teilweise sogar etwas optimieren konnte.
e0726734@42036
   342
Insgesamt verlief diese Phase trotz der langwierigen Fehlersuche nicht viel langsamer als geplant.
e0726734@42034
   343
e0726734@42036
   344
\subsection{L\"osungsphase mit {\it context}s}
e0726734@42036
   345
Die Integration von {\it context}s in die Lösungsphase zur Ersetzung der ursprünglichen behandlung von Assertions konnte in enger Zusammenarbeit mit Herrn Neuper fertiggestellt werden, persönliche Termine auf beiden Seiten verlängerten aber den zeitlichen Verlauf. Der Code des Lucas-Interpreters ist jetzt sauberer und die Logik vereinfacht.
e0726734@42034
   346
e0726734@42034
   347
e0726734@42034
   348
\section{Abschließende Bemerkungen}
neuper@42039
   349
Rückblickend betrachte ich das Projektpraktikum als sehr positive Erfahrung, da ich das Gefühl habe, etwas nicht Unwesentliches  zur Erweiterung von \sisac{} beigetragen zu haben. Die persönliche Zusammenarbeit mit Akademikern und auch die Verrichtung einer Arbeit, die nach Abschluss gebraucht und verwendet wird, ist eine Erfahrung, die in meinem Studium nicht selbstverständlich ist und um die ich mich sehr bemüht habe.
neuper@42039
   350
neuper@42039
   351
Der %nicht zuletzt 
neuper@42039
   352
durch das überraschend notwendig gewordene Update 
neuper@42039
   353
von Isabelle2009-2 auf Isabelle2011
neuper@42039
   354
bedingte zähe Verlauf bis ich endlich wirklich an der eigentlichen Aufgabenstellung arbeiten konnte, %war etwas ernüchternd, 
neuper@42039
   355
verlange einies Umdisponieren,
neuper@42041
   356
da ich gehofft hatte, das Praktikum bis spätestens Ende März abschließen zu können. Die zeitliche Verzögerung des Projektes wurde jedoch durch gro\3es Entgegenkommen des Institutes in der Terminsetzung am Ende des Projektes ausgeglichen; daf\"ur bin ich Herrn Professor Knoop sehr zu Dank verpflichtet. Lehrreich war f\"ur mich auch die Einbindung der Abschlusspr\"asentation in die Vortragsreihe des Institutes f\"ur Computersprachen und dem Feedback von dort; auch daf\"ur herzlichen Dank.
neuper@42039
   357
neuper@42040
   358
Die Zusammenarbeit mit \sisac-Entwicklung an der Technischen Universit\"at Graz \"uber Herrn Neuper hat %jedenfalls 
neuper@42039
   359
sehr gut funktioniert und aus meiner Sicht haben wir uns sehr gut verstanden. Das hat ein produktives %entspanntes 
neuper@42039
   360
Arbeitsklima ermöglicht.
neuper@42039
   361
neuper@42039
   362
%Abgesehen von der zeitlichen Verzögerung des Projektes freue ich mich über den erfolgreichen Abschluss der geplanten Aufgaben und deren interessanten Charakter.
e0726734@42034
   363
e0726734@42036
   364
\clearpage
e0726734@42036
   365
e0726734@42036
   366
\bibliography{bib}
e0726734@42036
   367
e0726734@42036
   368
\clearpage
e0726734@42036
   369
e0726734@42036
   370
\appendix
neuper@42035
   371
%\section*{Anhang}
e0726734@42036
   372
\section{Demobeispiel}\label{demo-code}
neuper@42035
   373
\begin{verbatim}
neuper@42035
   374
neuper@42035
   375
theory All_Ctxt imports Isac begin
neuper@42035
   376
neuper@42035
   377
text {* all changes of context are demonstrated in a mini example.
neuper@42035
   378
  see test/../mstools.sml --- all ctxt changes in minimsubpbl x+1=2 --- *}
neuper@42035
   379
neuper@42035
   380
section {* start of the mini example *}
neuper@42035
   381
neuper@42035
   382
ML {*
neuper@42035
   383
  val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
neuper@42035
   384
  val (dI',pI',mI') =
neuper@42035
   385
    ("Test", ["sqroot-test","univariate","equation","test"],
neuper@42035
   386
     ["Test","squ-equ-test-subpbl1"]);
neuper@42035
   387
  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@42035
   388
*}
neuper@42035
   389
neuper@42035
   390
section {* start of specify phase *}
neuper@42035
   391
neuper@42035
   392
text {* variables known from formalisation provide type-inference 
neuper@42035
   393
  for further input *}
neuper@42035
   394
neuper@42035
   395
ML {*
neuper@42035
   396
  val ctxt = get_ctxt pt p;
neuper@42035
   397
  val SOME known_x = parseNEW ctxt "x + y + z";
neuper@42035
   398
  val SOME unknown = parseNEW ctxt "a + b + c";
neuper@42035
   399
*}
neuper@42035
   400
neuper@42035
   401
ML {*
neuper@42035
   402
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   403
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   404
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   405
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   406
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   407
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   408
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   409
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   410
*}
neuper@42035
   411
neuper@42035
   412
section {* start interpretation of method *}
neuper@42035
   413
e0726734@42036
   414
text {* preconditions are known at start of
e0726734@42036
   415
        interpretation of (root-)method *}
neuper@42035
   416
neuper@42035
   417
ML {*
neuper@42035
   418
  get_assumptions_ pt p |> terms2strs;
neuper@42035
   419
*}
neuper@42035
   420
neuper@42035
   421
ML {*
neuper@42035
   422
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   423
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   424
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   425
*}
neuper@42035
   426
neuper@42035
   427
section {* start a subproblem: specification *}
neuper@42035
   428
e0726734@42036
   429
text {* variables known from arguments of (sub-)method
e0726734@42036
   430
        provide type-inference for further input *}
neuper@42035
   431
neuper@42035
   432
ML {*
neuper@42035
   433
  val ctxt = get_ctxt pt p;
neuper@42035
   434
  val SOME known_x = parseNEW ctxt "x+y+z";
neuper@42035
   435
  val SOME unknown = parseNEW ctxt "a+b+c";
neuper@42035
   436
*}
neuper@42035
   437
neuper@42035
   438
ML {*
neuper@42035
   439
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   440
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   441
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   442
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   443
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   444
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   445
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   446
  val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
neuper@42035
   447
*}
neuper@42035
   448
neuper@42035
   449
section {* interpretation of subproblem's method *}
neuper@42035
   450
neuper@42035
   451
text {* preconds are known at start of interpretation of (sub-)method *}
neuper@42035
   452
neuper@42035
   453
ML {*
neuper@42035
   454
 get_assumptions_ pt p |> terms2strs
neuper@42035
   455
*}
neuper@42035
   456
neuper@42035
   457
ML {*
neuper@42035
   458
 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
neuper@42035
   459
*}
neuper@42035
   460
neuper@42035
   461
ML {*
neuper@42035
   462
  "artifically inject assumptions";
neuper@42035
   463
  val (SOME (iform, cform), SOME (ires, cres)) = get_obj g_loc pt (fst p);
neuper@42035
   464
  val ctxt = insert_assumptions [str2term "x < sub_asm_out",
neuper@42035
   465
                                 str2term "a < sub_asm_local"] cres;
neuper@42035
   466
  val pt = update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
neuper@42035
   467
*}
neuper@42035
   468
neuper@42035
   469
ML {* 
neuper@42035
   470
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   471
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   472
*}
neuper@42035
   473
neuper@42035
   474
section {* finish subproblem, return to calling method*}
neuper@42035
   475
e0726734@42036
   476
text {* transfer non-local assumptions and result from sub-method
e0726734@42036
   477
        to root-method.
e0726734@42036
   478
        non-local assumptions are those contaning a variable known
e0726734@42036
   479
        in root-method.
neuper@42035
   480
*}
neuper@42035
   481
neuper@42035
   482
ML {*
neuper@42035
   483
  terms2strs (get_assumptions_ pt p);
neuper@42035
   484
*}
neuper@42035
   485
neuper@42035
   486
ML {*
neuper@42035
   487
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   488
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42035
   489
*}
neuper@42035
   490
neuper@42035
   491
section {* finish Lucas interpretation *}
neuper@42035
   492
e0726734@42036
   493
text {* assumptions collected during lucas-interpretation
e0726734@42036
   494
        for proof of postcondition *}
neuper@42035
   495
neuper@42035
   496
ML {*
neuper@42035
   497
  terms2strs (get_assumptions_ pt p);
neuper@42035
   498
*}
neuper@42035
   499
neuper@42035
   500
ML {*
neuper@42035
   501
  show_pt pt;
neuper@42035
   502
*}
neuper@42035
   503
neuper@42035
   504
end
neuper@42035
   505
\end{verbatim}
neuper@42035
   506
e0726734@42036
   507
\section{Stundenliste}
e0726734@42036
   508
e0726734@42036
   509
\subsection*{Voraussetzungen zum Arbeitsbeginn schaffen}
e0726734@42036
   510
\begin{tabular}[t]{lll}
e0726734@42036
   511
    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42036
   512
    10.02.2011 & 2:00 & Besprechung der Problemstellung \\
e0726734@42036
   513
    11.02.2011 & 1:30 & {\it context}s studieren, Isabelle/Mercurial Installation \\
e0726734@42036
   514
    18.02.2011 & 0:15 & meld/tortoisehg installieren \\
e0726734@42036
   515
    20.02.2011 & 1:00 & Projektbeschreibung, jedit Probleme \\
e0726734@42036
   516
    25.02.2011 & 1:00 & Ausarbeitung Meilensteine \\
e0726734@42036
   517
    26.02.2011 & 1:00 & Ausarbeitung Ist-/Soll-Zustand, {\it context}s studieren\\
e0726734@42036
   518
    28.02.2011 & 1:15 & Einführungsbeispiel {\it context}s \\
e0726734@42036
   519
    28.02.2011 & 1:15 & Projektplan erstellen, formatieren \\
e0726734@42036
   520
    01.03.2011 & 1:00 & Projektplan überarbeiten, Stundenlisten \\
e0726734@42036
   521
\end{tabular}
e0726734@42036
   522
e0726734@42036
   523
\subsection*{\isac{} auf die letzte Isabelle-Release updaten}
e0726734@42036
   524
\begin{tabular}[t]{lll}
e0726734@42036
   525
    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42036
   526
    18.02.2011 & 2:45 & Anpassungen an Isabelle2011 \\
e0726734@42036
   527
    20.02.2011 & 2:45 & Update auf Isabelle2011, Fehlersuche \\
e0726734@42036
   528
    21.02.2011 & 6:30 & ... \\
e0726734@42036
   529
    25.02.2011 & 5:30 & ... \\
e0726734@42036
   530
    26.02.2011 & 4:30 & ... \\
e0726734@42036
   531
    03.03.2011 & 5:00 & ... \\
e0726734@42036
   532
    04.03.2011 & 6:00 & Tests reparieren \\
e0726734@42036
   533
\end{tabular}
e0726734@42036
   534
e0726734@42036
   535
\subsection*{Parsen aus \textit{contexts}}
e0726734@42036
   536
\begin{tabular}[t]{lll}
e0726734@42036
   537
    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42036
   538
    02.03.2011 & 1:30 & vorbereitendes Übungsbeispiel \\
e0726734@42036
   539
    03.03.2011 & 1:00 & ... \\
e0726734@42036
   540
    04.03.2011 & 5:00 & Funktion {\tt parseNEW} schreiben \\
e0726734@42036
   541
    05.03.2011 & 3:00 & Funktion {\tt vars} anpassen, {\tt declare\_constraints} neu \\
e0726734@42036
   542
    07.03.2011 & 8:45 & {\tt parseNEW}, Spezifikationen studieren \\
e0726734@42036
   543
    08.03.2011 & 6:00 & {\it context} in zentrale Datenstrukturen einbauen \\
e0726734@42036
   544
    09.03.2011 & 2:00 & Fehlersuche {\it context}-Integration \\
e0726734@42036
   545
\end{tabular}
e0726734@42036
   546
e0726734@42036
   547
\subsection*{Spezifikationsphase mit \textit{context}s}
e0726734@42036
   548
\begin{tabular}[t]{lll}
e0726734@42036
   549
    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42036
   550
    10.03.2011 & 2:30 & {\it context} in {\tt prep\_ori} und {\tt appl\_add} einbauen\\
e0726734@42036
   551
    11.03.2011 & 5:45 & {\tt appl\_add} überarbeiten \\
e0726734@42036
   552
    12.03.2011 & 5:15 & Fehlersuche \\
e0726734@42036
   553
    14.03.2011 & 2:00 & ... \\
e0726734@42036
   554
    16.03.2011 & 2:30 & ... \\
e0726734@42036
   555
    17.03.2011 & 1:45 & ... \\
e0726734@42036
   556
    18.03.2011 & 4:45 & ..., Optimierung \\
e0726734@42036
   557
    19.03.2011 & 5:30 & ... \\
e0726734@42036
   558
    21.03.2011 & 3:00 & Abschluss Spezifikationsphase \\
e0726734@42036
   559
\end{tabular}
e0726734@42036
   560
e0726734@42036
   561
\subsection*{L\"osungsphase mit \textit{context}s}
e0726734@42036
   562
\begin{tabular}[t]{lll}
e0726734@42036
   563
    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42036
   564
    22.03.2011 & 4:30 & {\it context} in Funktion {\tt solve} einbauen\\
e0726734@42036
   565
    23.03.2011 & 4:45 & Tests reparieren \\
e0726734@42036
   566
    24.03.2011 & 3:30 & ... \\
e0726734@42036
   567
    25.03.2011 & 2:00 & ... \\
e0726734@42036
   568
    03.04.2011 & 4:00 & ... \\
e0726734@42036
   569
    05.04.2011 & 8:00 & Optimierung \\
e0726734@42036
   570
    06.04.2011 & 7:15 & L\"osung Exponentenoperator \\
e0726734@42036
   571
    07.04.2011 & 7:00 & ... \\
e0726734@42036
   572
    12.04.2011 & 3:30 & Projektbericht \\
e0726734@42036
   573
\end{tabular}
e0726734@42036
   574
e0726734@42034
   575
\end{document}