doc-src/isac/msteger/official_docu/Doku.tex
author Marco Steger <m.steger@student.tugraz.at>
Thu, 23 Jun 2011 14:51:53 +0200
branchdecompose-isar
changeset 42058 edf2abb6e007
parent 42057 71306eda8e1c
child 42066 4d12aaa65dd4
permissions -rw-r--r--
intermed: install isac-jedit
m@42054
     1
\chapter{Definition der Aufgabenstellung}
m@42054
     2
\section{Detaillierte Beschreibung der Aufgabenstellung}
m@42054
     3
Zu Beginn des Projekts wurden einige Vorgaben und Ziele des Projektes erabeitet und im Laufe des Projekts etwas angepasst. Es wurde bewusst auf eine zu einschr\"ankende Aufgabenstellung verzichtet, da Entwicklungen und Erarbeitungen von verschiedenen Umsetzungsstrategien erw\"unscht war. 
m@42054
     4
m@42054
     5
Hauptaugenmerk war dabei auf die Erstellung eines jEdit-Plugins, dass die Verarbeitung von Back's Structured Derivations m\"oglich machen soll, gelegt worden. Es sollte also so viel Plugin-Code, wie im begrenzten Projektzeitraum m\"oglich, implementiert werden.
m@42054
     6
m@42054
     7
Weiters soll eine Projektstruktur aufgebaut werden, die die Initialisierungsarbeiten von weiterf\"uhrende bzw. nachfolgende Projekten erleichtern und somit verk\"urzen soll. Es sollte dabei darauf geachtet werden, dass die vom Isabelleteam bereits verwendete Projekthierachie soweit wie m\"oglich \"ubernommen bzw. erweitert wird.
m@42054
     8
Die nachfolgende Auflistung soll die wichtigsten Tasks nochmals zusammenfassen:
m@42054
     9
\begin{enumerate}
m@42054
    10
\item Relevante Isabelle Komponenten identifizieren und studieren
m@42054
    11
\item Installation der Standard-Komponenten
m@42054
    12
\item Entwicklungsumgebung vom Isabelle-Team kopieren
m@42054
    13
\item Relevante Komponenten implementieren
m@42054
    14
  \begin{itemize}
m@42054
    15
  \item jEdit Plugin f\"ur SD
m@42054
    16
  \item zugeh\"origen Parser
m@42054
    17
  \item nicht vorgesehen: SD-Interpreter in Isar (SML)
m@42054
    18
  \end{itemize}
m@42054
    19
\end{enumerate}
m@42054
    20
m@42054
    21
\chapter{Beleuchtung der Projektrelevanten Technologien}
m@42054
    22
\section{Back's Structured Derivations}
m@42054
    23
Wie in der Aufgabenstellung bereits beschrieben, war die Erstellung eines Structured Derivation Plugins das Hauptziel dieser Arbeit. Aus diesem Grund wird in diesem Absatz kurz auf die von Prof. Ralph-Johan Back einf\"uhrten Structured Derivations eingegangen und dessen Eigenschaften bzw. Zusammenh\"ange beschrieben.
m@42054
    24
m@42054
    25
Das nachfolgende Beispiel zeigt ein einfaches Beispiel, wie eine Formel mittels SD dargestellt bzw. umgeformt werden kann:
m@42054
    26
m@42054
    27
%{\footnotesize
m@42054
    28
\begin{tabbing}
m@42054
    29
123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
m@42054
    30
\>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
m@42054
    31
\>  \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
m@42054
    32
\>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
m@42054
    33
\>  \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
m@42054
    34
\>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
m@42054
    35
\>  \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
m@42054
    36
\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
m@42054
    37
\>  \>   \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
m@42054
    38
\>  \>$\equiv$\>\vdots\\
m@42054
    39
\>  \>  \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
m@42054
    40
\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$  \\
m@42054
    41
\>  \>     \>$1 + -1 * x$\\
m@42054
    42
\>\dots\>$1 + -1 * x$\\
m@42054
    43
\>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
m@42054
    44
\>  \>$1-x$
m@42054
    45
\end{tabbing}
m@42054
    46
%}
m@42054
    47
m@42054
    48
Dieses Beispiel kann wie folgt interpretiert werden:
m@42054
    49
\begin{enumerate}
m@42054
    50
\item Die erste Zeile ist als Angabe bzw. Ausgangspunkt der Berechnung zu verstehen.
m@42054
    51
\item Nun folgt der eigentliche Ablauf einer Umformung mittels SD: Mit der Formel in der zweiten Zeile beginnt die Berechnung.
m@42054
    52
\item Die n\"achste Zeile gibt nun an, wie die Formel aus der direkt dar\"uberliegenden Zeile umgeformt bzw. aufbereitet wird. Es ist also eine Beschreibung bzw. die passende Rechenregel, um von der Ausgangsformel auf die nachfolgende Formel schliessen zu k\"onnen.
m@42054
    53
\item Aus dieser Rechenvorschrifft ergibt sich die Formel in der n\"achsten Zeile.
m@42054
    54
\item Dieser Ablauf wiederholt sich und zieht sich \"uber die weiteren Berechnungen.
m@42054
    55
\end{enumerate}
m@42054
    56
m@42054
    57
Back liefert mit SD eine sehr gute Darstelungs und Verbarbeitungsrichtlinie die einerseits dabei Leser hilft, da durch die Regel- bzw. Bschreibungs-Zeile klar gestellt wird, wie der letzte Berechnungsschritt durchgef\"uhrt wurde. Weiters bringt SD auch f\"ur den Programmierer einen klaren Vorteil, da \"uber die vorgestellten Sonderzeichen das Parsen von \textit{SD-Code} vereinfacht bzw. direkt (ohne extra Schl\"usselw\"orter einf\"uhren zu m\"ussen) m\"oeglich ist.
m@42054
    58
m@42054
    59
\section{Der Texteditor jEdit}\label{jEdit}
m@42054
    60
%     http://www.jedit.org/
m@42054
    61
%     http://de.wikipedia.org/wiki/JEdit
m@42054
    62
%     http://www.chip.de/downloads/jEdit_19235021.html
m@42054
    63
%
m@42054
    64
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.
m@42054
    65
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.
m@42054
    66
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.
m@42054
    67
m@42054
    68
\subsection{Das Plugin-System}
m@42054
    69
% http://jedit.org/users-guide/writing-plugins-part.html
m@42054
    70
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.
m@42054
    71
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.
m@42054
    72
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.
m@42054
    73
m@42054
    74
m@42054
    75
\subsection{Pluginstruktur}
m@42054
    76
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. 
m@42054
    77
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. 
m@42054
    78
m@42054
    79
\section{Isabelle}
m@42054
    80
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.
m@42054
    81
m@42054
    82
\subsection{Isabelle-Pure}
m@42054
    83
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. 
m@42058
    84
Eine Auflistung der f\"ur das Isabelle-Pure-Packet ben\"otigten Scala-Source-Filles kann Anhang B.2 entnommen werden.
m@42054
    85
m@42054
    86
\subsection{Isabelle-jEdit}
m@42054
    87
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.
m@42054
    88
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.
m@42054
    89
m@42054
    90
\subsection{Paketstruktur von Isabelle}
m@42058
    91
pDurch 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.
m@42054
    92
Die nachfolgende Auflistung zeigt alle Pakete, die f\"{u}r SD bzw. \sisac von Bedeutung sind und und wo diese zu finden sind.
m@42054
    93
 
m@42054
    94
m@42054
    95
\begin{itemize}
m@42054
    96
\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. 
m@42054
    97
\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.
m@42054
    98
\item \textit{src/Tools/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} 
m@42054
    99
\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.
m@42054
   100
\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. 
m@42054
   101
\end{itemize} 
m@42054
   102
m@42054
   103
Siehe dazu auch Anhang B. Dort sind alle relevanten jar-Packete nocheinmal aufgearbeitet und entsprechend gruppiert.
m@42054
   104
m@42054
   105
\section{Die Programmiersprache Scala}
m@42054
   106
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.
m@42054
   107
m@42054
   108
\subsection{Grundlage der Sprache}
m@42054
   109
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.
m@42054
   110
m@42054
   111
Dieser direkte Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing gezeigt bzw. die Vorteile, die daraus resultieren, beleuchtet werden.
m@42054
   112
m@42054
   113
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. 
m@42054
   114
m@42054
   115
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. 
m@42054
   116
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.
m@42054
   117
m@42054
   118
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.
m@42054
   119
m@42054
   120
\subsection{Scala, Java und jEdit}
m@42054
   121
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!
m@42054
   122
m@42054
   123
\subsection{Der Isabelle-Scala-Layer}
m@42054
   124
Es sollten nun die Grundlegenden Eigenschaften von Scala bekannt sein. Die Einf\"uhrung des Scala-Layers ab Isabelle-Version 2009 war ein grosser Schritt f\"ur das Isabelle Projekt. Das Scala-Actor-Konzept erm\"oglicht die asynchrone Verarbeitung von einzelnen Beweisteilen und ist einer der massgeblichen Gr\"unde f\"ur die Einf\"uhrung des Scala-Layer. 
m@42054
   125
m@42054
   126
Dieser Absatz sollen nun die Eigenschaften des Scala-Layers und die damit verbundenen Chancen f\"ur das Isac- bzw. SD-Projektes 
m@42054
   127
erarbeitet werden. 
m@42054
   128
m@42054
   129
\begin{figure}
m@42054
   130
\begin{center}
m@42054
   131
\includegraphics[width=150mm]{../fig-reuse-ml-scala-SD}
m@42054
   132
\end{center}
m@42054
   133
\label{fig-reuse-ml-scala}
m@42054
   134
\end{figure}
m@42054
   135
m@42054
   136
Der Scala-Layer verbindet die Java Virtual Maschine (JVM) und den in Standart-ML (SML) geschriebenen Isabelle-Kern. Dabei wird ein internes Protokoll verwendet, dass den Datenaustausch zwischen jEdit und Isabelle/Isar erm\"oglicht. Dieses Protokoll ist im Moment noch (bewusst) ohne API ausgef\"uhrt. Aus diesem Grund musste eine Schnittstelle definiert werden, um den Datenaustausch des SD-Plugins (JVM) mit dem SD-Interpreter m\"oglich zu machen. Siehe dazu den Absatz "Verbindung zum Isabelle-Pure Plugin herstellen". Man kann aus diesem Umstand ableiten, dass die Isabelle-Entwickler mit diesem eingezogenen Scala-Layer und dem damit verbundenen internen Protokoll, auf eine konsistente Verwaltung der Theorie-Bibliotheken abzielen. Mit anderen Worten wird dem Anwendungsprogrammierer der direkte Zugriff auf die Isabelle/Isar-Komponente verwehrt. Der Anwender sollten hier also nicht angreifen sonder die Isabelle-Theorien entsprechend erweitern.
m@42054
   137
neuper@42057
   138
\chapter{Konfiguration und Implementation der Komponenten}
neuper@42057
   139
Dieses Kapitel soll nun anhand der bereits gewonnen Erkenntnise illustrieren, wie die Entwicklungsumgebung vom Isabelle-Team kopiert wurde und wie wichtigsten Schritte zum SD-Plugin f\"{u}r jEdit wahrscheinlich aussehen werden. Wobei einige Schritte parallel und dadurch nat\"{u}rlich sehr gut im Team umgesetzt werden k\"{o}nnen. Eine genaue Aufstellung aller beteiligten Files k\"onnen dem Anhang D entnommen werden.
m@42054
   140
neuper@42057
   141
\section{Konfiguration des Netbeans Projektes}
neuper@42057
   142
Um in k\"unftigen Entwicklungsvorhaben effizient kooperieren zu k\"onnen, wurde das Netbeans-Projekt genau nach den Vorgaben des Isabelle-Teams konfiguriert. 
neuper@42057
   143
m@42058
   144
\begin{enumerate}
m@42058
   145
\item Konfigurations-Files von Netbeans in ``Files''-View; beeinflussen sich gegenseitig
m@42058
   146
  \begin{enumerate}
m@42058
   147
  \item build.xml (aus template erzeugt, keine automatischen Ver\"anderunen)
m@42058
   148
  \item nbproject/build-impl.xml (z.T. automatische Ver\"anderunen)
m@42058
   149
  \item nbproject/project.xml (z.T. automatische Ver\"anderunen)
m@42058
   150
  \item TODO
m@42058
   151
  \end{enumerate}
m@42058
   152
\item Sacla-plugin installieren laut http://wiki.netbeans.org/Scala69, 
m@42058
   153
  \begin{enumerate}
m@42058
   154
  \item von ``Install with NetBeasn 6.9''
m@42058
   155
  \item nach /usr/local/netbeans.../plugins/scala
m@42058
   156
  \end{enumerate}
m@42058
   157
\item Scala-plugin installiert in NetBeans
m@42058
   158
  \begin{enumerate}
m@42058
   159
  \item Men\"u $>$ Tools $>$ Plugins $>$ Downloaded $>$ Add Plugins 
m@42058
   160
  \item alle Files von /usr/local/netbeans.../plugins/scala/
m@42058
   161
  \item Fenster zeigt alle ausgew\"alten Files
m@42058
   162
  \item $<$Install$>$ calls Wizzard $<$Next$>$ probably accept Warning
m@42058
   163
  \item Funktionstest: Men\"ue $>$ Files $>$ New Project: zeigt Scala als ``Categories''
m@42058
   164
  \end{enumerate}
m@42058
   165
\item Neues Projekt ``isac-jedit'' konfigurieren
m@42058
   166
  \begin{enumerate}
m@42058
   167
  \item Men\"u $>$ Open Project (weil schon aus dem Repository die notwendigen Files vorhanden sind)
m@42058
   168
  \item /src/Tools/jeditC: Reference Problems, weil jEdit folgende Plugins braucht
m@42058
   169
  \item Funktionskontrolle: ``Projects''-View zeigt das neue Projekt
m@42058
   170
  \item Die Konfigurations-Files sind v\"ollig getrennt von anderen Projekten
m@42058
   171
  \item Referenz-Probleme beheben; das zeigt auch eventuell fehlende Files
m@42058
   172
    \begin{enumerate}
m@42058
   173
    \item ``Projects''-View $>$ rightMouse $>$ Resolve Reference Problems: Fenster zeigt dieListe der fehlenden Dateien; $<$Next$>$
m@42058
   174
    \item Files holen aus ``Tools'' $>$ Libraries: \"uber Filebrowser aus dem Isabelle\_bundle holen contrib/jEdit---/jars
m@42058
   175
    \item ``New Library'' 
m@42058
   176
      \begin{enumerate}
m@42058
   177
      \item Cobra-renderer: cobra.jar
m@42058
   178
      \item Console:  Console.jar
m@42058
   179
      \item ErrorList: ErrorList.jar
m@42058
   180
      \item Hyperlinks: Hyperlinks.jar
m@42058
   181
      \item Isabelle-Pure: Pure.jar
m@42058
   182
      \item Rhino-JavaScript: js.jar
m@42058
   183
      \item Scala-compiler: scala-compiler.jar
m@42058
   184
      \item SideKick: SideKick.jar
m@42058
   185
      \end{enumerate}
m@42058
   186
    \item Funktions-Kontrollen 
m@42058
   187
      \begin{enumerate}
m@42058
   188
      \item das kleine gelbe Warndreieck im ``Projects''-View ist verschwunden
m@42058
   189
      \item im ``Projects''-View 2 Ordner: ``src'' und ``Libraries''
m@42058
   190
      \end{enumerate}
m@42058
   191
    \end{enumerate}
m@42058
   192
  \item jEdit-Paket zum ``isac-jedit''-Projekt hinzuf\"ugen
m@42058
   193
    \begin{enumerate}
m@42058
   194
    \item ``Project''-View $>$ rightMouse $>$ Add Jar/Folder: Filebrowser
m@42058
   195
    \item /contrib/jedit.../jedit.jar
m@42058
   196
    \item Funktions-Kontrolle: ist in ``Projects''/Libraries/jedit.jar
m@42058
   197
    \end{enumerate}
m@42058
   198
  \item Das neue Projekt ``isac-jedit'' zum Hauptprojekt machen: ``Project''-View $>$ rightMouse $>$ Set as Main Project; Funktions-Kontrolle: der Projektname ist boldface.
m@42058
   199
  \end{enumerate}
m@42058
   200
\item Ab nun wird die Konfiguration \"uber ``trial and error'' zu Ende gef\"uhrt
m@42058
   201
  \begin{enumerate}
m@42058
   202
  \item Men\"u $>$ Build Main 
m@42058
   203
    \begin{enumerate}
m@42058
   204
    \item Wenn: Target ``Isac-impl.jar'' does not exist in the project ``isac-jedit''. It is used from target ``debug''
m@42058
   205
      \begin{enumerate}
m@42058
   206
      \item Versuch
m@42058
   207
        \begin{itemize}
m@42058
   208
        \item build-impl.xml l\"oschen
m@42058
   209
        \item NetBeans neu starten, stellt build-impl.xml automatisch aus build.xml wieder her
m@42058
   210
        \item \dots hat in diesem Fall nicht geholfen
m@42058
   211
       \end{itemize}
m@42058
   212
      \item Versuch zur Vermutung: Projekt wurde umbenannt von ``Isac'' in ``isac-jedit'', und das machte build.xml inkonsistent
m@42058
   213
        \begin{itemize}
m@42058
   214
        \item in build.xml query-replace ``Isac'' in ``isac-jedit''
m@42058
   215
        \item TODO?
m@42058
   216
        \item 
m@42058
   217
        \end{itemize}
m@42058
   218
      \end{enumerate}
m@42058
   219
    \item Wenn: Problem: failed to create tsk or type scalac
m@42058
   220
      \begin{enumerate}
m@42058
   221
      \item Versuch: Pfad zum Scala bekanntgeben
m@42058
   222
        \begin{itemize}
m@42058
   223
        \item /usr/local/netbeans-6.9.1/etc/netbeans.conf: netbeans\_default\_options= richtigen Scala-Pfad setzen
m@42058
   224
        \item build-impl.xml l\"oschen
m@42058
   225
        \item NetBeans neu starten.
m@42058
   226
        \end{itemize}
m@42058
   227
      \end{enumerate}
m@42058
   228
    \item Wenn Fehler: ``/usr/local/isabisac/src/Tools/jEditC/\${project.jEdit}/modes does not exist''
m@42058
   229
      \begin{enumerate}
m@42058
   230
      \item grep -r "project.jEdit" *
m@42058
   231
      \item nbproject/project.properties:project.jEdit=contrib/jEdit
m@42058
   232
      \item 
m@42058
   233
      \item 
m@42058
   234
m@42058
   235
        \begin{itemize}
m@42058
   236
        \item 
m@42058
   237
          \begin{itemize}
m@42058
   238
          \item 
m@42058
   239
          \item 
m@42058
   240
          \item 
m@42058
   241
          \end{itemize}
m@42058
   242
        \item 
m@42058
   243
        \item 
m@42058
   244
        \end{itemize}
m@42058
   245
      \item 
m@42058
   246
      \item 
m@42058
   247
      \end{enumerate}
m@42058
   248
    \item 
m@42058
   249
    \item 
m@42058
   250
    \end{enumerate}
m@42058
   251
  \end{enumerate}
m@42058
   252
$<$ $>$
m@42058
   253
Men\"u $>$  $>$ $>$  $>$ $>$  $>$
m@42058
   254
``Project''-View $>$ rightMouse $>$ $>$  $>$ $>$  $>$
m@42058
   255
\item 
m@42058
   256
  \begin{enumerate}
m@42058
   257
  \item 
m@42058
   258
    \begin{enumerate}
m@42058
   259
    \item 
m@42058
   260
      \begin{itemize}
m@42058
   261
      \item 
m@42058
   262
        \begin{itemize}
m@42058
   263
        \item 
m@42058
   264
        \item 
m@42058
   265
        \item 
m@42058
   266
        \end{itemize}
m@42058
   267
      \item 
m@42058
   268
      \item 
m@42058
   269
      \end{itemize}
m@42058
   270
    \item 
m@42058
   271
    \item 
m@42058
   272
    \end{enumerate}
m@42058
   273
  \item 
m@42058
   274
  \item 
m@42058
   275
  \end{enumerate}
m@42058
   276
\item 
m@42058
   277
  \begin{enumerate}
m@42058
   278
  \item 
m@42058
   279
    \begin{enumerate}
m@42058
   280
    \item 
m@42058
   281
      \begin{itemize}
m@42058
   282
      \item 
m@42058
   283
        \begin{itemize}
m@42058
   284
        \item 
m@42058
   285
        \item 
m@42058
   286
        \item 
m@42058
   287
        \end{itemize}
m@42058
   288
      \item 
m@42058
   289
      \item 
m@42058
   290
      \end{itemize}
m@42058
   291
    \item 
m@42058
   292
    \item 
m@42058
   293
    \end{enumerate}
m@42058
   294
  \item 
m@42058
   295
  \item 
m@42058
   296
  \end{enumerate}
m@42058
   297
\end{enumerate}
neuper@42057
   298
neuper@42057
   299
neuper@42057
   300
\section{Implementation der jEdit Komponenten}
neuper@42057
   301
neuper@42057
   302
\subsection{Erstellen des Plugin-Ger\"{u}sts}
m@42054
   303
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. 
m@42054
   304
m@42054
   305
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.
m@42054
   306
m@42054
   307
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.
m@42054
   308
neuper@42057
   309
\subsection{Erzeugung des Plugins}
m@42054
   310
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):
m@42054
   311
\begin{enumerate}
m@42054
   312
\item Das Plugin kann mittels Kommandline folgenderma{\ss}en erstellt werden: \\ \textit{cd ISABELLE\_HOME/src/Tools/isac/jEdit} $\rightarrow$ \textit{ant jar}
m@42054
   313
\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/}
m@42054
   314
\item jEdit ausf\"{u}hren und testen
m@42054
   315
\end{enumerate}
m@42054
   316
neuper@42057
   317
\subsection{Verbindung zum Isabelle-Pure Plugin herstellen}
m@42054
   318
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. 
m@42054
   319
m@42054
   320
\begin{figure}
m@42054
   321
\begin{center}
m@42054
   322
\includegraphics[width=180mm]{../fig-jedit-plugins-SD}
m@42054
   323
\end{center}
m@42054
   324
\label{fig-jedit-plugins-SD}
m@42054
   325
\end{figure}
m@42054
   326
m@42054
   327
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.
m@42054
   328
m@42054
   329
m@42054
   330
\begin{enumerate}
m@42054
   331
\item Um den \sisac-Teil im Isabelle-Pure genau abzugrenzen, wurde ein Ordner \textit{Isac} angelegt und ein Testfile \textit{isac.scala} erstellt.
m@42054
   332
\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.
m@42054
   333
\item Nun kann Pure.jar mittels Kommandline erstellt werden: \textit{cd /src/Pure} $\rightarrow$ \textit{../../bin/isabelle env ./build-jars}
m@42054
   334
\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/}
m@42054
   335
\item jEdit ausf\"{u}hren und testen
m@42054
   336
\end{enumerate}
m@42054
   337
Alle die oben angef\"{u}hrten Punkte, sowie das Erzeugen und Kopieren des Plugins selbst, werden vom Script isac\_jedit erledigt.
m@42054
   338
Das Skript kann dem Anhang C entnommen werden.
m@42054
   339
m@42054
   340
\section{Umsetzung des SD-Parsers}
m@42054
   341
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.
m@42054
   342
m@42054
   343
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. 
m@42054
   344
m@42054
   345
m@42054
   346
\chapter{Ausblick: Von SD- zum \isac-Plugin}
m@42054
   347
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. 
m@42054
   348
m@42054
   349
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. 
m@42054
   350
m@42054
   351
\chapter{Zusammenfassung und R\"{u}ckblick}
neuper@42057
   352
Zusammenfassend wird nun ein \"Uberblick gegeben, welche Milestones erledigt wurden und welche nicht; Details dazu finden sich in Anhang A. %TODO
neuper@42057
   353
Abschlie{\ss}end gebe ich einen R\"uckblick auf meine pers\"onlichen Erfahrungen aus dieser Bakkalaureats-Arbeit.
neuper@42057
   354
neuper@42057
   355
\section{Zusammenfassung}
neuper@42057
   356
Folgende Milestones wurden erfolgreich abgeschlossen:
neuper@42057
   357
\begin{enumerate}
neuper@42057
   358
\item Relevante Isabelle Komponenten dokumentiert
neuper@42057
   359
neuper@42057
   360
\item Installation der Standard-Komponenten:
neuper@42057
   361
  \begin{itemize}
neuper@42057
   362
  \item Mercurial Versioncontrol
neuper@42057
   363
  \item NetBeans IDE
neuper@42057
   364
  \item Standard Isabelle Bundle
neuper@42057
   365
  \end{itemize}
neuper@42057
   366
  
neuper@42057
   367
\item Entwicklungsumgebung vom Isabelle-Team kopieren
neuper@42057
   368
  \begin{itemize}
neuper@42057
   369
  \item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
neuper@42057
   370
  \item jEdit als NetBeans Projekt definiert
neuper@42057
   371
  \end{itemize}
neuper@42057
   372
  
neuper@42057
   373
\item Relevante Komponenten implementieren
neuper@42057
   374
  \begin{itemize}
neuper@42057
   375
  \item jEdit Plugin f\"ur SD
neuper@42057
   376
  \item Verbindung des Plugins zu Isabelle
neuper@42057
   377
  \item zugeh\"origen Parser: nur ein Test in SML
neuper@42057
   378
  \end{itemize}
neuper@42057
   379
\end{enumerate}
neuper@42057
   380
neuper@42057
   381
\noindent Aus Zeitgr\"unden war {\em nicht} m\"oglich, ein komplettes SD-Plugin zu implementieren; dazu w\"are auch ein Interpreter f\"ur SD auf der ML-Seite n\"otig gewesen.
neuper@42057
   382
neuper@42057
   383
\paragraph{Voraussetzungen f\"ur k\"unftige Entwicklung} geschaffen:
neuper@42057
   384
\begin{enumerate}
neuper@42057
   385
\item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
neuper@42057
   386
\item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
neuper@42057
   387
\item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
neuper@42057
   388
\end{enumerate}
neuper@42057
   389
neuper@42057
   390
\section{R\"uckblick}
m@42054
   391
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.
m@42054
   392
m@42054
   393
Einer der bedeutensten Milesteine war r\"{u}ckblickend wohl, die Verzeichnisstruktur von Isabelle grunds\"atzlich verstanden zu haben. Bei einem Softwarepacket von dieser Gr\"{o}{\ss}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.
m@42054
   394
m@42054
   395
Der n\"achste wichtige Schritt war das bereits teilweise bestehende NetBeansprojekt lauff\"ahig zu machen und mir damit zum ersten mal selbst das jEdit-Isabelle-Plugin erzeugen zu k\"onnen. 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.
m@42054
   396
m@42054
   397
Bis jetzt hatte ich eigentlich 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 kennenzulernen, begann die wohl spannenste Phase im Projektverlauf. Das in Java geschriebene Beispielplugin "Quick-Notepad" wurde in Scala \"{u}bersetzt und etwas abge\"andert. 
m@42054
   398
neuper@42057
   399
Der letzte wirklich bedeutende Schritt war Herstellung der Verbindung zwischen Isabelle-Pure und \sisac. Dieser Punkt ist sehr wichtig, da ohne diese Schnittstelle die Planung des SD-Parser nicht m\"oglich gewesen w\"are. 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 in der Zunkft profitieren k\"onnen.
m@42054
   400
neuper@42057
   401
%Abschlie{\ss}end m\"ochte 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!
m@42054
   402
m@42054
   403
%\chapter{Milestones und Arbeitsprotokolle}
m@42054
   404
%\section{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010} 
m@42054
   405
%\begin{itemize}
m@42054
   406
%\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010 
m@42054
   407
%\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
m@42054
   408
%\item Scala Actors: beendet am 12.08.2010
m@42054
   409
%\end{itemize}
m@42054
   410
%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
m@42054
   411
%\hline
m@42054
   412
%Datum & T\"atigkeit & Einheiten \\ \hline
m@42054
   413
%12.07.2010 & Meeting: erste Besprechung und Erkl\"{a}rungen zu Isabelle, Isac und CTPs & 2 \\ \hline
m@42054
   414
%15.07.2010 & Recherche \"{u}ber Isabelle und CTPs & 3 \\ \hline
m@42054
   415
%20.07.2010 & Meeting: Besprechen der grunds\"{a}tzlichen Vorgangsweise und Ziele & 1 \\ \hline
m@42054
   416
%23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenh\"{a}nge mit Isac abkl\"{a}ren & 1 \\ \hline 
m@42054
   417
%30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise \"{u}ber Backs 'structured derivations'; Begriffserkl\"{a}rung & 3 \\ \hline
m@42054
   418
%01.08.2010 & Recherche: Buch f\"{u}r Scala & 2 \\ \hline
m@42054
   419
%03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
m@42054
   420
%05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1  \\ \hline
m@42054
   421
%06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
m@42054
   422
%08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
m@42054
   423
%09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
m@42054
   424
%12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
m@42054
   425
%24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
m@42054
   426
%25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
m@42054
   427
%27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline \hline
m@42054
   428
% & Anzahl der Einheiten & 44 \\
m@42054
   429
%\hline
m@42054
   430
%\end{tabular}
m@42054
   431
%
m@42054
   432
%
m@42054
   433
%\section{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
m@42054
   434
%\begin{itemize}
m@42054
   435
%\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
m@42054
   436
%\item Scala in NetBeans eingebunden: beendet am 22.07.2010
m@42054
   437
%\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010 
m@42054
   438
%\end{itemize}
m@42054
   439
%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
m@42054
   440
%\hline
m@42054
   441
%Datum & T\"atigkeit & Einheiten \\ \hline
m@42054
   442
%19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
m@42054
   443
%20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
m@42054
   444
%21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
m@42054
   445
%22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
m@42054
   446
%23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausf\"{u}hren: testen & 5 \\ \hline 
m@42054
   447
%27.07.2010 & Isabelle-jEdit-Plugin: \"{a}nderungen an der Projektstruktur & 7 \\ \hline
m@42054
   448
%28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
m@42054
   449
%29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
m@42054
   450
%30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung \"{u}ber Erfahrungen mit Filestruktur & 4 \\ \hline
m@42054
   451
%02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
m@42054
   452
% & Anzahl der Einheiten & 60 \\
m@42054
   453
%\hline
m@42054
   454
%\end{tabular}
m@42054
   455
%
m@42054
   456
%\section{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010} 
m@42054
   457
%\begin{itemize}
m@42054
   458
%\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
m@42054
   459
%\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
m@42054
   460
%\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010 
m@42054
   461
%\end{itemize}
m@42054
   462
%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
m@42054
   463
%\hline
m@42054
   464
%Datum & T\"atigkeit & Einheiten \\ \hline
m@42054
   465
%10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
m@42054
   466
%11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
m@42054
   467
%21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
m@42054
   468
%22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten f\"{u}r ISAC & 3 \\ \hline
m@42054
   469
%24.08.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 6 \\ \hline 
m@42054
   470
%26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach L\"{o}sungen & 3 \\ \hline
m@42054
   471
%28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
m@42054
   472
%29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
m@42054
   473
%30.08.2010 & Isabelle-jEdit-Plugin endlich vollst\"{a}ndig lauff\"{a}hig gebracht & 4 \\ \hline
m@42054
   474
%01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
m@42054
   475
%04.09.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 5 \\ \hline 
m@42054
   476
%20.09.2010 & Einrichten des Laptops f\"{u}r Isabelle-Isac & 4 \\ \hline 
m@42054
   477
%22.09.2010 & Meeting: Fortschrittsbericht, kurze Einf\"{u}hrung f\"{u}r Mitstreiter & 3 \\ \hline
m@42054
   478
%
m@42054
   479
%29.09.2010 & Neue Vorgehensweise: QuickNotepad-Plugin(QN) wird in Scala \"{u}bersetzt und f\"{u}r ISAC entsprechend angepasst: Arbeit an den XML-Files & 4 \\ \hline 
m@42054
   480
%30.09.2010 & QN: Start mit \"{u}bersetzten der Sourcefiles & 5 \\ \hline
m@42054
   481
%02.10.2010 & QN: \"{U}bersetzten der Sourcefiles & 6 \\ \hline
m@42054
   482
%04.10.2010 & QN: \"{U}bersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
m@42054
   483
%05.10.2010 & QN: QN vollst\"andig in Scala \"{u}bersetzt, testen & 2 \\ \hline \hline
m@42054
   484
% & Anzahl der Einheiten & 71 \\
m@42054
   485
%\hline
m@42054
   486
%\end{tabular}
m@42054
   487
%
m@42054
   488
%\section{Experimentelle Parser implementiert: beendet am 04.03.2011} 
m@42054
   489
%\begin{itemize}
m@42054
   490
%\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
m@42054
   491
%\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
m@42054
   492
%\item Implementierung des Scala-Parsers: aufgeschoben
m@42054
   493
%\end{itemize}
m@42054
   494
%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
m@42054
   495
%\hline
m@42054
   496
%Datum & T\"atigkeit & Einheiten \\ \hline
m@42054
   497
%28.01.2011 & Testen des SideKick-Parsers im Isabelle-Plugin & 2 \\ \hline
m@42054
   498
%29.01.2011 & Leichte Modifikationen des SideKick-Parsers im Isabelle-Plugin & 1 \\ \hline
m@42054
   499
%08.02.2011 & Besprechung zum Abschluss der praktischen Arbeiten & 1 \\ \hline
m@42054
   500
%16.02.2011 & Erstellen des Isabelle-Pur jar-Files & 1 \\ \hline
m@42054
   501
%19.02.2011 & Behebung des Problems mit den Umgebungsvariablen & 1 \\ \hline
m@42054
   502
%03.03.2011 & Erzeugung des Pure.jar Package m\"{o}glich & 2 \\ \hline
m@42054
   503
%04.04.2011 & Verbindung zwischen Plugin und Isabelle-Pure hergestellt und getestet  & 3 \\ \hline
m@42054
   504
%08.04.2011 & Besprechung: Implementierung des experimentellen Parsers wird nicht mehr durchgef\"{u}hrt & 1 \\ \hline \hline
m@42054
   505
% & Anzahl der Einheiten & 12 \\
m@42054
   506
%\hline
m@42054
   507
%\end{tabular}
m@42054
   508
%
m@42054
   509
%\section{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am TO.DO.2011}
m@42054
   510
%\begin{itemize}
m@42054
   511
%\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
m@42054
   512
%\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
m@42054
   513
%\item Dokumentation abgeschlossen: beendet am TO.DO.2011 
m@42054
   514
%\end{itemize}
m@42054
   515
%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
m@42054
   516
%\hline
m@42054
   517
%Datum & T\"atigkeit & Einheiten \\ \hline
m@42054
   518
%01.03.2011 & Besprechung zum Ablauf der Dokumentationsarbeiten: Protokoll und Dokumentation & 1 \\ \hline
m@42054
   519
%01.03.2011 & Erstellen des Protokolls & 2 \\ \hline
m@42054
   520
%08.03.2011 & Besprechung zur Doku und zur Schnittstelle zu Isabelle-Pure & 1 \\ \hline
m@42054
   521
%17.03.2011 & Dokumentation schreiben & 2 \\ \hline
m@42054
   522
%19.03.2011 & Dokumentation schreiben & 3 \\ \hline
m@42054
   523
%24.04.2011 & Dokumentation schreiben & 2 \\ \hline
m@42054
   524
%25.04.2011 & Dokumentation schreiben & 4 \\ \hline
m@42054
   525
%27.04.2011 & Dokumentation schreiben & 2 \\ \hline
m@42054
   526
%28.04.2011 & Dokumentation: Fertigstellen der ersten Version & 3 \\ \hline \hline
m@42054
   527
% & Anzahl der Einheiten & 20 \\
m@42054
   528
%\hline
m@42054
   529
%\end{tabular}
m@42054
   530
%
m@42054
   531
%\section{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}