
e0726734@42034: \documentclass[a4paper,12pt]{article}
e0726734@42034: 
e0726734@42034: \usepackage[ngerman]{babel}
e0726734@42034: \usepackage[utf8]{inputenc}
e0726734@42034: 
e0726734@42034: \def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
e0726734@42034: \def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
e0726734@42034: 
e0726734@42034: \begin{document}
e0726734@42034: 
e0726734@42034: \title{\Large {\bf Verbindung von 'Computation' und 'Deduction' im \isac{}-System}\\~\\
e0726734@42034: 	Projektpraktikum am Institut für Computersprachen, TU Wien}
e0726734@42034: \author{Mathias Lehnfeld\\
e0726734@42034: 	{\tt mathias.lehnfeld@gmx.at}}
e0726734@42034: \maketitle
e0726734@42034: 
e0726734@42034: \clearpage
e0726734@42034: 
e0726734@42034: 
e0726734@42034: \section{Zur Aufgabenstellung}
e0726734@42034: Das \sisac{}-Projekt entwickelt einen {\it math assistant} aufbauend auf den
e0726734@42034: {\it theorem prover} Isabelle. Der Kern des \sisac{}-Systems ist ein
e0726734@42034: {\it Lucas-Interpreter}, der automatisch Benutzerführung für schrittweises
e0726734@42034: Problemlösen erzeugt: Der nächste Schritt wird von einem Programm
e0726734@42034: berechnet ({\it computation}); {\it deduction} wird gefordert, wenn der Benutzer
e0726734@42034: eine Formel eingibt (die Ableitbarkeit der Formel aus dem {\it context} ist
e0726734@42034: zu beweisen).\\
e0726734@42034: \\
e0726734@42034: Die Aufgabenstellung im Rahmen des Projektpraktikums besteht darin, das
e0726734@42034: in Isabelle verfügbare Konzept {\it context} in den Lucas-Interpreter
e0726734@42034: einzubauen. Dies schließt grundlegende Design-Überlegungen ein, verlangt
e0726734@42034: tiefes Eindringen in den umfangreichen Code von zwei Softwareprodukten,
e0726734@42034: {\it Isabelle} und \sisac{} und bedeutet daher Zusammenarbeit mit den jeweiligen
e0726734@42034: Entwicklerteams.\\
e0726734@42034: \\
e0726734@42034: Ein erfolgreicher Einbau der Isabelle-{\it context}s in den
e0726734@42034: Lucas-Interpreter wird \sisac{}s Fähigkeit, Benutzereingaben zu
e0726734@42034: interpretieren, wesentlich erweitern: {\it context}s stellen Isabelles
e0726734@42034: automatischen Beweisern die notwendigen Daten bereit.
e0726734@42034: 
e0726734@42034: \clearpage
e0726734@42034: 
e0726734@42034: \section{Planung des Projektinhaltes}
e0726734@42034: \subsection{Ist-Zustand vor dem Projekt}
e0726734@42034: 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: 
e0726734@42034: \subsection{Geplanter Soll-Zustand nach dem Projekt}
e0726734@42034: \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: 
e0726734@42034: \clearpage
e0726734@42034: 
e0726734@42034: \section{Dokumentation der Meilensteine}
e0726734@42034: 
e0726734@42034: \subsection{Voraussetzungen zum Arbeitsbeginn schaffen}
e0726734@42034: \begin{tabular}[t]{lll}
e0726734@42034:     {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42034:     10.02.2011 & 2:00 & Besprechung der Problemstellung \\
e0726734@42034:     11.02.2011 & 1:30 & {\it context}s studieren, Isabelle/Mercurial Installation \\
e0726734@42034:     18.02.2011 & 0:15 & meld/tortoisehg installieren \\
e0726734@42034:     20.02.2011 & 1:00 & Projektbeschreibung, jedit Probleme \\
e0726734@42034:     25.02.2011 & 1:00 & Ausarbeitung Meilensteine \\
e0726734@42034:     26.02.2011 & 1:00 & Ausarbeitung Ist-/Soll-Zustand, {\it context}s studieren\\
e0726734@42034:     28.02.2011 & 1:15 & Einführungsbeispiel {\it context}s \\
e0726734@42034:     28.02.2011 & 1:15 & Projektplan erstellen, formatieren \\
e0726734@42034:     01.03.2011 & 1:00 & Projektplan überarbeiten, Stundenlisten \\
e0726734@42034: \end{tabular}
e0726734@42034: 
e0726734@42034: \subsection{\isac{} auf die letzte Isabelle-Release updaten}
e0726734@42034: Die Arbeit mit den Isabelle {\it context}s wird Anfragen in isabelle-dev@
e0726734@42034: erfordern. isabelle-dev@ beantwortet Fragen i.A. nur für die aktuelle
e0726734@42034: Release. Überraschenderweise wurde vor zwei Wochen eine neue Release
e0726734@42034: veröffentlicht. Daher muss auf diese vor Arbeitsbeginn upgedatet werden.\\
e0726734@42034: \\
e0726734@42034: \begin{tabular}[t]{lll}
e0726734@42034:     {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42034:     18.02.2011 & 2:45 & Anpassungen an Isabelle2011 \\
e0726734@42034:     20.02.2011 & 2:45 & Update auf Isabelle2011, Fehlersuche \\
e0726734@42034:     21.02.2011 & 6:30 & ... \\
e0726734@42034:     25.02.2011 & 5:30 & ... \\
e0726734@42034:     26.02.2011 & 4:30 & ... \\
e0726734@42034:     03.03.2011 & 5:00 & ... \\
e0726734@42034:     04.03.2011 & 6:00 & Tests reparieren \\
e0726734@42034: \end{tabular}
e0726734@42034: 
e0726734@42034: \subsection{Parsen aus {\it context}s}
e0726734@42034: Bisher nahm \sisac{} für jede Variable den Typ {\it real} an. Ab jetzt werden Variablen, Terme und Prädikate beim ersten Auftreten im {\it context} eingetragen. User-Input wird mithilfe des {\it context}s typgerecht geparst.\\
e0726734@42034: \\
e0726734@42034: \begin{tabular}[t]{lll}
e0726734@42034:     {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42034:     02.03.2011 & 1:30 & vorbereitendes Übungsbeispiel \\
e0726734@42034:     03.03.2011 & 1:00 & ... \\
e0726734@42034:     04.03.2011 & 5:00 & Funktion {\tt parseNEW} schreiben \\
e0726734@42034:     05.03.2011 & 3:00 & Funktion {\tt vars} anpassen, {\tt declare\_constraints} neu \\
e0726734@42034:     07.03.2011 & 8:45 & {\tt parseNEW}, Spezifikationen studieren \\
e0726734@42034:     08.03.2011 & 6:00 & {\it context} in zentrale Datenstrukturen einbauen \\
e0726734@42034:     09.03.2011 & 2:00 & Fehlersuche {\it context}-Integration \\
e0726734@42034: \end{tabular}
e0726734@42034: 
e0726734@42034: \subsection{Spezifikationsphase mit {\it context}s}
e0726734@42034: \sisac{} sah für die Spezifikation eine Datenstruktur vor, die interaktives Spezifizieren effizient unterstützt. Diese Datenstruktur ist nun durch {\it context}s ersetzt. Dadurch ist die bisherige Fixierung auf {\it real} aufgehoben und beliebige Typen werden fehlerfrei behandelt.\\
e0726734@42034: \\
e0726734@42034: \begin{tabular}[t]{lll}
e0726734@42034:     {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42034:     10.03.2011 & 2:30 & {\it context} in {\tt prep\_ori} und {\tt appl\_add} einbauen\\
e0726734@42034:     11.03.2011 & 5:45 & {\tt appl\_add} überarbeiten \\
e0726734@42034:     12.03.2011 & 5:15 & Fehlersuche \\
e0726734@42034:     14.03.2011 & 2:00 & ... \\
e0726734@42034:     16.03.2011 & 2:30 & ... \\
e0726734@42034:     17.03.2011 & 1:45 & ... \\
e0726734@42034:     18.03.2011 & 4:45 & ..., Optimierung \\
e0726734@42034:     19.03.2011 & 5:30 & ... \\
e0726734@42034:     21.03.2011 & 3:00 & Abschluss Spezifikationsphase \\
e0726734@42034: \end{tabular}
e0726734@42034: 
e0726734@42034: \subsection{Lösungsphase mit {\it context}s}
e0726734@42034: Der Lucas-Interpreter hatte Environment und Assertions (precondition, partiality conditions, etc) getrennt gespeichert. Nun sind Environment und Assertions im {\it context} vereint, der Interpreter einfacher und genereller.\\
e0726734@42034: \\
e0726734@42034: \begin{tabular}[t]{lll}
e0726734@42034:     {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
e0726734@42034:     22.03.2011 & 4:30 & {\it context} in Funktion {\tt solve} einbauen\\
e0726734@42034:     23.03.2011 & 4:45 & Tests reparieren \\
e0726734@42034:     24.03.2011 & 3:30 & ... \\
e0726734@42034:     25.03.2011 & 2:00 & ... \\
e0726734@42034:     03.04.2011 & 4:00 & ... \\
e0726734@42034:     05.04.2011 & 8:00 & Optimierung \\
e0726734@42034:     06.04.2011 & 7:15 & Lösung Exponentenoperator \\
e0726734@42034:     07.03.2011 & 7:00 & ... \\
e0726734@42034:     12.04.2011 & 3:30 & Projektbericht \\
e0726734@42034: \end{tabular}
e0726734@42034: 
e0726734@42034: \section{Bericht zum Projektverlauf}
e0726734@42034: 
e0726734@42034: \subsection{Voraussetzungen zum Arbeitsbeginn schaffen}
e0726734@42034: 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. Die lange Vorbereitung hat sich aber positiv auf den weiteren Verlauf des Projektes ausgewirkt.
e0726734@42034: 
e0726734@42034: \subsection{\isac{} auf die letzte Isabelle-Release updaten}
e0726734@42034: 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@42034: 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.
e0726734@42034: 
e0726734@42034: \subsection{Parsen aus {\it context}s}
e0726734@42034: 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: 
e0726734@42034: \subsection{Spezifikationsphase mit {\it context}s}
e0726734@42034: 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@42034: Insgesamt verlief diese Phase trotz der langwierigen Fehlersuche entsprechend dem Zeitplan.
e0726734@42034: 
e0726734@42034: \subsection{Lösungsphase mit {\it context}s}
e0726734@42034: Die Integration von {\it context}s in die Lösungsphase zur Ersetzung und Zusammenführung von Environment und Assertions konnte in enger Zusammenarbeit mit Herrn Neuper fertiggestellt werden. Der Code des Lucas-Interpreters ist jetzt sauberer und die Logik vereinfacht.
e0726734@42034: 
e0726734@42034: 
e0726734@42034: \section{Abschließende Bemerkungen}
e0726734@42034: 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 ich im Verlauf meines Studiums leider erst einmal davor machen durfte.\\
e0726734@42034: Der nicht zuletzt durch das überraschend notwendig gewordene Update bedingte zähe Verlauf bis ich endlich wirklich an der eigentlichen Aufgabenstellung arbeiten konnte war etwas ernüchternd, da ich gehofft hatte, das Praktikum bis spätestens Ende März abschließen zu können.\\
e0726734@42034: Die Zusammenarbeit mit Herrn Neuper hat jedenfalls sehr gut funktioniert und aus meiner Sicht haben wir uns sehr gut verstanden. Das hat ein entspanntes Arbeitsklima ermöglicht.
e0726734@42034: 
e0726734@42034: \end{document}




