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}