1 % /usr/share/doc/latex-beamer/solutions/conference-talks/conference-ornate-20min.en.tex
7 \setbeamercovered{transparent}
9 \usepackage[english]{babel}
10 \usepackage[latin1]{inputenc}
13 \usepackage[T1]{fontenc}
14 %\usepackage{graphicx}
16 \def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
17 \def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
19 \title[Isabelle Frontend]
20 {Userinterfaces \\f\"ur Computer Theorem Prover,\\
21 Machbarkeits-Studie im \isac-Projekt
23 \subtitle{Bachelorarbeit Telematik}
26 \institute{Institut f\"ur Software Technologie\\
27 Technische Universit\"at Graz}
30 %\subject{Formal specification of math assistants}
31 % This is only inserted into the PDF information catalog
33 % Delete this, if you do not want the table of contents to pop up at
34 % the beginning of each subsection:
39 \tableofcontents[currentsection,currentsubsection]
44 % If you wish to uncover everything in a step-wise fashion, uncomment
45 % the following command:
46 %\beamerdefaultoverlayspecification{<+->}
57 % You might wish to add the option [pausesections]
60 \section[Stutus quo]{Ausgangssituation: das k\"unftige Isabelle Front-end}
61 \subsection[Isabelle]{Der Theoremprover Isabelle}
63 \frametitle{Der Theoremprover Isabelle}
65 \item Anwendungen von Isabelle
67 \item Mechanisieren von Mathematik Theorien
69 \item nat\"urliche, reelle, komplexe Zahlen, Listen, Lattices, \dots
70 \item Gr\"obner Basen, Integral/Differential, Taylorreihen, \dots
71 \item High Order Logics, Logic of Computable Functions, \dots
74 \item Math.Grundlagen f\"ur Softwaretechnologie
76 \item Hoare Logic, Temporal Logic of Actions, Hoare for Java
77 \item Theory for Unix file-system security, for state spaces, \dots
78 \item Archive of Formal Proofs {\tiny\tt http://afp.sourceforge.net}
82 \item Integration von Isabelle in Entwicklungstools
84 \item Boogie --- Verification Condition Generator
85 \item $\mathbf{\pi}d.e$ Projekt: Unterst\"utzung Domain-spezifischen CTPs
86 \item Test Case Generators (TUG) ?
89 \item Isar, die Beweissprache von Isabelle
91 %\item Demo $\sqrt{2}\not\in{\cal R}\;\;\;$
92 \item Demo 'Allgemeine Dreiecke'
94 \alert{Beweisteile asynchron interpretiert}
99 \subsection[Scala-Layer]{Die Konzeption des Scala-Layers}
100 \begin{frame}\frametitle{Die Konzeption des Scala-Layers}
103 \includegraphics[width=100mm]{fig-reuse-ml-scala-SD}
105 %\nocaptionrule\caption{Reuse of Isabelle/Isar's Scala API.}
106 \label{fig-reuse-ml-scala}
110 \begin{frame}\frametitle{Kommunikationsprotokoll \\Scala --- SML}
112 \item Das Protokoll ist \textbf{asynchron}: \\
113 verschiedene Teile eines Beweises werden in verschiedenen Threads interpretiert
115 \item Die Threads werden von Scala-\textbf{``Actors''} verwaltet (``Actors'' von der Programmsprache Erlang \"ubernommen)
117 \item \alert{Das Protokoll hat \textbf{kein API} nach aussen:}\\
119 Der Scala-Layer zielt auf konsistente Verwaltung gro\3er, verteilter Theorie-Bibliotheken\\
121 Anwendungsprogrammierer sollen nicht hier eingreifen, sondern Isabelle Theorien erweitern\\
123 \alert{\textit{!~Grunds\"atzliches Problem f\"ur das Projekt ``SD''~!}}
127 \subsection[Integration]{Isabelles Filestruktur im \"Ubergangsstadium}
152 %\begin{frame}\frametitle{Isabelle Files: *.jar}
154 %----- for ``isabelle jedit \&''; contained in Isabelle\_bundle}\\
156 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jedit.jar\\
157 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/LatestVersion.jar\\
158 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/SideKick.jar\\
159 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Console.jar\\
160 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Pure.jar \alert{$\;\;\;\;\;\;\;\;\;\;\;\Longleftarrow$ entry to SML}\\
161 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Isac.jar\\
162 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-compiler.jar\\
163 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Isabelle-jEdit.jar\\
164 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/cobra.jar\\
165 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/js.jar\\
166 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Hyperlinks.jar\\
167 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-swing.jar\\
168 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-library.jar\\
169 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/QuickNotepad.jar\\
170 %./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/ErrorList.jar\\
173 %----- scala system; contained in Isabelle\_bundle}\\
174 %./contrib/scala-2.8.1.final/misc/sbaz/scala-bazaars.jar\\
175 %./contrib/scala-2.8.1.final/misc/sbaz/sbaz-tests.jar\\
176 %./contrib/scala-2.8.1.final/misc/scala-devel/plugins/continuations.jar\\
177 %./contrib/scala-2.8.1.final/lib/scala-compiler.jar\\
178 %./contrib/scala-2.8.1.final/lib/scalap.jar\\
179 %./contrib/scala-2.8.1.final/lib/scala-swing.jar\\
180 %./contrib/scala-2.8.1.final/lib/scala-library.jar\\
181 %./contrib/scala-2.8.1.final/lib/jline.jar\\
182 %./contrib/scala-2.8.1.final/lib/scala-dbc.jar\\
183 %./contrib/scala-2.8.1.final/src/scala-library-src.jar\\
184 %./contrib/scala-2.8.1.final/src/scala-swing-src.jar\\
185 %./contrib/scala-2.8.1.final/src/scala-compiler-src.jar\\
186 %./contrib/scala-2.8.1.final/src/scala-dbc-src.jar\\
187 %./contrib/scala-2.8.1.final/src/sbaz-src.jar\\
191 %\begin{frame}\frametitle{Isabelle Files: *.scala}
193 %./src/Pure/General/xml.scala\\
194 %./src/Pure/General/linear\_set.scala\\
200 \begin{frame}\frametitle{Isabelle Files: *.scala}
202 \textbf{\$ find -name ``*.scala''}\\
203 ./src/Pure/General/xml.scala\\
204 ./src/Pure/General/linear\_set.scala\\
211 %./src/Pure/General/symbol.scala\\
212 %./src/Pure/General/exn.scala\\
213 %./src/Pure/General/position.scala\\
214 %./src/Pure/General/scan.scala\\
215 %./src/Pure/General/xml\_data.scala\\
216 %./src/Pure/General/yxml.scala\\
217 %./src/Pure/General/markup.scala\\
231 %./src/Pure/General/sha1.scala\\
239 %./src/Pure/General/timing.scala\\
240 %./src/Pure/General/pretty.scala\\
242 %./src/Pure/Concurrent/volatile.scala\\
243 %./src/Pure/Concurrent/future.scala\\
244 %./src/Pure/Concurrent/simple\_thread.scala\\
246 %./src/Pure/Thy/html.scala\\
247 %./src/Pure/Thy/completion.scala\\
248 %./src/Pure/Thy/thy\_header.scala\\
249 %./src/Pure/Thy/thy\_syntax.scala\\
250 %./src/Pure/Isac/isac.scala\\
251 %./src/Pure/library.scala\\
253 %./src/Pure/Isar/keyword.scala\\
254 %./src/Pure/Isar/outer\_syntax.scala\\
255 %./src/Pure/Isar/token.scala\\
256 %./src/Pure/Isar/parse.scala\\
258 %./src/Pure/System/gui\_setup.scala\\
259 %./src/Pure/System/isabelle\_system.scala\\
265 ./src/Pure/General/timing.scala\\
266 ./src/Pure/General/pretty.scala\\
268 ./src/Pure/Concurrent/volatile.scala\\
269 ./src/Pure/Concurrent/future.scala\\
270 ./src/Pure/Concurrent/simple\_thread.scala\\
272 ./src/Pure/Thy/html.scala\\
273 ./src/Pure/Thy/completion.scala\\
274 ./src/Pure/Thy/thy\_header.scala\\
275 ./src/Pure/Thy/thy\_syntax.scala\\
276 ./src/Pure/Isac/isac.scala\\
277 ./src/Pure/library.scala\\
279 ./src/Pure/Isar/keyword.scala\\
280 ./src/Pure/Isar/outer\_syntax.scala\\
281 ./src/Pure/Isar/token.scala\\
282 ./src/Pure/Isar/parse.scala\\
284 ./src/Pure/System/gui\_setup.scala\\
285 ./src/Pure/System/isabelle\_system.scala\\
292 %./src/Pure/System/swing\_thread.scala\\
293 %./src/Pure/System/download.scala\\
294 %./src/Pure/System/session\_manager.scala\\
295 %./src/Pure/System/standard\_system.scala\\
296 %./src/Pure/System/isabelle\_syntax.scala\\
297 %./src/Pure/System/session.scala\\
298 %./src/Pure/System/platform.scala\\
299 %./src/Pure/System/cygwin.scala\\
307 %./src/Pure/System/event\_bus.scala\\
308 %./src/Pure/System/isabelle\_process.scala\\
310 %./src/Pure/PIDE/document.scala\\
311 %./src/Pure/PIDE/markup\_tree.scala\\
312 %./src/Pure/PIDE/text.scala\\
313 %./src/Pure/PIDE/command.scala\\
314 %./src/Pure/PIDE/isar\_document.scala
323 ./src/Pure/System/event\_bus.scala\\
324 ./src/Pure/System/isabelle\_process.scala\\
326 ./src/Pure/PIDE/document.scala\\
327 ./src/Pure/PIDE/markup\_tree.scala\\
328 ./src/Pure/PIDE/text.scala\\
329 ./src/Pure/PIDE/command.scala\\
330 ./src/Pure/PIDE/isar\_document.scala
340 \begin{frame}\frametitle{*.scala --- *.ML}
342 isabisac\$ ls -l src/Pure/System/\\
343 -rw-r--r-- 1 msteger root 3987 2011-03-14 17:09 cygwin.scala\\
344 -rw-r--r-- 1 msteger root 1486 2011-03-14 17:09 download.scala\\
345 -rw-r--r-- 1 msteger root 1296 2011-03-14 17:09 event\_bus.scala\\
346 -rw-r--r-- 1 msteger root 1830 2011-03-14 17:09 gui\_setup.scala\\
347 -rw-r--r-- 1 msteger root 5722 2011-03-14 17:09 \alert{isabelle\_process}.\textbf{ML}\\
348 -rw-r--r-- 1 msteger root 1059 2011-03-14 17:09 \alert{isabelle\_process}.\textbf{scala}\\
349 -rw-r--r-- 1 msteger root 1659 2011-03-14 17:09 isabelle\_syntax.scala\\
350 -rw-r--r-- 1 msteger root 2087 2011-03-14 17:09 \alert{isabelle\_system}.\textbf{ML}\\
351 -rw-r--r-- 1 msteger root 1168 2011-03-14 17:09 \alert{isabelle\_system}.\textbf{scala}\\
352 -rw-r--r-- 1 msteger root 5935 2011-03-14 17:09 isar.ML\\
353 -rw-r--r-- 1 msteger root 1989 2011-03-14 17:09 platform.scala\\
354 -rw-r--r-- 1 msteger root 1427 2011-03-14 17:09 session\_manager.scala\\
355 -rw-r--r-- 1 msteger root 3833 2011-03-14 17:09 \alert{session}.\textbf{ML}\\
356 -rw-r--r-- 1 msteger root 9172 2011-03-14 17:09 \alert{session}.\textbf{scala}\\
357 -rw-r--r-- 1 msteger root 9086 2011-03-14 17:09 standard\_system.scala\\
358 -rw-r--r-- 1 msteger root 1643 2011-03-14 17:09 swing\_thread.scala\\
363 \subsection[jEdit]{Das Frontend: jEdit und ``plugins''}
364 \begin{frame}\frametitle{Das Frontend: \\jEdit und ``plugins''}
366 \item \textbf{jEdit} \textit{``is a mature programmer's text editor with hundreds (counting the time developing \textbf{plugins}) of person-years of development behind it.''}
368 \item Also: Die Funktionalit\"at von jEdit wird \"uber ``plugins'' bestimmt
370 \item Isabelle verwendet eine Reihe davon
372 \item der Parser ``Sidekick''
373 \item Console f\"ur jEdit-Komponenten
379 \item jEdit ist ``open source'' mit gro\3er Community
381 \item Anfragen an Mailinglisten von jEdit (ohne Scala-plugin!) und Isabelle
385 \section[Projektarbeit]{Projekt: Vorarbeiten f\"ur ``structured derivations'' (SD)}
386 \subsection[Aufgabenstellung]{Definition der Aufgabenstellung}
387 \begin{frame}\frametitle{Definition der Aufgabenstellung}
388 Aufgabenstellung: \\Feasibility-Study zur Implementierung von ``structured~derivations'' (SD) in Isabelle.\\
390 \textit{``Die Implementierung soweit vorantreiben wie im gegebenen Studenausma\3 m\"oglich~!''}\\
394 \item Relevante Isabelle Komponenten identifizieren und studieren
395 \item Installation der Standard-Komponenten
396 \item Entwicklungsumgebung vom Isabelle-Team kopieren
397 \item Relevante Komponenten implementieren
399 \item jEdit Plugin f\"ur SD
400 \item zugeh\"origen Parser
401 \item nicht vorgesehen: SD-Interpreter in Isar (SML)
406 %\subsection[Beispiel SD]{Beispiel ``structured derivation'' (SD)}
407 \begin{frame}\frametitle{Beispiel ``structured~derivation''~(SD)}
410 123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
411 \>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
412 \> \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
413 \>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
414 \> \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
415 \>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
416 \> \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
417 \> \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
418 \> \> \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
419 \> \>$\equiv$\>\vdots\\
420 \> \> \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
421 \> \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$ \\
422 \> \> \>$1 + -1 * x$\\
423 \>\dots\>$1 + -1 * x$\\
424 \>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
430 \subsection[NetBeans]{Konfiguration des Projektes in der NetBeans IDE}
431 \begin{frame}\frametitle{Konfiguration in NetBeans}
432 Mehrere Run-Konfigurationen sind praktisch:
434 \item Start von jEdit + Plug-ins aus NetBeans
436 \item Exekution der fertig kompilierten jEdit.jar
437 \item Exkution der eingebundenen jEdit Sources: \\zum Debuggen !
439 \item Start von jEdit aus der Konsole
441 \vspace{0.2cm} \pause
442 Dementsprechend komplex sind die Konfigurations-Files:
444 \begin{tabular}{l r l}
445 build.xml & 102 & LOCs\\
446 project.xml & 25 & LOCs\\
447 project.properties & 85 & LOCs\\
448 build-impl.xml & 708 & LOCs\\
449 & & (teilw. automatisch generiert)\end{tabular}
453 \subsection[Implementation]{Komponenten zur Implementation von SD}
455 \begin{frame}\frametitle{Die Konzeption des Scala-Layers}
457 \includegraphics[width=100mm]{fig-jedit-plugins-SD}
458 \label{Frontend des jEdit}
462 \begin{frame}\frametitle{jEdit-Plugin}
464 \item Aufbau: Ein Plugin besteht aus:
467 \item Source-Files: \textbf{Scala}
471 \item XML-Files: \textit{``glue code''} zwischen \textbf{Java} (Editor) und \textbf{Scala} (Plugin)
474 %\item Bestehendes Java-Plugin in Scala transferieren
476 %\item Neue Ordnerstruktur in bestehende Isabelle-Ordner-Hierachie integrieren
480 \begin{frame}\frametitle{Sources des jEdit Plugins}
482 src/Tools/jEditC\textbf{\$ ls -l *}\\
490 \textbf{plugin/}build.xml\\
491 \textbf{plugin/}changes40.txt\\
492 \textbf{plugin/}changes42.txt\\
493 \textbf{plugin/}description.html\\
494 \textbf{plugin/}IsacActions.java\\
495 \textbf{plugin/}Isac.iml\\
496 \textbf{plugin/}Isac.java\\
497 \textbf{plugin/}IsacOptionPane.java\\
498 \textbf{plugin/}IsacPlugin.java\\
499 \textbf{plugin/}IsacTextArea.java\\
500 \textbf{plugin/}IsacToolPanel.java\\
501 \textbf{plugin/}plugin\\
502 \textbf{plugin/}README.txt\\
503 \textbf{nbproject/*}\\
504 \textbf{src/}actions.xml\\
505 \textbf{src/}changes40.txt\\
506 \textbf{src/}changes42.txt\\
507 \textbf{src/}description.html\\
508 \textbf{src/}dockables.xml\\
509 \textbf{src/}IsacActions.scala\\
510 \textbf{src/}Isac.iml\\
511 \textbf{src/}IsacOptionPane.scala\\
512 \textbf{src/}IsacPlugin.scala\\
513 \textbf{src/}Isac.props\\
514 \textbf{src/}Isac.scala\\
515 \textbf{src/}IsacTextArea.scala\\
516 \textbf{src/}IsacToolPanel.scala\\
517 \textbf{src/}manifest.mf\\
518 \textbf{src/}README.txt\\
519 \textbf{src/}users-guide.xml
523 \begin{frame}\frametitle{Anforderungen an das Versuchs-Plugin}
524 Folgende Funktionalit\"at wurde zu Testzwecken umgesetzt:
527 \item Grunds\"atzlicher Aufbau eines GUIs
529 \item Kopieren von Text zwischen den einzelnen Buffers
532 \item \alert{Somit auch Zugriff auf andere Plugins!}
535 \item Ansatz f\"ur die Einbindung des SD-Parsers
538 \item Zugriff auf Isabelle-Pure: \alert{parsen von SD parallel zu Isabelle/Isar}
546 %\subsection[Parser]{Ein funktionaler Parser f\"ur SD (in SML)}
548 \section[Summary]{Zusammenfassung}
549 \begin{frame}\frametitle{Zusammenfassung}
550 Folgende Milestones wurden erfolgreich abgeschlossen:
552 \item Relevante Isabelle Komponenten dokumentiert
554 \item Installation der Standard-Komponenten:
556 \item Mercurial Versioncontrol
558 \item Standard Isabelle Bundle
561 \item Entwicklungsumgebung vom Isabelle-Team kopieren
563 \item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
564 \item jEdit als NetBeans Projekt definiert
567 \item Relevante Komponenten implementieren
569 \item jEdit Plugin f\"ur SD
570 \item Verbindung des Plugins zu Isabelle
571 \item zugeh\"origen Parser: nur ein Test in SML
576 \begin{frame}\frametitle{Zusammenfassung}
578 \alert{$\mathbf{- - -}$}\\
579 Aus Zeitgr\"unden nicht m\"oglich: ein komplettes SD-Plugin;\\
580 dazu w\"are auch ein Interpreter auf der ML-Seite n\"otig.\\
582 \alert{$\mathbf{+ + +}$}\\
584 Voraussetzungen f\"ur k\"unftige Entwicklung geschaffen:
586 \item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
587 \item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
588 \item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
592 \begin{frame}\frametitle{}
594 \LARGE{Danke f\"ur die Aufmerksamkeit !}