tuned decompose-isar
authorWalther Neuper <neuper@ist.tugraz.at>
Fri, 13 May 2011 09:28:38 +0200
branchdecompose-isar
changeset 4198664efbbbed4b4
parent 41985 cb8ea2269e6f
child 41987 f304fe86b45a
tuned
doc-src/isac/msteger/bakk-arbeit.tex
test/Tools/isac/Minisubpbl/100-init-rootpbl.sml
test/Tools/isac/Minisubpbl/150-add-given.sml
test/Tools/isac/Minisubpbl/200-start-method.sml
test/Tools/isac/Minisubpbl/300-init-subpbl.sml
test/Tools/isac/Test_Isac.thy
     1.1 --- a/doc-src/isac/msteger/bakk-arbeit.tex	Thu May 12 10:00:06 2011 +0200
     1.2 +++ b/doc-src/isac/msteger/bakk-arbeit.tex	Fri May 13 09:28:38 2011 +0200
     1.3 @@ -22,17 +22,12 @@
     1.4  \begin{document}
     1.5  \maketitle
     1.6  \abstract{
     1.7 -Der Theoremprover Isabelle befindet sich im \"Ubergang von einer Oberfl\"ache f\"ur akademische Benutzer zu einem generellen Frontend, das in verschiedenste softwaretechnische Tools eingebunden werden kann.
     1.8 +Ziel des Projektes war es, die unz\"{a}hligen M\"{o}glichkeiten, die der Wechsel des Isabelle-Development-Teams vom veralteten Proof General in Verbinung mit dem Editor Emacs auf die neue Scala-Technoligie in Verbindung mit dem Java-Editor jEdit mit sich bringen und wie diese neuen Technologien hier an der TU Graz zum Ausbau des \sisac-Projektes genutzt werden k\"{o}nnen. Um die Weiterentwicklung voranzutreiben, wurden Schnittstellen identifiziert, an denen man an die bereits vorhandene Isabelle-jEdit-Implementierung andocken k\"{o}nnte und welche Vor- und Nachteile die f\"{u}r \sisac mit sich bringen. Weiters wurde der Editor jEdit und vorallem dessen Plugin-Managment-System durchleuchtet und ein Grund-Plugin f\"{u}r die Entwicklung des "structured derivations"-Plugins gelegt. Zuletzt wurde eine Schnittstelle zum Isabelle-Pure-Library implementiert.}
     1.9  
    1.10 -Die vorliegende Bachelorarbeit in Telematik f\"uhrt in die speziellen, dem Frontend zugrundleliegenden Konzepte und Komponenten  (Scala-Layer f\"ur asynchrone Bearbeitung von Beweisdokumenten, jEdit mit Plugins, Parser) ein, dokumentiert die momentane Organisation dieser Komponenten im Isabelle System und implementiert das gesamte System in einer integrierten Entwicklungsungebung. Diese Implementation entspricht jener des Teils des Isabelle-Teams, das am neuen Frontend arbeitet.
    1.11 -
    1.12 -Hiermit sind die organisatorischen und softwaretechnische Voraussetzungen daf\"ur geschaffen, dass ein Team an der Technischen Universi\"at Graz an der Entwicklung des kommenden Frontends f\"ur den Theoremprover Isabelle und seiner Integration in Entwicklungswerkzeuge teilhaben kann.
    1.13 -}
    1.14 -
    1.15 -\section{Einf\"{u}hrung}\label{intro}
    1.16 +\section{Einf\"{u}rung}\label{intro}
    1.17  Computer Theorem Prover (CTP) sind bis dato in H\"anden eines relativ kleinen Kreises von Experten, von denen der Gro{\ss}teil wiederum im akademischen Bereich arbeitet und nur ein kleiner Teil in der Industrie. Diese Experten bevorzugen Keyboard-Shortcuts (vor Men\"us), reine Texte (ohne mathematische Sonderzeichen) und benutzen auch mit gro{\ss}em Aufwand hergestellte CTP-Entwicklungs-Umgebungen nicht, zum Beispiel die CoqIDE.
    1.18  
    1.19 -Nachdem CTP nun unaufhaltsam in Entwicklungs-Umgebungen von Software- Ingenieuren vorzudringen beginnen \cite{wolff10-boogie}, stellt sich die Herausforderung neu, Frontends f\"ur die t\"agliche Entwicklungsarbeit mit integrierten CTP zu entwerfen.
    1.20 +Nachdem CTP nun unaufhaltsam in Entwicklungs-Umgebungen von Software-Ingenieuren vorzudringen beginnen, stellt sich die Herausforderung neu, Frontends f\"ur die t\"agliche Entwicklungsarbeit mit integrierten CTP zu entwerfen.
    1.21  Isabelle stellt sich dieser Herausforderung motiviert durch eine aktuelle technische Entwicklung: Multicore-Maschinen versprechen erh\"ohten Durchsatz, falls Teile von Beweisen parallel abgearbeitet werden k\"onnen. Isabelles Entwurf sieht vor, die Programmsprache Scala (insbesonders seine Actor-Library) als Bindeglied zwischen der Mathematik-Sprache SML und der g\"angisten Plattform f\"ur GUIs vor, der Java-Virtual-Maschine.
    1.22  
    1.23  Die Bachelorarbeit l\"auft im Rahmen des ISAC-Projektes. ISACs experimenteller Mathematik-Assistant baut auf dem SML-Teil von Isabelle auf und es ist geplant, auch sein Frontend in entsprechend geplanten Schritten an die aktuelle Entwicklung von Isabelle anzuschlie{\ss}en. Der erste Schritt geht einen Umweg, um die Technologie kennen zu lernen: Nicht ISACs Rechnungen (mit aufw\"andigen Interaktionen), sondern Backs 'structured derivations' (SD) sollen auf jEdit und Isabelle aufgesetzt werden. Die Bachelorarbeit liefert die Machbarkeits-Studie f\"ur diesen Schritt.
    1.24 @@ -44,128 +39,111 @@
    1.25  %     http://de.wikipedia.org/wiki/JEdit
    1.26  %     http://www.chip.de/downloads/jEdit_19235021.html
    1.27  %
    1.28 -jEdit ist ein in Java geschriebener und als Open-Source-Projekt erh\"altlicher Texteditor, der vorallem durch sein sehr gut entwickeltes und ebenso einfaches Plugin-Managment-System sehr effektiv eingesetzt werden kann. Solche Plugins k\"{o}nnen direkt in jEdit installiert oder durch manuelles Hinzuf\"{u}gen eines Plugin-Paketes genutzt werden. Dadurch ist dieser Editor sehr flexibel in der Anwendung und kann den eigenen Bed\"{u}rfnissen perfekt angepasst werden.
    1.29 -Diese Umst\"ande sind wohl auch der Grund, warum sich die Entwickler von Isabelle f\"ur diesen Editor entschieden haben. Hierbei ist zu erw\"{a}hnen, dass hier eine etwas modifizierte bzw. an Isabelle angepasste Version verwendet wird. Es empfiehlt sich daher, immer die aktuelle Version des Isabelle-jEdit-Editors (zB. aus dem Bundle erh\"{a}ltlich auf der Isabelle-Homepage) zu verwenden, da hier diverse Voreinstellungen vorgenommen wurden. In weiterer Folge wird mit jEdit immer diese modifizierte Version des Editors in Verbindung gebracht, da die Verwendung der Grundversion aus oben genannten Gr\"{u}nden nicht zu empfehlen bzw. sinnvoll ist.
    1.30 +jEdit ist ein in Java geschriebener und als Open-Source-Projekt erh\"altlicher Texteditor, der vorallem durch sein sehr gut entwickeltes und ebenso einfaches Plugin-Managment-System sehr effektiv eingetzt werden kann. Solche Plugins k\"{o}nnen direkt in jEdit installiert oder durch manuelles hinzuf\"{u}gen eines Plugin-Paketes genutzt werden. Dadurch ist dieser Editor sehr flexibel in der Anwendung und kann den eigenen Bed\"{u}rfnissen perfekt angepasst werden.
    1.31 +Diese Umst\"ande sind wohl auch der Grund, warum sich die Entwickler von Isabelle f\"ur diesen Editor entschieden haben. Hierbei ist zu erw\"{a}hnen, dass hier eine etwas modifizierte bzw. an Isabelle angepasste Version verwendet wird. Es empfiehlt sich daher, immer die aktuelle Version des Isabelle-jEdit-Editors (zB. aus dem Bundle erh\"{a}ltlich auf der Isabelle-Homepage) zu verwenden, da hier diverse Voreinstellungen vorgenommen wurden. In weiterer Folge wird mit jEdit immer diese modifizierte Version des Editors in Verbindung gebracht, da die Verwendung der Grundversion aus oben gennanten Gr\"{u}nden nicht zu empfehlen bzw. sinnvoll ist.
    1.32  Weiters sollte noch erw\"ahnt werden, dass es rund um jEdit einen sehr guten Support via Mailinglist gibt und man wirklich rasch Hilfestellung bekommen kann.
    1.33  
    1.34  \subsubsection{Das Plugin-System}
    1.35  % http://jedit.org/users-guide/writing-plugins-part.html
    1.36 -Wie im vorigen Abschnitt bereits erw\"ahnt, ist es sehr einfach und bequem m\"oglich, geeignete Plugins zu installieren bzw. zu verwenden. Es stehen bereits sehr viele verschiedenste Plugins auf der jEdit-Homepage zur Verf\"{u}gung. Diese werden ebenfalls als Open-Source-Projekte angeboten und es bietet sich daher an, bereits verf\"ugbare und funktionierende Plugins als Teil eines neuen Plugins zu verwenden und gegebenenfalls kleine Modifikationen oder Erweiterungen an den Plugins durchzuf\"{u}hren. Im Beispiel von Isabelle wurden unter anderem die Plugins \textit{Sidekick} und \textit{Konsole} verwendent. Dabei ist es m\"oglich, dass Java-Plugins mit Scala-Plugins kombiniert werden, da diese auch problemlos miteinander kommunizieren k\"{o}nnen.
    1.37 +Wie im vorigen Abschnitt bereits erw\"ahnt, ist es sehr einfach und bequem m\"oglich, geeignete Plugins zu installieren bzw. zu verwenden. Es stehen bereits sehr viele verschiedenste Plugins auf der jEdit-Homepage zur Verf\"{u}gung. Diese werden ebenfalls als Open-Source-Projekte angeboten und es bietet sich daher an, bereits verf\"ugbare und funktionierende Plugins als Teil eines neuen Plugins zu verwenden und gegebenenfalls kleine Modifikationen oder Erweiterungen an den Plugins durchzuf\"{u}hren. Im Beispiel von Isabelle wurden unter anderen die Plugins \textit{Sidekick} und \textit{Konsole} verwendent. Dabei ist es m\"oglich, dass Java-Plugins mit Scala-Plugins kombiniert werden und diese k\"{o}nnen auch problemlos miteinander kommunizieren.
    1.38  jEdit bietet einen Plugin-Manager an, mit dem sich sehr einfach bereits installierte Plugins verwalten und updaten lassen und es ist auch m\"{o}glich, neue Plugins direkt zu installieren.
    1.39 -Weiters bietet sich die Möglichkeit, selbst implementierte Plugins direkt zu den bereits vorhandenen jEdit-Plugins hizuzuf\"{u}gen. Dazu muss das erzeugte "Plugin".jar Paket ledigich in den jars-Ordner verschoben werden. Beim Start von jEdit wird das neue Plugin automatisch erkannt und hinzugef\"{u}gt. Man muss aber darauf achten, dass \"{A}nderungen nur nach einem Neustart von jEdit \"{u}bernommen werden.
    1.40 +Es ist auch m\"{o}glich, selbst implementierte Plugins direkt zu den bereits vorhandenen jEdit-Plugins hizuzuf\"{u}gen. Dazu muss das erzeugte "Plugin".jar Paket ledigich in den jars-Ordner verschoben werden. Dieser OrdnerBeim Start von jEdit wird das neue Plugin automatisch erkannt und hinzugef\"{u}gt. Man muss aber darauf achten, dass \"{a}nderungen nur nach einem Neustart von jEdit \"{u}bernommen werden.
    1.41  
    1.42  
    1.43  \subsubsection{Pluginstruktur}
    1.44 -Ein solches jEdit-Plugin muss nat\"{u}rlich ein gewisses Design umsetzen, um von jEdit korrekt ausgef\"{u}hrt werden zu k\"{o}nnen. Grunds\"{a}tzlich besteht ein solches Plugin aus den eigentlichen Sourcefiles und einigen XML- und Property-Datein. 
    1.45 +Ein solches jEdit-Plugin muss nat\"{u}rlich einen gewissen Design umsetzen, um von jEdit korrekt ausgef\"{u}hrt werden zu k\"{o}nnen. Grunds\"{a}tzlich besteht ein solches Plugin aus den eigentlichen Sourcefiles und einigen XML- und Property-Datein. 
    1.46  Ein m\"{o}glicher Aufbau kann dem Beispiel-Plugin "QuickNotepad"\footnote{http://jedit.org/users-guide/writing-plugins-part.html}, das auf der jEdit-Homepage zu finden ist, entnommen bzw. als Ausgangspunkt f\"{u}r die Entwicklung eines eigenen Plugins herangezogen werden. Weitere Informationen k\"{o}nnen auch dem Paper "Userinterfaces for Computer Theorem Provers" entnommen werden. 
    1.47  
    1.48  \subsection{Isabelle}
    1.49 -Isabelle ist einer der f\"{u}hrenden CTPs und an dessen Weiterentwicklung wird st\"{a}ndig gearbeitet. Der letzte gro{\ss}e Schritt betraf den Umstieg von reinem ML auf die Mischsprache Scala. Weiters wurde der in die Jahre gekommene Proof General und der damit in Verbindung stehende Editor Emacs durch den vielseitigen Editor jEdit ersetzt. Dadurch ergeben sich auch f\"{u}r das laufende \sisac-Projekt an der TU Graz neue M\"{o}glichkeiten. Wichtig im Zusammenhang mit dieser Beschreibung ist zu erw\"{a}hnen, dass hier in weiterer Folge nur noch f\"{u}r jEdit bzw. Scala relevante Teile von Isabelle behandelt und beschrieben werden. Weiters ist wichtig zu wissen, dass f\"{u}r die bereits bestehende Struktur rund um Isablle-jEdit zwei Isabelle-Pakete zum Einsatz kommen. Auf diese Pakete soll in den n\"{a}chsten Passagen eingegangen werden.
    1.50 +Isabelle ist einer der f\"{u}hrenden CTPs und an dessen Weiterentwicklung wird st\"{a}ndig gearbeitet. Der letzte gro{\ss}e Schritt betraf den Umstieg von reinem ML auf die Mischsprache Scala. Weiters wurde der in die Jahre gekommene Proof General und der damit in Verbindung stehende Editor Emacs durch den vielseitigen Editor jEdit ersetzt. Dadurch ergeben sich auch f\"{u}r das laufende \sisac-Projekt an der TU Graz neue M\"{o}glichkeiten. Wichtig im Zusammenhang mit dieser Beschreibung ist wichtig zu erw\"{a}hnen, dass hier in weiterer Folge nur noch f\"{u}r jEdit bzw. Scala relevante Teile von Isabelle behandelt und beschrieben werden. Weiters ist wichtig zu wissen, dass f\"{u}r die bereits bestehende Struktur rund um Isablle-jEdit zwei wichtige Isabelle-Pakete zum Einsatz kommen. Auf diese Pakete soll in den n\"{a}chsten Passagen eingegangen werden.
    1.51  
    1.52  \subsubsection{Isabelle-Pure}
    1.53 -In diesem Plugin ist der eigentliche CTP-Teil von Isabelle verpackt. Das bedeutet im weiteren Sinn, dass es hier keine grafische Verarbeitung der Daten gibt, sondern der Zugriff von aussen erforderich ist, um den CTP mit Daten zu versorgen und diese nach deren Verabreitung in Isabelle-Pure auszuwerten. Also ist nur hier eine Schnittstelle zum eigentlichen Proofer m\"{o}glich und deshalb ist dieses Plugin f\"{u}r das \sisac-Projekt von zentraler Bedeutung. Standardm\"{a}{\ss}ig ist bereits ein Pure.jar-Paket f\"{u}r jEdit vorhanden. Um SD umsetzten zu k\"{o}nnen, muss hier eine Schnittstelle zu Isabelle-Pure implementiert werden. Nach diesem Schritt kann das Plugin Pure.jar neu gebaut werden. 
    1.54 +In diesem Plugin ist der eigentliche CTP-Teil von Isabelle verpackt. Wichtig zu wissen ist, dass es hierzu keine graphische Oberfl\"{a}chen oder direkten zugang von seiten des Editors gibt. Jedoch ist nur hier eine Schnittstelle zum eigentlichen Proofer m\"{o}glich und deshalb f\"{u}r das \sisac-Projekt von zentraler Bedeutung. Stanardm\"{a}{\ss}ig ist bereits ein Pure.jar-Paket f\"{u}r jEdit vorhanden. Um SD umsetzten zu k\"{o}nnen, muss hier einen Schnittstelle zu Isabelle-Pure implementiert werden. Nach diesem Schritt kann das Plugin Pure.jar neu gebaut werden. 
    1.55  
    1.56  \subsubsection{Isabelle-jEdit}
    1.57  Dieser Teil von Isabelle repr\"{a}sentiert das Frontend in jEdit. Hier wird also die grafische Aufbereitung der von Isabelle-Pure berechneten Daten \"{u}bernommen. Dieses Plugin zeigt sehr sch\"{o}n, wie bereits bestehende Plugins weiter genutzt und erweitert werden k\"{o}nnen.
    1.58 -An diesem Plugin wird von Seiten der Isabelle-Entwickler sehr stark weitergearbeitet. Darum sollten hier wohl nicht zu viele, am besten nat\"{u}rlich keine \"{A}nderungen, vorgenommen werden. Der Umstand, dass sich einzelne Plugins ganz einfach in einem anderen mitverwenden lassen, macht es m\"{o}glich, dass das \sisac-Plugin sehr einfach, im Idealfall von Seiten der Isabelle-Entwickler, in das Isabelle-jEdit-Plugin integriert werden kann.
    1.59 +An diesem Plugin wird von seiten der Isabelle-Entwickler sehr stark weitergearbeitet. Darum sollten hier wohl nicht zu viele, am besten nat\"{u}rlich keine \"{a}nderungen, vorgenommen werden. Der Umstand, dass sich einzellnen Plugins ganz einfach in einem anderen mitverwenden lassen, macht es m\"{o}glich, dass das \sisac-Plugin sehr einfach, im Idealfall von Seiten der Isabelle-Entwickler, in das Isabelle-jEdit-Plugin integriert werden kann.
    1.60  
    1.61  \subsubsection{Paketstruktur von Isabelle}
    1.62  Durch die Komplexit\"{a}t des Isabelle-Entwicklungs-Aufbaus soll hier eine Auflistung aller relevanten jar-Pakete erfolgen. Alle Pakete befinden sich innerhalb der Ordnerstruktur von ISABELLE\_HOME. Darum wird ab hier immer von diesem Verzeichnis ausgegangen.
    1.63 -Die nachfolgende Auflistung zeigt alle Pakete, die f\"{u}r SD bzw. \sisac von Bedeutung sind und und wo diese zu finden sind.
    1.64 +Nachfolgende Auflistung zeigt alle Pakete, die f\"{u}r SD bzw. \sisac von Bedeutung sind und und wo diese zu finden sind.
    1.65   
    1.66  
    1.67  \begin{itemize}
    1.68  \item \textit{contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, ...} Der Ordner contrib ist in der Repository-Version nicht vorhanden! Dieser kann dem Isabelle-Bundle  entnommen werden. Hier befinden sich alle ben\"{o}tigten Zusatztools f\"{u}r Isabelle und darunter eben auch jEdit. In dem oben angef\"{u}hrten Ordner liegen alle Plugins bzw. dorthin werden alle Plugins kopiert, die zusammen mit jEdit gestartet werden sollen. Das oben angef\"{u}hrte Script \"{u}bernimmt genau diesen Kopiervorgang f\"{u}r Isac.jar und Pure.jar. 
    1.69 -\item \textit{lib/classes:} \textbf{isabelle-scala.jar, pure.jar;} Standardm\"{a}{\ss}ig ist dieser Ordner nicht vorhanden. Erst durch Erzeugen der angef\"{u}hrten jar's werden dieser Ordner und die Pakete erstellt.
    1.70 +\item \textit{lib/classes:} \textbf{isabelle-scala.jar, pure.jar;} Standardm\"{a}{\ss}ig ist dieser Ordner nicht vorhanden. Erst durch erzeugen der angef\"{u}hrten jar's wird dieser Ordner und die Pakete erstellt.
    1.71  \item \textit{src/Tools/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} 
    1.72 -\item \textit{src/Tools/isac/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} Diese beiden obigen Verzeichnisse sind, wie man an der sehr \"{a}hnlichen Pfadstruktur erkennen kann, \"{a}quivalent, wobei der zweite Pfad zum \sisac- // Entwicklungsverzeichnis geh\"{o}rt. Hier sind die f\"{u}r das Isabelle-jEdit- bzw. \sisac-Plugin ben\"{o}tigten Plugins und Pakete plus das erzeugte Plugin zu finden.
    1.73 -\item \textit{src/Tools/isac/jEdit/contrib/jEdit/build/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} Diesen Aufbau ben\"{o}tigt man nur, wenn man das jEdit-Isac-Projekt direkt in NetBeans debuggen m\"{o}chte. Man erkennt, dass in diesem Verzeichnis der vollst\"{a}ndige Quellcode von jEdit plus allen Plugins, die zusammen mit jEdit gestartet werden sollen, hier zu finden sind. Wie aber bereits erw\"{a}hnt, ist vom direkten Debuggen generell abzuraten. 
    1.74 +\item \textit{src/Tools/isac/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} Diese beiden obigen Verzeichnisse sind, wie man an den sehr \"{a}hnlichen Pfadstruktur erkennen kann, \"{a}quivalent wobei der zweite Pfad zum \sisac-Etwicklungsverzeichnis geh\"{o}rt. Hier sind die f\"{u}r das Isabelle-jEdit- bzw. \sisac-Plugin ben\"{o}tigten Plugins und Pakete plus das erzeugte Plugin zu finden.
    1.75 +\item \textit{src/Tools/isac/jEdit/contrib/jEdit/build/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} Diesen Aufbau ben\"{o}tig man nur, wenn man das jEdit-Isac-Projekt direkt in NetBeans debuggen m\"{o}chte. Man erkennt, dass in diesem Verzeichnis der vollst\"{a}ndige Quellcode von jEdit plus allen Plugins, die zusammen mit jEdit gestartet werden sollen, hier zu finden sind. Wie aber bereits erw\"{a}hnt, ist vom direkten Debuggen generell abzuraten. 
    1.76  \end{itemize} 
    1.77  
    1.78  
    1.79  \subsection{Die Programmiersprache Scala}
    1.80 -Urspr\"{u}nglich wurde Isabelle rein in ML entwickelt. Erst vor ein paar Jahren wurde mit der \"{U}bersetzung von einigen Teilen in Scala begonnen. Grund genug, sich hier kurz diese neue und sehr vielseitige Sprache etwas genauer anzusehen.
    1.81 +Urspr\"{u}nglich wurde Isabelle rein in ML entwickelt. Erst vor ein paar Jahren wurde mit der \"{U}bersetzung von einigen Teilen in Scala begonnen. Grund genug, sich hier kurz diese neue und sehr vielseitige Sprache etwas anzusehen.
    1.82  
    1.83  \subsubsection{Grundlage der Sprache}
    1.84 -Scala ist eine objektorientierte Sprache, die sehr \"{a}hnlich zu Java aufgebaut wurde. Dadurch wird die Einarbeitung in diese Programmiersprache f\"{u}r Java-Programmierer sehr vereinfacht. Neben den Vorteilen einer objektorientierten Sprache deckt Scala aber auch die Bed\"{u}rfnisse der funktionalen Programmierung ab. Dies ist wohl der Hauptgrund, warum sich das Isabelle-Entwicklungsteam f\"{u}r diese Sprache entschieden hat. Wie breits erw\"{a}hnt, ist Scala sehr \"{a}hnlich aufgebaut wie Java und hat nebenbei noch den gro{\ss}en Vorteil, dass Scala-Executables in der JVM (Java virtual Machine) ausf\"{u}hrbar sind. Dadurch ist die Plattformunabh\"{a}ngigkeit garantiert und es besteht ein direkter Zusammenhang zwischen Scala und Java der auch bei der jEdit-Plugin-Entwicklung ausgenutzt bzw. verwendet wird.
    1.85 +Scala ist eine objektorientierte Sprache die sehr \"{a}hnlich zu Java aufgebaut wurde. Dadurch wird die Einarbeitung in diese Programmiersprache f\"{u}r Java-Programmierer sehr vereinfacht. Neben der Vorteilen einer objektorientierten Sprache deckt Scala aber auch die Bed\"{u}rfnisse der funktionalen Programmierung werden mit Scala abgedeckt. Dies ist wohl der Hauptgrund warum sich das Isabelle-Entwicklungsteam f\"{u}r diese Sprache entschieden hat. Wie breits erw\"{a}hnt ist Scala sehr \"{a}hnlich aufgebaut wie Java und hat nebenbei noch den gro{\ss}en Vorteil, das Scala-Executables in der JVM (Java virtual Machine) ausf\"{u}hrbar sind. Dadurch ist die Plattformunabh\"{a}ngigkeit garantiert und es besteht daher ein direkter Zusammenhang zwischen Scala und Java der auch bei der jEdit-Plugin-Entwiklung ausgenutzt bzw. verwedendet wird.
    1.86  
    1.87 -Dieser direkte Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing gezeigt bzw. die Vorteile, die daraus resultieren, beleuchtet werden.
    1.88 +Dieser direkte Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing gezeigt bzw. die Vorteile, die daraus resultieren beleuchtet werden.
    1.89  
    1.90 -Beide Sprachen stellen diese Grafik-Bibliotheken zur Verf\"{u}gung (und darin auch eigene Shapes und Funktionalit\"{a}t). Es ist jedoch m\"{o}glich, Java-Bibliotheken, wie eben Java-Swing in Scala zu verwenden. Ein JButton(Java) kann zum Beispiel mittels \textit{import javax.swing.JButton} in Scala eingebunden und damit sofort verwendet werden. Auch Scala stellt in seiner Swing-Bibliothek einen Button zur Verf\"{u}gung: \textit{scala.swing.Button}. Es wird nahezu dieselbe Funktionalit\"{a}t angeboten und teilweise die Erzeugung bzw. Verwendung vereinfacht. Man kann sich nun fragen, warum sich die Scala-Entwickler einerseits die M\"{u}he gemacht haben, die Verwendung Java-Swing, wie in Java selbst, m\"{o}glich zu machen und andererseits mit Scala-Swing eine nahezu idente Alternative geschaffen haben. 
    1.91 +Beide Sprachen stellen diese Grafik-Bibliotheken zur Verf\"{u}gung (und darin auch eigene Shapes und Funktionalit\"{a}t). Es ist jedoch m\"{o}glich, Java-Bibliotheken, wie eben auch Java-Swing in Scala zu verwenden. Ein JButton(Java) kann zum Beispiel mittels \textit{import javax.swing.JButton} in Scala eingebunden und damit sofort auch verwendet werden. Auch Scala stellt in seiner Swing-Bibliothek eine Button zur Verf\"{u}gung: \textit{scala.swing.Button}. Es wird nahezu die selbe Funktionalit\"{a}t angeboten und teilweise die Erzeugung bzw. Verwendung vereinfacht. Man kann sich nun fragen, warum sich die Scala-Entwickler einerseit die M\"{u}he gemacht haben, die Verwendung Java-Swing, wie in Java selbst, m\"{o}glich zu machen und andererseits mit Scala-Swing eine nahezu idente Alternative geschaffen haben. 
    1.92  
    1.93 -Die Antwort darauf zeigt, wie die Objektorientiertheit von Scala in vielen Bereichen ausgenutzt wurde, um die Sprache mit Funktionalit\"{a}t auszur\"{u}sten, denn es wurde kein neues Konzept f\"{u}r diese Grafikklassen entworfen, sondern Wrapper-Objekte/ Methoden/Klassen erstellt, die das Arbeiten mit diesen Grafikkomponenten erleichtern soll. 
    1.94 -Ein Letztes Problem bleibt noch: Es ist zwar sehr einfach ein Java-Swing-Objekt an einen Scala-Swing-Container (zb. Frame) anzubinden, da eine Konvertierung einer Java-Komponente in ein Scala-\"{a}quivalent problemlos m\"{o}glich ist. Jedoch ist oft auch die Konvertierung einer Scala- in eine Java-Komponente n\"{o}tig. Dies kann ganz einfach mittels \textit(peer)-Befehl der Komponente erreicht werden.
    1.95 +Die Antwort darauf zeigt, wie die Objektorientiertheit von Scala in vielen Bereichen ausgenutzt wurde, um die Sprache mit Funktionalit\"{a}t auszur\"{u}sten, denn es wurde kein neues Konzept f\"{u}r diese Grafikklassen entworfen sondern Wrapper-Objekte/Methoden/Klassen erstellt, die das Arbeiten mit diesen Grafikkomponenten erleichtern soll. 
    1.96 +Ein Letztes Problem bleibt noch: Es ist zwar sehr einfach ein Java-Swing-Objekt an einen Scala-Swing-Container (zb. Frame) anzubinden, da eine Konvertierung einer Java-Komponente in ein Scala-\"{a}quivalent problemlos m\"{o}glich ist. Jedoch ist oft auch die der Konvertierung einer Scala- in eine Java-Komponente n\"{o}tig. Dies kann ganz einfach mittels \textit(peer)-Befehl der Komponente erreicht werden.
    1.97  
    1.98 -Das angef\"{u}hrte Beispiel soll zeigen, wie vielseitig Scala sein kann und welch enormes Potenzial in dieser noch sehr jungen Sprache steckt. Nat\"{u}rlich gibt es dazu eine sehr gut aufgebaute Entwickler-Homepage\footnote{http://www.scala-lang.org/}, die Tutorials, Plugin f\"{u}r diverse IDEs und weitere n\"{u}tzliche Hilfestellungen f\"{u}r Scala-Neulinge bereitstellt.
    1.99 +Das angef\"{u}hrte Beispiel soll zeigen, wie vielseitig Scala sein kann und welch enormes Potenzial in dieser noch sehr jungen Sprache steckt. Nat\"{u}rlich gibt es dazu eine sehr gut aufgebaute Entwickler-Homepage\footnote{http://www.scala-lang.org/} die Tutorials, Plugin f\"{u}r diverse IDEs und weitere n\"{u}tzliche Hilfestellungen f\"{u}r Scala-Neulinge bereitstellt.
   1.100  
   1.101  \subsubsection{Scala, Java und jEdit}
   1.102 -Wie im letzten Abschnitt bereits beschrieben, kommen bei jEdit Java- sowie auch Scala-Komponenten zum Einsatz bzw. werden sogar zu logischen Einheiten kombiniert. So ist zum Beispiel jEdit selbst rein in Java geschrieben und das Plugin Isabelle-jEdit rein in Scala. Trotzdem gibt es \"{u}berhaupt kein Problem, diese beiden jar-File miteinander bzw. ineinander in der JVM zu nutzen. Es geht sogar so weit, dass es m\"{o}glich ist, dass das Plugin Isabelle-jEdit bereits vorhandene und rein in Java geschriebene Plugins erweitert und nutzt. Dieses Zusammenspiel zwischen Objekten aus zwei verschiedenen Sprachen ist doch recht au\ss ergew\"{o}hnlich und kann bzw sollte nat\"{u}rlich auch f\"{u}r SD bzw. \sisac ausgenutzt werden!
   1.103 +Wie im letzten Abschnitt bereits beschrieben, kommen bei jEdit Java- sowie auch Scala-Komponenten zum Einsatz bzw. werden sogar zu logischen Einheiten kombiniert. So ist zum Beispiel jEdit selbst rein in Java geschrieben und das Plugin Isabelle-jEdit rein in Scala. Trotzdem gibt es \"{u}berhaupt kein Problem diese beiden jar-File miteinander bzw. innereinander in der JVM zu nutzen. Es geht sogar so weit, dass es m\"{o}glich ist, dass das Plugin Isabelle-jEdit bereits vorhandene und rein in Java geschriebene Plugins erweitert und nutzt. Dieses Zusammenspiel zwischen Objekten aus zwei verschiedenen Sprachen ist doch recht aussergew\"{o}hnlich und kann bzw sollte nat\"{u}rlich auch f\"{u}r SD bzw. \sisac ausgenutzt werden!
   1.104  
   1.105  
   1.106  \section{Aufbau des SD-Plugins}
   1.107  Dieses Kapitel soll nun anhand der bereits gewonnen Erkenntnise illustrieren, wie die wichtigsten Schritte zum SD-Plugin f\"{u}r jEdit wahrscheinlich aussehen werden.
   1.108 -Wobei einige Schritte parallel und dadurch nat\"{u}rlich sehr gut im Team umgesetzt werden k\"{o}nnen.
   1.109 +Wobei einige Schritte parallel und dadurch nat\"{u}rlich sehr gut im Team umgesetzt werden kann.
   1.110  
   1.111  \subsection{Erstellen des Plugin-Ger\"{u}sts}
   1.112 -Hier gilt es, erstmal den Umfang der gew\"{u}nschten Anforderungen an das Plugin so genau wie m\"{o}glich zu identifizieren. Hat man eine sehr genaue Vorstellung, wie das GUI des Plugins aussehen wird und welche Zusatz-Features angeboten werden sollen so kann man gezielt unter den bereits bestehenden Plugins f\"{u}r jEdit nach n\"{u}tzlichen Plugins suchen, die in das SD-Plugin (m\"{o}glicherweise durch kleine Modifikationen) integriert werden k\"{o}nnen. Dies spart einerseits sehr viel Zeit und ist nebenbei genau die Art von Programmierung, die durch die offnene Plugin-Struktur von jEdit gef\"{o}rdert wird. 
   1.113 +Hier gilt es, erstmal den Umfang der gew\"{u}nschten Anforderungen an das Plugin so genau wie m\"{o}glich zu identifizieren. Hat man eine sehr genaue Vorstellung, wie das GUI des Plugins aussehen wird und welche Zusatz-Features angeboten werden sollen so kann man gezielt untern den bereits bestehenden Plugins f\"{u}r jEdit nach n\"{u}tzlichen Plugins suchen, die in das SD-Plugin (m\"{o}glicherweise durch kleine Modifikationen) integriert werden k\"{o}nnen. Dies spart einerseits sehr viel Zeit und ist nebenbei genau die Art von Programmierung die durch die offnene Plugin-Struktur von jEdit gef\"{o}rdert wird. 
   1.114  
   1.115  Hat man nun die Planung abgeschlossen und m\"{o}glicherweise n\"{u}tzliche Plugins gefunden, kann mit der Programmierung des GUIs begonnen werden. Man sollte hier beachten, dass man von Beginn an festlegt, ob mit Scala- oder Java-Swing Komponenten gearbeitet werden soll. Es ist zwar m\"{o}glich, beide Formen zu mischen, doch aus Klarheitsgr\"{u}nden sollte man sich doch f\"{u}r eine Art entscheiden. Wobei hier die Empfehlung im Moment eher noch Richtung Java-Swing geht, da man hier eigentlich f\"{u}r jede Art von Problem bzw. Aufgabe bereits HowTo's im Web finden kann. Da bei Scala-Swing nur Wrapper auf die Java-Swing-Libraries gesetzt wurden, entsteht dadurch auch keinerlei Performance-Verlust.
   1.116  
   1.117 -Es existiert bereits ein beispielhaftes Plugin am \sisac-Repository. Da der grunds\"{a}tzliche Aufbau eines jEdit-Plugins soweit umgesetzt wurde und bereits lauff\"{a}hig ist, sollte man dieses wohl als Ausgangspunkt verwenden. Die direkte Verwendung eines Isabelle-Klons ist wohl zu Beginn nicht zu empfehlen bzw. sollte meiner Meinung nach die Integration von Isac in Isabelle bzw. die Verwachsung der beiden Plugins das Fernziel sein und dadurch w\"{u}rde der Klon-Vorgang wohl eher Probleme schaffen als sie zu l\"{o}sen.
   1.118 +Es existiert bereits ein beispielhaftes Plugin am \sisac-Repository. Da der Grunds\"{a}tzliche Aufbau eines jEdit-Plugins soweit umgesetzt wurde und bereits lauff\"{a}hig ist, sollte man dieses wohl als Ausgangspunkt verwenden. Die direkte Verwendung eines Isabelle-Klons ist wohl zu Beginn nicht zu empfehlen bzw. sollte meiner Meinung nach die Integration von Isac in Isabelle bzw. die Verwachsung der beiden Plugins das Fernziel sein und dadurch w\"{u}rde der Klon-Vorgang wohl eher Probleme schaffen als sie zu l\"{o}sen.
   1.119  
   1.120  \subsection{Erzeugung des Plugins}
   1.121 -Hat man die Planung des Plugin-Ger\"{u}sts abgeschlossen und die eigentliche Implementationsphase begonnen, kann dieses Plugin getestet bzw. erzeugt und via jEdit ausgef\"{u}hrt werden. Dazu muss zuerst das jar-File erzeugt und danach in den jEdit-Pluginsordner verschoben werden. Die Erzeugung kann nat\"{u}rlich direkt mittels NetBeans durchgef\"{u}hrt werden. Doch es ist auch m\"{o}glich dies via Kommandline durchzuf\"{u}hren. Folgende Schritte illustrieren wie die Erzeugung und der Kopiervorgang des Plugins durchgef\"{u}hrt werden k\"{o}nnen(Ausschnitt aus dem Skript isac\_jedit):
   1.122 +Hat man die Planung des Plugin-Ger\"{u}sts abgeschlossen und die eigentliche Implementationsphase begonnen, kann dieses Plugin getestet bzw. erzeugt und via jEdit ausgef\"{u}hrt werden. Dazu muss zuerst das jar-Filer erzeugt werden und danach in den jEdit-Pluginsordner verschoben werden. Die Erzeugung kann nat\"{u}rlich dirket mittels NetBeans durchgef\"{u}hrt werden. Doch es ist auch m\"{o}glich dies via Kommandline durchzuf\"{u}hren. Folgende Schritte illustrieren wie die Erzeugung und der Kopiervorgang des Plugins durchgef\"{u}hrt werden kann(Ausschnitt aus dem Skript isac\_jedit):
   1.123  \begin{enumerate}
   1.124  \item Das Plugin kann mittels Kommandline folgenderma{\ss}en erstellt werden: \textit{cd ISABELLE\_HOME/src/Tools/isac/jEdit} $\rightarrow$ \textit{ant jar}
   1.125 -\item Nun kann das das neue Plugin ganz einfach kopiert werden \textit{cp contrib/jEdit/build/ // jars/Isac.jar ../../../../contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/}
   1.126 +\item Nun kann das das neue Plugin ganz einfach kopiert werden \textit{cp contrib/jEdit/build/jars/Isac.jar ../../../../contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/}
   1.127  \item jEdit ausf\"{u}hren und testen
   1.128  \end{enumerate}
   1.129  
   1.130  \subsection{Verbindung zum Isabelle-Pure Plugin herstellen}
   1.131  Der n\"{a}chste Schritt sieht nun die Versorgung des GUIs mit Daten vor. Da das jEdit-Plugin selbst nicht rechnen/interpretieren kann, m\"{u}ssen Daten an den Isabelle-Kern, also das Isabelle-Pure-Plugin weitergegeben werden. Dort k\"{o}nnen die Daten verwertet und aufbereitet zur\"{u}ck an das Frontend gereicht werden. 
   1.132  
   1.133 -Um diesen Schritt setzen zu k\"{o}nnen, muss eine Schnittstelle zwischen dem Kern von Isabelle, Isabelle-Pure und dem Plugin hergestellt werden. Dazu muss zun\"{a}chst Pure.jar leicht modifiziert, danach neu erstellt und zuletzt zu den restlichen jEdit-Plugins hinzugef\"{u}gt werden. Dies wurde auf der aktuellen Version am Repository bereits erledigt. Folgende Schritte wurden dazu gesetzt und sind wieder n\"{o}tig, da sicher weitere Modifikationen an der Datei Pure.jar n\"{o}tig sein werden.
   1.134 +Um diesen Schritt setzten zu k\"{o}nnen, muss eine Schnittstelle zwischen dem Kern von Isabelle, Isabelle-Pure und dem Plugin hergestellt werden. Dazu muss zun\"{a}chst Pure.jar leicht modifiziert, danach neu erstellt und zuletzt zu den restlichen jEdit-Plugins hizugef\"{u}gt werden. Dies wurde auf der aktuellen Version am Repository bereits erledigt. Folgende Schritte wurden dazu gesetzt und sind wieder n\"{o}tig, da sicher weitere Modifikationen an der Datei Pure.jar n\"{o}tig sein werden.
   1.135  
   1.136  \begin{enumerate}
   1.137  \item Um den \sisac-Teil im Isabelle-Pure genau abzugrenzen, wurde ein Ordner \textit{Isac} angelegt und ein Testfile \textit{isac.scala} erstellt.
   1.138 -\item Nun muss diese File nat\"{u}rlich dem Make-Skript \textit{ISABELLE\_HOME/src/Pure/build-jars} hizugef\"{u}gt werden, um beim Erzeugen des jar-Files mitverpackt zu werden.
   1.139 +\item Nun muss diese File nat\"{u}rlich dem Make-Skript \textit{ISABELLE\_HOME/src/Pure/build-jars} hizugef\"{u}gt werden um beim Erzeugen des jar-Files mitverpackt zu werden.
   1.140  \item Nun kann Pure.jar mittels Kommandline erstellt werden: \textit{cd /src/Pure} $\rightarrow$ \textit{../../bin/isabelle env ./build-jars}
   1.141  \item Nun kann das das neue Plugin ganz einfach kopiert werden \textit{cp ../../lib/classes/Pure.jar ../../contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/}
   1.142  \item jEdit ausf\"{u}hren und testen
   1.143  \end{enumerate}
   1.144 -Alle die oben angef\"{u}hrten Punkte, sowie das Erzeugen und Kopieren des Plugins selbst, werden vom Script isac\_jedit erledigt.
   1.145 +Alle die oben angef\"{u}hrten Punkte sowie das Erzeugen und Kopieren des Plugins selbst wird vom Script isac\_jedit erledigt.
   1.146  
   1.147  \subsection{Umseztung des SD-Parsers}
   1.148 -Aus diversen Gr\"{u}nden wurde dieser Punkt im Zuge dieser Projektarbeit nicht mehr umgesetzt sonder nach hinten verschoben. Jedoch gibt es bereits eine Version des Parsers in ML und diese kann in einigen Arbeitsstunden in Zusammenarbeit mit Herrn Neuper in Scala \"{u}bersetzt und eingesetzt werden.
   1.149 -
   1.150 -Es ist bereits ein Parser in ML im Isabelle-Verzeichnis vorhanden, \textit{src/Pure/isar/ parse.ML}. Hier werden sogannte "parse combinators" verwendet. Dasselbe wird in n\"{a}chster Zeit von Seiten des Isabelle-Team auch f\"{u}r den Scala-Parse implementiert. Dadurch lassen sich hieraus auch wichtige Erkenntnisse gewinnen und dies spricht ebenfalls f\"{u}r die Verschiebung dieses Milestones nach hinten. 
   1.151 +Aus Zeitgr\"{u}nden wurde dieser Punkt im Zuge dieser Projektarbeit nicht mehr umgesetzt. Jedoch gibt es bereits eine Version des Parsers in ML und kann in einigen Arbeitsstunden in Zusammenarbeit mit Herrn Neuper in Scala \"{u}bersetzt und eingesetzt werden.
   1.152  
   1.153  \section{Ausblick: Von SD- zum \isac-Plugin}
   1.154  Die obigen Schritte sind n\"{o}tig, um das vorl\"{a}ufige Plugin SD umzusetzen. Nat\"{u}rlich beginnt danach die spannende Arbeit erst so richtig. Ist erst mal ein funktionierender SD-Parser vorhanden, kann dieser immer weiter verbessert und verfeinert werden, bis man auch damit beginnen kann, ihn f\"{u}r das \sisac-Projekt zu nutzen. 
   1.155  
   1.156  Daneben kann an der Weiterentwicklung des GUIs gearbeitet werden und die ersten Schritte zur Ann\"{a}herung an das Isabelle-Plugin k\"{o}nnen hier erfolgen. 
   1.157  
   1.158 -\section{Zusammenfassung und R\"{u}ckblick}
   1.159 -Isabelle ist ein sehr gro\ss es Softwarepacket mit mehreren Millionen LOC. Daher gestaltete sich die Einarbeitungsphase sehr schwierig und kostet sehr viel Zeit. Erschwerend kam hinzu, dass ich von Beginn an mit mehreren, f\"{u}r mich noch ganz neue, Technologien arbeiten musste. Diese Herausforderungen schon zu Beginn machten die Arbeit an \sisac{ }von Beginn an spannend. Hier ist mir vorallem die gemeinsam mit meinem Betreuer Herrn Walther Neuper durchgef\"{u}hrte Installationsarbeit von Isabelle in Erinnerung geblieben. Nie zuvor hatte ich f\"{u}r eine Installation von Software so lange gebraucht - eine ganz neue, wichtige Erfahrung.
   1.160 -
   1.161 -Einer der bedeutensten Milesteine war r\"{u}ckblickend wohl, die Verzeichnisstruktur von Isabelle grundsätzlich verstanden zu haben. Bei einem Softwarepacket von dieser Größe war es wichtig zu wissen, wo man Files suchen/modifizieren/einf\"{u}gen muss, um den gew\"{u}nschten Effekt erreichen zu können.
   1.162 -
   1.163 -Der nächste wichtige Schritt war das bereits teilweise bestehende NetBeansprojekt lauffähig zu machen und mir damit zum ersten mal selbst das jEdit-Isabelle-Plugin erzeugen zu können. Dies war ein sehr bedeutsamer Schritt, da ich hier zum einen NetBeans und dessen Konfiguration besser kennenlernen konnte und zum anderen sehr viel \"{u}ber die Pluginstruktur eines jEdit-Plugins lernen konnte. Zu Beginn machte mir hier der Mix aus Scala-, Java-, XML- und diversen Config-Files Probleme.
   1.164 -
   1.165 -Bis jetzt hatte ich eingentlich noch nicht wirklich mit der Programmierung des Plugins begonnen doch es waren schon zig Arbeitsstunden rein f\"{u}r Einarbeitungs- und Vorbereitungsaufgaben verstrichen - wieder eine neue Erfahrung f\"{u}r mich. Nach einigen Test- bzw. Beispielprogrammen um die Sprache Scala etwas kennezulernen, begann die wohl spannenste Phase im Projektverlauf. Das in Java geschriebene Beispielplugin "Quick-Notepad" wurde in Scala \"{u}bersetzt und etwas abgeändert. 
   1.166 -
   1.167 -Der letzte wirklich bedeutende Schritt war die Verbindung zwischen Isabelle-Pure und \sisac herzustellen. Dieser Punkt ist sehr wichtig, da ohne diese Schnittstelle die Planung des SD-Parser nicht möglich gewesen wäre. Der letzte Schritt, also die Implementation des SD-Parsers wurde aufgeschoben, da es derzeit seitens des Isabelle-Teams ebenfalls Bestrebungen gibt, einen neuen Scala-Parser zu designen und wir von diesen Erkenntnissen mit Sicherheit profitieren können.
   1.168 -
   1.169 -Abschließend möchte ich mich bei meinem Betreuer Herrn Walther Neuper sehr herzlich f\"{u}r die gute Betreuung und die spannenden Entwicklungsstuden bedanken. Es war eine sehr lehrreiche und interessante Projektarbeit!
   1.170 -
   1.171 -\begin{appendix}
   1.172 -
   1.173  \section{Milestones und Arbeitsprotokolle}
   1.174 -\subsection{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010} 
   1.175 +\subsection{Inhaltliche Voraussetzungen erarbeitet: am 27.09.2010} 
   1.176  \begin{itemize}
   1.177 -\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010 
   1.178 -\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
   1.179 -\item Scala Actors: beendet am 12.08.2010
   1.180 +\item Kenntnis der Grundlagen und Anwendung von CTP: am 03.08.2010 
   1.181 +\item Charakteristika der Programmsprache Scala: 27.09.2010
   1.182 +\item Scala Actors: am 12.08.2010
   1.183  \end{itemize}
   1.184  \begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   1.185  \hline
   1.186 @@ -190,11 +168,11 @@
   1.187  \end{tabular}
   1.188  
   1.189  
   1.190 -\subsection{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
   1.191 +\subsection{Technische Voraussetzungen hergestellt: am 02.08.2010}
   1.192  \begin{itemize}
   1.193 -\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
   1.194 -\item Scala in NetBeans eingebunden: beendet am 22.07.2010
   1.195 -\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010 
   1.196 +\item Isabelle installiert, Filestruktur bekannt: am 02.08.2010
   1.197 +\item Scala in NetBeans eingebunden: am 22.07.2010
   1.198 +\item Mercurial installiert und einrichten des Repositories: 19.07.2010 
   1.199  \end{itemize}
   1.200  \begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   1.201  \hline
   1.202 @@ -213,11 +191,11 @@
   1.203  \hline
   1.204  \end{tabular}
   1.205  
   1.206 -\subsection{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010} 
   1.207 +\subsection{NetBeans-Projekt aufgesetzt }% am ..(*)...} 
   1.208  \begin{itemize}
   1.209 -\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
   1.210 -\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
   1.211 -\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010 
   1.212 +\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: am 02.08.2010
   1.213 +\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: am 22.07.2010
   1.214 +\item jEdit-Plugin: Source files geschrieben: 19.07.2010 
   1.215  \end{itemize}
   1.216  \begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   1.217  \hline
   1.218 @@ -245,11 +223,11 @@
   1.219  \hline
   1.220  \end{tabular}
   1.221  
   1.222 -\subsection{Experimentelle Parser implementiert: beendet am 04.03.2011} 
   1.223 +\subsection{Experimentelle Parser implementiert}% am ..(*)...} 
   1.224  \begin{itemize}
   1.225 -\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
   1.226 -\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
   1.227 -\item Implementierung des Scala-Parsers: aufgeschoben
   1.228 +\item Experimente mit dem SideKick-Parser abgschlossen: am 03.02.2011
   1.229 +\item Verbindung zu Isabelle-Pure hergestellt: am 04.03.2011
   1.230 +\item Implementierung des experimentellen Parsers: aus Zeitgr\"{u}nden nicht mehr durchgef\"{u}hrt
   1.231  \end{itemize}
   1.232  \begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   1.233  \hline
   1.234 @@ -266,11 +244,11 @@
   1.235  \hline
   1.236  \end{tabular}
   1.237  
   1.238 -\subsection{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am TO.DO.2011}
   1.239 +\subsection{Verfassen der Dokumentation und abschliesende Arbeiten: am 02.08.2010}
   1.240  \begin{itemize}
   1.241 -\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
   1.242 -\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
   1.243 -\item Dokumentation abgeschlossen: beendet am TO.DO.2011 
   1.244 +\item Bacc.-Protokoll fertiggestellt: am 01.03.2011
   1.245 +\item Dokumentation: erste Version fertiggestellt: am 28.04.2011
   1.246 +\item Dokumentation abgeschlossen am: TO.DO.2011 
   1.247  \end{itemize}
   1.248  \begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   1.249  \hline
   1.250 @@ -290,8 +268,7 @@
   1.251  
   1.252  \subsection{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}
   1.253  
   1.254 -\end{appendix}
   1.255  
   1.256 -\bibliography{bibliografie}
   1.257 +\bibliography{Doku}
   1.258  %\bibliography{bib/math-eng,bib/bk,bib/RISC_2,bib/isac,bib/pl,bib/math,bib/pl}
   1.259  \end{document}
   1.260 \ No newline at end of file
     2.1 --- a/test/Tools/isac/Minisubpbl/100-init-rootpbl.sml	Thu May 12 10:00:06 2011 +0200
     2.2 +++ b/test/Tools/isac/Minisubpbl/100-init-rootpbl.sml	Fri May 13 09:28:38 2011 +0200
     2.3 @@ -8,4 +8,6 @@
     2.4    ("Test", ["sqroot-test","univariate","equation","test"],
     2.5     ["Test","squ-equ-test-subpbl1"]);
     2.6  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
     2.7 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     2.8 +case nxt of ("Model_Problem", _) => ()
     2.9 +| _ => error "minisubpbl: CalcTreeTEST has no nxt = Model_Problem";
    2.10 +
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/test/Tools/isac/Minisubpbl/150-add-given.sml	Fri May 13 09:28:38 2011 +0200
     3.3 @@ -0,0 +1,15 @@
     3.4 +(* Title:  150-add-given.sml
     3.5 +   Author: Walther Neuper 1105
     3.6 +   (c) copyright due to lincense terms.
     3.7 +*)
     3.8 +
     3.9 +val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
    3.10 +val (dI',pI',mI') =
    3.11 +  ("Test", ["sqroot-test","univariate","equation","test"],
    3.12 +   ["Test","squ-equ-test-subpbl1"]);
    3.13 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))]; (*nxt = ("Model_Problem"*)
    3.14 +val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = (_,Add_Given "equality (x + 1 = 2)*)
    3.15 +val (p,_,f,nxt,_,pt) = me nxt p [1] pt; (*nxt = (_,Add_Given "solveFor x"*)
    3.16 +case nxt of (_, Add_Given "solveFor x") => ()
    3.17 +| _ => error "minisubpbl: Add_Given is broken in root-problem";
    3.18 +
     4.1 --- a/test/Tools/isac/Minisubpbl/200-start-method.sml	Thu May 12 10:00:06 2011 +0200
     4.2 +++ b/test/Tools/isac/Minisubpbl/200-start-method.sml	Fri May 13 09:28:38 2011 +0200
     4.3 @@ -14,5 +14,8 @@
     4.4  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     4.5  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     4.6  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     4.7 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     4.8 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     4.9 +val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Apply_Method"*)
    4.10 +val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Rewrite_Set"*)
    4.11 +case nxt of ("Rewrite_Set", _) => ()
    4.12 +| _ => error "minisubpbl: Method not started in root-problem";
    4.13 +
     5.1 --- a/test/Tools/isac/Minisubpbl/300-init-subpbl.sml	Thu May 12 10:00:06 2011 +0200
     5.2 +++ b/test/Tools/isac/Minisubpbl/300-init-subpbl.sml	Fri May 13 09:28:38 2011 +0200
     5.3 @@ -9,12 +9,21 @@
     5.4     ["Test","squ-equ-test-subpbl1"]);
     5.5  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
     5.6  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     5.7 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     5.8 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
     5.9 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
    5.10 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
    5.11 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
    5.12 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
    5.13 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
    5.14 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
    5.15 +val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Subproblem"*)
    5.16 +"~~~~~ fun me, args:"; val (_,tac) = nxt;
    5.17 +"~~~~~ fun locatetac, args:"; val (tac, ptp as (pt, p)) = (tac, (pt,p));
    5.18 +val (mI,m) = mk_tac'_ tac;
    5.19 +val Appl m = applicable_in p pt m;
    5.20 +
    5.21  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.22 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.23 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.24 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.25 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.26 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.27 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.28 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    5.29 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt; (*nxt = ("Subproblem"*)
    5.30 +case nxt of ("Model_Problem", _) => ()
    5.31 +| _ => error "minisubpbl: CalcTreeTEST has no nxt = Model_Problem";
    5.32 +
     6.1 --- a/test/Tools/isac/Test_Isac.thy	Thu May 12 10:00:06 2011 +0200
     6.2 +++ b/test/Tools/isac/Test_Isac.thy	Fri May 13 09:28:38 2011 +0200
     6.3 @@ -23,6 +23,7 @@
     6.4  
     6.5    ("Minisubpbl/000-comments.sml")
     6.6    ("Minisubpbl/100-init-rootpbl.sml")
     6.7 +  ("Minisubpbl/150-add-given.sml")
     6.8    ("Minisubpbl/200-start-method.sml")
     6.9    ("Minisubpbl/300-init-subpbl.sml")
    6.10    ("Minisubpbl/400-start-meth-subpbl.sml")
    6.11 @@ -91,58 +92,17 @@
    6.12  (*use "ProgLang/scrtools.sml"         2002*)
    6.13  (*use "ProgLang/tools.sml"            2002*)
    6.14    ML {*"%%%%%%%%%%%%%%%%% end ProgLang.thy %%%%%%%%%%%%%%%%%%%%%";*}
    6.15 +  ML {*"%%%%%%%%%%%%%%%%% start Minisubpbl %%%%%%%%%%%%%%%%%%%%%";*}
    6.16    use "Minisubpbl/000-comments.sml"
    6.17    use "Minisubpbl/100-init-rootpbl.sml"
    6.18 +  use "Minisubpbl/150-add-given.sml"
    6.19    use "Minisubpbl/200-start-method.sml"
    6.20    use "Minisubpbl/300-init-subpbl.sml"
    6.21    use "Minisubpbl/400-start-meth-subpbl.sml"
    6.22    use "Minisubpbl/500-postcond.sml"
    6.23 -  ML {*"%%%%%%%%%%%%%%%%% start Minisubpbl %%%%%%%%%%%%%%%%%%%%%";*}
    6.24    ML {*"%%%%%%%%%%%%%%%%% end Minisubpbl %%%%%%%%%%%%%%%%%%%%%%%";*}
    6.25    ML {*"%%%%%%%%%%%%%%%%% start Interpret.thy %%%%%%%%%%%%%%%%%%";*}
    6.26    use "Interpret/mstools.sml"       (*new 2010*)
    6.27 -
    6.28 -ML {*
    6.29 -val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
    6.30 -val (dI',pI',mI') =
    6.31 -  ("Test", ["sqroot-test","univariate","equation","test"],
    6.32 -   ["Test","squ-equ-test-subpbl1"]);
    6.33 -val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
    6.34 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.35 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.36 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.37 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.38 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.39 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.40 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.41 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.42 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    6.43 -val (p,_,f,nxt,_,pt) = me nxt p [1] pt; (*nxt = ("Subproblem"*)
    6.44 -*}
    6.45 -ML {*
    6.46 -"~~~~~ fun me, args:"; val (_,tac) = nxt;
    6.47 -"~~~~~ fun locatetac, args:"; val (tac, ptp as (pt, p)) = (tac, (pt,p));
    6.48 -val (mI,m) = mk_tac'_ tac;
    6.49 -*}
    6.50 -ML {*
    6.51 -val Appl m = applicable_in p pt m;
    6.52 -*}
    6.53 -ML {*
    6.54 -assod;
    6.55 -e_ctxt
    6.56 -*}
    6.57 -ML {*
    6.58 -get_obj g_loc;
    6.59 -*}
    6.60 -ML {*
    6.61 -*}
    6.62 -ML {*
    6.63 -*}
    6.64 -ML {*
    6.65 -*}
    6.66 -ML {*
    6.67 -*}
    6.68 -
    6.69    use "Interpret/ctree.sml"         (*!...see(25)*)
    6.70    use "Interpret/ptyps.sml"         (*    *)
    6.71  (*use "Interpret/generate.sml"        new 2011*)