separated Isac documentation (~~/doc-isac) from Isabelle documentation (~~/src/Doc)
authorWalther Neuper <neuper@ist.tugraz.at>
Tue, 17 Sep 2013 09:50:52 +0200
changeset 52107f8845fc8f38d
parent 52106 7f3760f39bdc
child 52108 9aaf0d0f0ce4
separated Isac documentation (~~/doc-isac) from Isabelle documentation (~~/src/Doc)
doc-isac/CTP-userinterfaces.bib
doc-isac/CTP-userinterfaces.tex
doc-isac/akargl/ferialprakt.tex
doc-isac/chuber/Functions.thy
doc-isac/chuber/bakk_thesis_prelim.tex
doc-isac/chuber/references.bib
doc-isac/dmeindl/Hauptdatei.tex
doc-isac/dmeindl/proposal.tex
doc-isac/dmeindl/references.bib
doc-isac/dmeindl/thol.tex
doc-isac/fig/coqide.png
doc-isac/fig/jrocnik/isac-Ztrans-math-3.png
doc-isac/fig/jrocnik/math-universe-small.png
doc-isac/fig/jrocnik/math-universe.odg
doc-isac/fig/jrocnik/math-universe.png
doc-isac/fig/pgisabelle.png
doc-isac/jrocnik/CLEANUP
doc-isac/jrocnik/FFT.thy
doc-isac/jrocnik/Makefile
doc-isac/jrocnik/TUGlogo.pdf
doc-isac/jrocnik/Test_Complex.thy
doc-isac/jrocnik/Test_Integral.thy
doc-isac/jrocnik/Test_SUM.thy
doc-isac/jrocnik/bakkarbeit.tcp
doc-isac/jrocnik/bakkarbeit.tps
doc-isac/jrocnik/bakkarbeit_titlepage.tex
doc-isac/jrocnik/calulations.tex
doc-isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math-3.png
doc-isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math.pdf
doc-isac/jrocnik/eJMT-paper/fig/universe.pdf
doc-isac/jrocnik/eJMT-paper/jrocnik_eJMT.tex
doc-isac/jrocnik/eJMT-paper/references.bib
doc-isac/jrocnik/final/jrocnik_bakk.tex
doc-isac/jrocnik/final/jrocnik_present1.tex
doc-isac/jrocnik/final/jrocnik_present2.tex
doc-isac/jrocnik/fixbookmarks.pl
doc-isac/jrocnik/isabelle.sty
doc-isac/jrocnik/isabellesym.sty
doc-isac/jrocnik/jrocnik_cadgme.tex
doc-isac/jrocnik/math-universe.png
doc-isac/jrocnik/pdfsetup.sty
doc-isac/jrocnik/preambleForGeneratedDocuments.tex
doc-isac/jrocnik/references.bib
doc-isac/jrocnik/sedindex
doc-isac/jrocnik/wn-notes.txt
doc-isac/mat-eng-de.lot
doc-isac/mat-eng-de.pdf
doc-isac/mat-eng-de.tex
doc-isac/mat-eng-en.tex
doc-isac/mat-eng.sml
doc-isac/mlehnfeld/bib.bib
doc-isac/mlehnfeld/overview.odg
doc-isac/mlehnfeld/presentation.tex
doc-isac/mlehnfeld/projektbericht.tex
doc-isac/msteger/README
doc-isac/msteger/bakk-arbeit/CLEANUP
doc-isac/msteger/bakk-arbeit/content.tex
doc-isac/msteger/bakk-arbeit/master_thesis.bib
doc-isac/msteger/bakk-arbeit/thesis-acknowl.tex
doc-isac/msteger/bakk-arbeit/thesis-appendix.tex
doc-isac/msteger/bakk-arbeit/thesis-biblio.tex
doc-isac/msteger/bakk-arbeit/thesis-conclusion.tex
doc-isac/msteger/bakk-arbeit/thesis-contents.tex
doc-isac/msteger/bakk-arbeit/thesis-intro.tex
doc-isac/msteger/bakk-arbeit/thesis-macros.tex
doc-isac/msteger/bakk-arbeit/thesis-preamble.tex
doc-isac/msteger/bakk-arbeit/thesis-title.tex
doc-isac/msteger/bakk-arbeit/thesis.lol
doc-isac/msteger/bakk-arbeit/thesis.tex
doc-isac/msteger/bakk-plan.tex
doc-isac/msteger/bakk-presentation.tex
doc-isac/msteger/bibliografie.bib
doc-isac/msteger/dirs-all-jars.txt
doc-isac/msteger/fig-jedit-plugins-SD.odg
doc-isac/msteger/fig-jedit-plugins-SD.png
doc-isac/msteger/fig-reuse-ml-scala-SD.odg
doc-isac/msteger/fig-reuse-ml-scala-SD.png
doc-isac/msteger/official_docu/Doku.tex
doc-isac/tactics.tex
doc-isac/template_master_thesis.zip
doc-isac/template_thesis_prelim.tex
doc-isac/tleh/ferialprakt.tex
src/Doc/isac/CTP-userinterfaces.bib
src/Doc/isac/CTP-userinterfaces.tex
src/Doc/isac/akargl/ferialprakt.tex
src/Doc/isac/chuber/Functions.thy
src/Doc/isac/chuber/bakk_thesis_prelim.tex
src/Doc/isac/chuber/references.bib
src/Doc/isac/dmeindl/Hauptdatei.tex
src/Doc/isac/dmeindl/proposal.tex
src/Doc/isac/dmeindl/references.bib
src/Doc/isac/dmeindl/thol.tex
src/Doc/isac/fig/coqide.png
src/Doc/isac/fig/jrocnik/isac-Ztrans-math-3.png
src/Doc/isac/fig/jrocnik/math-universe-small.png
src/Doc/isac/fig/jrocnik/math-universe.odg
src/Doc/isac/fig/jrocnik/math-universe.png
src/Doc/isac/fig/pgisabelle.png
src/Doc/isac/jrocnik/CLEANUP
src/Doc/isac/jrocnik/FFT.thy
src/Doc/isac/jrocnik/Makefile
src/Doc/isac/jrocnik/TUGlogo.pdf
src/Doc/isac/jrocnik/Test_Complex.thy
src/Doc/isac/jrocnik/Test_Integral.thy
src/Doc/isac/jrocnik/Test_SUM.thy
src/Doc/isac/jrocnik/bakkarbeit.tcp
src/Doc/isac/jrocnik/bakkarbeit.tps
src/Doc/isac/jrocnik/bakkarbeit_titlepage.tex
src/Doc/isac/jrocnik/calulations.tex
src/Doc/isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math-3.png
src/Doc/isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math.pdf
src/Doc/isac/jrocnik/eJMT-paper/fig/universe.pdf
src/Doc/isac/jrocnik/eJMT-paper/jrocnik_eJMT.tex
src/Doc/isac/jrocnik/eJMT-paper/references.bib
src/Doc/isac/jrocnik/final/jrocnik_bakk.tex
src/Doc/isac/jrocnik/final/jrocnik_present1.tex
src/Doc/isac/jrocnik/final/jrocnik_present2.tex
src/Doc/isac/jrocnik/fixbookmarks.pl
src/Doc/isac/jrocnik/isabelle.sty
src/Doc/isac/jrocnik/isabellesym.sty
src/Doc/isac/jrocnik/jrocnik_cadgme.tex
src/Doc/isac/jrocnik/math-universe.png
src/Doc/isac/jrocnik/pdfsetup.sty
src/Doc/isac/jrocnik/preambleForGeneratedDocuments.tex
src/Doc/isac/jrocnik/references.bib
src/Doc/isac/jrocnik/sedindex
src/Doc/isac/jrocnik/wn-notes.txt
src/Doc/isac/mat-eng-de.lot
src/Doc/isac/mat-eng-de.pdf
src/Doc/isac/mat-eng-de.tex
src/Doc/isac/mat-eng-en.tex
src/Doc/isac/mat-eng.sml
src/Doc/isac/mlehnfeld/bib.bib
src/Doc/isac/mlehnfeld/overview.odg
src/Doc/isac/mlehnfeld/presentation.tex
src/Doc/isac/mlehnfeld/projektbericht.tex
src/Doc/isac/msteger/README
src/Doc/isac/msteger/bakk-arbeit/CLEANUP
src/Doc/isac/msteger/bakk-arbeit/content.tex
src/Doc/isac/msteger/bakk-arbeit/master_thesis.bib
src/Doc/isac/msteger/bakk-arbeit/thesis-acknowl.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-appendix.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-biblio.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-conclusion.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-contents.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-intro.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-macros.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-preamble.tex
src/Doc/isac/msteger/bakk-arbeit/thesis-title.tex
src/Doc/isac/msteger/bakk-arbeit/thesis.lol
src/Doc/isac/msteger/bakk-arbeit/thesis.tex
src/Doc/isac/msteger/bakk-plan.tex
src/Doc/isac/msteger/bakk-presentation.tex
src/Doc/isac/msteger/bibliografie.bib
src/Doc/isac/msteger/dirs-all-jars.txt
src/Doc/isac/msteger/fig-jedit-plugins-SD.odg
src/Doc/isac/msteger/fig-jedit-plugins-SD.png
src/Doc/isac/msteger/fig-reuse-ml-scala-SD.odg
src/Doc/isac/msteger/fig-reuse-ml-scala-SD.png
src/Doc/isac/msteger/official_docu/Doku.tex
src/Doc/isac/tactics.tex
src/Doc/isac/template_master_thesis.zip
src/Doc/isac/template_thesis_prelim.tex
src/Doc/isac/tleh/ferialprakt.tex
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/doc-isac/CTP-userinterfaces.bib	Tue Sep 17 09:50:52 2013 +0200
     1.3 @@ -0,0 +1,161 @@
     1.4 +@inproceedings{Aspinall:2007:FIP:1420412.1420429,
     1.5 + author = {Aspinall, David and L\"{u}th, Christoph and Winterstein, Daniel},
     1.6 + title = {A Framework for Interactive Proof},
     1.7 + booktitle = {Proceedings of the 14th symposium on Towards Mechanized Mathematical Assistants: 6th International Conference},
     1.8 + series = {Calculemus '07 / MKM '07},
     1.9 + year = {2007},
    1.10 + isbn = {978-3-540-73083-5},
    1.11 + location = {Hagenberg, Austria},
    1.12 + pages = {161--175},
    1.13 + numpages = {15},
    1.14 + url = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
    1.15 + doi = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
    1.16 + acmid = {1420429},
    1.17 + publisher = {Springer-Verlag},
    1.18 + address = {Berlin, Heidelberg},
    1.19 +}
    1.20 +
    1.21 +@Book{armstrong:erlang96,
    1.22 +  author = 	 {Armstrong, Joe and others},
    1.23 +  title = 	 {Concurrent Programming in Erlang},
    1.24 +  publisher = {Prentice Hall},
    1.25 +  year = 	 {1996}
    1.26 +}
    1.27 +
    1.28 +@TechReport{odersky:scala06,
    1.29 +  author = 	 {Odersky, Martin and others},
    1.30 +  title = 	 {An Overview of the Scala Programming Language},
    1.31 +  institution =  {\'Ecole Polytechnique F\'ed\'erale de Lausanne (EPFL)},
    1.32 +  year = 	 {2006},
    1.33 +  type = 	 {Technical Report LAMP-REPORT-2006-001},
    1.34 +  address = 	 {1015 Lausanne, Switzerland},
    1.35 +  note = 	 {Second Edition},
    1.36 +  annote = 	 {http://www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf}
    1.37 +}
    1.38 +
    1.39 +@article{Haller:2009:SAU:1496391.1496422,
    1.40 + author = {Haller, Philipp and Odersky, Martin},
    1.41 + title = {Scala Actors: Unifying thread-based and event-based programming},
    1.42 + journal = {Theor. Comput. Sci.},
    1.43 + volume = {410},
    1.44 + issue = {2-3},
    1.45 + month = {February},
    1.46 + year = {2009},
    1.47 + issn = {0304-3975},
    1.48 + pages = {202--220},
    1.49 + numpages = {19},
    1.50 + url = {http://portal.acm.org/citation.cfm?id=1496391.1496422},
    1.51 + doi = {10.1016/j.tcs.2008.09.019},
    1.52 + acmid = {1496422},
    1.53 + publisher = {Elsevier Science Publishers Ltd.},
    1.54 + address = {Essex, UK},
    1.55 + keywords = {Actors, Concurrent programming, Events, Threads},
    1.56 +} 
    1.57 +
    1.58 +@InProceedings{scala:jmlc06,
    1.59 +  author =       {Philipp Haller and Martin Odersky},
    1.60 +  title =        {Event-Based Programming without Inversion of Control},
    1.61 +  booktitle =    {Proc. Joint Modular Languages Conference},
    1.62 +  year =         2006,
    1.63 +  series =       {Springer LNCS}
    1.64 +}
    1.65 +
    1.66 +
    1.67 +@InProceedings{makarius:isa-scala-jedit,
    1.68 +  author = 	 {Makarius Wenzel},
    1.69 +  title = 	 {Asyncronous Proof Processing with {Isabelle/Scala} and {Isabelle/jEdit}},
    1.70 +  booktitle = {User Interfaces for Theorem Provers (UITP 2010)},
    1.71 +  year = 	 {2010},
    1.72 +  editor = 	 {C. Sacerdoti Coen and D. Aspinall},
    1.73 +  address = 	 {Edinburgh, Scotland},
    1.74 +  month = 	 {July},
    1.75 +  organization = {FLOC 2010 Satellite Workshop},
    1.76 +  note = 	 {http://www4.in.tum.de/~wenzelm/papers/async-isabelle-scala.pdf}
    1.77 +}
    1.78 +
    1.79 +@Book{db:dom-eng,
    1.80 +  author = 	 {Bj{\o}rner, Dines},
    1.81 +  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
    1.82 +  publisher = 	 {JAIST Press},
    1.83 +  year = 	 {2009},
    1.84 +  month = 	 {Feb},
    1.85 +  series = 	 {COE Research Monograph Series},
    1.86 +  volume = 	 {4},
    1.87 +  address = 	 {Nomi, Japan}
    1.88 +}
    1.89 +
    1.90 +@inproceedings{Haftmann-Nipkow:2010:code,
    1.91 +  author =      {Florian Haftmann and Tobias Nipkow},
    1.92 +  title =       {Code Generation via Higher-Order Rewrite Systems},
    1.93 +  booktitle =   {Functional and Logic Programming, 10th International
    1.94 +Symposium: {FLOPS} 2010},
    1.95 +  year =        {2010},
    1.96 +  publisher =   {Springer},
    1.97 +  series =      {Lecture Notes in Computer Science},
    1.98 +  volume =      {6009}
    1.99 +}
   1.100 +
   1.101 +@Manual{coq1999,
   1.102 +  title = 	 {The Coq Proof Assistant},
   1.103 +  author = 	 {Barras, B. and others},
   1.104 +  organization = {INRIA-Rocquencourt - CNRS-ENS Lyon},
   1.105 +  month = 	 {July},
   1.106 +  year = 	 {1999},
   1.107 +  pnote={},status={cited},source={mkm01.caprotti},location={}  
   1.108 +}
   1.109 +
   1.110 +@Book{meta-ML,
   1.111 +  author = 	 {Gordon,M. and Milner,R.  and Wadsworth,C. P.},
   1.112 +  title = 	 {Edinburgh LCF: A Mechanised Logic of Computation},
   1.113 +  publisher = 	 { Springer-Verlag},
   1.114 +  year = 	 {1979},
   1.115 +  volume = 	 {78},
   1.116 +  series = 	 {Lecture Notes in Computer Science}
   1.117 +}
   1.118 + 
   1.119 +@book{Paulson:Isa94,
   1.120 +        title={Isabelle: a generic theorem prover}, 
   1.121 +        author={Paulson, Lawrence C. }, publisher={Springer-Verlag},year={1994}, 
   1.122 +	volume={828},series={Lecture Notes in Computer Science},address={},edition={},month={}, 
   1.123 +	note={With contributions by Topias Nipkow},
   1.124 +        status={},source={},location={-} 
   1.125 +        }  
   1.126 +
   1.127 +@Book{pl:milner97,
   1.128 +  author = 	 {Robin Milner and Mads Tofte and Robert Harper and David MacQueen},
   1.129 +  title = 	 {The Definition of Standard ML (Revised)},
   1.130 +  publisher = 	 {The MIT Press},
   1.131 +  year = 	 1997,
   1.132 +  address =	 {Cambridge, London},
   1.133 +  annote =	 {97bok375}
   1.134 +}
   1.135 +
   1.136 +@Article{back-grundy-wright-98,
   1.137 +  author = 	 {Back, Ralph and Grundy, Jim and von Wright, Joakim},
   1.138 +  title = 	 {Structured Calculational Proof},
   1.139 +  journal = 	 {Formal Aspects of Computing},
   1.140 +  year = 	 {1998},
   1.141 +  number = 	 {9},
   1.142 +  pages = 	 {469-483}
   1.143 +}
   1.144 +
   1.145 +@Manual{isar-impl,
   1.146 +  title = 	 {The {Isabelle/Isar} Implementation},
   1.147 +  author = 	 {Makarius Wenzel},
   1.148 +  month = 	 {April 19},
   1.149 +  year = 	 {2009},
   1.150 +  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
   1.151 +}
   1.152 +
   1.153 +@InProceedings{wenzel:isar,
   1.154 +  author = 	 {Wenzel, Markus},
   1.155 +  title = 	 {Isar - a Generic Interpretative Approach to Readable Formal Proof Documents},
   1.156 +  booktitle = 	 {Theorem Proving in Higher Order Logics},
   1.157 +  year = 	 {1999},
   1.158 +  editor = 	 {G. Dowek, A. Hirschowitz, C. Paulin, L. Thery},
   1.159 +  series = 	 {LNCS 1690},
   1.160 +  organization = {12th International Conference TPHOLs'99},
   1.161 +  publisher = {Springer}
   1.162 +}
   1.163 +
   1.164 +
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/doc-isac/CTP-userinterfaces.tex	Tue Sep 17 09:50:52 2013 +0200
     2.3 @@ -0,0 +1,445 @@
     2.4 +\documentclass{article}
     2.5 +\usepackage{a4}
     2.6 +\usepackage{times}
     2.7 +\usepackage{latexsym}
     2.8 +\bibliographystyle{alpha}
     2.9 +\usepackage{graphicx}
    2.10 +
    2.11 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    2.12 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
    2.13 +\def\Problem{ {\tt Problem }}
    2.14 +
    2.15 +\title{Userinterfaces for Computer Theorem Provers.\\
    2.16 +	Contributions to Isabelle
    2.17 +}
    2.18 +
    2.19 +\author{G. Schafhauser, A. Schulhofer, M. Steger\\
    2.20 +Knowledge Management Institute (KMI)\\
    2.21 +TU Graz}
    2.22 +
    2.23 +\begin{document}
    2.24 +\maketitle
    2.25 +\abstract{
    2.26 +This paper accompanies a pre-study on a sub-project planned within the \sisac-project. The goal of this sub-project is to extend the userinterface of the theorem prover Isabelle such, that Structured Derivations according to R.J.Back are interactively processed. The sub-project is one step towards using the upcoming Isabelle/Isar/Scala layer for \sisac.
    2.27 +
    2.28 +The paper comprises three parts: (1) Ample space is given to background information about the state of the art in user interfaces for theorem provers and about the upcoming requirements for future developments. (2) focuses the strategy of Isabelle and decisions in order to cope with future requirements. (3) provides a protocol of preparatory work for the sub-project.
    2.29 +
    2.30 +By the way, this paper shall serve as an entry point for students interested in joining the the work propared.}
    2.31 +
    2.32 +\section{Introduction}\label{intro}
    2.33 +Computer Theorem Provers (CTPs \footnote{The term CTP is used to address two different things in this paper: (1) the academic discipline comprising respective theories as well as (2) the products developed within this discipline, the provers and the respective technology.}) have a tradition as long as Computer Algebra Systems (CAS), another kind of mathematics assistants. However, CTPs task of proving is more challenging than calculating; so, in contrary to CASs, CTPs are not yet in widespread use --- not yet, because CTPs are on the step into industrial use in the current decade: Safe-critical software requires to be proven correct more and more \cite{db:dom-eng}, and the technology of CTP becomes ready to accomplish the task of efficiently proving hundreds of proof obligations.
    2.34 +
    2.35 +The present shift of the predominant user group from academic experts to software engineers raises novel user requirements for graphical user interfaces (GUI) of CTP. CTPs will become components of integrated development environments, and the knowledge bases have to scale up to industrial size.
    2.36 +
    2.37 +Two issues are particularly challenging: First, future knowledge bases (containing specifications, programs, tests etc) will under joint construction of many engineers. So requirements concerning cooperative work arise as already known from distributed repositories and version management.
    2.38 +
    2.39 +Second, CTP tends to exhaust resources in memory and in run-time. So, CTP will take profit from multicore processors upcoming in this decade --- and CTP are best suited to meet the architectural challenges raised by parallel programming, since this kind of mathematics assistants generally follow rigorous architectural principles and are comparably easy to adapt to these challenges \cite{makarius:isa-scala-jedit}.
    2.40 +
    2.41 +\medskip The paper is organised as follows: First a survey on CTP is given, Sect.\ref{ctp-techn} introduces two prominent CTPs, Sect.\ref{gui-coq-isa} describes their present user interfaces and Sect.\ref{gui-requir} goes into details with the novel requirements mentioned. Then Isabelle's plans for re-designing the user interface are presented: Sect.\ref{ml-users} motivates the strategy of how to approach the users' world, Sect.\ref{scala-medi} describes the rather recent programming language Scala connecting the world of languages for mathematics with the users' world and Sect.\ref{actors} goes into details with Scala's actor library. Finally possible contributions of the \sisac-team at TUG are discussed and prerequisites for such contributions presented: Sect.\ref{struct-der} presents a format for calculations particularly appropriate for education, which requires CTP support, Sect.\ref{plugin} describes plug-in technology required and Sect.\ref{netbeans} notes crucial details of proper project set-up in an integrated development environment.
    2.42 +
    2.43 +%Georg
    2.44 +\section{State of the art in CTP Interfaces}
    2.45 +
    2.46 +\subsection{A European technology: Coq and Isabelle}\label{ctp-techn}
    2.47 +%     http://en.wikipedia.org/wiki/Coq\\
    2.48 +%     http://coq.inria.fr/
    2.49 +%
    2.50 +%     http://en.wikipedia.org/wiki/Isabelle\_(theorem\_prover)\\
    2.51 +%     http://isabelle.in.tum.de/index.html
    2.52 +%
    2.53 +%why math -- functional: some of the languages have been specifically designed for constructing software for symbolic computation (SC). 
    2.54 +%%+ required for \ref{ml-users}
    2.55 +%
    2.56 +%SC http://en.wikipedia.org/wiki/Symbolic\_computation
    2.57 +%% mainly does not compute numerical values, but terms containing variables like functions (symbols)
    2.58 +%
    2.59 +%The LCF project
    2.60 +%http://hopl.murdoch.edu.au/showlanguage.prx?exp=8177
    2.61 +%specifically designed a 'meta language' (ML)
    2.62 +%http://en.wikipedia.org/wiki/ML\_(programming\_language)
    2.63 +%\cite{pl:milner97}
    2.64 +%for developing CTP
    2.65 +\subsubsection{Standard ML}
    2.66 +Standard ML is a general-purpose, modular, functional programming language \cite{pl:milner97}.
    2.67 +Programs written in Standard ML consist of expressions to be evaluated, as opposed to statements or commands. 
    2.68 +Functional programming languages constitute a family very different of object orientated languages, see Sect. \ref{ml-users}. ML originated from the LCF-project(Logic for Computable Functions)\cite{meta-Ml}, where it had been developed as a meta language. Since ML has been standardised this family of language is called Standard ML. Important for the logical foundation of SML is the $\lambda$-calculus.
    2.69 +%http://en.wikipedia.org/wiki/Standard_M 
    2.70 +\subsubsection{Coq}
    2.71 +Coq is an interactive theorem prover, developed in France.
    2.72 +It is programmed in Objective Caml, an ML based programming language.
    2.73 +It has the ability to express  mathematical  assertions and check proof of mathematical assertions. 
    2.74 +Furthermore Coq includes automatic theorem proving tactics and decision procedures.
    2.75 +Properties, programs and proofs are written a functional programming language called the Calculus of Inductive Constructions (CIC).
    2.76 +Proof development in Coq is done through a language of tactics that allows a user-guided proof process \cite{coq1999}.
    2.77 +Another feature of Coq is “that it can automatically extract executable programs from specifications, as either Objective Caml 
    2.78 +or Haskell source code.“
    2.79 +There are many easy-to-read introductions to Coq \footnote{http://coq.inria.fr/a-short-introduction-to-coq} on the internet.
    2.80 +\subsubsection{Isabelle}
    2.81 +Isabelle is an interactive theorem proving framework for high-level natural deduction proofs \cite{Paulson:Isa94}, written in Standard ML. 
    2.82 +Isabelle is developed at University of Cambridge, Technische Universit\"at M\"unchen
    2.83 +and Universit\'e Paris-Sud. Isabelle is called a framework, because it implements several object logics.
    2.84 +The most widespread logic of Isabelle is Isabelle/HOL, short for higher-order logic.
    2.85 +Isabelle/HOL includes several  specification tools, e.g. for data-types, inductive definitions and functions with complex pattern matching.
    2.86 +Proofs are written in the structured proof language Isar \cite{wenzel:isar}.Isabelle implements several tools, e.g. a reasoner, a simplifier and powerful automatic provers(Sledgehammer), increase the user's productivity in theorem proving. 
    2.87 +Isabelle provides notational support: new notations can be introduced, using normal mathematical symbols.
    2.88 +Definitions and proofs may include \LaTeX{} source, from which Isabelle can automatically generate typeset documents.
    2.89 +Isabelle/HOL allows to turn executable specifications directly into code in SML, OCaml, and Haskell \cite{Haftmann-Nipkow:2010:code}.
    2.90 +%(http://www.cl.cam.ac.uk/research/hvg/Isabelle/overview.html)
    2.91 +\subsection{Userinterfaces for CTP: Coq and Isabelle}\label{gui-coq-isa}
    2.92 +%     CoqIDE, ..
    2.93 +%         http://coq.inria.fr/what-is-coq?q=node/57\\
    2.94 +%         earlier than Isabelle/jEdit
    2.95 +%
    2.96 +%     ProofGeneral for Isabelle
    2.97 +%         http://proofgeneral.inf.ed.ac.uk/\\
    2.98 +%         emacs stone age ?
    2.99 +\subsubsection{Coq Integrated Development Environment}
   2.100 +CoqIDE\footnote{http://coq.inria.fr/V8.1/refman/Reference-Manual016.html}, short for Coq Integrated Development Environment, is a graphical interface for Coq. It is written in Ocaml.
   2.101 +Its main purpose is to allow the user to navigate forward and backward into a Coq file, 
   2.102 +executing corresponding commands or undoing them respectively. 
   2.103 +There are several  buffers for helping to write proof scripts.
   2.104 +Among all these buffers, there is always one which is the current running buffer, whose name is displayed on a green background,
   2.105 +which is the one where Coq commands are currently executed.  
   2.106 +CoqIDE provides also a feedback system for the user. 
   2.107 +Therefore the background is green when a command succeeds, otherwise an error message is displayed in the message window and the error location is underlined red.
   2.108 +CoqIDE offers only basic editing commands, therefore it is possible to launch another more sophisticated text editor. 
   2.109 +Furthermore CoqIde provides a proof wizard “for automatically trying to solve the current goal using simple tactics.”
   2.110 +Another features of this IDE are the customisation options, which can be accessed by the Edit menu. 
   2.111 +This allows the user to change the appearance of the IDE.
   2.112 +
   2.113 +
   2.114 +\begin{figure}[htbp]
   2.115 +\centering
   2.116 +%\includegraphics[bb=0 0 10 10]{coqide.png}
   2.117 +\includegraphics[scale=0.20]{fig/coqide}
   2.118 +\caption{CoqIDE main screen}
   2.119 +\end{figure}
   2.120 +
   2.121 +
   2.122 +%(http://coq.inria.fr/V8.1/refman/Reference-Manual016.html)
   2.123 +\subsubsection{Proof General for Isabelle}
   2.124 +Proof General is a generic front-end for proof assistants \cite{Aspinall:2007:FIP:1420412.1420429}, based on the text editor Emacs.
   2.125 +It has been developed at the University of Edinburgh with contributions from other sites.
   2.126 +Proof General supports the following proof assistants: Isabelle, Coq, PhoX, LEGO.
   2.127 +It is used to write proof scripts. A Proof Script is a sequence of commands sent to theorem prover. 
   2.128 +The communication between the user and the theorem prover takes place via two or  more Emacs text widgets.
   2.129 +Therefore the user sees only the output from the latest proof step.
   2.130 +
   2.131 +
   2.132 +Isabelle/Isar\footnote{http://proofgeneral.inf.ed.ac.uk/} Proof General has full support for multiple file scripting, with dependencies between theories communicated between Isabelle and Proof General. 
   2.133 +There is full support for Unicode Tokens, using the Isabelle print mode for X Symbol tokens. Many Isabelle theories have X Symbol syntax already defined 
   2.134 +and it's easy to add to your own theories. 
   2.135 +%(http://proofgeneral.inf.ed.ac.uk/fileshow.php?file=releases%2FProofGeneral%2Fisar%2FREADME)
   2.136 +\begin{figure}[htbp]
   2.137 +\centering
   2.138 +\includegraphics[scale=0.30]{fig/pgisabelle}
   2.139 +\caption{Proof General for Isabelle}%
   2.140 +\end{figure}
   2.141 +
   2.142 +\subsubsection{Isabelle/Jedit}
   2.143 +jEdit is a text editor for programmers, written in Java.
   2.144 +Compared to fully-featured IDEs, such as Eclipse or NetBeans, jEdit is much 
   2.145 +smaller and better focused on its primary task of text editing.
   2.146 +The general look of the Isabelle/jEdit plug-in is similar to existing Java IDEs \cite{makarius:isa-scala-jedit}.
   2.147 +The main Isabelle/jEdit plug-in consists of ten small Scala files that augment some key jEdit components in order to provide a metaphor of asynchronous proof document editing. 
   2.148 +Isabelle/jEdit integrates the jEdit 4.3.2 framework  and some further  jEdit plug-ins. 
   2.149 +It also implements custom-made 'IsabelleText Unicode' font that actually contains the usual Isabelle symbols that users expect from long 
   2.150 +years of Proof General X-Symbol support.
   2.151 +The editor provides useful feedback, via semantic information from the processed document in the background. 
   2.152 +A lot of information can be directly attached 
   2.153 +to the source text, via colouring, tool-tips, pop-ups etc.
   2.154 +
   2.155 +\subsection{Upcoming requirements for userinterfaces in CTP}\label{gui-requir}
   2.156 +%     @ interaction close to tty (Telegraph)\\
   2.157 +%       BUT: separate parts in {\em one} proof could be processed in parallel
   2.158 +%
   2.159 +%     @ http://www.informatik.uni-bremen.de/uitp/
   2.160 +%
   2.161 +%     @ ... see\\
   2.162 +%       http://www4.in.tum.de/~wenzelm/papers/async-isabelle-scala.pdf,\\
   2.163 +%       http://www4.in.tum.de/~wenzelm/papers/parallel-isabelle.pdf
   2.164 +"After several decades, most proof assistants are still centred around TTY-based interaction in a
   2.165 +tight read-eval-print loop.
   2.166 +All Emacs-based GUI's for CTPs follow this synchronous
   2.167 +model based on single commands with immediate response, meaning that the editor waits for the
   2.168 +prover after each command", according to \cite{makarius:isa-scala-jedit}. As to multicore politics of leading semiconductor chip manufacturer, parallelism in software technology has become an issue.
   2.169 +Therefore the support of parallelism in CTP technology improves the performance and multiuser support.
   2.170 +%So it is necessary to use proof documents instead of proof scripts.  
   2.171 +%Proof scripts are  sequences of commands however proof documents are structured texts. 
   2.172 +%So the proof document idea seems to guarantee the perfect support for parallelism in the CTP technology. 
   2.173 +Proof language Isar is structured such, that different parts can be interpreted in parallel. For instance, some might employ an 
   2.174 +an automated prover for some minutes, while the user wants to proceed with other parts of the same proof.
   2.175 +A well-established concept able to cope with such parallel processing in actors, as introduced by Erlang.
   2.176 +This will be discussed in more detail in Sect. \ref{actors}
   2.177 +
   2.178 +
   2.179 +%Andreas
   2.180 +\section{Isabelle's plans for new userinterfaces}\label{gui-plans}
   2.181 +
   2.182 +The following observations lead to novel requirements for CTPS' userinterface:
   2.183 +
   2.184 +\begin{itemize}
   2.185 +\item theorem proving will be integrated into software development
   2.186 +\item hundreds of proof obligations are generated during a software verification process
   2.187 +\item so the final goal of Isabelle's planning is integration with other software development tools in an integrated development environment (IDE)
   2.188 +\item still many principal issues need to be clarified with respect to integration of CTP and other development tools. So engaging into details makes no sense at the present, and Isabelle will approach the final goal via experimental intermediate steps of integration
   2.189 +\item favourite IDE is jEdit, because it is clearer than Eclipse or NetBeans. The reason behind this choice follows in section \ref{plugin}
   2.190 +\end{itemize}
   2.191 +
   2.192 +These indicate design decisions are sketched in the sequel.
   2.193 +
   2.194 +\subsection{Connect ML-world to the users' world via JVM}\label{ml-users}
   2.195 +In Sect.\ref{ctp-techn} reasons have been given, why mathematics software at the state-of-the-art cannot be written in Java or the like. On the other side, Sect.\ref{gui-requir} stated requirements for mathematical userinterfaces, which cannot be accomplished by ML-like languages. These requirements can be best accomplished by languages like Java, which have powerful libraries available for convenient assembly of GUIs.
   2.196 +
   2.197 +\paragraph{Example: a functional mathematics engine} as the experimental one in the \sisac-project is given by the following signature:
   2.198 +{\it
   2.199 +\begin{tabbing}
   2.200 +\=xx\=xxxxxxxxxxxxxxxxxxxxxxxxx\=\kill
   2.201 +\>signature INTERPRETER =\\
   2.202 +\>sig\\
   2.203 +\>\>type calcstate\\
   2.204 +\>\>type step = formula * position * tactic\\
   2.205 +\>\> \\
   2.206 +\>\>val do\_next : program $\rightarrow$ calcstate $\rightarrow$ (calcstate * step)\\
   2.207 +\>\>val apply\_tactic : program $\rightarrow$ calcstate $\rightarrow$ position $\rightarrow$ tactic $\rightarrow$ (calcstate * step list)\\
   2.208 +\>\>val apply\_formula : program $\rightarrow$ calcstate $\rightarrow$ position $\rightarrow$ formula $\rightarrow$ (calcstate * step list)\\
   2.209 +\>end
   2.210 +\end{tabbing}}
   2.211 +The three essential functions are \textit{do\_next}, which reads a \textit{program} for determining the next \textit{step} in a calculation, the function \textit{apply\_tactic}, which applies a \textit{tactic} input by the user to the current \textit{position} in a calculation and thus may produce a list of \textit{step}s and the function \textit{apply\_formula}, which applies an input \textit{formula} accordingly.
   2.212 +
   2.213 +Now, the point with functional programming is, that the functions do {\em not} cause persistent updates in some memory, rather: all three functions above take the current state of the calculation, \textit{calcstate}, as an argument and after they have done they work return the updated \textit{calcstate}.
   2.214 +
   2.215 +There are several advantages of this kind of programming: more straight forward verification, which is not discussed here, and other features. For instance, given the three functions above, it is easy to undo steps of calculations, or go back to an earlier step of calculations: one just needs to store the \textit{calcstate}s (in a list), even without knowing the details of the \textit{calcstate}, which thus can be encapsulated for internal access only.
   2.216 +
   2.217 +\paragraph{Example: an object-oriented wrapper} as required for embedding the above mathematics engine into an object-oriented system. Such a wrapper may look like this:
   2.218 +{\footnotesize
   2.219 +\begin{verbatim}
   2.220 +   public class Calcstate
   2.221 +   {
   2.222 +     private Program program_;
   2.223 +     private Tree<Step> calcstate_;
   2.224 +     private Position position_;
   2.225 +     
   2.226 +     public Calcstate(Program program) {...}
   2.227 +     public Step do_next() {...}
   2.228 +     public List<Step> apply_tactic(Tactic tactic) {...}
   2.229 +     public List<Step> apply_formular(Formular formular) {...}
   2.230 +   }
   2.231 +\end{verbatim} 
   2.232 +}
   2.233 +\subsection{Scala as a mediator between ML and JVM}\label{scala-medi}
   2.234 +Scala \footnote{http://www.scala-lang.org} is a hybrid programming language. It combines object-oriented programming and functional programming. Scala runs on the Java Virtual Machine and is byte-code compatible with existing Java programs. The compilation model of Scala is nearly the same as the Java's model. So existing tools, libraries and applications can be used with Scala. The syntax of Scala is similar to Java and ML. A number of keywords plus the block syntax is adopted from Java and from ML the syntax for type annotation and declaration. The source-code is typically reduced, concisely and more compact compared to equivalent Java code \footnote{http://www.scalasolutions.com/scala}.
   2.235 +
   2.236 +Scala is pure object-oriented, this means every value is an object \cite{odersky:scala06}. The same is true for primitive data types, because compiler-generated byte code is using primitive data types. Known design patterns from OOP can be used with Scala as well. "Data types and behaviours of objects are described by classes and traits" \footnote{http://en.wikipedia.org/wiki/Scala\_(programming\_language)}. Traits not only consist of definitions, they also can contain implementations of methods. To avoid the problems of multiple inheritance, classes are able to extend various traits, this is a flexible mixin-based mechanism. The keyword Object is used to implement a Singleton-Class.
   2.237 +
   2.238 +In Scala every function is a value, hence Scala is also a functional language \cite{odersky:scala06}. Functions in Scala are first-class objects, this means it is possible to pass a function as a parameter, return a function from a subroutine, or assign to a variable. Scala also supports case classes, which are used for pattern matching. Case classes are regular classes which export their constructor parameters \footnote{http://de.wikipedia.org/wiki/Scala\_(Programmiersprache)}. Furthermore Scala allows functions to be nested.
   2.239 +
   2.240 +Scala is more statically typed than Java, but is able to infer types by usage. So most static type declarations are optional. This static type system ensures a safe and coherent use of abstraction. Scala supports \footnote{http://en.wikipedia.org/wiki/Scala\_(programming\_language)}:
   2.241 +
   2.242 +\begin{itemize}
   2.243 +\item generic classes
   2.244 +\item variance annotations
   2.245 +\item upper and lower type bounds
   2.246 +\item classes and abstract types as object members
   2.247 +\item compound types
   2.248 +\item explicitly typed self references
   2.249 +\item views
   2.250 +\item polymorphic methods
   2.251 +\end{itemize}
   2.252 +
   2.253 +Static types need no explicit declaration but can be given to give the code some clarity.
   2.254 +
   2.255 +Scala supports threads, but the Scala library contains an actor model inspired from Erlang \cite{armstrong:erlang96}. Concurrency and Scala actors follow in the next section.
   2.256 +
   2.257 +\subsection{Support for parallel processing}\label{actors}
   2.258 +Concurrency has lately become more and more attention, because multicore processors make concurrency very important for efficient program execution, by running multiple threads parallel and so concurrent programming gets indispensable and distributed computing, web services and mobile environments are naturally concurrent. A very attractive model is message-based concurrency, which is based on the actor model.
   2.259 +
   2.260 +An actor is a concurrent process that executes a function. The state of an actor gets never shared, so it doesn't need to compete for locks of shared data. Actors own a mailbox where incoming messages are stored in. A mailbox is mainly a queue with actors, which operate as several producers and one consumer. Actors share data by sending messages which are sent asynchronously. Messages are unchangeable, so they don't require a lock. By creating new actors, by sending messages to known actors, or changing its behaviour, an actor is able to reply to a message. The actor-based process is combined with pattern matching for messages.
   2.261 +
   2.262 +The Erlang programming language is a functional programming language that supports message-based concurrency, which operates with actors. It was developed for real-time control systems. Such systems are telephone exchanges, network simulators and distributed resource controllers \cite{scala:jmlc06}. These systems use a very popular lightweight implementation and a large number of concurrent processes, which can be active simultaneously.
   2.263 +
   2.264 +Operating system threads and threads of virtual machines are too heavyweight for the implementation of such processes. The standard concurrency for mainstream platforms were shared-memory threads with locks. Such a platform is the Java Virtual Machine (JVM), which suffers from high memory consumption and context-switching overhead.
   2.265 +The most disadvantageous consequences are \cite{scala:jmlc06}:
   2.266 +\begin{enumerate}
   2.267 +\item quick exhaustion of virtual address space
   2.268 +\item locking mechanisms often lack suitable contention managers
   2.269 +\end{enumerate}
   2.270 +
   2.271 +For that reasons Erlang uses lightweight concurrent processes by its own run time system and not by the underlying operating system \cite{scala:jmlc06} and the computations on these platforms are often modelled in an event-driven style, which is complicated and error-prone.
   2.272 +\paragraph{Two different strategies for concurrency} are being used for implementation. This two strategies often follow different programming models, the benefit of thread-based models is that they are easier to use, but they still suffer from the memory consumption and the context-switching. The event-based models are just the opposite of the thread-based, they are more efficient, but in massive designs they are very difficult.
   2.273 +
   2.274 +\subparagraph{Thread-based implementation:} The behaviour of a concurrent process is defined by implementing a thread-specific method. The execution state is maintained by an associated thread stack \cite{Haller:2009:SAU:1496391.1496422}.
   2.275 +Supports blocking operations and can be executed on multicore processors in parallel.
   2.276 +
   2.277 +\subparagraph{Event-based implementation:} The behaviour is defined by a number of (non-nested) event-handlers which are called from inside an event loop. The execution state of a concurrent process is maintained by an associated record or object \cite{Haller:2009:SAU:1496391.1496422}. Targets to a large number of actor which can be active simultaneously, because they are more lightweight.
   2.278 +
   2.279 +\paragraph{Actors in Scala} are based on actors in Erlang. Scala uses the basic thread model of Erlang, but on the other hand all higher-level functions got implemented in the Scala library as classes or methods. The Scala-actors are a unification of the implementation models mentioned above and they are compatible with normal Virtual Machine (VM) thread. Normal VM threads can use the same communication and monitoring capabilities, because they are treated like an actor. A message-based concurrency seems to be more secure than shared-memory with locks, because accessing an actor's mailbox is race-free. The advantage of a implementation in a library is that it can be flexibly extended and adapted to new needs. The library makes use of Scala abstraction opportunities, like partial functions and pattern matching.
   2.280 +
   2.281 +The main idea of this model is that an actor is able to wait for a message by using two different operations, which try to remove a message from the current actor's mailbox. To do so, a partial function must be given to the operation, that specifies a set of message patterns. These are {\itshape receive} and {\itshape react}. 'An actor can suspend with a full thread stack (receive) or it can suspend with just a continuation closure (react)' \cite{Haller:2009:SAU:1496391.1496422}. The first operation of an actor to wait for an message is equal to thread-based programming and the second operation to event-based programming.
   2.282 +
   2.283 +\subparagraph{receive:} The current actor's mailbox get scanned and if there is one message which matches one of the patterns declared in the partial function, the message is removed from the mailbox and the partial function is applied to the message, the result is returned. The declaration of receive:
   2.284 +$$\mathit{def}\;\mathit{receive}\mathit{[R]}(f: \mathit{PartialFunction}[Any, R]): \mathit{R}$$
   2.285 +Otherwise the current thread blocks. Thus the receiving actor has the ability to execute normally when receiving a message which matches.  Note that receive retains the complete call stack of the receiving actor; the actor’s behaviour is therefore a sequential program which corresponds to thread-based programming \cite{Haller:2009:SAU:1496391.1496422}.
   2.286 +\subparagraph{react:} The action which is specified in the partial function is the last code that the current actor executes, if the message is matching. The declaration of react:
   2.287 +$$\mathit{def}\;\mathit{react}(f: \mathit{PartialFunction}[Any, Unit]): \mathit{Nothing}$$
   2.288 +The partial function gets registered by the current actor and the underlying thread gets released. React has the return type Nothing, this means that the method never returns normally. When the actor receives a matching message, the earlier registered partial function gets called and the actor's execution gets continued. The partial function f which corresponds to a set of event handlers \cite{Haller:2009:SAU:1496391.1496422}. 
   2.289 +
   2.290 +For this implementation multiple actors are executed by multiple threads and therefore a thread pool is used. Whenever it is necessary the pool can be re sized, to support the operations of the thread-based and event-based model. If only operations of the event-based model are executed then the thread pool could be fixed. To avoid system-included deadlocks, if some actors use thread-based operations, the thread pool has to grow, because if there are outstanding tasks and every worker thread is occupied by a blocked actor, new threads are necessary.
   2.291 +
   2.292 +Since the communication between actors takes place through asynchronous message passing, asynchronous operations get executed, tasks have to be created and submitted to a thread pool for execution. A new task is created, when an actor spawns a new actor or a message, which enables an actor to continue, is send to an actor which is suspended in a react operation or by calling react, where a message can be immediately removed from the mailbox \cite{Haller:2009:SAU:1496391.1496422}.
   2.293 +
   2.294 +% Marco
   2.295 +\section{Planned contributions at TU Graz}
   2.296 +
   2.297 +\subsection{Make Isabelle process structured derivations}\label{struct-der}
   2.298 +Structured Derivations (SD) is a format for calculational reasoning, which has been established by \cite{back-grundy-wright-98}. This is an example calculation:
   2.299 +{\it\begin{tabbing}
   2.300 +123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=\kill
   2.301 +\> $\bullet$\> \Problem [ maximum\_by, calculus ]\\
   2.302 +\>\> $\vdash$\> $A = 2\cdot u\cdot v - u^2$\\
   2.303 +\>\> $\bullet$\> \Problem [make, diffable, funtion]\\
   2.304 +\>\> \dots\> $\overline{A}(\alpha) = 8\cdot r^2\cdot\sin\alpha\cdot\cos\alpha - 4\cdot r^2\cdot(\sin\alpha)^2$\\
   2.305 +\>\> $\bullet$\> \Problem [on\_interval, for\_maximum, differentiate, function]\\
   2.306 +\>\>\> $\vdash$\> $\overline{A}(\alpha) = 8\cdot r^2\cdot\sin\alpha\cdot\cos\alpha - 4\cdot r^2\cdot(\sin\alpha)^2$\\
   2.307 +\>\>\> $\bullet$\> \Problem [differentiate, funtion]\\
   2.308 +\>\>\> \dots\> $\overline{A}^\prime(\alpha) = 8\cdot r^2\cdot(-(\sin\alpha)^2+(\cos\alpha)^2 - 2\cdot\sin\alpha\cdot\cos\alpha)$\\
   2.309 +\>\>\> $\bullet$\> \Problem [on\_interval, goniometric, equation]\\
   2.310 +\>\>\> \dots\> $\alpha = \tan^{-1}(-1+\sqrt{2})$\\
   2.311 +\>\> \dots\> $\alpha = \tan^{-1}(-1+\sqrt{2})$\\
   2.312 +\>\> $\bullet$\> \Problem [tool, find\_values]\\
   2.313 +\>\> \dots\> [ $u=0.23\cdot r, \:v=0.76\cdot r$ ]\\
   2.314 +\> \dots\> [ $u=0.23\cdot r, \:v=0.76\cdot r$ ] %TODO calculate !
   2.315 +\end{tabbing}}
   2.316 +The plan is to use the machinery provided Isabelle/Isar as a 'logical operating system' ~\cite{isar-impl} and adapt the machinery such that is accepts SC in parallel to the Isar proof language~\cite{wenzel:isar}.
   2.317 +
   2.318 +This plan involves the following details.
   2.319 +
   2.320 +\subsection{Add a plug-in to jEdit}\label{plugin}
   2.321 +    % file structure, copied from example project ...
   2.322 +%Die von jEdit verfolgte Strategie im Bezug auf plug-in Management und natürlich generell die totale Offenlegegung des Codes ist für ein Projekt wie Isabelle und auch für das Isac-Project an der TU ideal. plug-ins lassen sich sehr einfach anfügen und durch die riesige Vielfalt von bereits bestehenden plug-ins ist auch die Adaption von plug-ins möglich bzw. zu empfehlen, denn warum sollte nicht bereits funktionierender Code verwendet werden?\\
   2.323 +The importance of connecting the ML-world with the world of user interfaces has been is discussed in Sect.\ref{ml-users}. jEdit follows these lines, it is an open-source, Java-based text editor that works on Windows, Mac OS X, and Linux. A big advantage of jEdit is, that there is a very good and also simple way to use and write a plug-in. There are a lot of useful and powerful plug-ins available in the net and it is also possible to use a existing plug-in as part of a new one. Because of this facts, jEdit is very suitable for a project like Isabelle and also for the \sisac-project at TU-Graz.
   2.324 +
   2.325 +Each jEdit plug-in\footnote{To get more information about the jEdit infrastructure see: http://jedit.org/users-guide/plugin-intro} basically consists of source files, written in Java or Scala, XML-files and property files. The XML-Files are important for the administration of a plug-in and provides information like the name, author, ... of the plug-in. They are also containing small pieces of BeanShell code which is executed upon a user request. (Like pressing the 'start plugin' button.) So the XML-files provide the “glue” between user input and specific plug-in routines located in the source files. As you see, this files are used as interface between the plug-in and the jEdit engine itself.
   2.326 +
   2.327 +Based on the jEdit API, you are allowed to design your code quit freely and don't have to use a prescribed way to implement your ideas.    
   2.328 +
   2.329 +
   2.330 +%isabell plugin beschreiben!!!!!!!!
   2.331 +The Isabelle-team also follow use this plug-in structure. In the next paragraph the involved files will be described. The jEdit-Isabelle plug-in consists of:
   2.332 +\begin{itemize}
   2.333 +\item 14 Scala-source-files
   2.334 +\item 3 XML-files
   2.335 +\item 1 property file
   2.336 +\end{itemize}
   2.337 +%Das vom Isabelle-Team erstellte jEdit plug-in folgt natürlich auch dem oben erklärten Muster. Es wird nun genauer auf dieses plug-in eingegangen. The plugin consits of 14 scala-source-files, three xml-files and one property-file. 
   2.338 +\begin{description}
   2.339 +\item[Isabelle.props] The property-file \textit{Isabelle.props} contains general information about the Isabelle plug-in and the needed dependencies between Isabelle and the other used plug-ins like sidekick.
   2.340 +\item[dockables.xml] The XML-file \textit{dockables.xml} is used to create the needed dock-able windows which are important to set up the GUI of the plug-in.
   2.341 +\item[actions.xml] In the file \textit{actions.xml}, the dockable windows are added to the window-manager \textit{wm} and there is also some BeanShell-code to activate the Isabelle-GUI.
   2.342 +\item[services.xml] The last XML-file is \textit{services.xml} and is used to create instances of needed jEdit plug-ins.
   2.343 +\end{description}
   2.344 +This four files are located in the folder \textit{plugin}.\\
   2.345 +
   2.346 +The more interesting files, the scala-files of the plug-in, can be found in the 'src/jedit'-directory. In this directory you can find the file \textit{Dummy.java} which is a dummy class and is simply used to make javadoc work. Just forget about this file. Also there is a folder/package \textit{jedit} which contains all Scala-source-files. Now it is time to take a closer look on the source-files: 
   2.347 +\begin{description}
   2.348 +\item[plugin.scala] The file \textit{plugin.scala} is the main-file of the Isabelle plug-in and there are two important parts. First the \textit{Isabelle object}. This object contains data like name and path and also few basic functions. The second part is the \textit{class Plugin} which is derived from EBPlugin. Here the basic methods \textit{handleMessage}, \textit{start} and \textit{stop} are implemented. Each jEdit plug-in should have this methods because they are very important for the handling of the plug-in!
   2.349 +\item[dockable.scala] jEdit and also the Isabelle plug-in work with dock-able windows. This means that you can move around each single window and dock it somewhere on the screen. So it is possible to customise the jEdit-GUI. To support this, the file \textit{dockable.scala} is needed. The file \textit{output-dockable.scala} is derived from \textit{dockable.scala} and is used to print the result/output in a dock-able window. The same thing with \textit{protocol-dockable.scala} and \textit{raw-output-dockable.scala}.
   2.350 +\item[scala-console.scala] The next interesting file is \textit{scala-console.scala} with the main-class Scala-Console. This class is used to expand the Console plug-in in a way, that it is possible to interpret Scala-code with a Shell inside of jEdit.
   2.351 +\item[isabelle-sidekick.scala] The file \textit{isabelle-sidekick.scala} is related to the file \textit{scala-console.scala} because it is also used to adapt the plug-in Sidekick for Isabelle.
   2.352 +\item[document-model.scala, document-view.scala] The files \textit{document-model.scala} and \textit{document-view.scala} are used to connect the jEdit-buffer/the text-area to Isabelle. Both classes offer, upon others, methods to activate and deactivate this features.
   2.353 +\end{description}
   2.354 +There also some other source-files but they aren’t discussed here, because the main goal of this paragraph is to give a basic idea how a jEdit plug-in should be set up and the remaining files are not as important for the Isabelle plug-in structure.
   2.355 +%\begin{itemize}
   2.356 +%\item $html_panel.scala$
   2.357 +%\item $isabelle_encoding.scala$
   2.358 +%\item $isabelle_hyperlinks.scala$
   2.359 +%\item $isabelle_options.scala$
   2.360 +%\item $isabelle_token_maker.scala$
   2.361 +%\item $isabelle_hyperlinks.scala$
   2.362 +%\end{itemize}
   2.363 +
   2.364 +
   2.365 +%  Like each other jEdit-Plugin also this 
   2.366 +
   2.367 +%Das Konzept des frei wählbaren Designs ist am Beginn villeicht etwas schwierig umzusetzten, da es leichter ist, sich irgendwo anzulehnen bzw. ein bereits bestehendes sowie funktionierendes Konzept zu übernehmen. So wurden auch die ersten Schritte an der TU gemacht. Zu diesem Zweck wurde das von den Entwicklern von jEdit zur Verfügung gestellte plugin 'QuickNotepad' übernommen und in Scala übersetzt. Obwohl Scala eng mit Java verknüpft ist, war doch einiges an 'rewritting' notwendig bis das Scala-plugin lauffähig wurde. Die benötigten XML-files konnten dazu nahezu unberührt gelassen werden.\\
   2.368 +
   2.369 +\subsection{Details of NetBeans projects}\label{netbeans}
   2.370 +%     Scala + Java: html project files
   2.371 +As described in the last paragraph, jEdit is a open-source-project. The jEdit-developers use a NetBeans-project to produce the source-code and so it is beneficial to use a NetBeans project too, because there is a quite good documentation about setting up a NetBeans-project with the jEdit-source. See http://wiki.netbeans.org/NetbeansedJEdit for further information.\\\\
   2.372 +If you want to set up a new jEdit plug-in project you have to attend that you have to create some source-files and that there must be a connection to the jEdit-source because you will need to exchange data with the jEdit engine. This could probably look like: \textit{jEdit.getProperty("options.isabelle.isabelle")}\\
   2.373 +As shown above, the jEdit-source is needed to compile and build your plug-in. There are two ways to organise your project:
   2.374 +\begin{itemize}
   2.375 +\item with jEdit source code - two projects in one
   2.376 +\item with jedit.jar library
   2.377 +\end{itemize}
   2.378 +\subsubsection{Plug-in with jEdit-source}
   2.379 +It is a good way to download the jEdit source as NetBeans project because then it is possible to add another sub-project to the existing jEdit-NetBeans-project. As you see it is also possible to mix Scala and Java. A big advantage is, that debugging will now work really fine. If you want to set up a project like this, you should complete the following steps.
   2.380 +\begin{enumerate}
   2.381 +\item {Create a new NetBeans-project for your plug-in like \textit{example-plugin}. This will probably be a Scala-Project.}
   2.382 +\item Download (and try out) the \textit{jEdit-NetBeans-project}
   2.383 +\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at \textit{Libraries} $\rightarrow$ \textit{add Project...} and then choose the \textit{jEdit-NetBeans-project}.
   2.384 +\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at project-name-label $\rightarrow$ \textit{Properties} $\rightarrow$ \textit{Run} $\rightarrow$ \textit{Main Class:} org.gjt.sp.jedit.jEdit
   2.385 +\item compile and run
   2.386 +\end{enumerate}
   2.387 +
   2.388 +\subsubsection{Plug-in with jedit.jar}
   2.389 +It is also possible to use the \textit{jedit.jar} file. This file is already included in \$ISABELLE-HOME/contrib/jedit-4.3.2. Now you just have to follow this steps:
   2.390 +\begin{enumerate}
   2.391 +\item {Create a new NetBeans-project for your plug-in like \textit{example-plugin}. This will probably be a Scala-Project.}
   2.392 +\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at \textit{Libraries} $\rightarrow$ \textit{add JAR/Folder...} and then choose the \textit{jedit.jar} file.
   2.393 +\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at project-name-label $\rightarrow$ \textit{Properties} $\rightarrow$ \textit{Run} $\rightarrow$ \textit{Main Class:} org.gjt.sp.jedit.jEdit
   2.394 +\item compile and run
   2.395 +\end{enumerate}
   2.396 +This are two different ways to get started. It is difficult to say what is better because both versions have advantages. Now it is time to start coding your own plug-in but there are still a few things to think about. Remember, that a plug-in consists of source-, XML- and property-files. On default, NetBeans will just pack the source-files in the \textit{example-plugin.jar}-package. So you have to add a copy/move-routine in the \textit{build.xml} file of your NetBeans-project to get a complemented package.
   2.397 +\begin{itemize}
   2.398 +\item $\langle target name="-pre-jar"\rangle$
   2.399 +\item $	\langle copy $file="plugin/services.xml" todir="\${build.classes.dir}" $/\rangle$
   2.400 +\item $	\langle copy $file="plugin/dockables.xml" todir="\${build.classes.dir}" $/\rangle$
   2.401 +\item $	\langle copy $file="plugin/actions.xml" todir="\${build.classes.dir}" $/\rangle$	
   2.402 +\item $	\langle copy $file="plugin/Isabelle.props" todir="\${build.classes.dir}" $/\rangle$
   2.403 +\item $	\langle /target\rangle$
   2.404 +\end{itemize}
   2.405 +%* kurze aufzählung der xml-netbeans-files + erklärung\\
   2.406 +\subsubsection{NetBeans project files}
   2.407 +As you see in the paragraph above, it is also important to have basic knowledge about NetBeans, the project structure and how to change the operational sequences. A typical NetBeans-project consist of the source- and library-files and administrative XML- and property-files. In this paragraph the administrative part of the project is of note. The most important file is \textit{build.xml}. This file can be found in the project directory. There is also a folder \textit{nbproject} which contains the remaining XML- and property-files and also a folder \textit{private}, where individual user information about the project is stored. The files in this \textit{private} folder are not important to describe (and they should not be pushed on the repository!).
   2.408 +
   2.409 +A build-file like \textit{build.xml} contains one project and at least one (default) target. Targets contain task elements. Each task element of the build-file can have an id attribute and can later be referred to by the value supplied to this. So the id has to be unique. Such targets can be "run", "debug", "build", ... and can have dependencies to other targets. Tasks define what should happen, if a target is executed. So like in the example above, the target is \textit{pre-jar}, that means that this things will happen before the jar-package is packed. The tasks of this target are copying some files into the package.
   2.410 +
   2.411 +The files inside the \textit{nbproject}-folder are not so important because some of it are generated from \textit{build.xml} and changes in this files are useless. Just the file project.properties is really interesting because this file gives a nice and tight overview about the project settings.
   2.412 +
   2.413 +\subsection{Use interfaces between Java and Scala}\label{java-scala}
   2.414 +%     how are data exchanged between Scala and Java ...
   2.415 +jEdit is completely written in Java and the required plugin(s) for \sisac{ }will be coded in Scala - so there must be ways to exchange data between Java and Scala. One way is to connect this two worlds with the in 4.2 described XML-files. Here you need to use a third type of code to get an interface between Java and Scala code. But there is also a way to get a direct connection.
   2.416 +
   2.417 +This link should be shown on the graphic-library \textit{Swing}. In both languages it is possible to use Swing which provides a lot of different shapes and useful functionality. So there is a Java-Swing and also a Scala-Swing-library. Now it is interesting to examine the connection between this two libraries.
   2.418 +
   2.419 +In Scala a direct use of Java-Libs (like Java-Swing) is possible. So if you are Java-Programmer and want to use Java-Swing in Scala, you can simply type\\ \textit{import javax.swing.JButton}\footnote{http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JButton.html} to work with a Java-button. But you can also use the Scala-equivalent \textit{scala.swing.Button}\footnote{http://www.scala-lang.org/api/current/scala/swing/Button.html}. This two button-types will provide nearly the same functionality.
   2.420 +
   2.421 +So what is the idea of creating a nearly similar library a second time? Why have the Scala-developers done such extra work? The answer is, that they have tried to improve and simplify the usage of the Swing-library(and many other libs too!). So big parts of this Scala-Libraries are just Wrapper-objects, Wrapper-Classes and Wrapper-Methods of already existing parts in Java-Libraries. Needless to say that they also added new useful shapes and functionality.
   2.422 +But there is one important question left: Is it possible to mix Scala- and Java-objects? And yes, it is possible. There is a really easy way to convert a Scala-object to the Java-equivalent:
   2.423 +\begin{enumerate}
   2.424 +\item \textit{import javax.swing.JButton}
   2.425 +\item \textit{import scala.swing.Button}
   2.426 +\item \textit{var b: scala.swing.Button}
   2.427 +\item \textit{var jb: javax.swing.JButton}
   2.428 +\item \textit{jb = b.peer}
   2.429 +\end{enumerate}
   2.430 +As the example above illustrates, a conversion of Scala- to Java-objects is possible. It looks easy but also a little bit useless. Why should you need this? Just imagine that there is a plug-in written in Scala and one coded in Java. With this connection between Scala and Java, it would be easy to connect this two plug-ins! 
   2.431 +%Diesen direkten Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing. Beide Sprachen stellen diese Grafik-Bibliotheken zur Verfügung (und darin auch eigene Shapes und Funktionalität). Es ist jedoch möglich, Java-Bibliotheken, wie eben auch Java-Swing in Scala zu verwenden. Ein JButton kann zum Beispiel mittels \textit{import javax.swing.JButton} eingebunden und damit sofort auch verwendet werden. Auch Scala stellt in seiner Swing-Bibliothek zur Verfügung: \textit{scala.swing.Button}. Es wird nahezu die selbe Funktionalität angeboten und teilweise die Erzeugung bzw. Verwendung vereinfacht(???). Man kann sich nun fragen, warum sich die Scala-Entwickler einerseit die Mühe gemacht haben die Verwendung Java-Swing, wie in Java selbst, möglich zu machen und andererseits mit Scala-Swing eine nahezu idente Alternative geschaffen haben. Die Antwort darauf zeigt wie der objektorientierte Teil von Scala in vielen Bereichen aufgebaut wurden. Es wurde kein neues Konzept für diese Grafikklassen entworfen sondern Wrapper-Objekte/Methoden/Klassen erstellt, die das Arbeiten mit diesen Grafikkomponenten erleichtern soll. 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 von Java-Komponente in ein Scala-Äquivalent ist problemlos möglich. ...
   2.432 +\section{Conclusion and future work}
   2.433 +This paper collected background information on the topic of userinterfaces for theorem provers, which is not covered by the standard curriculum at Graz University of Technology: Computer theorem proving, respective interfaces and novel challenges for userinterfaces raised by integration of CTP into software engineering tools within the current decade.
   2.434 +
   2.435 +The general background information has been related to students' knowledge already gained during studies: functional and object-oriented programming paradigm, programming languages with focus on Scala and Scala's specific concept to handle asynchronous processing of proof documents, the concept of actors.
   2.436 +
   2.437 +An important part of the paper is a protocol of preparatory work already done on project-setup and software components required for the next goal which is: extend the theorem prover Isabelle with Structured Derivations.
   2.438 +
   2.439 +This part is considered an appropriate to start realising this goal and to prepare for future work, which will join the \sisac-project with front-of-the-wave technology in computer theorem proving and respective userinterfaces.
   2.440 +
   2.441 +\bigskip\noindent {\Large\textbf{Acknowledgements}}
   2.442 +
   2.443 +\medskip\noindent The authors thank the lecturer of 'Verfassen wissenschaftlicher Arbeiten' in winter semester 2010/11, Dipl.-Ing. Dr.techn. Markus Strohmaier, for his support on working on the topic they are interested in.\\
   2.444 +The leader of the \sisac-project expresses his pleasure about the efficient collaboration between the institutes IICM and IST at TUG.
   2.445 +
   2.446 +\bibliography{CTP-userinterfaces}
   2.447 +%\bibliography{bib/math-eng,bib/bk,bib/RISC_2,bib/isac,bib/pl,bib/math,bib/pl}
   2.448 +\end{document}
   2.449 \ No newline at end of file
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/doc-isac/akargl/ferialprakt.tex	Tue Sep 17 09:50:52 2013 +0200
     3.3 @@ -0,0 +1,101 @@
     3.4 +\message{ !name(ferialprakt.tex)}\documentclass[a4paper,12pt]{article}
     3.5 +\usepackage{ngerman}
     3.6 +\usepackage{longtable}
     3.7 +
     3.8 +
     3.9 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    3.10 +\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    3.11 +
    3.12 +\title{Ferialpraxis\\ am Institut f\"ur Softwaretechnologie\\
    3.13 +       der Technischen Universit\"at Graz\\ \ 
    3.14 +       \\Arbeitsprotokoll}
    3.15 +\author{Alexander Kargl\\
    3.16 +       akargl@brgkepler.net}
    3.17 +\date{\today}
    3.18 +
    3.19 +\begin{document}
    3.20 +
    3.21 +\message{ !name(ferialprakt.tex) !offset(-3) }
    3.22 +
    3.23 +\maketitle
    3.24 +$\;$\\
    3.25 +\vspace{0.2cm}
    3.26 +\section{Urspr\"ungliche Erwartungen}
    3.27 +In den letzten Sommerferien vor der Maturaklasse wollte ich mich genauer \"uber die Studienrichtungen im Bereich Informatik an der TU Graz informieren. Meine Interessen tendierten bereits in diese Richtung, aber ich war mir noch nicht sicher, ob das die richtige Entscheidung ist.
    3.28 +
    3.29 +Ich hatte das Gl\"uck ein Praktikum am Insitut f\"ur Softwaretechnologie absolvieren zu d\"urfen. Ich hoffte dadurch:
    3.30 +\begin{itemize}
    3.31 + \item einen Einblick in die Programmierung und Entstehung von gr\"o\3eren Softwareprojekten zu erhalten
    3.32 + \item neue Programmiertechniken und Sprachen kennenzulernen
    3.33 + \item und au\3erdem gleich wertvolle Erfahrung im Arbeitsleben sammeln zu k\"onnen
    3.34 +\end{itemize}
    3.35 +
    3.36 +\newpage
    3.37 +\section{Arbeitsprotokoll}
    3.38 +\begin{center}
    3.39 +\begin{tabular}{l|l||r}
    3.40 +\textbf{Datum}   &\textbf{T\"atigkeit} & \textbf{Std.} \\[1pt] \hline \hline\noalign{\smallskip}
    3.41 +12.7.2011
    3.42 + & Demonstration von ``educational math assistant \isac{}'', Isabelle & 1.6\\
    3.43 + %& Demonstration des Theorem Provers  & 0.6\\
    3.44 + & Einf\"uhrung Linux, objektorientierte/funktionale Programmierung& 2.0\\
    3.45 + & Installation: Isabelle, \isac-core, Mercurial & 3.0\\[3pt] \hline\noalign{\smallskip}
    3.46 +13.7.2011
    3.47 + & Einf\"uhrung Latex,  Konfiguration von Mercurial & 2.6 \\
    3.48 + %& & 1.6 \\
    3.49 + & ML-Programmierung/Einf\"uhrung & 5.0 \\[3pt] \hline\noalign{\smallskip}
    3.50 +14.7.2011
    3.51 + & Einf\"uhrung und \"Ubung ML II & 4.6 \\
    3.52 +% & Programmierung ML & 2.0 \\
    3.53 + & Erstellung v. Beispielen f\"ur Kombinatoren in ML & 3.0 \\[3pt] \hline\noalign{\smallskip}
    3.54 +15.7.2011
    3.55 + & Einf\"uhrung ML/\isac\  IV & 2.1 \\
    3.56 + & ML- Programmierung & 5.5 \\ \hline \hline\noalign{\smallskip}
    3.57 +18.7.2011
    3.58 + & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
    3.59 +19.7.2011
    3.60 + & Tests zu korrigiertem CompleteCalc auskommentiert & 7.6 \\
    3.61 + & interface.sml calchead.sml ctree.sml mathengine.sml rewtools.sml &  \\[3pt] \hline\noalign{\smallskip}
    3.62 +20.7.2011
    3.63 + & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
    3.64 +21.7.2011
    3.65 + & Alle Fehler in Frontend/interface.sml behoben & 7.6 \\
    3.66 + & Beginn zugeh\"orige Tests auskommentieren & 7.6 \\[3pt] \hline\noalign{\smallskip}
    3.67 +22.7.2011
    3.68 + & Information \"uber Studienrichtungen etc. & 1.1 \\
    3.69 + & Fehlersuche/Debugging Isac-Tests & 6.5 \\[3pt] \hline \hline\noalign{\smallskip}
    3.70 +25.7.2011
    3.71 + & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
    3.72 +26.7.2011
    3.73 + & Beginn: systematisches Aufr\"aumen von auskommentierten Tests & 7.6 \\
    3.74 + & Interpret/appl.sml Interpret/ctree.sml ProgLang/calculate.sml & \\[3pt] \hline\noalign{\smallskip} 
    3.75 +27.7.2011
    3.76 + & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
    3.77 +28.7.2011
    3.78 + & Fehlersuche/Debugging Isac-Tests & 3.6 \\
    3.79 + & Fertigstellung Protokoll         & 4.0 \\[3pt] \hline\noalign{\smallskip}
    3.80 +29.7.2011
    3.81 + & Austausch mit Ferialpraktikanten anderer Studienrichtungen  & 1.0 \\
    3.82 + & Arbeit mit Robotern  & 5.0 \\[3pt] \hline\noalign{\smallskip}
    3.83 +\end{tabular}
    3.84 +\end{center}
    3.85 +Die Arbeiten am Update der Tests sind in das Repository des \isac-Projektes hochgeladen worden und sind auf {\tt https://intra.ist.tugraz.at/hg/isa/} einzusehen.
    3.86 +
    3.87 +
    3.88 +\newpage
    3.89 +\section{R\"uckblick auf das Praktikum}
    3.90 +Meine Erwartungen haben sich gr\"o\3tenteils alle erf\"ullt und ich habe viel Neues dazugelernt:
    3.91 +\begin{itemize}
    3.92 +  \item Grundlagen funktionaler Programmierung (SML)
    3.93 +  \item Zusammenarbeit an einem gro\3sem Softwareprojekt mit mehreren Programmierern (Benutzung von Versionsverwaltungssystemen (Mercurial) , Kommentaren etc.)
    3.94 +  \item Grundz\"uge der Funktionsweise eines Theorem Provers (Isabelle)
    3.95 +  \item ``Test driven development'' - Verifizierung von Softwarekomponenten
    3.96 +  \item schnelle Einarbeitung in neue komplexe Arbeitsumgebungen und Problemstellungen
    3.97 +\end{itemize}
    3.98 +Alles in allem hat sich dieses Praktikum f\"ur mich in jeder Hinsicht gelohnt.
    3.99 +
   3.100 +
   3.101 +
   3.102 +\end{document}
   3.103 +
   3.104 +\message{ !name(ferialprakt.tex) !offset(-78) }
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/doc-isac/chuber/Functions.thy	Tue Sep 17 09:50:52 2013 +0200
     4.3 @@ -0,0 +1,27 @@
     4.4 +theory Functions imports Main begin
     4.5 +
     4.6 +fun fib :: "nat \<Rightarrow> nat"
     4.7 +where
     4.8 +"fib 0 = 1"
     4.9 +| "fib (Suc 0) = 1"
    4.10 +| "fib (Suc (Suc n)) = fib n + fib (Suc n)"
    4.11 +
    4.12 +thm fib.simps
    4.13 +
    4.14 +(*"fib (Suc (Suc n))"*)
    4.15 +
    4.16 +lemma "fib 0 = 1"
    4.17 +by simp
    4.18 +lemma "fib (Suc 0) = 1"
    4.19 +by simp
    4.20 +lemma "fib (Suc (Suc (Suc 0))) = (Suc (Suc (Suc 0)))"
    4.21 +by simp
    4.22 +
    4.23 +(*fun sep :: "’a \<Rightarrow> ’a list \<Rightarrow> ’a list"
    4.24 +where
    4.25 +"sep a (x#y#xs) = x # a # sep a (y # xs)"
    4.26 +| "sep a xs
    4.27 += xs"*)
    4.28 +
    4.29 +
    4.30 +end
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/doc-isac/chuber/bakk_thesis_prelim.tex	Tue Sep 17 09:50:52 2013 +0200
     5.3 @@ -0,0 +1,102 @@
     5.4 +\documentclass[12pt]{article}
     5.5 +\usepackage{a4}
     5.6 +\usepackage{times}
     5.7 +\usepackage{latexsym}
     5.8 +\bibliographystyle{alpha}
     5.9 +%\bibliographystyle{abbrv}
    5.10 +\usepackage{graphicx}
    5.11 +
    5.12 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    5.13 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
    5.14 +
    5.15 +\title{Tentative Title:\\
    5.16 +  Theory of Functional Programming\\
    5.17 +  Introduced by Isabelle and \isac}
    5.18 +\author{n.n\\
    5.19 +{\tt TODO@xxx.at}}
    5.20 +
    5.21 +\begin{document}
    5.22 +\maketitle
    5.23 +%\abstract{
    5.24 +%TODO
    5.25 +%}
    5.26 +
    5.27 +\section{Background}
    5.28 +
    5.29 +``Functional programing'' (FP) is one of the leading paradigms in programming besides ``object oriented programming'' %\cite{?} 
    5.30 +and ``logic (or constraint) programming'' \cite{?}. One advantage of FP are general and elegant approaches to the mathematical theory of programming \cite{?}.
    5.31 +
    5.32 +Presently FP gains importance in face of the ``multi-core crisis'' \cite{?}: functional programs are ready to exploit many cores in parallel. In spite of this fact, at Graz University of Technology (TUG) FP has vanished during recent years, and it is of actual importance to include FP again in education.
    5.33 +
    5.34 +In order to support such education this thesis will compile a course based on advanced tools developed in the intersection between computer science and mathematics: The computer theorem prover Isabelle \cite{Nipkow-Paulson-Wenzel:2002} and the educational math assistant \sisac.
    5.35 +
    5.36 +\section{Goal}
    5.37 +
    5.38 +The goal of this thesis is generation of interactive course material on FP and respective theory of programming, implemented in Isabelle and \sisac.
    5.39 +
    5.40 +The material shall use most recent developments, for instance the ``function package'' \cite{krauss:funs,krauss:termination07,krauss:partial06} recently implemented in Isabelle. This package supports all what is needed for programming and proving properties of programs.
    5.41 +
    5.42 +Although addressing most recent developments and theory at the state of the art, the material also shall serve in early phases of programming. Experience shows, that in early phases (in analogy to doing mathematics \cite{?}) proceeding step by step in a program is important for learning. This will be done by implementing selected programs into \sisac.
    5.43 +
    5.44 +The interactive course material shall serve in certain courses at TUG and in the recently established ``entry and orientation phase'' (Studien-Eingangs und -Orientierungs Phase, STEOP).
    5.45 +
    5.46 +\section{State of the Art}
    5.47 +The thesis cover a wide range of topics some of which will be presented in more detail to be agreed on.
    5.48 +
    5.49 +\paragraph{Theory of functional programming ?}
    5.50 +TODO
    5.51 +
    5.52 +\paragraph{Proof tools for FP}
    5.53 +Isabelle's function package \cite{krauss:funs} is the most advanced in comparison to other provers. It supports two different way of function definitions, one providing full automation (applicable in simple cases) and another featuring interactive proofs of termination.
    5.54 +
    5.55 +The function package covers the full range of FP:  mutual, nested and higher-order recursion, partiality
    5.56 +
    5.57 +The other European computer theorem prover, Coq \cite{}, has less powerful support for FP (TODO)
    5.58 +
    5.59 +\paragraph{Didactics of FP} is concern of very different opinions: At some universities FP is addressed in introductory courses, while at other universities FP is considered an abstract topic addressed in higher semesters. The choice between these extreme alternatives seems to be related to principcal considerations on software construction \cite{aichernig:ingenieur}.
    5.60 +
    5.61 +The planned course might provide a bridge between the alternatives, addressing novices as well as advanced students by employing computer theorem provers.
    5.62 +
    5.63 +\paragraph{Educational math assistants,} if based on computer theorem proving, are appropriate to serve introduction to FP in a specific way: If considering evaluation of functional programs as rewriting, there is an obstacle. Empirical data show that students do not learn to apply rules at high-school --- for instance, the cannot apply the law of distributivity in algebra consciously, they do algebra in the same way they they use their mother language.
    5.64 +
    5.65 +The experimental system \sisac{}\footnote{http://www.ist.tugraz.at/projects/isac/} developed at TU Graz seems appropriate to provide experience in rigorous application of rewrite rules as a prerequisite to understand evaluation in FP.
    5.66 +
    5.67 +
    5.68 +\section{Thesis Structure}
    5.69 +
    5.70 +The main result of this thesis is the interactive course material, accompanied by a thesis.
    5.71 +
    5.72 +\paragraph{The interactive course material} will be implemented as Isabelle theories. Isabelle provides a document preparation system for theories which shall lead for a twofold presentation of the course: as (a) pdf-file(s) and as theories supporting interactive learning.
    5.73 +
    5.74 +For stepwise exercises in \sisac{} an additional Isabelle theory is required, which contains the specifications and programs for the respective exercises in ML-sections.
    5.75 +
    5.76 +\paragraph{The thesis} completes the work as required for a bakkalaureate.
    5.77 +
    5.78 +%general survey on FP
    5.79 +%
    5.80 +%description of the state of the art in proof tools specialized on FP
    5.81 +%
    5.82 +%didactic consideration about the course (what has been omitted, ...)
    5.83 +%
    5.84 +%future work, probably extending the course to more advanced topics
    5.85 +%
    5.86 +%future work, extending the course to more elementary topics, probably usable at high school
    5.87 +%
    5.88 +%...
    5.89 +%
    5.90 +%... 
    5.91 +
    5.92 +
    5.93 +\section{Timeline}
    5.94 +
    5.95 +The main work shall be done during this summer as much as possible.
    5.96 +
    5.97 +%Milestones
    5.98 +%\subsection{TODO}
    5.99 +%study introductory material for Isabelle; contact Alexander Kraus and others for similar course material
   5.100 +%
   5.101 +%\subsection{TODO}
   5.102 +%\sisac =''=
   5.103 +
   5.104 +\bibliography{references}
   5.105 +\end{document}
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/doc-isac/chuber/references.bib	Tue Sep 17 09:50:52 2013 +0200
     6.3 @@ -0,0 +1,55 @@
     6.4 +
     6.5 +@InCollection{krauss:partial06,
     6.6 +  author = 	 {Alexander Krauss},
     6.7 +  title = 	 {Partial recursive functions in higher-order logic},
     6.8 +  booktitle = 	 {Automated Reasoning (IJCAR 2006)},
     6.9 +  pages = 	 {589-603},
    6.10 +  publisher = {Springer Verlag},
    6.11 +  year = 	 {2006},
    6.12 +  editor = 	 {Ulrich Furbach and Natarajan Shankar},
    6.13 +  volume = 	 {4130},
    6.14 +  series = 	 {Lecture Notes in Artificial Intelligence},
    6.15 +  doi = {http://dx.doi.org/10.1007/11814771_48}
    6.16 +}
    6.17 +
    6.18 +@InCollection{krauss:termination07,
    6.19 +  author = 	 {Lukas Bulwahn, Alexander Krauss, and Tobias Nipkow},
    6.20 +  title = 	 {Finding lexicographic orders for termination proofs in Isabelle/HOL},
    6.21 +  booktitle = 	 {Theorem Proving in Higher Order Logics (TPHOLs 2007)},
    6.22 +  pages = 	 {38-53},
    6.23 +  publisher = {Springer Verlag},
    6.24 +  year = 	 {2007},
    6.25 +  editor = 	 {Schneider and J. Brandt},
    6.26 +  volume = 	 {4732},
    6.27 +  series = 	 {Lecture Notes in Computer Science},
    6.28 +  doi = {http://dx.doi.org/10.1007/978-3-540-74591-4_5}
    6.29 +}
    6.30 +
    6.31 +@Article{aichernig:ingenieur,
    6.32 +  author = 	 {Bernhard K. Aichernig and Peter Lucas},
    6.33 +  title = 	 {Softwareentwicklung --- eine {I}ngenieursdisziplin!(?)},
    6.34 +  journal = 	 {Telematik, Zeitschrift des Telematik-Ingenieur-Verbandes (TIV)},
    6.35 +  year = 	 {1998},
    6.36 +  volume = 	 {4},
    6.37 +  number = 	 {2},
    6.38 +  pages = 	 {2-8},
    6.39 +  note = 	 {http://www.ist.tu-graz.ac.at/publications},
    6.40 +  annote = 	 {}
    6.41 +}
    6.42 +
    6.43 +@Book{Nipkow-Paulson-Wenzel:2002,
    6.44 +  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
    6.45 +  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
    6.46 +  publisher	= {Springer},
    6.47 +  series	= {LNCS},
    6.48 +  volume	= 2283,
    6.49 +  year		= 2002
    6.50 +}
    6.51 +@PhdThesis{krauss:funs,
    6.52 +  author = 	 {Alexander Krauss},
    6.53 +  title = 	 {Automating Recursive Definitions and Termination Proofs in Higher-Order Logic},
    6.54 +  school = 	 {Technische Universit\"at M\"unchen},
    6.55 +  year = 	 {2009},
    6.56 +  OPTnote = 	 {http://www4.in.tum.de/~krauss/diss/}
    6.57 +}
    6.58 +
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/doc-isac/dmeindl/Hauptdatei.tex	Tue Sep 17 09:50:52 2013 +0200
     7.3 @@ -0,0 +1,168 @@
     7.4 +\documentclass[12pt,a4paper]{article}
     7.5 +\usepackage{a4}
     7.6 +\usepackage[naustrian]{babel}
     7.7 +\usepackage[latin1]{inputenc}
     7.8 +\usepackage{calc}
     7.9 +\usepackage{amsmath}   
    7.10 +\usepackage{epsfig}
    7.11 +\usepackage{graphicx}
    7.12 +\usepackage{xcolor}
    7.13 +\usepackage{amsfonts}
    7.14 +
    7.15 +
    7.16 +% Seitenrder einstellen und Hhe der Seitenzahlen
    7.17 +\usepackage{geometry}
    7.18 +\geometry{a4paper, left=2.5cm, right=2cm, top=3cm, bottom=2.8cm}
    7.19 +\setlength{\footskip}{2cm}
    7.20 +
    7.21 +
    7.22 +\newcommand{\R}{\mathbb R}
    7.23 +%\newcommand{\N}{\mathbb N}
    7.24 +%\newcommand{\Q}{\mathbb Q}
    7.25 +%\newcommand{\C}{\mathbb C}
    7.26 +
    7.27 +%Zhler definieren und Starwert setzen:
    7.28 +\newcounter{ctr}
    7.29 +\setcounter{ctr}{0}
    7.30 +
    7.31 +\newcounter{Teubner}
    7.32 +\newcounter{Klingenberg}
    7.33 +\newcounter{T}
    7.34 +\newcounter{Vo}
    7.35 +\newcounter{Se}
    7.36 +\newcounter{E}
    7.37 +\newcounter{Bwl}
    7.38 +\newcounter{Int}
    7.39 +\newcounter{Prim}
    7.40 +\newcounter{Z}
    7.41 +\setcounter{Z}{0}
    7.42 +\setcounter{Teubner}{1}
    7.43 +\setcounter{Klingenberg}{2}
    7.44 +\setcounter{T}{1}
    7.45 +\setcounter{Vo}{7}
    7.46 +\setcounter{Se}{2}
    7.47 +\setcounter{E}{3}
    7.48 +\setcounter{Bwl}{4}
    7.49 +\setcounter{Int}{5}
    7.50 +\setcounter{Prim}{6}
    7.51 +
    7.52 +%BSP
    7.53 +\newenvironment{myBsp}{
    7.54 +  \begin{list}{\textbf{\textsc{Bsp:}}}{
    7.55 +    \setlength{\labelwidth}{8Pc}
    7.56 +    \setlength{\labelsep}{0.5Pc}    
    7.57 +    \setlength{\rightmargin}{0Pc}
    7.58 +    \setlength{\leftmargin}{2Pc}
    7.59 +    \setlength{\parsep}{0ex plus 0.5ex}
    7.60 +    \setlength{\listparindent}{1em}
    7.61 +    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
    7.62 +    \setlength{\topsep}{0.5Pc}
    7.63 +  }}
    7.64 +  {\end{list}
    7.65 +}
    7.66 +
    7.67 +
    7.68 +%Lemma
    7.69 +\newenvironment{myLemma}{
    7.70 +  \begin{list}{\textsc{\textbf{Lemma:\ \ \ }}}{
    7.71 +   \setlength{\labelsep}{-0.5Pc}    
    7.72 +    \setlength{\leftmargin}{1Pc}
    7.73 +    \setlength{\parsep}{0ex plus 0.5ex}
    7.74 +    \setlength{\listparindent}{1em}
    7.75 +    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
    7.76 +    \setlength{\topsep}{0.5Pc}
    7.77 +  }}
    7.78 +  {\end{list}
    7.79 +}
    7.80 +%Korollar
    7.81 +\newenvironment{myKorollar}{
    7.82 +  \begin{list}{\textsc{\textbf{Korollar: }}}{
    7.83 +    \setlength{\labelwidth}{8Pc}
    7.84 +    \setlength{\labelsep}{0.5Pc}    
    7.85 +    \setlength{\rightmargin}{0Pc}
    7.86 +    \setlength{\leftmargin}{4Pc}
    7.87 +    \setlength{\parsep}{0ex plus 0.5ex}
    7.88 +    \setlength{\listparindent}{1em}
    7.89 +    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
    7.90 +    \setlength{\topsep}{0.5Pc}
    7.91 +  }}
    7.92 +  {\end{list}
    7.93 +}
    7.94 +
    7.95 +%Theorem
    7.96 +\newenvironment{myTheorem}{
    7.97 +  \begin{list}{\textsc{\textbf{Theorem: }}}{
    7.98 +    \setlength{\labelwidth}{8Pc}
    7.99 +    \setlength{\labelsep}{0.5Pc}    
   7.100 +    \setlength{\rightmargin}{0Pc}
   7.101 +    \setlength{\leftmargin}{5Pc}
   7.102 +    \setlength{\parsep}{0ex plus 0.5ex}
   7.103 +    \setlength{\listparindent}{1em}
   7.104 +    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   7.105 +    \setlength{\topsep}{0.5Pc}
   7.106 +  }}
   7.107 +  {\end{list}
   7.108 +}
   7.109 +
   7.110 +
   7.111 +%Proportion
   7.112 +\newenvironment{myProp}{
   7.113 +  \begin{list}{\textsc{\textbf{Proportion: }}}{
   7.114 +    \setlength{\labelwidth}{8Pc}
   7.115 +    \setlength{\labelsep}{0.5Pc}    
   7.116 +    \setlength{\rightmargin}{0Pc}
   7.117 +    \setlength{\leftmargin}{4Pc}
   7.118 +    \setlength{\parsep}{0ex plus 0.5ex}
   7.119 +    \setlength{\listparindent}{1em}
   7.120 +    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   7.121 +    \setlength{\topsep}{0.5Pc}
   7.122 +  }}
   7.123 +  {\end{list}
   7.124 +}
   7.125 +
   7.126 +%Farben
   7.127 +
   7.128 +\newcommand{\red}[1]{\textcolor[rgb]{0.7,0,0}{\bf #1}}
   7.129 +\newcommand{\rd}[1]{\color{red}{#1}}
   7.130 +\newcommand{\white}[1]{\textcolor[rgb]{1,0,0}{\bf #1}}
   7.131 +\newcommand{\w}[1]{\color{white}{#1}}
   7.132 +\newcommand{\g}[1]{\color{myColor}{#1}}
   7.133 +
   7.134 +\usepackage{color}
   7.135 +\definecolor{myColor}{rgb}{0.9,0.9,0.9}% Wir definieren im RGB-Farbraum
   7.136 +
   7.137 +
   7.138 +\newcommand{\myDef}[1]{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\w .}\\[-0.2cm]\textbf{Definition\ \Nummer:}\\#1}}
   7.139 +\newcommand{\mySatz}[2]{\colorbox{myColor}{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\g .}\\[-0.2cm]\textbf{Satz\ \Nummer:}\ #1\\ #2}}}
   7.140 +\newcommand{\myBeweis}[1]{\textit{\textbf{Beweis:}\\ #1}}
   7.141 +\newcommand{\myAlg}[2]{\parbox{\columnwidth}{\addtocounter{ctr}{1}\textbf{Algorithmus\ \Nummer:}\ \ #1\\#2}}
   7.142 +\newcommand{\myProg}[1]{\fbox{\parbox{\columnwidth}{#1}}}
   7.143 +
   7.144 +\newcommand{\add}[1]{\addtocounter{#1}{1}}
   7.145 +\newcommand{\zahl}[1]{\setcounter{#1}{Z}}
   7.146 +\newcommand{\Q}[2]{\parbox{\columnwidth}{$^{[\arabic{#1}/#2]}$ }}
   7.147 +
   7.148 +\newcommand{\Nummer}{\thesection.\arabic{ctr}}
   7.149 +
   7.150 +%------------------------------------------------------------- Beginn -----------------------------------------------------------------------
   7.151 +
   7.152 +\title{Greates common divisor \\ for multivariable Polynomials}
   7.153 +\author{By\\Diana Meindl\\meindl$_-$diana@yahoo.com}
   7.154 +\date{}
   7.155 +
   7.156 +\begin{document}
   7.157 +\maketitle
   7.158 +{\w .}\\[12cm]
   7.159 +\begin{center}
   7.160 +Presented to \\
   7.161 +A.Univ.Prof. Dipl.-Ing. Dr. Wolfgang Schreiner (RISC Insitute)\\
   7.162 +and\\
   7.163 +Dr. techn. Walther Neuper (Institut fr Softwaretechnologie, TU Graz)
   7.164 +\end{center}
   7.165 +\newpage
   7.166 +%\tableofcontents
   7.167 +\newpage
   7.168 +\input{proposal}
   7.169 +\newpage
   7.170 +
   7.171 +\end{document}
   7.172 \ No newline at end of file
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/doc-isac/dmeindl/proposal.tex	Tue Sep 17 09:50:52 2013 +0200
     8.3 @@ -0,0 +1,504 @@
     8.4 +%WN mit diesen 3 Zeichen beginnen meine Kommentare
     8.5 +%WN111107: bitte spellchecker dr"uberlaufen lassen !!!
     8.6 +
     8.7 +\documentclass[12pt,a4paper]{article}
     8.8 +\bibliographystyle{alpha}
     8.9 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    8.10 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
    8.11 +%\usepackage{a4}
    8.12 +%\usepackage[naustrian]{babel}
    8.13 +%\usepackage[latin1]{inputenc}
    8.14 +%\usepackage{calc}
    8.15 +%\usepackage{amsmath}   
    8.16 +%\usepackage{epsfig}
    8.17 +%\usepackage{graphicx}
    8.18 +%\usepackage{xcolor}
    8.19 +%\usepackage{amsfonts}
    8.20 +%
    8.21 +%WN BITTE DIESE DEFINITIONEN WEGLASSEN ...
    8.22 +%% Seitenrder einstellen und Hhe der Seitenzahlen
    8.23 +%\usepackage{geometry}
    8.24 +%\geometry{a4paper, left=2.5cm, right=2cm, top=3cm, bottom=2.8cm}
    8.25 +%\setlength{\footskip}{2cm}
    8.26 +%
    8.27 +%
    8.28 +%%Zhler definieren und Starwert setzen:
    8.29 +%\newcommand{\R}{\mathbb R}
    8.30 +%%\newcommand{\N}{\mathbb N}
    8.31 +%%\newcommand{\Q}{\mathbb Q}
    8.32 +%%\newcommand{\C}{\mathbb C}
    8.33 +%
    8.34 +%
    8.35 +%\newcounter{ctr}
    8.36 +%\setcounter{ctr}{0}
    8.37 +%
    8.38 +%\newcounter{Teubner}
    8.39 +%\newcounter{Klingenberg}
    8.40 +%\newcounter{T}
    8.41 +%\newcounter{Vo}
    8.42 +%\newcounter{Se}
    8.43 +%\newcounter{E}
    8.44 +%\newcounter{Bwl}
    8.45 +%\newcounter{Int}
    8.46 +%\newcounter{Prim}
    8.47 +%\newcounter{Z}
    8.48 +%\setcounter{Z}{0}
    8.49 +%\setcounter{Teubner}{1}
    8.50 +%\setcounter{Klingenberg}{2}
    8.51 +%\setcounter{T}{1}
    8.52 +%\setcounter{Vo}{7}
    8.53 +%\setcounter{Se}{2}
    8.54 +%\setcounter{E}{3}
    8.55 +%\setcounter{Bwl}{4}
    8.56 +%\setcounter{Int}{5}
    8.57 +%\setcounter{Prim}{6}
    8.58 +%%BSP
    8.59 +%\newenvironment{myBsp}{
    8.60 +%  \begin{list}{\textbf{\textsc{Bsp:}}}{
    8.61 +%    \setlength{\labelwidth}{8Pc}
    8.62 +%    \setlength{\labelsep}{0.5Pc}    
    8.63 +%    \setlength{\rightmargin}{0Pc}
    8.64 +%    \setlength{\leftmargin}{2Pc}
    8.65 +%    \setlength{\parsep}{0ex plus 0.5ex}
    8.66 +%    \setlength{\listparindent}{1em}
    8.67 +%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
    8.68 +%    \setlength{\topsep}{0.5Pc}
    8.69 +%  }}
    8.70 +%  {\end{list}
    8.71 +%}
    8.72 +%
    8.73 +%
    8.74 +%%Lemma
    8.75 +%\newenvironment{myLemma}{
    8.76 +%  \begin{list}{\textsc{\textbf{Lemma:\ \ \ }}}{
    8.77 +%   \setlength{\labelsep}{-0.5Pc}    
    8.78 +%    \setlength{\leftmargin}{1Pc}
    8.79 +%    \setlength{\parsep}{0ex plus 0.5ex}
    8.80 +%    \setlength{\listparindent}{1em}
    8.81 +%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
    8.82 +%    \setlength{\topsep}{0.5Pc}
    8.83 +%  }}
    8.84 +%  {\end{list}
    8.85 +%}
    8.86 +%%Korollar
    8.87 +%\newenvironment{myKorollar}{
    8.88 +%  \begin{list}{\textsc{\textbf{Korollar: }}}{
    8.89 +%    \setlength{\labelwidth}{8Pc}
    8.90 +%    \setlength{\labelsep}{0.5Pc}    
    8.91 +%    \setlength{\rightmargin}{0Pc}
    8.92 +%    \setlength{\leftmargin}{4Pc}
    8.93 +%    \setlength{\parsep}{0ex plus 0.5ex}
    8.94 +%    \setlength{\listparindent}{1em}
    8.95 +%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
    8.96 +%    \setlength{\topsep}{0.5Pc}
    8.97 +%  }}
    8.98 +%  {\end{list}
    8.99 +%}
   8.100 +%
   8.101 +%%Theorem
   8.102 +%\newenvironment{myTheorem}{
   8.103 +%  \begin{list}{\textsc{\textbf{Theorem: }}}{
   8.104 +%    \setlength{\labelwidth}{8Pc}
   8.105 +%    \setlength{\labelsep}{0.5Pc}    
   8.106 +%    \setlength{\rightmargin}{0Pc}
   8.107 +%    \setlength{\leftmargin}{5Pc}
   8.108 +%    \setlength{\parsep}{0ex plus 0.5ex}
   8.109 +%    \setlength{\listparindent}{1em}
   8.110 +%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   8.111 +%    \setlength{\topsep}{0.5Pc}
   8.112 +%  }}
   8.113 +%  {\end{list}
   8.114 +%}
   8.115 +%
   8.116 +%
   8.117 +%%Proportion
   8.118 +%\newenvironment{myProp}{
   8.119 +%  \begin{list}{\textsc{\textbf{Proportion: }}}{
   8.120 +%    \setlength{\labelwidth}{8Pc}
   8.121 +%    \setlength{\labelsep}{0.5Pc}    
   8.122 +%    \setlength{\rightmargin}{0Pc}
   8.123 +%    \setlength{\leftmargin}{4Pc}
   8.124 +%    \setlength{\parsep}{0ex plus 0.5ex}
   8.125 +%    \setlength{\listparindent}{1em}
   8.126 +%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   8.127 +%    \setlength{\topsep}{0.5Pc}
   8.128 +%  }}
   8.129 +%  {\end{list}
   8.130 +%}
   8.131 +%
   8.132 +%%Farben
   8.133 +%
   8.134 +%\newcommand{\red}[1]{\textcolor[rgb]{0.7,0,0}{\bf #1}}
   8.135 +%\newcommand{\rd}[1]{\color{red}{#1}}
   8.136 +%\newcommand{\white}[1]{\textcolor[rgb]{1,0,0}{\bf #1}}
   8.137 +%\newcommand{\w}[1]{\color{white}{#1}}
   8.138 +%\newcommand{\g}[1]{\color{myColor}{#1}}
   8.139 +%
   8.140 +%\usepackage{color}
   8.141 +%\definecolor{myColor}{rgb}{0.9,0.9,0.9}% Wir definieren im RGB-Farbraum
   8.142 +%
   8.143 +%
   8.144 +%\newcommand{\myDef}[1]{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\w .}\\[-0.2cm]\textbf{Definition\ \Nummer:}\\#1}}
   8.145 +%\newcommand{\mySatz}[2]{\colorbox{myColor}{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\g .}\\[-0.2cm]\textbf{Satz\ \Nummer:}\ #1\\ #2}}}
   8.146 +%\newcommand{\myBeweis}[1]{\textit{\textbf{Beweis:}\\ #1}}
   8.147 +%\newcommand{\myAlg}[2]{\parbox{\columnwidth}{\addtocounter{ctr}{1}\textbf{Algorithmus\ \Nummer:}\ \ #1\\#2}}
   8.148 +%\newcommand{\myProg}[1]{\fbox{\parbox{\columnwidth}{#1}}}
   8.149 +%
   8.150 +%\newcommand{\add}[1]{\addtocounter{#1}{1}}
   8.151 +%\newcommand{\zahl}[1]{\setcounter{#1}{Z}}
   8.152 +%\newcommand{\Q}[2]{\parbox{\columnwidth}{$^{[\arabic{#1}/#2]}$ }}
   8.153 +%
   8.154 +%\newcommand{\Nummer}{\thesection.\arabic{ctr}}
   8.155 +%
   8.156 +%---------- --------------------------------------------------- Beginn -----------------------------------------------------------------------
   8.157 +
   8.158 +\title{Greatest Common Divisor \\ for Multivariate Polynomials}
   8.159 +\author{Diana Meindl\\meindl\_diana@yahoo.com}
   8.160 +\date{\today}
   8.161 +
   8.162 +\begin{document}
   8.163 +\maketitle
   8.164 +%{\w .}\\[12cm]
   8.165 +%\begin{center}
   8.166 +%Presented to \\
   8.167 +%A.Univ.Prof. Dipl.-Ing. Dr. Wolfgang Schreiner (RISC Insitute)\\
   8.168 +%and\\
   8.169 +%Dr. techn. Walther Neuper (Institut fr Softwaretechnologie, TU Graz)
   8.170 +%\end{center}
   8.171 +%\newpage
   8.172 +%{\w .}\hspace{6.5cm}\textbf{Abstact}\\[0.5cm]
   8.173 +
   8.174 +\abstract{
   8.175 +This is a proposal for a Masters Thesis at RISC, the Research Institute for Symbolic Computation at Linz University.\\
   8.176 +
   8.177 +Calculation with fractions is an important part of Computer Algebra Systems (CAS). This proposal aims at a specific part of such calculations, the greatest common divisor (GCD) used for cancellation, but in the very general context of multivariate polynomials. Cancellation of multivariate polynomials is a settled topic in Computer Algebra, respective algorithms well documented and implementations available in all CASs.
   8.178 +
   8.179 +This proposal claims for novelty with respect to the context of implementation, an implementation as a CAS-feature in Computer Theorem Proving (CTP). On CTP's present development towards industrial use in software and systems verification, specific domain models involve demand on more and more mathematics, and within mathematics involve demand for more and more features. Thus the proposed implementation of GCD and cancellation follows an actual demand.
   8.180 +
   8.181 +If the implementation is successful, it is planned to be included into the distribution of Isabelle, one of the two dominating CTPs in Europe. As part of the Isabelle distribution it will also serve the {\sisac} project aiming at an educational math assistant under development at RISC Linz and Graz University of Technology.
   8.182 +}
   8.183 +
   8.184 +\newpage
   8.185 +%WN vorerst zu Zwecken der "Ubersicht lassen ...
   8.186 +\tableofcontents
   8.187 +
   8.188 +\section{Background}
   8.189 +The \sisac-project is a research and development project launched at the Institute for Software Technology of the Graz University of Technology (TUG) and now continued at the Research Institute for Symbolic Computation (RISC) of University of Linz and at the Institute for Information Systems and Computer Media (IICM) of TUG. The resulting \sisac{} prototype is a ``transparent single-stepping system for applied mathematics'' based on the computer theorem prover Isabelle. The prototype has been proven useful in field tests at Austrain schools \cite{imst-htl06-SH,imst-htl07-SH,imst-hpts08-SH} and is now extended for wider use.
   8.190 +
   8.191 +Authoring knowledge in \sisac{} provides a strict separation of concerns between authoring math knowledge and authoring dialogues. The latter is pursued at IICM, the former is concern of this thesis. Math authoring is done by use of a CTP-based programming language \cite{plmms10} or by use of SML \cite{pl:milner97} as the meta language and implementation language of Isabelle. Since the code resulting from this thesis shall serve Isabelle, it will be written in SML. Via Isabelle distribution this thesis shall also serve \sisac; a re-implementation in \sisac's CTP-based language is planned as a subsequent project -- this will make cancellation transparent for singe-stepping.
   8.192 +
   8.193 +%The special is an easy readable knowledge base including Isabelles HOL-theories and a transparently working knowledge interpreter (a generalization of 'single stepping' algebra systems).
   8.194 +%The background to both, development and research, is given by actual needs in math education as well as by foundamental questions about 'the mechanization of thinking' as an essential aspect in mathematics and in technology.
   8.195 +%The \sisac-system under construction comprises a tutoring-system and an authoring-system. The latter provides for adaption to various needs of individual users and educational institutions and for extensions to arbitrary fields of applied mathematics.
   8.196 +
   8.197 +TODO.WN111107 bitte googeln und je einen Absatz kopieren + zitieren woher (PLAGIATsgefahr):\\
   8.198 +European provers: Isabelle \cite{Nipkow-Paulson-Wenzel:2002}, Coq \cite{Huet_all:94}\\
   8.199 +American provers: PVS~\cite{pvs}, ACL2~\footnote{http://userweb.cs.utexas.edu/~moore/acl2/}\\
   8.200 +
   8.201 +\section{Goal of the thesis}
   8.202 +\subsection{Current situation}
   8.203 +At the presetn time there is no implimentation for the problem of canceling fractions in Isabelle, and a deficient one in \sisac. But because canceling is important for calculating with fractions a new implimentation is necessary.
   8.204 +
   8.205 +\subsection{Problem} 
   8.206 +The wish is to handle fractions in \sisac{} not only in one variable also in more. So the goal of this thesis ist to find, assess and evaluate the existing algorithms and methods for finding the GCD. This will be an functional programm with the posibility to include it into Isabelle, where it will be used by \sisac{} as well.
   8.207 +
   8.208 +%WN eine pr"azisere Beschreibung des Problems kann ich mir nicht vorstellen (englische Version der Mail haben wir auch, aber sie passt nicht zur deutschen Antwort von Prof.Nipkow) ...
   8.209 +\bigskip
   8.210 +A mail to Prof. Nipkow, leader of the development of Isabelle \cite{Nipkow-Paulson-Wenzel:2002} at TU M\"unchen, Mon, 23 May 2011 08:58:14 +0200 describes the problem as follows:
   8.211 +\begin{verbatim}
   8.212 +Eine erste Idee, wie die Integration der Diplomarbeit f"ur
   8.213 +einen Benutzer von Isabelle aussehen k"onnte, w"are zum 
   8.214 +Beispiel im
   8.215 +
   8.216 +   lemma cancel:
   8.217 +     assumes asm3: "x2 - x*y \<noteq> 0" and asm4: "x \<noteq> 0"
   8.218 +     shows "(x2 - y2) / (x2 - x*y) = (x + y) / (x::real)"
   8.219 +     apply (insert asm3 asm4)
   8.220 +     apply simp
   8.221 +   sorry
   8.222 +
   8.223 +die Assumptions
   8.224 +
   8.225 +   asm1: "(x2 - y2) = (x + y) * (x - y)" and asm2: "x2 - x*y = x * (x - y)"
   8.226 +
   8.227 +im Hintergrund automatisch zu erzeugen (mit der Garantie, 
   8.228 +dass "(x - y)" der GCD ist) und sie dem Simplifier (f"ur die 
   8.229 +Rule nonzero_mult_divide_mult_cancel_right) zur Verf"ugung zu 
   8.230 +stellen, sodass anstelle von "sorry" einfach "done" stehen kann.
   8.231 +Und weiters w"are eventuell asm3 zu "x - y \<noteq> 0" zu vereinfachen, 
   8.232 +eine Rewriteorder zum Herstellen einer Normalform festzulegen, etc.
   8.233 +\end{verbatim}
   8.234 +%WN und eine bessere Motivation f"ur eine Master Thesis kann ich mir auch nicht vorstellen ...
   8.235 +Response of Prof. Nipkow:
   8.236 +
   8.237 +\begin{verbatim}
   8.238 +Unser Spezialist fuer die mathematischen Theorien ist Johannes H"olzl. 
   8.239 +Etwas allgemeinere Fragen sollten auf jeden Fall an isabelle-dev@ 
   8.240 +gestellt werden.
   8.241 +
   8.242 +Viel Erfolg bei der Arbeit!
   8.243 +Tobias Nipkow
   8.244 +\end{verbatim}
   8.245 +
   8.246 +
   8.247 +\subsection{Expected results}
   8.248 +Implementation of algorithms for the different problems, and find out which one will be the best for the specific requirements in Isabelle.\\
   8.249 +The program should accomplish:
   8.250 +\begin{itemize}
   8.251 +\item Real and rational coefficients. Maybe also imaginary coefficients.
   8.252 +\item Canceling and adding multivariate polynomials, when they are in normal form.
   8.253 +\end{itemize}
   8.254 +The program will be written in the functional programming language SML with appropriate comments. The resulting code shall meet the coding standards of Isabelle \cite{isar-impl} p.3-10. The integration of the code into the Isabelle distribution will be done by the Isabelle developer team.
   8.255 +
   8.256 +\section{State of the art}
   8.257 +In a broad view the context of this thesis can be seen as ``computation and deduction'': simplification and in particular cancellation of rational terms is concern of \textbf{computation} implemented in Computer Algebra Systems (CAS) --- whereas the novelty within the thesis is given by an implementation of cancellation in a computer theorem prover (CTP), i.e. in the domain of \textbf{deduction} with respective logical rigor not addressed in the realm of CAS.
   8.258 +
   8.259 +Below, after a general survey on computation, represented by CAS, and on deduction, represented by CTP, a more narrow view on ``CAS-functionality in CTP'' is pursued.
   8.260 +
   8.261 +\subsection{Computer Algebra and Proof Assistants}
   8.262 +%WN achtung: diese subsection is fast w"ortlich kopiert aus \cite{plmms10} -- also in der Endfassung bitte "uberarbeiten !!!
   8.263 +Computer Algebra and Proof Assistants have coexisted for a many years so there is much research trying to bridge the gap between these approaches from both sides. We shall continue to abbreviate Computer Algebra (Systems) by ``CAS'', and in analogy we shall abbreviate proof assistants by CTP, computer theorem provig (comprising both, interactive theorem proving (ITP) and automated theorem proving (ATP), since in CTP there are ATP-tools included today.)
   8.264 +
   8.265 +First, many CTPs already have CAS-like functionality,
   8.266 +especially for domains like arithmetic. They provide the user
   8.267 +with conversions, tactics or decision procedures that solve
   8.268 +problems in a particular domain. Such decision procedures present
   8.269 +in the standard library of HOL Light~\footnote{http://www.cl.cam.ac.uk/~jrh13/hol-light/} are used inside the
   8.270 +prototype described in Sect.\ref{cas-funct} on p.\pageref{part-cond} for arithmetic's,
   8.271 +symbolic differentiation and others.
   8.272 +
   8.273 +Similarly some CAS systems provide environments that allow
   8.274 +logical reasoning and proving properties within the system. Such
   8.275 +environments are provided either as logical
   8.276 +extensions (e.g.~\cite{logicalaxiom}) or are implemented within a
   8.277 +CAS using its language~\cite{theorema00}.
   8.278 +
   8.279 +There are numerous architectures for information exchange between
   8.280 +CAS and CTP with different levels of \emph{degree of trust}
   8.281 +between the prover and the CAS. In principle, there are several approaches. 
   8.282 +If CAS-functionality is not fully embedded in CTP, CAS can be called as ``oracles'' nevertheless (for efficiency reasons, in general) --- their results are regarded like prophecies of Pythia in Delphi. There are three kinds of checking oracles, however:
   8.283 +\begin{enumerate}
   8.284 +\item Just adopt the CAS result without any check. Isabelle internally marks such results.
   8.285 +\item Check the result inside CTP. There are many cases, where such checks are straight forward, for instance, checking the result of factorization by multiplication of the factors, or checking integrals by differentiation.
   8.286 +\item Generate a derivation of the result within CTP; in Isabelle this is called ``proof reconstruction''.
   8.287 +\end{enumerate}
   8.288 +A longer list of frameworks for
   8.289 +information exchange and bridges between systems can be found
   8.290 +in~\cite{casproto}.
   8.291 +
   8.292 +There are many approaches to defining partial functions in proof
   8.293 +assistants. Since we would like the user to define functions
   8.294 +without being exposed to the underlying logic of the proof
   8.295 +assistant we only mention some automated mechanisms for defining
   8.296 +partial functions in the logic of a CTP.
   8.297 +Krauss~\cite{krauss} has developed a framework for defining
   8.298 +partial recursive functions in Isabelle/HOL, which formally
   8.299 +proves termination by searching for lexicographic combinations of
   8.300 +size measures. Farmer~\cite{farmer} implements a scheme for
   8.301 +defining partial recursive functions in \textrm{IMPS}.
   8.302 +
   8.303 +\subsection{Motivation for CAS-functionality in CTP}
   8.304 +In the realm of CTP formuas are dominated by quantifiers $\forall$, $\exists$ and $\epsilon$ (such) and by operations like $\Rightarrow$, $\land$ and $\lor$. Numbers were strangers initially; numerals have been introduced to Isabelle not much before the year 2000~\footnote{In directory src/Provers/Arith/ see the files cancel\_numerals.ML and cancel\_numeral\_factor.ML in the Isabelle distribution 2011. They still use the notation $\#1,\#2,\#3,\dots$ from before 2000~!}. However, then numerals have been implemented with {\em polymorphic type} such that $2\cdot r\cdot\pi$ ($2$ is type \textit{real}) and $\pi_{\it approx}=3.14\,\land\, 2\cdot r\cdot\pi_{\it approx}$ can be written as well as $\sum_i^n i=\frac{n\cdot(n+1)}{2}$ ($2$ is type \textit{nat}). The different types are inferred by Hindle-Milner type inference \cite{damas-milner-82,Milner-78,Hindley-69}.
   8.305 +
   8.306 +1994 was an important year for CTP: the Pentium Bug caused excitement in the IT community all around the world and motivated INTEL to invest greatly into formal verification of circuits (which carried over to verification of software). Not much later John Harrison mechanized real numbers as Dedekind Cuts in HOL Light \footnote{http://www.cl.cam.ac.uk/~jrh13/hol-light/} and derived calculus, derivative and integral from that definition \cite{harr:thesis}, an implementation which has been transferred to Isabelle very soon after that~\footnote{In the directory src/HOL/Multivariate\_Analysis/ see the files Gauge\_Measure.thy, Integration.thy, Derivative.thy, Real\_Integration.thy, Brouwer\_Fixpoint.thy, Fashoda.thy}.
   8.307 +
   8.308 +Harrison also says that ``CAS are ill-defined'' and gives, among others, an example relevant for this thesis on cancellation: TODO.WN111104 search for ... meromorphic functions in http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-428.ps.gz
   8.309 +
   8.310 +\medskip
   8.311 +The main motivation for further introduction of CAS-functionality to CTP is also technology-driven: In this decade domain engineering is becoming an academic discipline with industrial relevance \cite{db:dom-eng}: vigorous efforts extend the scope of formal specifications even beyond software technology, and thus respective domains of mathematical knowledge are being mechanized in CTP. The Archive of Formal Proofs~\footnote{http://afp.sourceforge.net/} is Isabelle's repository for such work.
   8.312 +
   8.313 +\subsection{Simplification within CTP}
   8.314 +Cancellation, the topic of this thesis, is a specific part of simplification of rationals. In the realm of CAS cancellation is {\em not} an interesting part of the state of the art, because cancellation has been implemented in the prevailing CAS more than thirty years ago --- however, cancellation of multivariate polynomials is {\em not} yet implemted in any of the dominating CTPs.
   8.315 +%WN: bitte mit Anfragen an die Mailing-Listen nachpr"ufen: Coq, HOL, ACL2, PVS
   8.316 +
   8.317 +As in other CTPs, in Isabelle the simplifier is a powerful software component; the sets of rewrite rules, called \textit{simpsets}, contain several hundreds of elements. Rewriting is still very efficient, because the simpsets are transformed to term nets \cite{term-nets}.
   8.318 +
   8.319 +Rational terms of multivariate polynomials still have a normal form \cite{bb-loos} and thus equivalence of respective terms is decidable. This is not the case, however, with terms containing roots or transcedent functions. Thus, CAS are unreliable by design in these cases.
   8.320 +
   8.321 +In CTP, simplification of non-decidable domains is already an issue, as can be seem in the mail with subject ``simproc divide\_cancel\_factor produces error'' in the mailing-list \textit{isabelle-dev@mailbroy.informatik.tu-muenchen.de} from Thu, 15 Sep 2011 16:34:12 +0200
   8.322 +{%\footnotesize --- HILFT NICHTS
   8.323 +\begin{verbatim}
   8.324 +Hi everyone,
   8.325 +
   8.326 +in the following snippet, applying the simplifier causes an error:
   8.327 +
   8.328 +------------------------------------------
   8.329 +theory Scratch
   8.330 +  imports Complex_Main
   8.331 +begin
   8.332 +
   8.333 +lemma
   8.334 +  shows "(3 / 2) * ln n = ((6 * k * ln n) / n) * ((1 / 2 * n / k) / 2)"
   8.335 +apply simp
   8.336 +------------------------------------------
   8.337 +
   8.338 +outputs
   8.339 +
   8.340 +------------------------------------------
   8.341 +Proof failed.
   8.342 +(if n = 0 then 0 else 6 * (k * ln n) / 1) * 2 / (4 * k) =
   8.343 +2 * (Numeral1 * (if n = 0 then 0 else 6 * (k * ln n) / 1)) / (2 * (2 * k))
   8.344 + 1. n \not= Numeral0 \rightarrow k * (ln n * (2 * 6)) / (k * 4) = k * (ln n * 12) / (k * 4)
   8.345 +1 unsolved goal(s)!
   8.346 +The error(s) above occurred for the goal statement:
   8.347 +(if n = 0 then 0 else 6 * (k * ln n) / 1) * 2 / (4 * k) =
   8.348 +2 * (Numeral1 * (if n = 0 then 0 else 6 * (k * ln n) / 1)) / (2 * (2 * k))
   8.349 +------------------------------------------
   8.350 +\end{verbatim}
   8.351 +}
   8.352 +Mail ``Re: simproc divide\_cancel\_factor produces error'' on Fri, 16 Sep 2011 22:33:36 +0200
   8.353 +\begin{verbatim}
   8.354 +> > After the release, I'll have to think about doing a complete overhaul
   8.355 +> > of all of the cancellation simprocs.
   8.356 +You are very welcome to do so.  Before you start, call on me and I will
   8.357 +write down some ideas I had long ago (other may want to join, too).
   8.358 +\end{verbatim}
   8.359 +%WN: bist du schon angemeldet in den Mailing-Listen isabelle-users@ und isabelle-dev@ ? WENN NICHT, DANN WIRD ES H"OCHSTE ZEIT !!!
   8.360 +
   8.361 +\subsection{Open Issues with CAS-functionality in CTP}\label{cas-funct}
   8.362 +There is at least one effort explicitly dedicated to implement CAS-functionality in CTP \cite{cezary-phd}. %WN bitte unbedingt lesen (kann von mir in Papierform ausgeborgt werden) !!!
   8.363 +In this work three issues has been identified: partiality conditions, multi-valued functions and real numbers. These issues are addressed in the subsequent paragraphs, followed by a forth issue raised by \sisac{}.
   8.364 +
   8.365 +\paragraph{Partiality conditions}\label{part-cond} are introduced by partial functions or by conditional rewriting. An example of how the CAS-functionality \cite{cezary-phd} looks like is given on p.\pageref{fig:casproto}. 
   8.366 +\cite{cezary-phd} gives an introductory example (floated to p.\pageref{fig:casproto}) which will be referred to in the sequel.
   8.367 +\input{thol.tex}
   8.368 +%WN das nachfolgende Format-Problem l"osen wir sp"ater ...
   8.369 +\begin{figure}[hbt]
   8.370 +\begin{center}
   8.371 +\begin{holnb}
   8.372 +  In1 := vector [\&2; \&2] - vector [\&1; \&0] + vec 1
   8.373 + Out1 := vector [\&2; \&3]
   8.374 +  In2 := diff (diff (\Lam{}x. \&3 * sin (\&2 * x) +
   8.375 +         \&7 + exp (exp x)))
   8.376 + Out2 := \Lam{}x. exp x pow 2 * exp (exp x) +
   8.377 +         exp x * exp (exp x) + -- \&12 * sin (\&2 * x)
   8.378 +  In3 := N (exp (\&1)) 10
   8.379 + Out3 := #2.7182818284 + ... (exp (\&1)) 10 F
   8.380 +  In4 := x + \&1 - x / \&1 + \&7 * (y + x) pow 2
   8.381 + Out4 := \&7 * x pow 2 + \&14 * x * y + \&7 * y pow 2 + \&1
   8.382 +  In5 := sum (0,5) (\Lam{}x. \&x * \&x)
   8.383 + Out5 := \&30
   8.384 +  In6 := sqrt (x * x) assuming x > &1
   8.385 + Out6 := x
   8.386 +\end{holnb}
   8.387 +\end{center}
   8.388 +\caption{\label{fig:casproto}Example interaction with the prototype
   8.389 +  CAS-like input-response loop. For the user input given in the
   8.390 +  \texttt{In} lines, the system produces the output in \texttt{Out}
   8.391 +  lines together with HOL Light theorems that state the equality
   8.392 +  between the input and the output.}
   8.393 +\end{figure}
   8.394 +In lines {\tt In6, Out6} this examples shows how to reliably simplify $\sqrt{x}$. \cite{caspartial} gives more details on handling side conditions in formalized partial functions.
   8.395 +
   8.396 +Analoguous to this example, cancellations (this thesis is concerned with) like
   8.397 +$$\frac{x^2-y^2}{x^2-x\cdot y}=\frac{x+y}{x}\;\;\;\;{\it assuming}\;x-y\not=0\land x\not=0$$
   8.398 +produce assumptions, $x-y\not=0, x\not=0$ here. Since the code produced in the framework of this thesis will be implemented in Isabelle's simplifier (outside this thesis), the presentation to the user will be determined by Isabelle and \sisac{}{} using the respective component of Isabelle. Also reliable handling of assumptions like $x-y\not=0, x\not=0$ is up to these systems.
   8.399 +
   8.400 +\paragraph{Multi-valued functions:}\label{multi-valued}
   8.401 +\cite{seeingroots,davenp-multival-10} discuss cases where CAS are error prone when dropping a branch of a multi-valued function~\footnote{``Multivalued \textit{function}'' is a misnomer, since the value of a function applied to a certain argument is unique by definition of function.}. Familiar examples are ...
   8.402 +%TODO.WN111104 ... zur Erkl"arung ein paar Beispiele von http://en.wikipedia.org/wiki/Multivalued_function
   8.403 +
   8.404 +\paragraph{Real numbers} cannot be represented by numerals. In engineering applications, however, approximation by floating-point numbers are frequently useful. In CTP floating-point numbers must be handled rigorously as approximations. Already \cite{harr:thesis} introduced operations on real numerals accompanied by rigorous calculation of precision. \cite{russellphd} describes efficient implementation of infinite precision real numbers in Coq.
   8.405 +
   8.406 +\paragraph{All solutions for equations} must be guaranted, if equation solving is embedded within CTP. So, given an equation $f(x)=0$ and the set of solutions $S$ of this equation, we want to have both,
   8.407 +\begin{eqnarray}
   8.408 +   \exists x_s.\;x_s\in S &\Rightarrow& f(x_s) = 0 \\\label{is-solut}
   8.409 +  x_s\in S &\Leftarrow& \exists x_s.\;f(x_s) = 0    \label{all-solut}
   8.410 +\end{eqnarray}
   8.411 +where (\ref{all-solut}) ensures that $S$ contains {\em all} solutions of the equation. The \sisac{}-project has implemented a prototype of an equation solver~\footnote{See \textit{equations} in the hierarchy of specifications at http://www.ist.tugraz.at/projects/isac/www/kbase/pbl/index\_pbl.html}.
   8.412 +
   8.413 +There is demand for fullfledged equation solving in CTP, including equational systems and differential equations, because \sisac{}{} has a prototype of a CTP-based programming language calling CAS functions; and Lucas-Interpretation \cite{wn:lucas-interp-12} makes these functions accessible by single-stepping and ``next step guidance'', which would automatically generate a learning system for equation solving.
   8.414 +
   8.415 +\subsection{Algorithms for cancellation of multivariate polynomials}
   8.416 +The most appropriate book for implementing the required algorithms in this thesis is \cite{Winkler:96}. TODO.WN111104 welche noch ?
   8.417 +
   8.418 +\section{Thesis structure}
   8.419 +The proposed table of contents of the thesis on the chapter level is as follows:
   8.420 +\begin{enumerate}
   8.421 +	\item Introduction (2-3 pages)
   8.422 +	\item Computer Algebra Systems (CAS) (5 - 7 pages)\\
   8.423 +	Which different CAS exists and whats the focus of them.
   8.424 +	\item The \sisac{}-Project (5 - 7 pages)\\
   8.425 +	This chapter will describe the \sisac{}-Project and the goals of the project.
   8.426 +	\item Univariate Polynomials (15-20 pages)\\
   8.427 +	This chapter will describe different Algorithms for univariate polynomials, with different coefficients.
   8.428 +	\item Multivariate Polynomials (20-25 pages)\\
   8.429 +	This chapter will describe different Algorithms for multivariate polynomials,  with different coefficients
   8.430 +	\item Functional programming and SML(2-5 pages)\\
   8.431 +	The basic idea of this programming languages.
   8.432 +	\item Implimentation in \sisac{}-Project (15-20 pages)
   8.433 +	\item Conclusion (2-3 pages)
   8.434 +\end{enumerate}
   8.435 +%\newpage
   8.436 +
   8.437 +\section{Timeline}
   8.438 +%Werd nie fertig.\\
   8.439 +\begin{center}
   8.440 +		\begin{tabular}{|l|l|l|}
   8.441 +		\hline
   8.442 +			 \textbf{Time}&\textbf{Thesis}&\textbf{Project}\\
   8.443 +			 \hline
   8.444 +			 & Functional programming & Learning the basics and the idea\\
   8.445 +			 & & of funcional programming\\
   8.446 +			 \hline
   8.447 +			 & Different CAS & Can they handle the problem \\
   8.448 +			 & &and which algorithm do they use?\\ \hline
   8.449 +			 & Univariate Polynomials & Implementation of the Algorithm\\
   8.450 +			 & & for univariate Polynomials \\ \hline
   8.451 +		   & Multivariate Polynomials &  Implementation of the Algorithm\\
   8.452 +			 & & for multivariate Polynomials \\ \hline 
   8.453 +		   & The \sisac-Project &\\ \hline
   8.454 +		   & Conclusion and Introduction & Find good examples for testing\\
   8.455 +			\hline
   8.456 +		\end{tabular}
   8.457 +	\end{center}
   8.458 +
   8.459 +%WN oben an passender stelle einf"ugen
   8.460 +\cite{einf-funct-progr}
   8.461 +		
   8.462 +		
   8.463 +\bibliography{bib/math-eng,bib/didact,bib/bk,bib/RISC_2,bib/isac,bib/pl,bib/math,references}
   8.464 +%\section{Bibliography}
   8.465 +%%mindestens 10
   8.466 +%\begin{enumerate}
   8.467 +% \item Bird/Wadler, \textit{Einfhrung in die funktionale Programmierung}, Carl Hanser and Prentice-Hall International, 1992
   8.468 +% \item Franz Winkler, \textit{Polynomial Algorithms in Computer Algebra}, Springer,1996
   8.469 +% \item %M. Mignotte, \textit{An inequality about factors of polynomial}
   8.470 +% \item %M. Mignotte, \textit{Some useful bounds}
   8.471 +% \item %W. S. Brown and J. F. Traub. \textit{On euclid's algorithm and the theory of subresultans}, Journal of the ACM (JACM), 1971
   8.472 +% \item %Bruno Buchberger, \textit{Algorhimic mathematics: Problem types, data types, algorithm types}, Lecture notes, RISC Jku A-4040 Linz, 1982
   8.473 +% 
   8.474 +% \item %Tateaki Sasaki and Masayuki Suzuki, \textit{Thre new algorithms for multivariate polynomial GCD}, J. Symbolic Combutation, 1992
   8.475 +% \item
   8.476 +% \item
   8.477 +% \item
   8.478 +%\end{enumerate} 
   8.479 +
   8.480 +\end{document}
   8.481 +
   8.482 +ALLES UNTERHALB \end{document} WIRD VON LATEX NICHT BERUECKSICHTIGT
   8.483 +WN110916 grep-ing through Isabelle code:
   8.484 +
   8.485 +neuper@neuper:/usr/local/isabisac/src$ find -name "*umeral*"
   8.486 +./HOL/ex/Numeral.thy
   8.487 +./HOL/Tools/nat_numeral_simprocs.ML
   8.488 +./HOL/Tools/numeral_syntax.ML
   8.489 +./HOL/Tools/numeral.ML
   8.490 +./HOL/Tools/numeral_simprocs.ML
   8.491 +./HOL/Matrix/ComputeNumeral.thy
   8.492 +./HOL/Library/Numeral_Type.thy
   8.493 +./HOL/Numeral_Simprocs.thy
   8.494 +./HOL/Import/HOL/numeral.imp
   8.495 +./HOL/Code_Numeral.thy
   8.496 +./HOL/Nat_Numeral.thy
   8.497 +./ZF/Tools/numeral_syntax.ML
   8.498 +./Provers/Arith/cancel_numeral_factor.ML
   8.499 +./Provers/Arith/cancel_numerals.ML
   8.500 +./Provers/Arith/combine_numerals.ML
   8.501 +
   8.502 +neuper@neuper:/usr/local/isabisac/src$ find -name "*ancel*"
   8.503 +./HOL/Tools/abel_cancel.ML                 
   8.504 +./Provers/Arith/cancel_div_mod.ML
   8.505 +./Provers/Arith/cancel_numeral_factor.ML  Paulson 2000 !!!
   8.506 +./Provers/Arith/cancel_sums.ML            
   8.507 +./Provers/Arith/cancel_numerals.ML        Paulson 2000
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/doc-isac/dmeindl/references.bib	Tue Sep 17 09:50:52 2013 +0200
     9.3 @@ -0,0 +1,296 @@
     9.4 +@proceedings{DBLP:conf/mkm/2007,
     9.5 +  editor    = {Manuel Kauers and
     9.6 +               Manfred Kerber and
     9.7 +               Robert Miner and
     9.8 +               Wolfgang Windsteiger},
     9.9 +  title     = {Towards Mechanized Mathematical Assistants, 14th Symposium,
    9.10 +               Calculemus 2007, 6th International Conference, MKM 2007,
    9.11 +               Hagenberg, Austria, June 27-30, 2007, Proceedings},
    9.12 +  booktitle = {Calculemus/MKM},
    9.13 +  publisher = {Springer},
    9.14 +  series    = {Lecture Notes in Computer Science},
    9.15 +  volume    = {4573},
    9.16 +  year      = {2007},
    9.17 +  isbn      = {978-3-540-73083-5},
    9.18 +  bibsource = {DBLP, http://dblp.uni-trier.de}
    9.19 +}
    9.20 +
    9.21 +@proceedings{DBLP:conf/cade/2006,
    9.22 +  editor    = {Ulrich Furbach and
    9.23 +               Natarajan Shankar},
    9.24 +  title     = {Automated Reasoning, Third International Joint Conference,
    9.25 +               IJCAR 2006, Seattle, WA, USA, August 17-20, 2006, Proceedings},
    9.26 +  booktitle = {IJCAR},
    9.27 +  publisher = {Springer},
    9.28 +  series    = {Lecture Notes in Computer Science},
    9.29 +  volume    = {4130},
    9.30 +  year      = {2006},
    9.31 +  isbn      = {3-540-37187-7},
    9.32 +  bibsource = {DBLP, http://dblp.uni-trier.de}
    9.33 +}
    9.34 +
    9.35 +@proceedings{DBLP:conf/iwfm/1999,
    9.36 +  editor    = {Andrew Butterfield and
    9.37 +               Klemens Haegele},
    9.38 +  title     = {3rd Irish Workshop on Formal Methods, Galway, Eire, July
    9.39 +               1999},
    9.40 +  booktitle = {IWFM},
    9.41 +  publisher = {BCS},
    9.42 +  series    = {Workshops in Computing},
    9.43 +  year      = {1999},
    9.44 +  bibsource = {DBLP, http://dblp.uni-trier.de}
    9.45 +}
    9.46 +
    9.47 +@proceedings{DBLP:conf/aisc/2008,
    9.48 +  editor    = {Serge Autexier and
    9.49 +               John Campbell and
    9.50 +               Julio Rubio and
    9.51 +               Volker Sorge and
    9.52 +               Masakazu Suzuki and
    9.53 +               Freek Wiedijk},
    9.54 +  title     = {Intelligent Computer Mathematics, 9th International Conference,
    9.55 +               AISC 2008, 15th Symposium, Calculemus 2008, 7th International
    9.56 +               Conference, MKM 2008, Birmingham, UK, July 28 - August 1,
    9.57 +               2008. Proceedings},
    9.58 +  booktitle = {AISC/MKM/Calculemus},
    9.59 +  publisher = {Springer},
    9.60 +  series    = {Lecture Notes in Computer Science},
    9.61 +  volume    = {5144},
    9.62 +  year      = {2008},
    9.63 +  isbn      = {978-3-540-85109-7},
    9.64 +  bibsource = {DBLP, http://dblp.uni-trier.de}
    9.65 +}
    9.66 +
    9.67 +@InProceedings{wn:lucas-interp-12,
    9.68 +  author = 	 {Neuper, Walther},
    9.69 +  title = 	 {Automated Generation of User Guidance by Combining Computation and Deduction},
    9.70 +  booktitle = {THedu'11: CTP-compontents for educational software},
    9.71 +  year = 	 {2012},
    9.72 +  editor = 	 {Quaresma, Pedro},
    9.73 +  publisher = {EPTCS},
    9.74 +  note = {To appear}
    9.75 +}
    9.76 +
    9.77 +@InProceedings{davenp-multival-10,
    9.78 +  author = 	 {Davenport, James},
    9.79 +  title = 	 {The Challenges of Multivalued "Functions"},
    9.80 +  booktitle = {Proceedings of the Conferences on Intelligent Computer Mathematics (CICM)},
    9.81 +  year = 	 {2010}
    9.82 +}
    9.83 +
    9.84 +@PhdThesis{cezary-phd,
    9.85 +  author = 	 {Kalisyk, Cezary},
    9.86 +  title = 	 {Correctness and Availability. Building Computer Algebra on top of Proof Assistants and making Proof Assistants available over the Web},
    9.87 +  school = 	 {Radboud University Nijmegen},
    9.88 +  year = 	 {2009},
    9.89 +  type = 	 {IPA Dissertation Series 2009-18},
    9.90 +  note = 	 {Promotor Herman Geuvers}
    9.91 +}
    9.92 +
    9.93 +@Book{bb-loos,
    9.94 +  editor = 	 {Buchberger, Bruno and Collins, George Edwin and Loos, 
    9.95 +                  R\"udiger and Albrecht, Rudolf},
    9.96 +  title = 	 {Computer Algebra. Symbolic and Algebraic Computation},
    9.97 +  publisher = 	 {Springer Verlag},
    9.98 +  year = 	 {1982},
    9.99 +  edition = 	 {2}
   9.100 +}
   9.101 +
   9.102 +@Book{term-nets,
   9.103 +  author = 	 {Charniak, E. and Riesbeck, C. K. and McDermott, D. V.},
   9.104 +  title = 	 {Artificial Intelligence Programming},
   9.105 +  publisher = 	 {Lawrence Erlbaum Associates},
   9.106 +  year = 	 {1980},
   9.107 +  note = 	 {(Chapter 14)}
   9.108 +}
   9.109 +
   9.110 +@Book{db:dom-eng,
   9.111 +  author = 	 {Bj{\o}rner, Dines},
   9.112 +  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
   9.113 +  publisher = 	 {JAIST Press},
   9.114 +  year = 	 {2009},
   9.115 +  month = 	 {Feb},
   9.116 +  series = 	 {COE Research Monograph Series},
   9.117 +  volume = 	 {4},
   9.118 +  address = 	 {Nomi, Japan}
   9.119 +}
   9.120 +
   9.121 +@techreport{harr:thesis,
   9.122 +        author={Harrison, John R.},
   9.123 +        title={Theorem proving with the real numbers},
   9.124 +        institution={University of Cambridge, Computer Laboratory},year={1996}, 
   9.125 +        type={Technical Report},number={408},address={},month={November},
   9.126 +        note={},status={},source={},location={loc?} 
   9.127 +        }  
   9.128 +
   9.129 +@InProceedings{damas-milner-82,
   9.130 +  author = 	 {Damas, Luis and Milner, Robin},
   9.131 +  title = 	 {Principal type-schemes for functional programs},
   9.132 +  booktitle = {9th Symposium on Principles of programming languages (POPL'82)},
   9.133 +  pages = 	 {207-212},
   9.134 +  year = 	 {1982},
   9.135 +  editor = 	 {ACM}
   9.136 +}
   9.137 +
   9.138 +@Article{Milner-78,
   9.139 +  author = 	 {Milner, R.},
   9.140 +  title = 	 {A Theory of Type Polymorphism in Programming},
   9.141 +  journal = 	 {Journal of Computer and System Science (JCSS)},
   9.142 +  year = 	 {1978},
   9.143 +  number = 	 {17},
   9.144 +  pages = 	 {348-374}
   9.145 +}
   9.146 +
   9.147 +@Article{Hindley-69,
   9.148 +  author = 	 {Hindley, R.},
   9.149 +  title = 	 {The Principal Type-Scheme of an Object in Combinatory Logic},
   9.150 +  journal = 	 {Transactions of the American Mathematical Society},
   9.151 +  year = 	 {1969},
   9.152 +  volume = 	 {146},
   9.153 +  pages = 	 {29-60}
   9.154 +}
   9.155 +
   9.156 +@article{seeingroots,
   9.157 + author = {Jeffrey, D.J. and Norman, A.C.},
   9.158 + title = {Not seeing the roots for the branches: multivalued functions in computer algebra},
   9.159 + journal = {SIGSAM Bull.},
   9.160 + volume = {38},
   9.161 + number = {3},
   9.162 + year = {2004},
   9.163 + issn = {0163-5824},
   9.164 + pages = {57--66},
   9.165 + doi = {http://doi.acm.org/10.1145/1040034.1040036},
   9.166 + publisher = {ACM},
   9.167 + address = {New York, NY, USA},
   9.168 + }
   9.169 +
   9.170 +@PhdThesis{russellphd,
   9.171 +  author =       {Russell O'Connor},
   9.172 +  title =        {Incompleteness and Completeness.},
   9.173 +  school =       {Radboud University Nijmegen},
   9.174 +  year =         {2009},
   9.175 +}
   9.176 +
   9.177 +@inproceedings{caspartial,
   9.178 +  author    = {Cezary Kaliszyk},
   9.179 +  title     = {Automating Side Conditions in Formalized Partial Functions},
   9.180 +  booktitle = {AISC/MKM/Calculemus},
   9.181 +  year      = {2008},
   9.182 +  pages     = {300-314},
   9.183 +  ee        = {http://dx.doi.org/10.1007/978-3-540-85110-3_26},
   9.184 +  crossref  = {DBLP:conf/aisc/2008},
   9.185 +  bibsource = {DBLP, http://dblp.uni-trier.de}
   9.186 +}
   9.187 +
   9.188 +@inproceedings{farmer,
   9.189 +  author    = {Farmer, William M.},
   9.190 +  title     = {A Scheme for Defining Partial Higher-Order Functions by
   9.191 +               Recursion.},
   9.192 +  booktitle = {IWFM},
   9.193 +  year      = {1999},
   9.194 +  crossref  = {DBLP:conf/iwfm/1999},
   9.195 +  bibsource = {DBLP, http://dblp.uni-trier.de}
   9.196 +}
   9.197 +
   9.198 +@inproceedings{krauss,
   9.199 +  author    = {Krauss, Alexander},
   9.200 +  title     = {Partial Recursive Functions in Higher-Order Logic},
   9.201 +  booktitle = {IJCAR},
   9.202 +  year      = {2006},
   9.203 +  pages     = {589-603},
   9.204 +  ee        = {http://dx.doi.org/10.1007/11814771_48},
   9.205 +  crossref  = {DBLP:conf/cade/2006},
   9.206 +  bibsource = {DBLP, http://dblp.uni-trier.de}
   9.207 +}
   9.208 +
   9.209 +@inproceedings{casproto,
   9.210 +  author    = {Cezary Kaliszyk and
   9.211 +               Freek Wiedijk},
   9.212 +  title     = {Certified Computer Algebra on Top of an Interactive Theorem
   9.213 +               Prover},
   9.214 +  booktitle = {Calculemus},
   9.215 +  year      = {2007},
   9.216 +  pages     = {94-105},
   9.217 +  ee        = {http://dx.doi.org/10.1007/978-3-540-73086-6_8},
   9.218 +  crossref  = {DBLP:conf/mkm/2007},
   9.219 +  bibsource = {DBLP, http://dblp.uni-trier.de}
   9.220 +}
   9.221 +
   9.222 +@inproceedings{theorema00,
   9.223 +  author = "Buchberger, B. and
   9.224 +    Dupre, C. and
   9.225 +    Jebelean, T. and
   9.226 +    Kriftner, F. and
   9.227 +    Nakagawa, K. and
   9.228 +    Vasaru, D. and
   9.229 +    Windsteiger, W.",
   9.230 +  title = "{The Theorema Project: A Progress Report}",
   9.231 +  booktitle = "Symbolic Computation and Automated Reasoning
   9.232 +    (Proceedings of CALCULEMUS 2000, Symposium on the Integration of
   9.233 +    Symbolic Computation and Mechanized Reasoning)",
   9.234 +  editor = "Kerber, M. and
   9.235 +    Kohlhase, M.",
   9.236 +  publisher = "A.K.~Peters",
   9.237 +  address = "Natick, Massachusetts",
   9.238 +  isbn = "1-56881-145-4",
   9.239 +  year = 2000
   9.240 +}
   9.241 +
   9.242 +@inproceedings{logicalaxiom,
   9.243 +	author = {E. Poll and S. Thompson},
   9.244 +	title = {{Adding the axioms to Axiom: Towards a system of automated reasoning in Aldor}},
   9.245 +  booktitle = {Calculemus and Types '98},
   9.246 +	year = {1998},
   9.247 +  place = {Eindhoven, The Netherlands},
   9.248 +	month = {July},
   9.249 +	note = {Also as technical report 6-98, Computing Laboratory, University of Kent}
   9.250 +}
   9.251 +
   9.252 +@InProceedings{pvs,
   9.253 +  author = 	 {Owre, S. and Rajan, S. and Rushby, J. and Shankar, N. and Srivas, M.},
   9.254 +  title = 	 {{PVS}: Combining specification, proof checking, and model checking},
   9.255 +  booktitle = 	 {Computer-Aided Verification},
   9.256 +  pages = 	 {411-414},
   9.257 +  year = 	 {1996},
   9.258 +  editor = 	 {Alur, R. and Henzinger, T.A.},
   9.259 +  organization = {CAV'96},
   9.260 +  annote = 	 {}
   9.261 +}
   9.262 +
   9.263 +@Book{Nipkow-Paulson-Wenzel:2002,
   9.264 +  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
   9.265 +  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
   9.266 +  publisher	= {Springer},
   9.267 +  series	= {LNCS},
   9.268 +  volume	= 2283,
   9.269 +  year		= 2002
   9.270 +}
   9.271 +
   9.272 +@Manual{Huet_all:94,
   9.273 +  author = 	 {Huet, G. and Kahn, G. and and Paulin-Mohring, C.},
   9.274 +  title = 	 {The Coq Proof Assistant},
   9.275 +  institution =  {INRIA-Rocquencourt},
   9.276 +  year = 	 {1994},
   9.277 +  type = 	 {Tutorial},
   9.278 +  number = 	 {Version 5.10},
   9.279 +  address = 	 {CNRS-ENS Lyon},
   9.280 +  status={},source={Theorema},location={-}
   9.281 +}
   9.282 +
   9.283 +@Book{einf-funct-progr,
   9.284 +  author = 	 {Richard Bird and Philip Wadler},
   9.285 +  title = 	 {Introduction to Functional Programming},
   9.286 +  publisher = 	 {Prentice Hall},
   9.287 +  year = 	 1988,
   9.288 +  editor =	 {C. A. R. Hoare},
   9.289 +  series =	 {Prentice Hall International Series in Computer Science},
   9.290 +  address =	 {New York, London, Toronto, Sydney, Tokyo},
   9.291 +  annote =	 {88bok371}
   9.292 +}
   9.293 +@Book{Winkler:96,
   9.294 +  author =       {F. Winkler},
   9.295 +  title =        {{Polynomial Algorithms in Computer Algebra}},
   9.296 +  publisher =    {Springer-Verlag Wien New York},
   9.297 +  year =         {1996}
   9.298 +}
   9.299 +
    10.1 Binary file doc-isac/dmeindl/thol.tex has changed
    11.1 Binary file doc-isac/fig/coqide.png has changed
    12.1 Binary file doc-isac/fig/jrocnik/isac-Ztrans-math-3.png has changed
    13.1 Binary file doc-isac/fig/jrocnik/math-universe-small.png has changed
    14.1 Binary file doc-isac/fig/jrocnik/math-universe.odg has changed
    15.1 Binary file doc-isac/fig/jrocnik/math-universe.png has changed
    16.1 Binary file doc-isac/fig/pgisabelle.png has changed
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/doc-isac/jrocnik/CLEANUP	Tue Sep 17 09:50:52 2013 +0200
    17.3 @@ -0,0 +1,10 @@
    17.4 +rm *.dvi
    17.5 +rm *.bbl
    17.6 +rm *.blg
    17.7 +rm *.aux
    17.8 +rm *.log
    17.9 +rm *.nav
   17.10 +rm *.out
   17.11 +rm *.snm
   17.12 +rm *.toc
   17.13 +rm *~
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/doc-isac/jrocnik/FFT.thy	Tue Sep 17 09:50:52 2013 +0200
    18.3 @@ -0,0 +1,532 @@
    18.4 +(*  Title:      Fast Fourier Transform
    18.5 +    Author:     Clemens Ballarin <ballarin at in.tum.de>, started 12 April 2005
    18.6 +    Maintainer: Clemens Ballarin <ballarin at in.tum.de>
    18.7 +*)
    18.8 +
    18.9 +theory FFT
   18.10 +imports Complex_Main
   18.11 +begin
   18.12 +
   18.13 +text {* We formalise a functional implementation of the FFT algorithm
   18.14 +  over the complex numbers, and its inverse.  Both are shown
   18.15 +  equivalent to the usual definitions
   18.16 +  of these operations through Vandermonde matrices.  They are also
   18.17 +  shown to be inverse to each other, more precisely, that composition
   18.18 +  of the inverse and the transformation yield the identity up to a
   18.19 +  scalar.
   18.20 +
   18.21 +  The presentation closely follows Section 30.2 of Cormen \textit{et
   18.22 +  al.}, \emph{Introduction to Algorithms}, 2nd edition, MIT Press,
   18.23 +  2003. *}
   18.24 +
   18.25 +
   18.26 +section {* Preliminaries *}
   18.27 +
   18.28 +lemma of_nat_cplx:
   18.29 +  "of_nat n = Complex (of_nat n) 0"
   18.30 +  by (induct n) (simp_all add: complex_one_def)
   18.31 +
   18.32 +
   18.33 +text {* The following two lemmas are useful for experimenting with the
   18.34 +  transformations, at a vector length of four. *}
   18.35 +
   18.36 +lemma Ivl4:
   18.37 +  "{0..<4::nat} = {0, 1, 2, 3}"
   18.38 +proof -
   18.39 +  have "{0..<4::nat} = {0..<Suc (Suc (Suc (Suc 0)))}" by (simp add: eval_nat_numeral)
   18.40 +  also have "... = {0, 1, 2, 3}"
   18.41 +    by (simp add: atLeastLessThanSuc eval_nat_numeral insert_commute)
   18.42 +  finally show ?thesis .
   18.43 +qed
   18.44 +
   18.45 +lemma Sum4:
   18.46 +  "(\<Sum>i=0..<4::nat. x i) = x 0 + x 1 + x 2 + x 3"
   18.47 +  by (simp add: Ivl4 eval_nat_numeral)
   18.48 +
   18.49 +
   18.50 +text {* A number of specialised lemmas for the summation operator,
   18.51 +  where the index set is the natural numbers *}
   18.52 +
   18.53 +lemma setsum_add_nat_ivl_singleton:
   18.54 +  assumes less: "m < (n::nat)"
   18.55 +  shows "f m + setsum f {m<..<n} = setsum f {m..<n}"
   18.56 +proof -
   18.57 +  have "f m + setsum f {m<..<n} = setsum f ({m} \<union> {m<..<n})"
   18.58 +    by (simp add: setsum_Un_disjoint ivl_disj_int)
   18.59 +  also from less have "... = setsum f {m..<n}"
   18.60 +    by (simp only: ivl_disj_un)
   18.61 +  finally show ?thesis .
   18.62 +qed
   18.63 +
   18.64 +lemma setsum_add_split_nat_ivl_singleton:
   18.65 +  assumes less: "m < (n::nat)"
   18.66 +    and g: "!!i. [| m < i; i < n |] ==> g i = f i"
   18.67 +  shows "f m + setsum g {m<..<n} = setsum f {m..<n}"
   18.68 +  using less g
   18.69 +  by(simp add: setsum_add_nat_ivl_singleton cong: strong_setsum_cong)
   18.70 +
   18.71 +lemma setsum_add_split_nat_ivl:
   18.72 +  assumes le: "m <= (k::nat)" "k <= n"
   18.73 +    and g: "!!i. [| m <= i; i < k |] ==> g i = f i"
   18.74 +    and h: "!!i. [| k <= i; i < n |] ==> h i = f i"
   18.75 +  shows "setsum g {m..<k} + setsum h {k..<n} = setsum f {m..<n}"
   18.76 +  using le g h by (simp add: setsum_add_nat_ivl cong: strong_setsum_cong)
   18.77 +
   18.78 +lemma ivl_splice_Un:
   18.79 +  "{0..<2*n::nat} = (op * 2 ` {0..<n}) \<union> ((%i. Suc (2*i)) ` {0..<n})"
   18.80 +  apply (unfold image_def Bex_def)
   18.81 +  apply auto
   18.82 +  apply arith
   18.83 +  done
   18.84 +
   18.85 +lemma ivl_splice_Int:
   18.86 +  "(op * 2 ` {0..<n}) \<inter> ((%i. Suc (2*i)) ` {0..<n}) = {}"
   18.87 +  by auto arith
   18.88 +
   18.89 +lemma double_inj_on:
   18.90 +  "inj_on (%i. 2*i::nat) A"
   18.91 +  by (simp add: inj_onI)
   18.92 +
   18.93 +lemma Suc_double_inj_on:
   18.94 +  "inj_on (%i. Suc (2*i)) A"
   18.95 +  by (rule inj_onI) simp
   18.96 +
   18.97 +lemma setsum_splice:
   18.98 +  "(\<Sum>i::nat = 0..<2*n. f i) = (\<Sum>i = 0..<n. f (2*i)) + (\<Sum>i = 0..<n. f (2*i+1))"
   18.99 +proof -
  18.100 +  have "(\<Sum>i::nat = 0..<2*n. f i) =
  18.101 +    setsum f (op * 2 ` {0..<n}) + setsum f ((%i. 2*i+1) ` {0..<n})"
  18.102 +    by (simp add: ivl_splice_Un ivl_splice_Int setsum_Un_disjoint)
  18.103 +  also have "... = (\<Sum>i = 0..<n. f (2*i)) + (\<Sum>i = 0..<n. f (2*i+1))"
  18.104 +    by (simp add: setsum_reindex [OF double_inj_on]
  18.105 +      setsum_reindex [OF Suc_double_inj_on])
  18.106 +  finally show ?thesis .
  18.107 +qed
  18.108 +
  18.109 +
  18.110 +section {* Complex Roots of Unity *}
  18.111 +
  18.112 +text {* The function @{term cis} from the complex library returns the
  18.113 +  point on the unity circle corresponding to the argument angle.  It
  18.114 +  is the base for our definition of @{text root}.  The main property,
  18.115 +  De Moirve's formula is already there in the library. *}
  18.116 +
  18.117 +definition root :: "nat => complex" where
  18.118 +  "root n == cis (2*pi/(real (n::nat)))"
  18.119 +
  18.120 +lemma sin_periodic_pi_diff [simp]: "sin (x - pi) = - sin x"
  18.121 +  by (simp add: sin_diff)
  18.122 +
  18.123 +lemma sin_cos_between_zero_two_pi:
  18.124 +  assumes 0: "0 < x" and pi: "x < 2 * pi"
  18.125 +  shows "sin x \<noteq> 0 \<or> cos x \<noteq> 1"
  18.126 +proof -
  18.127 +  { assume "0 < x" and "x < pi"
  18.128 +    then have "sin x \<noteq> 0" by (auto dest: sin_gt_zero_pi) }
  18.129 +  moreover
  18.130 +  { assume "x = pi"
  18.131 +    then have "cos x \<noteq> 1" by simp }
  18.132 +  moreover
  18.133 +  { assume pi1: "pi < x" and pi2: "x < 2 * pi"
  18.134 +    then have "0 < x - pi" and "x - pi < pi" by arith+
  18.135 +    then have "sin (x - pi) \<noteq> 0" by (auto dest: sin_gt_zero_pi)
  18.136 +    with pi1 pi2 have "sin x \<noteq> 0" by simp }
  18.137 +  ultimately show ?thesis using 0 pi by arith
  18.138 +qed
  18.139 +
  18.140 +
  18.141 +subsection {* Basic Lemmas *}
  18.142 +
  18.143 +lemma root_nonzero:
  18.144 +  "root n ~= 0"
  18.145 +  apply (unfold root_def)
  18.146 +  apply (unfold cis_def)
  18.147 +  apply auto
  18.148 +  apply (drule sin_zero_abs_cos_one)
  18.149 +  apply arith
  18.150 +  done
  18.151 +
  18.152 +lemma root_unity:
  18.153 +  "root n ^ n = 1"
  18.154 +  apply (unfold root_def)
  18.155 +  apply (simp add: DeMoivre)
  18.156 +  apply (simp add: cis_def)
  18.157 +  done
  18.158 +
  18.159 +lemma root_cancel:
  18.160 +  "0 < d ==> root (d * n) ^ (d * k) = root n ^ k"
  18.161 +  apply (unfold root_def)
  18.162 +  apply (simp add: DeMoivre)
  18.163 +  done
  18.164 +
  18.165 +lemma root_summation:
  18.166 +  assumes k: "0 < k" "k < n"
  18.167 +  shows "(\<Sum>i=0..<n. (root n ^ k) ^ i) = 0"
  18.168 +proof -
  18.169 +  from k have real0: "0 < real k * (2 * pi) / real n"
  18.170 +    by (simp add: zero_less_divide_iff
  18.171 +      mult_strict_right_mono [where a = 0, simplified])
  18.172 +  from k mult_strict_right_mono [where a = "real k" and
  18.173 +    b = "real n" and c = "2 * pi / real n", simplified]
  18.174 +  have realk: "real k * (2 * pi) / real n < 2 * pi"
  18.175 +    by (simp add: zero_less_divide_iff)
  18.176 +  txt {* Main part of the proof *}
  18.177 +  have "(\<Sum>i=0..<n. (root n ^ k) ^ i) =
  18.178 +    ((root n ^ k) ^ n - 1) / (root n ^ k - 1)"
  18.179 +    apply (rule geometric_sum)
  18.180 +    apply (unfold root_def)
  18.181 +    apply (simp add: DeMoivre)
  18.182 +    using real0 realk sin_cos_between_zero_two_pi 
  18.183 +    apply (auto simp add: cis_def complex_one_def)
  18.184 +    done
  18.185 +  also have "... = ((root n ^ n) ^ k - 1) / (root n ^ k - 1)"
  18.186 +    by (simp add: power_mult [THEN sym] mult_ac)
  18.187 +  also have "... = 0"
  18.188 +    by (simp add: root_unity)
  18.189 +  finally show ?thesis .
  18.190 +qed
  18.191 +
  18.192 +lemma root_summation_inv:
  18.193 +  assumes k: "0 < k" "k < n"
  18.194 +  shows "(\<Sum>i=0..<n. ((1 / root n) ^ k) ^ i) = 0"
  18.195 +proof -
  18.196 +  from k have real0: "0 < real k * (2 * pi) / real n"
  18.197 +    by (simp add: zero_less_divide_iff
  18.198 +      mult_strict_right_mono [where a = 0, simplified])
  18.199 +  from k mult_strict_right_mono [where a = "real k" and
  18.200 +    b = "real n" and c = "2 * pi / real n", simplified]
  18.201 +  have realk: "real k * (2 * pi) / real n < 2 * pi"
  18.202 +    by (simp add: zero_less_divide_iff)
  18.203 +  txt {* Main part of the proof *}
  18.204 +  have "(\<Sum>i=0..<n. ((1 / root n) ^ k) ^ i) =
  18.205 +    (((1 / root n) ^ k) ^ n - 1) / ((1 / root n) ^ k - 1)"
  18.206 +    apply (rule geometric_sum)
  18.207 +    apply (simp add: nonzero_inverse_eq_divide [THEN sym] root_nonzero)
  18.208 +    apply (unfold root_def)
  18.209 +    apply (simp add: DeMoivre)
  18.210 +    using real0 realk sin_cos_between_zero_two_pi
  18.211 +    apply (auto simp add: cis_def complex_one_def)
  18.212 +    done
  18.213 +  also have "... = (((1 / root n) ^ n) ^ k - 1) / ((1 / root n) ^ k - 1)"
  18.214 +    by (simp add: power_mult [THEN sym] mult_ac)
  18.215 +  also have "... = 0"
  18.216 +    by (simp add: power_divide root_unity)
  18.217 +  finally show ?thesis .
  18.218 +qed
  18.219 +
  18.220 +lemma root0 [simp]:
  18.221 +  "root 0 = 1"
  18.222 +  by (simp add: root_def cis_def)
  18.223 +
  18.224 +lemma root1 [simp]:
  18.225 +  "root 1 = 1"
  18.226 +  by (simp add: root_def cis_def)
  18.227 +
  18.228 +lemma root2 [simp]:
  18.229 +  "root 2 = Complex -1 0"
  18.230 +  by (simp add: root_def cis_def)
  18.231 +
  18.232 +lemma root4 [simp]:
  18.233 +  "root 4 = ii"
  18.234 +  by (simp add: root_def cis_def)
  18.235 +
  18.236 +
  18.237 +subsection {* Derived Lemmas *}
  18.238 +
  18.239 +lemma root_cancel1:
  18.240 +  "root (2 * m) ^ (i * (2 * j)) = root m ^ (i * j)"
  18.241 +proof -
  18.242 +  have "root (2 * m) ^ (i * (2 * j)) = root (2 * m) ^ (2 * (i * j))"
  18.243 +    by (simp add: mult_ac)
  18.244 +  also have "... = root m ^ (i * j)"
  18.245 +    by (simp add: root_cancel)
  18.246 +  finally show ?thesis .
  18.247 +qed
  18.248 +
  18.249 +lemma root_cancel2:
  18.250 +  "0 < n ==> root (2 * n) ^ n = - 1"
  18.251 +  txt {* Note the space between @{text "-"} and @{text "1"}. *}
  18.252 +  using root_cancel [where n = 2 and k = 1]
  18.253 +  apply (simp only: mult_ac)
  18.254 +  apply (simp add: complex_one_def)
  18.255 +  done
  18.256 +
  18.257 +
  18.258 +section {* Discrete Fourier Transformation *}
  18.259 +
  18.260 +text {*
  18.261 +  We define operations  @{text DFT} and @{text IDFT} for the discrete
  18.262 +  Fourier Transform and its inverse.  Vectors are simply functions of
  18.263 +  type @{text "nat => complex"}. *}
  18.264 +
  18.265 +text {*
  18.266 +  @{text "DFT n a"} is the transform of vector @{text a}
  18.267 +  of length @{text n}, @{text IDFT} its inverse. *}
  18.268 +
  18.269 +definition DFT :: "nat => (nat => complex) => (nat => complex)" where
  18.270 +  "DFT n a == (%i. \<Sum>j=0..<n. (root n) ^ (i * j) * (a j))"
  18.271 +
  18.272 +definition IDFT :: "nat => (nat => complex) => (nat => complex)" where
  18.273 +  "IDFT n a == (%i. (\<Sum>k=0..<n. (a k) / (root n) ^ (i * k)))"
  18.274 +
  18.275 +schematic_lemma "map (DFT 4 a) [0, 1, 2, 3] = ?x"
  18.276 +  by(simp add: DFT_def Sum4)
  18.277 +
  18.278 +text {* Lemmas for the correctness proof. *}
  18.279 +
  18.280 +lemma DFT_lower:
  18.281 +  "DFT (2 * m) a i =
  18.282 +  DFT m (%i. a (2 * i)) i +
  18.283 +  (root (2 * m)) ^ i * DFT m (%i. a (2 * i + 1)) i"
  18.284 +proof (unfold DFT_def)
  18.285 +  have "(\<Sum>j = 0..<2 * m. root (2 * m) ^ (i * j) * a j) =
  18.286 +    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j)) * a (2 * j)) +
  18.287 +    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j + 1)) * a (2 * j + 1))"
  18.288 +    (is "?s = _")
  18.289 +    by (simp add: setsum_splice)
  18.290 +  also have "... = (\<Sum>j = 0..<m. root m ^ (i * j) * a (2 * j)) +
  18.291 +    root (2 * m) ^ i *
  18.292 +    (\<Sum>j = 0..<m. root m ^ (i * j) * a (2 * j + 1))"
  18.293 +    (is "_ = ?t")
  18.294 +    txt {* First pair of sums *}
  18.295 +    apply (simp add: root_cancel1)
  18.296 +    txt {* Second pair of sums *}
  18.297 +    apply (simp add: setsum_right_distrib)
  18.298 +    apply (simp add: power_add)
  18.299 +    apply (simp add: root_cancel1)
  18.300 +    apply (simp add: mult_ac)
  18.301 +    done
  18.302 +  finally show "?s = ?t" .
  18.303 +qed
  18.304 +
  18.305 +lemma DFT_upper:
  18.306 +  assumes mbound: "0 < m" and ibound: "m <= i"
  18.307 +  shows "DFT (2 * m) a i =
  18.308 +    DFT m (%i. a (2 * i)) (i - m) -
  18.309 +    root (2 * m) ^ (i - m) * DFT m (%i. a (2 * i + 1)) (i - m)"
  18.310 +proof (unfold DFT_def)
  18.311 +  have "(\<Sum>j = 0..<2 * m. root (2 * m) ^ (i * j) * a j) =
  18.312 +    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j)) * a (2 * j)) +
  18.313 +    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j + 1)) * a (2 * j + 1))"
  18.314 +    (is "?s = _")
  18.315 +    by (simp add: setsum_splice)
  18.316 +  also have "... =
  18.317 +    (\<Sum>j = 0..<m. root m ^ ((i - m) * j) * a (2 * j)) -
  18.318 +    root (2 * m) ^ (i - m) *
  18.319 +    (\<Sum>j = 0..<m. root m ^ ((i - m) * j) * a (2 * j + 1))"
  18.320 +    (is "_ = ?t")
  18.321 +    txt {* First pair of sums *}
  18.322 +    apply (simp add: root_cancel1)
  18.323 +    apply (simp add: root_unity ibound root_nonzero power_diff power_mult)
  18.324 +    txt {* Second pair of sums *}
  18.325 +    apply (simp add: mbound root_cancel2)
  18.326 +    apply (simp add: setsum_right_distrib)
  18.327 +    apply (simp add: power_add)
  18.328 +    apply (simp add: root_cancel1)
  18.329 +    apply (simp add: power_mult)
  18.330 +    apply (simp add: mult_ac)
  18.331 +    done
  18.332 +  finally show "?s = ?t" .
  18.333 +qed
  18.334 +
  18.335 +lemma IDFT_lower:
  18.336 +  "IDFT (2 * m) a i =
  18.337 +  IDFT m (%i. a (2 * i)) i +
  18.338 +  (1 / root (2 * m)) ^ i * IDFT m (%i. a (2 * i + 1)) i"
  18.339 +proof (unfold IDFT_def)
  18.340 +  have "(\<Sum>j = 0..<2 * m. a j / root (2 * m) ^ (i * j)) =
  18.341 +    (\<Sum>j = 0..<m. a (2 * j) / root (2 * m) ^ (i * (2 * j))) +
  18.342 +    (\<Sum>j = 0..<m. a (2 * j + 1) / root (2 * m) ^ (i * (2 * j + 1)))"
  18.343 +    (is "?s = _")
  18.344 +    by (simp add: setsum_splice)
  18.345 +  also have "... = (\<Sum>j = 0..<m. a (2 * j) / root m ^ (i * j)) +
  18.346 +    (1 / root (2 * m)) ^ i *
  18.347 +    (\<Sum>j = 0..<m. a (2 * j + 1) / root m ^ (i * j))"
  18.348 +    (is "_ = ?t")
  18.349 +    txt {* First pair of sums *}
  18.350 +    apply (simp add: root_cancel1)
  18.351 +    txt {* Second pair of sums *}
  18.352 +    apply (simp add: setsum_right_distrib)
  18.353 +    apply (simp add: power_add)
  18.354 +    apply (simp add: nonzero_power_divide root_nonzero)
  18.355 +    apply (simp add: root_cancel1)
  18.356 +    done
  18.357 +  finally show "?s = ?t" .
  18.358 +qed
  18.359 +
  18.360 +lemma IDFT_upper:
  18.361 +  assumes mbound: "0 < m" and ibound: "m <= i"
  18.362 +  shows "IDFT (2 * m) a i =
  18.363 +    IDFT m (%i. a (2 * i)) (i - m) -
  18.364 +    (1 / root (2 * m)) ^ (i - m) *
  18.365 +    IDFT m (%i. a (2 * i + 1)) (i - m)"
  18.366 +proof (unfold IDFT_def)
  18.367 +  have "(\<Sum>j = 0..<2 * m. a j / root (2 * m) ^ (i * j)) =
  18.368 +    (\<Sum>j = 0..<m. a (2 * j) / root (2 * m) ^ (i * (2 * j))) +
  18.369 +    (\<Sum>j = 0..<m. a (2 * j + 1) / root (2 * m) ^ (i * (2 * j + 1)))"
  18.370 +    (is "?s = _")
  18.371 +    by (simp add: setsum_splice)
  18.372 +  also have "... =
  18.373 +    (\<Sum>j = 0..<m. a (2 * j) / root m ^ ((i - m) * j)) -
  18.374 +    (1 / root (2 * m)) ^ (i - m) *
  18.375 +    (\<Sum>j = 0..<m. a (2 * j + 1) / root m ^ ((i - m) * j))"
  18.376 +    (is "_ = ?t")
  18.377 +    txt {* First pair of sums *}
  18.378 +    apply (simp add: root_cancel1)
  18.379 +    apply (simp add: root_unity ibound root_nonzero power_diff power_mult)
  18.380 +    txt {* Second pair of sums *}
  18.381 +    apply (simp add: nonzero_power_divide root_nonzero)
  18.382 +    apply (simp add: mbound root_cancel2)
  18.383 +    apply (simp add: setsum_divide_distrib)
  18.384 +    apply (simp add: power_add)
  18.385 +    apply (simp add: root_cancel1)
  18.386 +    apply (simp add: power_mult)
  18.387 +    apply (simp add: mult_ac)
  18.388 +    done
  18.389 +  finally show "?s = ?t" .
  18.390 +qed
  18.391 +
  18.392 +text {* @{text DFT} und @{text IDFT} are inverses. *}
  18.393 +
  18.394 +declare divide_divide_eq_right [simp del]
  18.395 +  divide_divide_eq_left [simp del]
  18.396 +
  18.397 +lemma power_diff_inverse:
  18.398 +  assumes nz: "(a::'a::field) ~= 0"
  18.399 +  shows "m <= n ==> (inverse a) ^ (n-m) = (a^m) / (a^n)"
  18.400 +  apply (induct n m rule: diff_induct)
  18.401 +    apply (simp add: nonzero_power_inverse
  18.402 +      nonzero_inverse_eq_divide [THEN sym] nz)
  18.403 +   apply simp
  18.404 +  apply (simp add: nz)
  18.405 +  done
  18.406 +
  18.407 +lemma power_diff_rev_if:
  18.408 +  assumes nz: "(a::'a::field) ~= 0"
  18.409 +  shows "(a^m) / (a^n) = (if n <= m then a ^ (m-n) else (1/a) ^ (n-m))"
  18.410 +proof (cases "n <= m")
  18.411 +  case True with nz show ?thesis
  18.412 +    by (simp add: power_diff)
  18.413 +next
  18.414 +  case False with nz show ?thesis
  18.415 +    by (simp add: power_diff_inverse nonzero_inverse_eq_divide [THEN sym])
  18.416 +qed
  18.417 +
  18.418 +lemma power_divides_special:
  18.419 +  "(a::'a::field) ~= 0 ==>
  18.420 +  a ^ (i * j) / a ^ (k * i) = (a ^ j / a ^ k) ^ i"
  18.421 +  by (simp add: nonzero_power_divide power_mult [THEN sym] mult_ac)
  18.422 +
  18.423 +theorem DFT_inverse:
  18.424 +  assumes i_less: "i < n"
  18.425 +  shows  "IDFT n (DFT n a) i = of_nat n * a i"
  18.426 +  using [[linarith_split_limit = 0]]
  18.427 +  apply (unfold DFT_def IDFT_def)
  18.428 +  apply (simp add: setsum_divide_distrib)
  18.429 +  apply (subst setsum_commute)
  18.430 +  apply (simp only: times_divide_eq_left [THEN sym])
  18.431 +  apply (simp only: power_divides_special [OF root_nonzero])
  18.432 +  apply (simp add: power_diff_rev_if root_nonzero)
  18.433 +  apply (simp add: setsum_divide_distrib [THEN sym]
  18.434 +    setsum_left_distrib [THEN sym])
  18.435 +  proof -
  18.436 +    from i_less have i_diff: "!!k. i - k < n" by arith
  18.437 +    have diff_i: "!!k. k < n ==> k - i < n" by arith
  18.438 +
  18.439 +    let ?sum = "%i j n. setsum (op ^ (if i <= j then root n ^ (j - i)
  18.440 +                  else (1 / root n) ^ (i - j))) {0..<n} * a j"
  18.441 +    let ?sum1 = "%i j n. setsum (op ^ (root n ^ (j - i))) {0..<n} * a j"
  18.442 +    let ?sum2 = "%i j n. setsum (op ^ ((1 / root n) ^ (i - j))) {0..<n} * a j"
  18.443 +
  18.444 +    from i_less have "(\<Sum>j = 0..<n. ?sum i j n) =
  18.445 +      (\<Sum>j = 0..<i. ?sum2 i j n) + (\<Sum>j = i..<n. ?sum1 i j n)"
  18.446 +      (is "?s = _")
  18.447 +      by (simp add: root_summation_inv nat_dvd_not_less
  18.448 +        setsum_add_split_nat_ivl [where f = "%j. ?sum i j n"])
  18.449 +    also from i_less i_diff
  18.450 +    have "... = (\<Sum>j = i..<n. ?sum1 i j n)"
  18.451 +      by (simp add: root_summation_inv nat_dvd_not_less)
  18.452 +    also from i_less have "... =
  18.453 +      (\<Sum>j\<in>{i} \<union> {i<..<n}. ?sum1 i j n)"
  18.454 +      by (simp only: ivl_disj_un)
  18.455 +    also have "... =
  18.456 +      (?sum1 i i n + (\<Sum>j\<in>{i<..<n}. ?sum1 i j n))"
  18.457 +      by (simp add: setsum_Un_disjoint ivl_disj_int)
  18.458 +    also from i_less diff_i have "... = ?sum1 i i n"
  18.459 +      by (simp add: root_summation nat_dvd_not_less)
  18.460 +    also from i_less have "... = of_nat n * a i" (is "_ = ?t")
  18.461 +      by (simp add: of_nat_cplx)
  18.462 +    finally show "?s = ?t" .
  18.463 +  qed
  18.464 +
  18.465 +
  18.466 +section {* Discrete, Fast Fourier Transformation *}
  18.467 +
  18.468 +text {* @{text "FFT k a"} is the transform of vector @{text a}
  18.469 +  of length @{text "2 ^ k"}, @{text IFFT} its inverse. *}
  18.470 +
  18.471 +primrec FFT :: "nat => (nat => complex) => (nat => complex)" where
  18.472 +  "FFT 0 a = a"
  18.473 +| "FFT (Suc k) a =
  18.474 +     (let (x, y) = (FFT k (%i. a (2*i)), FFT k (%i. a (2*i+1)))
  18.475 +      in (%i. if i < 2^k
  18.476 +            then x i + (root (2 ^ (Suc k))) ^ i * y i
  18.477 +            else x (i- 2^k) - (root (2 ^ (Suc k))) ^ (i- 2^k) * y (i- 2^k)))"
  18.478 +
  18.479 +primrec IFFT :: "nat => (nat => complex) => (nat => complex)" where
  18.480 +  "IFFT 0 a = a"
  18.481 +| "IFFT (Suc k) a =
  18.482 +     (let (x, y) = (IFFT k (%i. a (2*i)), IFFT k (%i. a (2*i+1)))
  18.483 +      in (%i. if i < 2^k
  18.484 +            then x i + (1 / root (2 ^ (Suc k))) ^ i * y i
  18.485 +            else x (i - 2^k) -
  18.486 +              (1 / root (2 ^ (Suc k))) ^ (i - 2^k) * y (i - 2^k)))"
  18.487 +
  18.488 +text {* Finally, for vectors of length @{text "2 ^ k"},
  18.489 +  @{text DFT} and @{text FFT}, and @{text IDFT} and
  18.490 +  @{text IFFT} are equivalent. *}
  18.491 +
  18.492 +theorem DFT_FFT:
  18.493 +  "!!a i. i < 2 ^ k ==> DFT (2 ^ k) a i = FFT k a i"
  18.494 +proof (induct k)
  18.495 +  case 0
  18.496 +  then show ?case by (simp add: DFT_def)
  18.497 +next
  18.498 +  case (Suc k)
  18.499 +  assume i: "i < 2 ^ Suc k"
  18.500 +  show ?case proof (cases "i < 2 ^ k")
  18.501 +    case True
  18.502 +    then show ?thesis apply simp apply (simp add: DFT_lower)
  18.503 +      apply (simp add: Suc) done
  18.504 +  next
  18.505 +    case False
  18.506 +    from i have "i - 2 ^ k < 2 ^ k" by simp
  18.507 +    with False i show ?thesis apply simp apply (simp add: DFT_upper)
  18.508 +      apply (simp add: Suc) done
  18.509 +  qed
  18.510 +qed
  18.511 +
  18.512 +theorem IDFT_IFFT:
  18.513 +  "!!a i. i < 2 ^ k ==> IDFT (2 ^ k) a i = IFFT k a i"
  18.514 +proof (induct k)
  18.515 +  case 0
  18.516 +  then show ?case by (simp add: IDFT_def)
  18.517 +next
  18.518 +  case (Suc k)
  18.519 +  assume i: "i < 2 ^ Suc k"
  18.520 +  show ?case proof (cases "i < 2 ^ k")
  18.521 +    case True
  18.522 +    then show ?thesis apply simp apply (simp add: IDFT_lower)
  18.523 +      apply (simp add: Suc) done
  18.524 +  next
  18.525 +    case False
  18.526 +    from i have "i - 2 ^ k < 2 ^ k" by simp
  18.527 +    with False i show ?thesis apply simp apply (simp add: IDFT_upper)
  18.528 +      apply (simp add: Suc) done
  18.529 +  qed
  18.530 +qed
  18.531 +
  18.532 +schematic_lemma "map (FFT (Suc (Suc 0)) a) [0, 1, 2, 3] = ?x"
  18.533 +  by simp
  18.534 +
  18.535 +end
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/doc-isac/jrocnik/Makefile	Tue Sep 17 09:50:52 2013 +0200
    19.3 @@ -0,0 +1,81 @@
    19.4 +## targets
    19.5 +
    19.6 +default: thesis clean
    19.7 +all: thesis docu present clean
    19.8 +thesis: thesis clean
    19.9 +docu: docu clean
   19.10 +present: present1 present2 clean
   19.11 +cadgme: cadgme clean
   19.12 +
   19.13 +
   19.14 +## dependencies
   19.15 +
   19.16 +
   19.17 +## settings
   19.18 +
   19.19 +LATEX = latex
   19.20 +PDFLATEX = pdflatex
   19.21 +BIBTEX = bibtex
   19.22 +RAIL = rail -a
   19.23 +SEDINDEX = ./sedindex
   19.24 +FIXBOOKMARKS = perl -pi fixbookmarks.pl
   19.25 +
   19.26 +DEFAULT_GARBAGE = *.aux *.log *.toc *.idx *.rai *.rao *.bbl *.ind *.ilg *.blg *.out *.lof
   19.27 +DEFAULT_OUTPUT = *.dvi jrocnik_present1.pdf jrocnik_present2.pdf jrocnik_bakk.pdf *.ps
   19.28 +GARBAGE =
   19.29 +OUTPUT =
   19.30 +
   19.31 +## special targets
   19.32 +
   19.33 +.DELETE_ON_ERROR:
   19.34 +
   19.35 +## actions
   19.36 +
   19.37 +nothing:
   19.38 +
   19.39 +clean:
   19.40 +	@rm -f $(DEFAULT_GARBAGE) $(GARBAGE)
   19.41 +
   19.42 +mrproper:
   19.43 +	@rm -f $(DEFAULT_GARBAGE) $(DEFAULT_OUTPUT) $(GARBAGE) $(OUTPUT)
   19.44 +
   19.45 +THESIS_NAME = jrocnik_bakk
   19.46 +THESIS_FILES = jrocnik_bakk.tex
   19.47 +
   19.48 +DOCU_NAME = Inverse_Z_Transform/doc/Inverse_Z_Transform
   19.49 +DOCU_FILES = Inverse_Z_Transform/doc/root.tex 
   19.50 +
   19.51 +PRESENT1_NAME = jrocnik_present1
   19.52 +PRESENT1_FILES = jrocnik_present1.tex
   19.53 +
   19.54 +PRESENT2_NAME = jrocnik_present2
   19.55 +PRESENT2_FILES = jrocnik_present2.tex
   19.56 +
   19.57 +CADGME_NAME = jrocnik_cadgme
   19.58 +CADGME_FILES = cadgme.tex
   19.59 +
   19.60 +thesis: $(THESIS_NAME).pdf
   19.61 +
   19.62 +$(THESIS_NAME).pdf: $(THESIS_FILES)
   19.63 +	$(PDFLATEX) $(THESIS_NAME)
   19.64 +	$(BIBTEX) $(THESIS_NAME)
   19.65 +	$(PDFLATEX) $(THESIS_NAME)
   19.66 +	$(PDFLATEX) $(THESIS_NAME)
   19.67 +  
   19.68 +present1: $(PRESENT1_NAME).pdf
   19.69 +
   19.70 +$(PRESENT1_NAME).pdf: $(PRESENT1_FILES)
   19.71 +	$(PDFLATEX) $(PRESENT1_NAME)
   19.72 +	$(PDFLATEX) $(PRESENT1_NAME)
   19.73 +  
   19.74 +present2: $(PRESENT2_NAME).pdf
   19.75 +
   19.76 +$(PRESENT2_NAME).pdf: $(PRESENT2_FILES)
   19.77 +	$(PDFLATEX) $(PRESENT2_NAME)
   19.78 +	$(PDFLATEX) $(PRESENT2_NAME)
   19.79 +  
   19.80 +cadgme: $(CADGME_NAME).pdf
   19.81 +
   19.82 +$(CADGME_NAME).pdf: $(CADGME_FILES)
   19.83 +	$(PDFLATEX) $(CADGME_NAME)
   19.84 +	$(PDFLATEX) $(CADGME_NAME)
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/doc-isac/jrocnik/TUGlogo.pdf	Tue Sep 17 09:50:52 2013 +0200
    20.3 @@ -0,0 +1,219 @@
    20.4 +%PDF-1.3
    20.5 +%
    20.6 +2 0 obj
    20.7 +<<
    20.8 +/Length 2930
    20.9 +>>
   20.10 +stream
   20.11 +0 0.957 0.569 0 k
   20.12 +/GS1 gs
   20.13 +0 31.119 20.745 -20.746 re
   20.14 +f
   20.15 +22.819 31.119 20.746 -20.746 re
   20.16 +f
   20.17 +q
   20.18 +1 i 
   20.19 +0 41.492 112.876 -41.432 re
   20.20 +W n
   20.21 +45.641 31.119 20.744 -20.746 re
   20.22 +f
   20.23 +10.372 20.746 20.747 -20.686 re
   20.24 +f
   20.25 +Q
   20.26 +35.268 41.492 20.744 -20.746 re
   20.27 +f
   20.28 +0.941 0.82 0.808 0.894 k
   20.29 +1 i 
   20.30 +75.104 27.791 m
   20.31 +68.462 27.791 l
   20.32 +68.462 31.11 l
   20.33 +85.581 31.11 l
   20.34 +85.581 27.791 l
   20.35 +78.94 27.791 l
   20.36 +78.94 10.417 l
   20.37 +75.104 10.417 l
   20.38 +75.104 27.791 l
   20.39 +f
   20.40 +q
   20.41 +0 41.492 112.876 -41.432 re
   20.42 +W n
   20.43 +104.828 18.021 m
   20.44 +104.828 16.774 104.604 15.649 104.156 14.646 c
   20.45 +103.708 13.643 103.097 12.79 102.321 12.09 c
   20.46 +101.546 11.387 100.631 10.848 99.57 10.469 c
   20.47 +98.511 10.088 97.359 9.898 96.115 9.898 c
   20.48 +94.873 9.898 93.722 10.088 92.661 10.469 c
   20.49 +91.601 10.848 90.678 11.387 89.895 12.09 c
   20.50 +89.109 12.79 88.497 13.643 88.061 14.646 c
   20.51 +87.621 15.649 87.403 16.774 87.403 18.021 c
   20.52 +87.403 31.11 l
   20.53 +91.241 31.11 l
   20.54 +91.241 18.153 l
   20.55 +91.241 17.648 91.321 17.117 91.485 16.562 c
   20.56 +91.648 16.008 91.919 15.497 92.298 15.029 c
   20.57 +92.676 14.563 93.177 14.178 93.801 13.877 c
   20.58 +94.423 13.576 95.194 13.425 96.115 13.425 c
   20.59 +97.035 13.425 97.808 13.576 98.431 13.877 c
   20.60 +99.054 14.178 99.556 14.563 99.934 15.029 c
   20.61 +100.312 15.497 100.582 16.008 100.746 16.562 c
   20.62 +100.909 17.117 100.991 17.648 100.991 18.153 c
   20.63 +100.991 31.11 l
   20.64 +104.828 31.11 l
   20.65 +104.828 18.021 l
   20.66 +f
   20.67 +83.257 7.566 m
   20.68 +82.496 7.895 81.511 8.052 80.723 8.052 c
   20.69 +78.43 8.052 77.162 6.609 77.162 4.734 c
   20.70 +77.162 2.873 78.401 1.471 80.497 1.471 c
   20.71 +81.032 1.471 81.456 1.523 81.793 1.602 c
   20.72 +81.793 3.987 l
   20.73 +79.71 3.987 l
   20.74 +79.71 5.43 l
   20.75 +83.679 5.43 l
   20.76 +83.679 0.5 l
   20.77 +82.638 0.238 81.553 0.028 80.497 0.028 c
   20.78 +77.316 0.028 75.106 1.51 75.106 4.604 c
   20.79 +75.106 7.737 77.162 9.494 80.497 9.494 c
   20.80 +81.638 9.494 82.538 9.35 83.383 9.113 c
   20.81 +83.257 7.566 l
   20.82 +f
   20.83 +85.62 6.938 m
   20.84 +87.296 6.938 l
   20.85 +87.296 5.403 l
   20.86 +87.324 5.403 l
   20.87 +87.408 6.033 88.182 7.095 89.308 7.095 c
   20.88 +89.491 7.095 89.689 7.095 89.885 7.042 c
   20.89 +89.885 5.272 l
   20.90 +89.717 5.363 89.379 5.416 89.04 5.416 c
   20.91 +87.507 5.416 87.507 3.633 87.507 2.664 c
   20.92 +87.507 0.186 l
   20.93 +85.62 0.186 l
   20.94 +85.62 6.938 l
   20.95 +f
   20.96 +93.587 1.312 m
   20.97 +94.164 1.312 94.614 1.549 94.909 1.916 c
   20.98 +95.219 2.296 95.304 2.781 95.304 3.306 c
   20.99 +94.487 3.306 l
  20.100 +93.644 3.306 92.391 3.175 92.391 2.139 c
  20.101 +92.391 1.563 92.911 1.312 93.587 1.312 c
  20.102 +h
  20.103 +91.376 6.583 m
  20.104 +92.107 6.898 93.094 7.095 93.896 7.095 c
  20.105 +96.105 7.095 97.021 6.242 97.021 4.249 c
  20.106 +97.021 3.384 l
  20.107 +97.021 2.703 97.035 2.191 97.049 1.693 c
  20.108 +97.063 1.182 97.091 0.71 97.134 0.186 c
  20.109 +95.473 0.186 l
  20.110 +95.402 0.539 95.402 0.985 95.389 1.195 c
  20.111 +95.359 1.195 l
  20.112 +94.924 0.448 93.979 0.028 93.122 0.028 c
  20.113 +91.842 0.028 90.588 0.749 90.588 2.034 c
  20.114 +90.588 3.043 91.108 3.633 91.827 3.961 c
  20.115 +92.546 4.289 93.474 4.355 94.263 4.355 c
  20.116 +95.304 4.355 l
  20.117 +95.304 5.442 94.783 5.81 93.671 5.81 c
  20.118 +92.869 5.81 92.066 5.522 91.434 5.076 c
  20.119 +91.376 6.583 l
  20.120 +f
  20.121 +98.569 6.938 m
  20.122 +104.312 6.938 l
  20.123 +104.312 5.495 l
  20.124 +100.707 1.549 l
  20.125 +104.438 1.549 l
  20.126 +104.438 0.186 l
  20.127 +98.414 0.186 l
  20.128 +98.414 1.615 l
  20.129 +102.087 5.574 l
  20.130 +98.569 5.574 l
  20.131 +98.569 6.938 l
  20.132 +f
  20.133 +0 0.957 0.569 0 k
  20.134 +105.965 6.911 6.911 -6.851 re
  20.135 +f
  20.136 +Q
  20.137 +endstream
  20.138 +endobj
  20.139 +3 0 obj
  20.140 +<<
  20.141 +/ProcSet [/PDF ]
  20.142 +/ExtGState <<
  20.143 +/GS1 4 0 R
  20.144 +>>
  20.145 +>>
  20.146 +endobj
  20.147 +4 0 obj
  20.148 +<<
  20.149 +/Type /ExtGState
  20.150 +/SA false
  20.151 +/SM 0.02
  20.152 +/OP false
  20.153 +/op false
  20.154 +/OPM 1
  20.155 +/BG2 /Default
  20.156 +/UCR2 /Default
  20.157 +/HT /Default
  20.158 +/TR2 /Default
  20.159 +>>
  20.160 +endobj
  20.161 +1 0 obj
  20.162 +<<
  20.163 +/Type /Page
  20.164 +/Parent 5 0 R
  20.165 +/Resources 3 0 R
  20.166 +/Contents 2 0 R
  20.167 +>>
  20.168 +endobj
  20.169 +6 0 obj
  20.170 +<<
  20.171 +/S /D
  20.172 +>>
  20.173 +endobj
  20.174 +7 0 obj
  20.175 +<<
  20.176 +/Nums [0 6 0 R ]
  20.177 +>>
  20.178 +endobj
  20.179 +5 0 obj
  20.180 +<<
  20.181 +/Type /Pages
  20.182 +/Kids [1 0 R]
  20.183 +/Count 1
  20.184 +/MediaBox [0 0 113 42]
  20.185 +>>
  20.186 +endobj
  20.187 +8 0 obj
  20.188 +<<
  20.189 +/CreationDate (D:20060111234722+13'00')
  20.190 +/ModDate (D:20060111234722+13'00')
  20.191 +/Producer (PSNormalizer.framework)
  20.192 +>>
  20.193 +endobj
  20.194 +9 0 obj
  20.195 +<<
  20.196 +/Type /Catalog
  20.197 +/Pages 5 0 R
  20.198 +/PageLabels 7 0 R
  20.199 +>>
  20.200 +endobj
  20.201 +xref
  20.202 +0 10
  20.203 +0000000000 65535 f 
  20.204 +0000003204 00000 n 
  20.205 +0000000016 00000 n 
  20.206 +0000002998 00000 n 
  20.207 +0000003064 00000 n 
  20.208 +0000003349 00000 n 
  20.209 +0000003284 00000 n 
  20.210 +0000003311 00000 n 
  20.211 +0000003429 00000 n 
  20.212 +0000003560 00000 n 
  20.213 +trailer
  20.214 +<<
  20.215 +/Size 10
  20.216 +/Root 9 0 R
  20.217 +/Info 8 0 R
  20.218 +/ID [<99444215e2a4a31d5c4ca09b38102d5e><99444215e2a4a31d5c4ca09b38102d5e>]
  20.219 +>>
  20.220 +startxref
  20.221 +3627
  20.222 +%%EOF
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/doc-isac/jrocnik/Test_Complex.thy	Tue Sep 17 09:50:52 2013 +0200
    21.3 @@ -0,0 +1,113 @@
    21.4 +theory Test_Complex imports Isac begin
    21.5 +
    21.6 +section {*terms and operations*}
    21.7 +ML {*
    21.8 +  print_depth 999; @{term "Complex 1 (2::real)"};
    21.9 +*}
   21.10 +ML {*
   21.11 +@{term "Complex 1 2 + Complex 3 4"};
   21.12 +print_depth 999; str2term "Complex 1 2 + Complex 3 4"; print_depth 999;
   21.13 +*}
   21.14 +ML {*
   21.15 +@{term "Complex 1 2 * Complex 3 4"};
   21.16 +@{term "Complex 1 2 - Complex 3 4"};
   21.17 +@{term "Complex 1 2 / Complex 3 4"};
   21.18 +(*@{term "Complex 1 2 ^ Complex 3 4"};
   21.19 +  Type unification failed: Clash of types "complex" and "nat"
   21.20 +  Operator:  op ^ (Complex 1 2) :: nat \<Rightarrow> complex
   21.21 +  Operand:   Complex 3 4 :: complex*)
   21.22 +*}
   21.23 +ML {*
   21.24 +term2str @{term "Complex 1 2 + Complex 3 4"};
   21.25 +term2str @{term "Complex 1 2 / Complex 3 4"};
   21.26 +*}
   21.27 +
   21.28 +ML {*
   21.29 +val a = @{term "Complex 1 2"};
   21.30 +atomty a;
   21.31 +val a = str2term "Complex 1 2";
   21.32 +atomty a;
   21.33 +*}
   21.34 +ML {*
   21.35 +val b = @{term "Complex 3 4"};
   21.36 +val b = str2term "Complex 3 4";
   21.37 +(*a + (b::complex); ERROR: term + term*)
   21.38 +*}
   21.39 +
   21.40 +section {*use the operations for simplification*}
   21.41 +
   21.42 +
   21.43 +
   21.44 +subsection {*example 1 -- ADD*}
   21.45 +ML {*
   21.46 +  print_depth 1;
   21.47 +  val (thy, ro, er) = (@{theory}, tless_true, eval_rls);
   21.48 +*}
   21.49 +ML {*
   21.50 +  val thm = @{thm "complex_add"};
   21.51 +  val t = str2term "Complex 1 2 + Complex 3 4";
   21.52 +  val SOME _ = rewrite_ thy ro er true thm t;
   21.53 +  val SOME (t', _) = rewrite_ thy ro er true thm t;
   21.54 +  "Complex (1 + 3) (2 + 4)" = term2str t';
   21.55 +*}
   21.56 +
   21.57 +
   21.58 +
   21.59 +
   21.60 +subsection {*example 2 -- ADD, MULT*}
   21.61 +ML {*
   21.62 +
   21.63 +val Simplify_complex = append_rls "Simplify_complex" e_rls
   21.64 +  [ Thm  ("complex_add",num_str @{thm complex_add}),
   21.65 +		    Thm  ("complex_mult",num_str @{thm complex_mult}),
   21.66 +		    Rls_ norm_Poly
   21.67 +		  ];
   21.68 +
   21.69 +*}
   21.70 +ML {*
   21.71 +
   21.72 +val t = str2term "(Complex 1 2 * (Complex 3 4 + Complex 5 (6::real)))";
   21.73 +term2str t = "Complex 1 2 * (Complex 3 4 + Complex 5 6)";
   21.74 +atomty t;
   21.75 +
   21.76 +*}
   21.77 +ML {*
   21.78 +
   21.79 +
   21.80 +val SOME (t, _) = rewrite_set_ thy true Simplify_complex t;
   21.81 +
   21.82 +term2str t = "Complex -12 26";
   21.83 +atomty t;
   21.84 +
   21.85 +*}
   21.86 +
   21.87 +subsection {*example 3*}
   21.88 +ML {*
   21.89 +val Simplify_complex = append_rls "Simplify_complex" e_rls
   21.90 +  [ Thm  ("complex_mult",num_str @{thm complex_mult}),
   21.91 +    Thm  ("complex_inverse",num_str @{thm complex_inverse}),
   21.92 +		    Rls_ norm_Poly
   21.93 +		  ];
   21.94 +*}
   21.95 +ML {*
   21.96 +val t = str2term "inverse (Complex (2::real) (4::real))";
   21.97 +term2str t = "inverse Complex (2) (4)";
   21.98 +atomty t;
   21.99 +*}
  21.100 +ML {*
  21.101 +trace_rewrite := true;
  21.102 +val SOME (t, _) = rewrite_set_ thy true Simplify_complex t;
  21.103 +trace_rewrite := false;
  21.104 +term2str t = "Complex -12 26";
  21.105 +atomty t;
  21.106 +*}
  21.107 +
  21.108 +
  21.109 +
  21.110 +ML {*
  21.111 +trace_rewrite := true;
  21.112 +trace_rewrite := false;
  21.113 +*}
  21.114 +
  21.115 +end
  21.116 +
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/doc-isac/jrocnik/Test_Integral.thy	Tue Sep 17 09:50:52 2013 +0200
    22.3 @@ -0,0 +1,17 @@
    22.4 +(*
    22.5 +doc-src/isac/jrocnik$ /usr/local/isabisac/bin/isabelle jedit Test_Integral.thy &
    22.6 +*)
    22.7 +
    22.8 +theory Test_Integral imports "../../../src/HOL/Multivariate_Analysis/Integration"
    22.9 +Integration begin
   22.10 +
   22.11 +ML {*
   22.12 +@{term "Integral s f k"}
   22.13 +*}
   22.14 +ML {*
   22.15 +*}
   22.16 +ML {*
   22.17 +*}
   22.18 +
   22.19 +end
   22.20 +
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/doc-isac/jrocnik/Test_SUM.thy	Tue Sep 17 09:50:52 2013 +0200
    23.3 @@ -0,0 +1,28 @@
    23.4 +
    23.5 +theory Test_SUM imports Isac begin
    23.6 +
    23.7 +section {*trials with implicit function, probably required*}
    23.8 +ML {*
    23.9 +@{term "(%n :: nat. n) 2"};
   23.10 +@{term "(%n. n) 2"};
   23.11 +@{term "2"};
   23.12 +*}
   23.13 +ML {*
   23.14 +@{term "(%n. n+n)"};
   23.15 +@{term "(%n. n+n) a"};
   23.16 +@{term "a+a"};
   23.17 +*}
   23.18 +section {*sums*}
   23.19 +ML {*
   23.20 +val x = @{term "(SUM i = 0..< k. f i)"};
   23.21 +term2str x
   23.22 +*}
   23.23 +ML {*
   23.24 +*}
   23.25 +ML {*
   23.26 +*}
   23.27 +ML {*
   23.28 +*}
   23.29 +
   23.30 +end
   23.31 +
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/doc-isac/jrocnik/bakkarbeit.tcp	Tue Sep 17 09:50:52 2013 +0200
    24.3 @@ -0,0 +1,12 @@
    24.4 +[FormatInfo]
    24.5 +Type=TeXnicCenterProjectInformation
    24.6 +Version=4
    24.7 +
    24.8 +[ProjectInfo]
    24.9 +MainFile=jrocnik_bakk.tex
   24.10 +UseBibTeX=1
   24.11 +UseMakeIndex=0
   24.12 +ActiveProfile=LaTeX => PDF (Sumatra)
   24.13 +ProjectLanguage=en
   24.14 +ProjectDialect=US
   24.15 +
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/doc-isac/jrocnik/bakkarbeit.tps	Tue Sep 17 09:50:52 2013 +0200
    25.3 @@ -0,0 +1,154 @@
    25.4 +[FormatInfo]
    25.5 +Type=TeXnicCenterProjectSessionInformation
    25.6 +Version=2
    25.7 +
    25.8 +[SessionInfo]
    25.9 +ActiveTab=0
   25.10 +FrameCount=5
   25.11 +ActiveFrame=0
   25.12 +
   25.13 +[Frame0]
   25.14 +Columns=1
   25.15 +Rows=1
   25.16 +Flags=2
   25.17 +ShowCmd=3
   25.18 +MinPos.x=-1
   25.19 +MinPos.y=-1
   25.20 +MaxPos.x=-4
   25.21 +MaxPos.y=-23
   25.22 +NormalPos.left=0
   25.23 +NormalPos.top=0
   25.24 +NormalPos.right=112
   25.25 +NormalPos.bottom=299
   25.26 +Class=CLatexEdit
   25.27 +Document=jrocnik_bakk.tex
   25.28 +
   25.29 +[Frame0_Row0]
   25.30 +cyCur=848
   25.31 +cyMin=10
   25.32 +
   25.33 +[Frame0_Col0]
   25.34 +cxCur=992
   25.35 +cxMin=10
   25.36 +
   25.37 +[Frame0_View0,0]
   25.38 +Cursor.row=143
   25.39 +Cursor.column=297
   25.40 +TopSubLine=145
   25.41 +
   25.42 +[Frame1]
   25.43 +Columns=1
   25.44 +Rows=1
   25.45 +Flags=0
   25.46 +ShowCmd=1
   25.47 +MinPos.x=-1
   25.48 +MinPos.y=-1
   25.49 +MaxPos.x=-4
   25.50 +MaxPos.y=-23
   25.51 +NormalPos.left=44
   25.52 +NormalPos.top=44
   25.53 +NormalPos.right=676
   25.54 +NormalPos.bottom=512
   25.55 +Class=CLatexEdit
   25.56 +Document=calulations.tex
   25.57 +
   25.58 +[Frame1_Row0]
   25.59 +cyCur=421
   25.60 +cyMin=10
   25.61 +
   25.62 +[Frame1_Col0]
   25.63 +cxCur=604
   25.64 +cxMin=10
   25.65 +
   25.66 +[Frame1_View0,0]
   25.67 +Cursor.row=52
   25.68 +Cursor.column=25
   25.69 +TopSubLine=35
   25.70 +
   25.71 +[Frame2]
   25.72 +Columns=1
   25.73 +Rows=1
   25.74 +Flags=0
   25.75 +ShowCmd=1
   25.76 +MinPos.x=-1
   25.77 +MinPos.y=-1
   25.78 +MaxPos.x=-4
   25.79 +MaxPos.y=-23
   25.80 +NormalPos.left=66
   25.81 +NormalPos.top=66
   25.82 +NormalPos.right=698
   25.83 +NormalPos.bottom=534
   25.84 +Class=CLatexEdit
   25.85 +Document=bakkarbeit_titlepage.tex
   25.86 +
   25.87 +[Frame2_Row0]
   25.88 +cyCur=421
   25.89 +cyMin=10
   25.90 +
   25.91 +[Frame2_Col0]
   25.92 +cxCur=604
   25.93 +cxMin=10
   25.94 +
   25.95 +[Frame2_View0,0]
   25.96 +Cursor.row=7
   25.97 +Cursor.column=0
   25.98 +TopSubLine=0
   25.99 +
  25.100 +[Frame3]
  25.101 +Columns=1
  25.102 +Rows=1
  25.103 +Flags=0
  25.104 +ShowCmd=1
  25.105 +MinPos.x=-1
  25.106 +MinPos.y=-1
  25.107 +MaxPos.x=-4
  25.108 +MaxPos.y=-23
  25.109 +NormalPos.left=88
  25.110 +NormalPos.top=88
  25.111 +NormalPos.right=1134
  25.112 +NormalPos.bottom=670
  25.113 +Class=CLatexEdit
  25.114 +Document=preambleForGeneratedDocuments.tex
  25.115 +
  25.116 +[Frame3_Row0]
  25.117 +cyCur=535
  25.118 +cyMin=10
  25.119 +
  25.120 +[Frame3_Col0]
  25.121 +cxCur=1018
  25.122 +cxMin=10
  25.123 +
  25.124 +[Frame3_View0,0]
  25.125 +Cursor.row=3
  25.126 +Cursor.column=30
  25.127 +TopSubLine=0
  25.128 +
  25.129 +[Frame4]
  25.130 +Columns=1
  25.131 +Rows=1
  25.132 +Flags=0
  25.133 +ShowCmd=1
  25.134 +MinPos.x=-1
  25.135 +MinPos.y=-1
  25.136 +MaxPos.x=-4
  25.137 +MaxPos.y=-23
  25.138 +NormalPos.left=110
  25.139 +NormalPos.top=110
  25.140 +NormalPos.right=1156
  25.141 +NormalPos.bottom=692
  25.142 +Class=CLatexEdit
  25.143 +Document=references.bib
  25.144 +
  25.145 +[Frame4_Row0]
  25.146 +cyCur=535
  25.147 +cyMin=10
  25.148 +
  25.149 +[Frame4_Col0]
  25.150 +cxCur=1018
  25.151 +cxMin=10
  25.152 +
  25.153 +[Frame4_View0,0]
  25.154 +Cursor.row=24
  25.155 +Cursor.column=15
  25.156 +TopSubLine=0
  25.157 +
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/doc-isac/jrocnik/bakkarbeit_titlepage.tex	Tue Sep 17 09:50:52 2013 +0200
    26.3 @@ -0,0 +1,44 @@
    26.4 +\begin{titlepage}
    26.5 +
    26.6 +	% Top of the page
    26.7 +	\vspace*{-2cm}
    26.8 +	\hfill
    26.9 +	\begin{minipage}{4cm}
   26.10 +		\includegraphics[width=40mm]{./TUGlogo.pdf}
   26.11 +	\end{minipage}
   26.12 +	
   26.13 +	% Center of the page
   26.14 +	\begin{center}
   26.15 +		\vspace{1cm}  
   26.16 +		
   26.17 +		\normalsize{Baccalaureate Thesis}\\
   26.18 +		
   26.19 +		\HRule
   26.20 +		\vspace{0.3cm}
   26.21 +		\Large{
   26.22 +		  	\bf Interactive Course Material for Signal Processing based on Isabelle/\isac\\
   26.23 +		  }
   26.24 +		\HRule
   26.25 +			
   26.26 +			\vspace{1cm}
   26.27 +			\normalsize{conducted at the}\\
   26.28 +			\normalsize{Institute for Software Technology}\\
   26.29 +			\normalsize{Institute of Signal Processing and Speech Communication}\\
   26.30 +			\vspace{0.3cm}
   26.31 +			\normalsize{Graz University of Technology}\\
   26.32 +			
   26.33 +			\vspace{1cm}
   26.34 +			\normalsize{by}\\
   26.35 +			Jan Simon Ro\v{c}nik\\\href{mailto:student.tugraz.at}{\tt jan.rocnik@student.tugraz.at}
   26.36 +			
   26.37 +			\vspace{1cm}
   26.38 +			\normalsize{Supervisor}\\
   26.39 +			Univ.-Prof. Dipl.-Ing. Dr.techn. Franz Wotawa
   26.40 +		\vfill
   26.41 +		
   26.42 +		% Bottom of the page
   26.43 +		{\large Graz, \today}
   26.44 +	
   26.45 +	\end{center}
   26.46 +
   26.47 +\end{titlepage}
   26.48 \ No newline at end of file
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/doc-isac/jrocnik/calulations.tex	Tue Sep 17 09:50:52 2013 +0200
    27.3 @@ -0,0 +1,202 @@
    27.4 +%\documentclass[a4paper]{scrartcl}
    27.5 +%\usepackage[top=2cm, bottom=2.5cm, left=3cm, right=2cm, footskip=1cm]{geometry}
    27.6 +%\usepackage[german]{babel}
    27.7 +%\usepackage[T1]{fontenc}
    27.8 +%\usepackage[latin1]{inputenc}
    27.9 +%\usepackage{endnotes}
   27.10 +%\usepackage{trfsigns}
   27.11 +%\usepackage{setspace}
   27.12 +%
   27.13 +%\setlength{\parindent}{0ex}
   27.14 +%\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   27.15 +%\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   27.16 +%
   27.17 +%\begin{document}
   27.18 +%\title{Interactive Course Material for Signal Processing based on Isabelle/\isac}
   27.19 +%\subtitle{Problemsolutions (Calculations)}
   27.20 +%\author{Walther Neuper, Jan Rocnik}
   27.21 +%\maketitle
   27.22 +
   27.23 +
   27.24 +%------------------------------------------------------------------------------
   27.25 +%FOURIER
   27.26 +
   27.27 +\subsection{Fourier Transformation}
   27.28 +\subsubsection*{Problem\endnote{Problem submitted by Bernhard Geiger. Originally fragment of the exam to \emph{Signaltransformationen VO} from 04.03.2011. Translated from German.}}
   27.29 +\textbf{(a)} Determine the fourier transform for the given rectangular impulse:
   27.30 +
   27.31 +\begin{center}
   27.32 +$x(t)= \left\{
   27.33 +     \begin{array}{lr}
   27.34 +       1 & -1\leq t\geq1\\
   27.35 +       0 & else
   27.36 +     \end{array}
   27.37 +   \right.$
   27.38 +\end{center}
   27.39 +
   27.40 +\textbf{\noindent (b)} Now consider the given delayed impulse, determine its fourie transformation and calculate phase and magnitude:
   27.41 +
   27.42 +\begin{center}
   27.43 +$x(t)= \left\{
   27.44 +     \begin{array}{lr}
   27.45 +       1 & -1\leq t\leq1\\
   27.46 +       0 & else
   27.47 +     \end{array}
   27.48 +   \right.$
   27.49 +\end{center}
   27.50 +
   27.51 +\subsubsection{Solution}
   27.52 +\textbf{(a)} \textsf{Subproblem 1}
   27.53 +\onehalfspace{
   27.54 +\begin{tabbing}
   27.55 +000\=\kill
   27.56 +\texttt{\footnotesize{01}} \> Definition: $X(j\omega)=\int_\infty^\infty{x(t)\cdot e^{-j\omega t}}$\\
   27.57 +\`Insert Condition: $x(t) = 1\;$ for $\;\{-1\leq t\;\land\;t\leq 1\}\;$ and $\;x(t)=0\;$ otherwise\\
   27.58 +\texttt{\footnotesize{02}} \> $X(j\omega)=\int_{-1}^{1}{1\cdot e^{-j\omega t}}$\\
   27.59 +      \` $\int_a^b f\;t\;dt = \int f\;t\;dt\;|_a^b$\\
   27.60 +\texttt{\footnotesize{03}} \> $\int 1\cdot e^{-j\cdot\omega\cdot t} d t\;|_{-1}^1$\\
   27.61 +       \` pbl: integration in $\cal C$\\
   27.62 +\texttt{\footnotesize{04}} \> $\left(\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot t} \;|_{-1}^1\right)$\\
   27.63 +      \` $f\;t\;|_a^b = f\;b-f\;a$\\
   27.64 +\texttt{\footnotesize{05}} \> $\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot 1} -  \frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot -1}$\\
   27.65 +\texttt{\footnotesize{06}} \> $\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega} -  \frac{1}{-j\cdot\omega}\cdot e^{j\cdot\omega}$\\
   27.66 +\` Lift $\frac{1}{j\omega}$\\
   27.67 +\texttt{\footnotesize{07}} \> $\frac{1}{j\cdot\omega}\cdot(e^{j\cdot\omega} - e^{-j\cdot\omega})$\\
   27.68 +      \` trick~!\\
   27.69 +\texttt{\footnotesize{08}} \> $\frac{1}{\omega}\cdot(\frac{-e^{j\cdot\omega} + e^{-j\cdot\omega}}{j})$\\
   27.70 +      \` table\\
   27.71 +\texttt{\footnotesize{09}} \> $2\cdot\frac{\sin\;\omega}{\omega}$
   27.72 +\end{tabbing}
   27.73 +}
   27.74 +
   27.75 +\noindent\textbf{(b)} \textsf{Subproblem 1}
   27.76 +\onehalfspace{
   27.77 +\begin{tabbing}
   27.78 +000\=\kill
   27.79 +\texttt{\footnotesize{01}} \> Definition: $X(j\omega)=\int_\infty^\infty{x(t)\cdot e^{-j\omega t}}$\\
   27.80 +\`Insert Condition: $x(t) = 1\;$ for $\;\{1\leq t\;\land\;t\leq 3\}\;$ and $\;x(t)=0\;$ otherwise\\
   27.81 +\texttt{\footnotesize{02}} \> $X(j\omega)=\int_{-1}^{1}{1\cdot e^{-j\omega t}}$\\
   27.82 +      \` $\int_a^b f\;t\;dt = \int f\;t\;dt\;|_a^b$\\
   27.83 +\texttt{\footnotesize{03}} \> $\int 1\cdot e^{-j\cdot\omega\cdot t} d t\;|_{1}^3$\\
   27.84 +       \` pbl: integration in $\cal C$\\
   27.85 +\texttt{\footnotesize{04}} \> $\left(\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot t} \;|_{1}^3\right)$\\
   27.86 +      \` $f\;t\;|_a^b = f\;b-f\;a$\\
   27.87 +\texttt{\footnotesize{05}} \> $\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot 3} -  \frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot 1}$\\
   27.88 +\`Lift $\frac{1}{-j\omega}$\\
   27.89 +\texttt{\footnotesize{06}} \> $\frac{1}{j\cdot\omega}\cdot(e^{-j\cdot\omega} - e^{-j\cdot\omega3})$\\
   27.90 +      \`Lift $e^{j\omega2}$ (trick)\\
   27.91 +\texttt{\footnotesize{07}} \> $\frac{1}{j\omega}\cdot e^{j\omega2}\cdot(e^{j\omega} - e^{-j\omega})$\\
   27.92 +\`Simplification (trick)\\
   27.93 +\texttt{\footnotesize{08}} \> $\frac{1}{\omega}\cdot e^{j\omega2}\cdot(\frac{e^{j\omega} - e^{-j\omega}}{j})$\\
   27.94 +      \` table\\
   27.95 +\texttt{\footnotesize{09}} \> $2\cdot e^{j\omega2}\cdot\frac{\sin\;\omega}{\omega}$\\
   27.96 +\noindent\textbf{(b)} \textsf{Subproblem 2}\\
   27.97 +\`Definition: $X(j\omega)=|X(j\omega)|\cdot e^{arg(X(j\omega))}$\\
   27.98 +\`$|X(j\omega)|$ is called \emph{Magnitude}\\
   27.99 +\`$arg(X(j\omega))$ is called \emph{Phase}\\
  27.100 +\texttt{\footnotesize{10}} \> $|X(j\omega)|=\frac{2}{\omega}\cdot sin(\omega)$\\
  27.101 +\texttt{\footnotesize{11}} \> $arg(X(j\omega)=-2\omega$\\
  27.102 +\end{tabbing}
  27.103 +}
  27.104 +%------------------------------------------------------------------------------
  27.105 +%CONVOLUTION
  27.106 +
  27.107 +\subsection{Convolution}
  27.108 +\subsubsection*{Problem\endnote{Problem submitted by Bernhard Geiger. Originally part of the SPSC Problem Class 2, Summer term 2008}}
  27.109 +Consider the two discrete-time, linear and time-invariant (LTI) systems with the following impulse response:
  27.110 +
  27.111 +\begin{center}
  27.112 +$h_1[n]=\left(\frac{3}{5}\right)^n\cdot u[n]$\\
  27.113 +$h_1[n]=\left(-\frac{2}{3}\right)^n\cdot u[n]$
  27.114 +\end{center}
  27.115 +
  27.116 +The two systems are cascaded seriell. Derive the impulse respinse of the overall system $h_c[n]$.
  27.117 +\subsubsection*{Solution}
  27.118 +
  27.119 +\doublespace{
  27.120 +\begin{tabbing}
  27.121 +000\=\kill
  27.122 +\texttt{\footnotesize{01}} \> $h_c[n]=h_1[n]*h_2[n]$\\
  27.123 +\texttt{\footnotesize{02}} \> $h_c[n]=\left(\left(\frac{3}{5}\right)^n\cdot u[n]\right)*\left(\left(-\frac{2}{3}\right)^n\cdot u[n]\right)$\\
  27.124 +\`Definition: $a^n\cdot u[n]\,*\,b^n\cdot u[n]=\sum\limits_{k=-\infty}^{\infty}{a^k\cdot u[k]\cdot b^{n-k}\cdot u[n-k]}$\\
  27.125 +\texttt{\footnotesize{03}} \> $h_c[n]=\sum\limits_{k=-\infty}^{\infty}{\left(\frac{3}{5}\right)^k\cdot u[n]\,\cdot \,\left(-\frac{2}{3}\right)^{n-k}\cdot u[n-k]}$\\
  27.126 +\`$u[n]= \left\{
  27.127 +     \begin{array}{lr}
  27.128 +       1 & for\ n>=0\\
  27.129 +       0 & else
  27.130 +     \end{array}
  27.131 +   \right.$\\
  27.132 +\`We can leave the unitstep through simplification.\\
  27.133 +\`So the lower limit is 0, the upper limit is n.\\
  27.134 +\texttt{\footnotesize{04}} \> $h_c[n]=\sum\limits_{k=0}^{n}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{2}{3}\right)^{n-k}}$\\
  27.135 +\`Expand\\
  27.136 +\texttt{\footnotesize{05}} \> $h_c[n]=\sum\limits_{k=0}^{n}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{2}{3}\right)^{n}\cdot \left(-\frac{2}{3}\right)^{-k}}$\\
  27.137 +\`Lift\\
  27.138 +\texttt{\footnotesize{06}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\sum\limits_{k=0}^{\infty}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{2}{3}\right)^{-k}}$\\
  27.139 +\texttt{\footnotesize{07}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\sum\limits_{k=0}^{n}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{3}{2}\right)^{k}}$\\
  27.140 +\texttt{\footnotesize{08}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\sum\limits_{k=0}^{n}{\left(-\frac{9}{10}\right)^{k}}$\\
  27.141 +\`Geometric Series: $\sum\limits_{k=0}^{n}{q^k}=\frac{1-q^{n+1}}{1-q}$\\
  27.142 +\`Now we have to consider the limits again.\\
  27.143 +\`It is neccesarry to put the unitstep in again.\\
  27.144 +\texttt{\footnotesize{09}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\frac{1-\left(-\frac{9}{10}\right)^{n+1}}{1-\left(-\frac{9}{10}\right)}\cdot u[n]$\\
  27.145 +\texttt{\footnotesize{10}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\frac{1-\left(-\frac{9}{10}\right)^{n}\cdot\left(-\frac{9}{10}\right)}{1-\left(-\frac{9}{10}\right)}\cdot u[n]$\\
  27.146 +\texttt{\footnotesize{11}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\frac{1-\left(-\frac{9}{10}\right)^{n}\cdot\left(-\frac{9}{10}\right)}{\left(\frac{19}{10}\right)}\cdot u[n]$\\
  27.147 +\texttt{\footnotesize{12}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot \left(1-\left(-\frac{9}{10}\right)^{n}\cdot\left(-\frac{9}{10}\right)\right)\cdot\left(\frac{10}{19}\right)\cdot u[n]$\\
  27.148 +\`Lift $u[n]$\\
  27.149 +\texttt{\footnotesize{13}} \> $\left(\frac{10}{19}\cdot\left(-\frac{2}{3}\right)^n+\frac{9}{19}\cdot\left(\frac{3}{5}\right)^n\right)\cdot u[n]$\\
  27.150 +\end{tabbing}
  27.151 +}
  27.152 +
  27.153 +%------------------------------------------------------------------------------
  27.154 +%Z-Transformation
  27.155 +
  27.156 +\subsection{Z-Transformation\label{sec:calc:ztrans}}
  27.157 +\subsubsection*{Problem\endnote{Problem submitted by Bernhard Geiger. Originally part of the signal processing problem class 5, summer term 2008.}}
  27.158 +Determine the inverse $\cal{z}$ transform of the following expression. Hint: applay the partial fraction expansion.
  27.159 +
  27.160 +\begin{center}
  27.161 +$X(z)=\frac{3}{z-\frac{1}{4}-\frac{1}{8}z^{-1}},\ \ x[n]$ is absolute summable
  27.162 +\end{center}
  27.163 +
  27.164 +\subsubsection*{Solution}
  27.165 +\onehalfspace{
  27.166 +\begin{tabbing}
  27.167 +000\=\kill
  27.168 +\textsf{Main Problem}\\
  27.169 +\texttt{\footnotesize{01}} \> $\frac{3}{z-\frac{1}{4}-\frac{1}{8}z^{-1}}$ \\
  27.170 +\`Divide through z, neccesary for z-transformation\\
  27.171 +\texttt{\footnotesize{02}} \> $\frac{3}{z^2-\frac{1}{4}z-\frac{1}{8}}$ \\
  27.172 +\`Start with partial fraction expansion\\
  27.173 +\texttt{\footnotesize{03}} \> $\frac{3}{z^2-\frac{1}{4}z-\frac{1}{8}}=\frac{A}{z-z_1}+\frac{B}{z-z_2}$ \\
  27.174 +\`Eliminate Fractions\\
  27.175 +\texttt{\footnotesize{04}} \> $3=A(z-z_2)+B(z-z_1)$ \\
  27.176 +\textsf{Subproblem 1}\\
  27.177 +\`Setup a linear equation system by inserting the zeros $z_1$ and $z_2$ for $z$\\
  27.178 +\texttt{\footnotesize{05}} \> $3=A(z_1-z_2)$ \& $3=B(z_2-z_1)$\\
  27.179 +\texttt{\footnotesize{06}} \> $\frac{3}{z_1-z_2}=A$ \& $\frac{3}{z_2-z_1}=B$\\
  27.180 +\textsf{Subproblem 2}\\
  27.181 +\`Determine $z_1$ and $z_2$\\
  27.182 +\texttt{\footnotesize{07}} \> $z_1=\frac{1}{8}+\sqrt{\frac{1}{64}+\frac{1}{8}}$ \& $z_2=\frac{1}{8}-\sqrt{\frac{1}{64}+\frac{1}{8}}$\\
  27.183 +\texttt{\footnotesize{08}} \> $z_1=\frac{1}{8}+\sqrt{\frac{9}{64}}$ \& $z_2=\frac{1}{8}-\sqrt{\frac{9}{64}}$\\
  27.184 +\texttt{\footnotesize{09}} \> $z_1=\frac{1}{8}+\frac{3}{8}$ \& $z_2=\frac{1}{8}-\frac{3}{8}$\\
  27.185 +\texttt{\footnotesize{10}} \> $z_1=\frac{1}{2}$ \& $z_2=-\frac{1}{4}$\\
  27.186 +\textsf{Continiue with Subproblem 1}\\
  27.187 +\`Get the coeffizients $A$ and $B$\\
  27.188 +\texttt{\footnotesize{11}} \> $\frac{3}{\frac{1}{2}-(-\frac{1}{4})}=A$ \& $\frac{3}{-\frac{1}{4}-\frac{1}{2}}=B$\\
  27.189 +\texttt{\footnotesize{12}} \> $\frac{3}{\frac{1}{2}+\frac{1}{4}}=A$ \& $\frac{3}{-\frac{1}{4}-\frac{1}{2}}=B$\\
  27.190 +\texttt{\footnotesize{13}} \> $\frac{3}{\frac{3}{4}}=A$ \& $\frac{3}{-\frac{3}{4}}=B$\\
  27.191 +\texttt{\footnotesize{14}} \> $\frac{12}{3}=A$ \& $-\frac{12}{3}=B$\\
  27.192 +\texttt{\footnotesize{15}} \> $4=A$ \& $-4=B$\\
  27.193 +\textsf{Continiue with Main Problem}\\
  27.194 +\texttt{\footnotesize{16}} \> $\frac{A}{z-z_1}+\frac{B}{z-z_2}$\\
  27.195 +\texttt{\footnotesize{17}} \> $\frac{4}{z-\frac{1}{2}}+\frac{4}{z-\left(-\frac{1}{4}\right)}$ \\
  27.196 +\texttt{\footnotesize{18}} \> $\frac{4}{z-\frac{1}{2}}-\frac{4}{z+\frac{1}{4}}$ \\
  27.197 +\`Multiply with z, neccesary for z-transformation\\
  27.198 +\texttt{\footnotesize{19}} \> $\frac{4z}{z-\frac{1}{2}}-\frac{4z}{z+\frac{1}{4}}$ \\
  27.199 +\texttt{\footnotesize{20}} \> $4\cdot\frac{z}{z-\frac{1}{2}}+(-4)\cdot\frac{z}{z+\frac{1}{4}}$ \\
  27.200 +\`Transformation\\
  27.201 +\texttt{\footnotesize{21}} \> $4\cdot\frac{z}{z-\frac{1}{2}}+(-4)\cdot\frac{z}{z+\frac{1}{4}}\ \Ztransf\ 4\cdot\left(-\frac{1}{2}\right)^n\cdot u[n]+(-4)\cdot\left(\frac{1}{4}\right)^n\cdot u[n]$\\
  27.202 +\end{tabbing}
  27.203 +}
  27.204 +\theendnotes
  27.205 +%\end{document}
  27.206 \ No newline at end of file
    28.1 Binary file doc-isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math-3.png has changed
    29.1 Binary file doc-isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math.pdf has changed
    30.1 Binary file doc-isac/jrocnik/eJMT-paper/fig/universe.pdf has changed
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/doc-isac/jrocnik/eJMT-paper/jrocnik_eJMT.tex	Tue Sep 17 09:50:52 2013 +0200
    31.3 @@ -0,0 +1,2135 @@
    31.4 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    31.5 +% Electronic Journal of Mathematics and Technology (eJMT) %
    31.6 +% style sheet for LaTeX.  Please do not modify sections   %
    31.7 +% or commands marked 'eJMT'.                              %
    31.8 +%                                                         %
    31.9 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   31.10 +%                                                         %
   31.11 +% eJMT commands                                           %
   31.12 +%                                                         %
   31.13 +\documentclass[12pt,a4paper]{article}%                    %
   31.14 +\usepackage{times}                                        %
   31.15 +\usepackage{amsfonts,amsmath,amssymb}                     %
   31.16 +\usepackage[a4paper]{geometry}                            %
   31.17 +\usepackage{fancyhdr}                                     %
   31.18 +\usepackage{color}                                        %
   31.19 +\usepackage[pdftex]{hyperref} % see note below            %
   31.20 +\usepackage{graphicx}%                                    %
   31.21 +\hypersetup{                                              %
   31.22 +    a4paper,                                              %
   31.23 +    breaklinks                                            %
   31.24 +}                                                         %
   31.25 +%                                                         %
   31.26 +\newtheorem{theorem}{Theorem}                             %
   31.27 +\newtheorem{acknowledgement}[theorem]{Acknowledgement}    %
   31.28 +\newtheorem{algorithm}[theorem]{Algorithm}                %
   31.29 +\newtheorem{axiom}[theorem]{Axiom}                        %
   31.30 +\newtheorem{case}[theorem]{Case}                          %
   31.31 +\newtheorem{claim}[theorem]{Claim}                        %
   31.32 +\newtheorem{conclusion}[theorem]{Conclusion}              %
   31.33 +\newtheorem{condition}[theorem]{Condition}                %
   31.34 +\newtheorem{conjecture}[theorem]{Conjecture}              %
   31.35 +\newtheorem{corollary}[theorem]{Corollary}                %
   31.36 +\newtheorem{criterion}[theorem]{Criterion}                %
   31.37 +\newtheorem{definition}[theorem]{Definition}              %
   31.38 +\newtheorem{example}[theorem]{Example}                    %
   31.39 +\newtheorem{exercise}[theorem]{Exercise}                  %
   31.40 +\newtheorem{lemma}[theorem]{Lemma}                        %
   31.41 +\newtheorem{notation}[theorem]{Notation}                  %
   31.42 +\newtheorem{problem}[theorem]{Problem}                    %
   31.43 +\newtheorem{proposition}[theorem]{Proposition}            %
   31.44 +\newtheorem{remark}[theorem]{Remark}                      %
   31.45 +\newtheorem{solution}[theorem]{Solution}                  %
   31.46 +\newtheorem{summary}[theorem]{Summary}                    %
   31.47 +\newenvironment{proof}[1][Proof]{\noindent\textbf{#1.} }  %
   31.48 +{\ \rule{0.5em}{0.5em}}                                   %
   31.49 +%                                                         %
   31.50 +% eJMT page dimensions                                    %
   31.51 +%                                                         %
   31.52 +\geometry{left=2cm,right=2cm,top=3.2cm,bottom=4cm}        %
   31.53 +%                                                         %
   31.54 +% eJMT header & footer                                    %
   31.55 +%                                                         %
   31.56 +\newcounter{ejmtFirstpage}                                %
   31.57 +\setcounter{ejmtFirstpage}{1}                             %
   31.58 +\pagestyle{empty}                                         %
   31.59 +\setlength{\headheight}{14pt}                             %
   31.60 +\geometry{left=2cm,right=2cm,top=3.2cm,bottom=4cm}        %
   31.61 +\pagestyle{fancyplain}                                    %
   31.62 +\fancyhf{}                                                %
   31.63 +\fancyhead[c]{\small The Electronic Journal of Mathematics%
   31.64 +\ and Technology, Volume 1, Number 1, ISSN 1933-2823}     %
   31.65 +\cfoot{%                                                  %
   31.66 +  \ifnum\value{ejmtFirstpage}=0%                          %
   31.67 +    {\vtop to\hsize{\hrule\vskip .2cm\thepage}}%          %
   31.68 +  \else\setcounter{ejmtFirstpage}{0}\fi%                  %
   31.69 +}                                                         %
   31.70 +%                                                         %
   31.71 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   31.72 +%
   31.73 +% Please place your own definitions here
   31.74 +%
   31.75 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   31.76 +\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   31.77 +
   31.78 +\usepackage{color}
   31.79 +\definecolor{lgray}{RGB}{238,238,238}
   31.80 +
   31.81 +\usepackage{hyperref}
   31.82 +
   31.83 +%
   31.84 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   31.85 +%                                                         %
   31.86 +% How to use hyperref                                     %
   31.87 +% -------------------                                     %
   31.88 +%                                                         %
   31.89 +% Probably the only way you will need to use the hyperref %
   31.90 +% package is as follows.  To make some text, say          %
   31.91 +% "My Text Link", into a link to the URL                  %
   31.92 +% http://something.somewhere.com/mystuff, use             %
   31.93 +%                                                         %
   31.94 +% \href{http://something.somewhere.com/mystuff}{My Text Link}
   31.95 +%                                                         %
   31.96 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   31.97 +%
   31.98 +\begin{document}
   31.99 +%
  31.100 +% document title
  31.101 +%
  31.102 +\title{Trials with TP-based Programming
  31.103 +\\
  31.104 +for Interactive Course Material}%
  31.105 +%
  31.106 +% Single author.  Please supply at least your name,
  31.107 +% email address, and affiliation here.
  31.108 +%
  31.109 +\author{\begin{tabular}{c}
  31.110 +\textit{Jan Ro\v{c}nik} \\
  31.111 +jan.rocnik@student.tugraz.at \\
  31.112 +IST, SPSC\\
  31.113 +Graz University of Technology\\
  31.114 +Austria\end{tabular}
  31.115 +}%
  31.116 +%
  31.117 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  31.118 +%                                                         %
  31.119 +% eJMT commands - do not change these                     %
  31.120 +%                                                         %
  31.121 +\date{}                                                   %
  31.122 +\maketitle                                                %
  31.123 +%                                                         %
  31.124 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  31.125 +%
  31.126 +% abstract
  31.127 +%
  31.128 +\begin{abstract}
  31.129 +
  31.130 +Traditional course material in engineering disciplines lacks an
  31.131 +important component, interactive support for step-wise problem
  31.132 +solving. Theorem-Proving (TP) technology is appropriate for one part
  31.133 +of such support, in checking user-input. For the other part of such
  31.134 +support, guiding the learner towards a solution, another kind of
  31.135 +technology is required.
  31.136 +
  31.137 +Both kinds of support can be achieved by so-called
  31.138 +Lucas-Interpretation which combines deduction and computation and, for
  31.139 +the latter, uses a novel kind of programming language. This language
  31.140 +is based on (Computer) Theorem Proving (TP), thus called a ``TP-based
  31.141 +programming language''.
  31.142 +
  31.143 +This paper is the experience report of the first ``application
  31.144 +programmer'' using this language for creating exercises in step-wise
  31.145 +problem solving for an advanced lab in Signal Processing. The tasks
  31.146 +involved in TP-based programming are described together with the
  31.147 +experience gained from a prototype of the programming language and of
  31.148 +it's interpreter.
  31.149 +
  31.150 +The report concludes with a positive proof of concept, states
  31.151 +insufficiency usability of the prototype and captures the requirements
  31.152 +for further development of both, the programming language and the
  31.153 +interpreter.
  31.154 +%
  31.155 +\end{abstract}%
  31.156 +%
  31.157 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  31.158 +%                                                         %
  31.159 +% eJMT command                                            %
  31.160 +%                                                         %
  31.161 +\thispagestyle{fancy}                                     %
  31.162 +%                                                         %
  31.163 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  31.164 +%
  31.165 +% Please use the following to indicate sections, subsections,
  31.166 +% etc.  Please also use \subsubsection{...}, \paragraph{...}
  31.167 +% and \subparagraph{...} as necessary.
  31.168 +%
  31.169 +
  31.170 +\section{Introduction}\label{intro}
  31.171 +
  31.172 +% \paragraph{Didactics of mathematics} 
  31.173 +%WN: wenn man in einem high-quality paper von 'didactics' spricht, 
  31.174 +%WN muss man am state-of-the-art ankn"upfen -- siehe
  31.175 +%WN W.Neuper, On the Emergence of TP-based Educational Math Assistants
  31.176 +% faces a specific issue, a gap
  31.177 +% between (1) introduction of math concepts and skills and (2)
  31.178 +% application of these concepts and skills, which usually are separated
  31.179 +% into different units in curricula (for good reasons). For instance,
  31.180 +% (1) teaching partial fraction decomposition is separated from (2)
  31.181 +% application for inverse Z-transform in signal processing.
  31.182 +% 
  31.183 +% \par This gap is an obstacle for applying math as an fundamental
  31.184 +% thinking technology in engineering: In (1) motivation is lacking
  31.185 +% because the question ``What is this stuff good for?'' cannot be
  31.186 +% treated sufficiently, and in (2) the ``stuff'' is not available to
  31.187 +% students in higher semesters as widespread experience shows.
  31.188 +% 
  31.189 +% \paragraph{Motivation} taken by this didactic issue on the one hand,
  31.190 +% and ongoing research and development on a novel kind of educational
  31.191 +% mathematics assistant at Graz University of
  31.192 +% Technology~\footnote{http://www.ist.tugraz.at/isac/} promising to
  31.193 +% scope with this issue on the other hand, several institutes are
  31.194 +% planning to join their expertise: the Institute for Information
  31.195 +% Systems and Computer Media (IICM), the Institute for Software
  31.196 +% Technology (IST), the Institutes for Mathematics, the Institute for
  31.197 +% Signal Processing and Speech Communication (SPSC), the Institute for
  31.198 +% Structural Analysis and the Institute of Electrical Measurement and
  31.199 +% Measurement Signal Processing.
  31.200 +%WN diese Information ist f"ur das Paper zu spezielle, zu aktuell 
  31.201 +%WN und damit zu verg"anglich.
  31.202 +% \par This thesis is the first attempt to tackle the above mentioned
  31.203 +% issue, it focuses on Telematics, because these specific studies focus
  31.204 +% on mathematics in \emph{STEOP}, the introductory orientation phase in
  31.205 +% Austria. \emph{STEOP} is considered an opportunity to investigate the
  31.206 +% impact of {\sisac}'s prototype on the issue and others.
  31.207 +% 
  31.208 +
  31.209 +Traditional course material in engineering disciplines lacks an
  31.210 +important component, interactive support for step-wise problem
  31.211 +solving. The lack becomes evident by comparing existing course
  31.212 +material with the sheets collected from written exams (in case solving
  31.213 +engineering problems is {\em not} deteriorated to multiple choice
  31.214 +tests) on the topics addressed by the materials.
  31.215 +Theorem-Proving (TP) technology can provide such support by
  31.216 +specific services. An important part of such services is called
  31.217 +``next-step-guidance'', generated by a specific kind of ``TP-based
  31.218 +programming language''. In the
  31.219 +{\sisac}-project~\footnote{http://www.ist.tugraz.at/projects/isac/} such
  31.220 +a language is prototyped in line with~\cite{plmms10} and built upon
  31.221 +the theorem prover Isabelle~\cite{Nipkow-Paulson-Wenzel:2002}
  31.222 +\footnote{http://isabelle.in.tum.de/}.
  31.223 +The TP services are coordinated by a specific interpreter for the
  31.224 +programming language, called
  31.225 +Lucas-Interpreter~\cite{wn:lucas-interp-12}. The language 
  31.226 + will be briefly re-introduced in order to make the paper
  31.227 +self-contained.
  31.228 +
  31.229 +The main part of the paper is an account of first experiences
  31.230 +with programming in this TP-based language. The experience was gained
  31.231 +in a case study by the author. The author was considered an ideal
  31.232 +candidate for this study for the following reasons: as a student in
  31.233 +Telematics (computer science with focus on Signal Processing) he had
  31.234 +general knowledge in programming as well as specific domain knowledge
  31.235 +in Signal Processing; and he was {\em not} involved in the development of
  31.236 +{\sisac}'s programming language and interpreter, thus being a novice to the
  31.237 +language.
  31.238 +
  31.239 +The goals of the case study were: (1) to identify some TP-based programs for
  31.240 +interactive course material for a specific ``Advanced Signal
  31.241 +Processing Lab'' in a higher semester, (2) respective program
  31.242 +development with as little advice as possible from the {\sisac}-team and (3) 
  31.243 +to document records and comments for the main steps of development in an
  31.244 +Isabelle theory; this theory should provide guidelines for future programmers.
  31.245 +An excerpt from this theory is the main part of this paper.
  31.246 +\par
  31.247 +
  31.248 +\medskip The major example resulting from the case study will be used
  31.249 +as running example throughout this paper. This example requires a
  31.250 +program resembling the size of real-world applications in engineering;
  31.251 +such a size was considered essential for the case study, since there
  31.252 +are many small programs for a long time (mainly concerned with
  31.253 +elementary Computer Algebra like simplification, equation solving,
  31.254 +calculus, etc.~\footnote{The programs existing in the {\sisac}
  31.255 +prototype are found at
  31.256 +http://www.ist.tugraz.at/projects/isac/www/kbase/met/index\_met.html})
  31.257 +
  31.258 +\paragraph{The mathematical background of the running example} is the
  31.259 +following: In Signal Processing, ``the ${\cal Z}$-transform for
  31.260 +discrete-time signals is the counterpart of the Laplace transform for
  31.261 +continuous-time signals, and they each have a similar relationship to
  31.262 +the corresponding Fourier transform. One motivation for introducing
  31.263 +this generalization is that the Fourier transform does not converge
  31.264 +for all sequences, and it is useful to have a generalization of the
  31.265 +Fourier transform that encompasses a broader class of signals. A
  31.266 +second advantage is that in analytic problems, the ${\cal Z}$-transform
  31.267 +notation is often more convenient than the Fourier transform
  31.268 +notation.''  ~\cite[p. 128]{oppenheim2010discrete}.  The ${\cal Z}$-transform
  31.269 +is defined as
  31.270 +\begin{equation*}
  31.271 +X(z)=\sum_{n=-\infty }^{\infty }x[n]z^{-n}
  31.272 +\end{equation*}
  31.273 +where a discrete time sequence $x[n]$ is transformed into the function
  31.274 +$X(z)$ where $z$ is a continuous complex variable. The inverse
  31.275 +function is addressed in the running example and can be determined by
  31.276 +the integral
  31.277 +\begin{equation*}
  31.278 +x[n]=\frac{1}{2\pi j} \oint_{C} X(z)\cdot z^{n-1} dz
  31.279 +\end{equation*}
  31.280 +where the letter $C$ represents a contour within the range of
  31.281 +convergence of the ${\cal Z}$-transform. The unit circle can be a special
  31.282 +case of this contour. Remember that $j$ is the complex number in the
  31.283 +domain of engineering.  As this transform requires high effort to
  31.284 +be solved, tables of commonly used transform pairs are used in
  31.285 +education as well as in engineering practice; such tables can be found
  31.286 +at~\cite{wiki:1} or~\cite[Table~3.1]{oppenheim2010discrete} as well.
  31.287 +A completely solved and more detailed example can be found at
  31.288 +~\cite[p. 149f]{oppenheim2010discrete}. 
  31.289 +
  31.290 +Following conventions in engineering education and in practice, the
  31.291 +running example solves the problem by use of a table. 
  31.292 +
  31.293 +\paragraph{Support for interactive stepwise problem solving} in the
  31.294 +{\sisac} prototype is shown in Fig.\ref{fig-interactive}~\footnote{ Fig.\ref{fig-interactive} also shows the prototype status of {\sisac}; for instance,
  31.295 +the lack of 2-dimensional presentation and input of formulas is the major obstacle for field-tests in standard classes.}:
  31.296 +A student inputs formulas line by line on the \textit{``Worksheet''},
  31.297 +and each step (i.e. each formula on completion) is immediately checked
  31.298 +by the system, such that at most {\em one inconsistent} formula can reside on
  31.299 +the Worksheet (on the input line, marked by the red $\otimes$).
  31.300 +\begin{figure} [htb]
  31.301 +\begin{center}
  31.302 +\includegraphics[width=140mm]{fig/isac-Ztrans-math-3}
  31.303 +%\includegraphics[width=140mm]{fig/isac-Ztrans-math}
  31.304 +\caption{Step-wise problem solving guided by the TP-based program
  31.305 +\label{fig-interactive}}
  31.306 +\end{center}
  31.307 +\end{figure}
  31.308 +If the student gets stuck and does not know the formula to proceed
  31.309 +with, there is the button \framebox{NEXT} presenting the next formula
  31.310 +on the Worksheet; this feature is called ``next-step-guidance''~\cite{wn:lucas-interp-12}. The button \framebox{AUTO} immediately delivers the
  31.311 +final result in case the student is not interested in intermediate
  31.312 +steps.
  31.313 +
  31.314 +Adaptive dialogue guidance is already under
  31.315 +construction~\cite{gdaroczy-EP-13} and the two buttons will disappear,
  31.316 +since their presence is not wanted in many learning scenarios (in
  31.317 +particular, {\em not} in written exams).
  31.318 +
  31.319 +The buttons \framebox{Theories}, \framebox{Problems} and
  31.320 +\framebox{Methods} are the entry points for interactive lookup of the
  31.321 +underlying knowledge.  For instance, pushing \framebox{Theories} in
  31.322 +the configuration shown in Fig.\ref{fig-interactive}, pops up a
  31.323 +``Theory browser'' displaying the theorem(s) justifying the current
  31.324 +step.  The browser allows to lookup all other theories, thus
  31.325 +supporting indepentend investigation of underlying definitions,
  31.326 +theorems, proofs --- where the HTML representation of the browsers is
  31.327 +ready for arbitrary multimedia add-ons. Likewise, the browsers for
  31.328 +\framebox{Problems} and \framebox{Methods} support context sensitive
  31.329 +as well as interactive access to specifications and programs
  31.330 +respectively. 
  31.331 +
  31.332 +There is also a simple web-based representation of knowledge items;
  31.333 +the items under consideration in this paper can be looked up as
  31.334 +well
  31.335 +~\footnote{\href{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Inverse\_Z\_Transform.thy}{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/\textbf{Inverse\_Z\_Transform.thy}}}
  31.336 +~\footnote{\href{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Partial\_Fractions.thy}{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/\textbf{Partial\_Fractions.thy}}}
  31.337 +~\footnote{\href{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Build\_Inverse\_Z\_Transform.thy}{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/\textbf{Build\_Inverse\_Z\_Transform.thy}}}.
  31.338 +
  31.339 +% can be explained by having a look at 
  31.340 +% Fig.\ref{fig-interactive} which shows the beginning of the interactive 
  31.341 +% construction of a solution for the problem. This construction is done in the 
  31.342 +% right window named ``Worksheet''.
  31.343 +% \par
  31.344 +% User-interaction on the Worksheet is {\em checked} and {\em guided} by
  31.345 +% TP services:
  31.346 +% \begin{enumerate}
  31.347 +% \item Formulas input by the user are {\em checked} by TP: such a
  31.348 +% formula establishes a proof situation --- the prover has to derive the
  31.349 +% formula from the logical context. The context is built up from the
  31.350 +% formal specification of the problem (here hidden from the user) by the
  31.351 +% Lucas-Interpreter.
  31.352 +% \item If the user gets stuck, the program developed below in this
  31.353 +% paper ``knows the next step'' and Lucas-Interpretation provides services
  31.354 +% featuring so-called ``next-step-guidance''; this is out of scope of this
  31.355 +% paper and can be studied in~\cite{gdaroczy-EP-13}.
  31.356 +% \end{enumerate} It should be noted that the programmer using the
  31.357 +% TP-based language is not concerned with interaction at all; we will
  31.358 +% see that the program contains neither input-statements nor
  31.359 +% output-statements. Rather, interaction is handled by the interpreter
  31.360 +% of the language.
  31.361 +% 
  31.362 +% So there is a clear separation of concerns: Dialogues are adapted by
  31.363 +% dialogue authors (in Java-based tools), using TP services provided by
  31.364 +% Lucas-Interpretation. The latter acts on programs developed by
  31.365 +% mathematics-authors (in Isabelle/ML); their task is concern of this
  31.366 +% paper.
  31.367 +
  31.368 +\bigskip The paper is structured as follows: The introduction
  31.369 +\S\ref{intro} is followed by a brief re-introduction of the TP-based
  31.370 +programming language in \S\ref{PL}, which extends the executable
  31.371 +fragment of Isabelle's language (\S\ref{PL-isab}) by tactics which
  31.372 +play a specific role in Lucas-Interpretation and in providing the TP
  31.373 +services (\S\ref{PL-tacs}). The main part \S\ref{trial} describes
  31.374 +the main steps in developing the program for the running example:
  31.375 +prepare domain knowledge, implement the formal specification of the
  31.376 +problem, prepare the environment for the interpreter, implement the
  31.377 +program in \S\ref{isabisac} to \S\ref{progr} respectively. 
  31.378 +The work-flow of programming, debugging and testing is
  31.379 +described in \S\ref{workflow}. The conclusion \S\ref{conclusion} will
  31.380 +give directions identified for future development. 
  31.381 +
  31.382 +
  31.383 +\section{\isac's Prototype for a Programming Language}\label{PL} 
  31.384 +The prototype of the language and of the Lucas-Interpreter is briefly
  31.385 +described from the point of view of a programmer. The language extends
  31.386 +the executable fragment of Higher-Order Logic (HOL) in the theorem prover
  31.387 +Isabelle~\cite{Nipkow-Paulson-Wenzel:2002}\footnote{http://isabelle.in.tum.de/}.
  31.388 +
  31.389 +\subsection{The Executable Fragment of Isabelle's Language}\label{PL-isab}
  31.390 +The executable fragment consists of data-type and function
  31.391 +definitions.  It's usability even suggests that fragment for
  31.392 +introductory courses \cite{nipkow-prog-prove}. HOL is a typed logic whose type system resembles that of functional programming
  31.393 +languages. Thus there are
  31.394 +\begin{description}
  31.395 +\item[base types,] in particular \textit{bool}, the type of truth
  31.396 +values, \textit{nat}, \textit{int}, \textit{complex}, and the types of
  31.397 +natural, integer and complex numbers respectively in mathematics.
  31.398 +\item[type constructors] allow to define arbitrary types, from
  31.399 +\textit{set}, \textit{list} to advanced data-structures like
  31.400 +\textit{trees}, red-black-trees etc.
  31.401 +\item[function types,] denoted by $\Rightarrow$.
  31.402 +\item[type variables,] denoted by $^\prime a, ^\prime b$ etc, provide
  31.403 +type polymorphism. Isabelle automatically computes the type of each
  31.404 +variable in a term by use of Hindley-Milner type inference
  31.405 +\cite{pl:hind97,Milner-78}.
  31.406 +\end{description}
  31.407 +
  31.408 +\textbf{Terms} are formed as in functional programming by applying
  31.409 +functions to arguments. If $f$ is a function of type
  31.410 +$\tau_1\Rightarrow \tau_2$ and $t$ is a term of type $\tau_1$ then
  31.411 +$f\;t$ is a term of type~$\tau_2$. $t\;::\;\tau$ means that term $t$
  31.412 +has type $\tau$. There are many predefined infix symbols like $+$ and
  31.413 +$\leq$ most of which are overloaded for various types.
  31.414 +
  31.415 +HOL also supports some basic constructs from functional programming:
  31.416 +{\footnotesize\it\label{isabelle-stmts}
  31.417 +\begin{tabbing} 123\=\kill
  31.418 +01\>$( \; {\tt if} \; b \; {\tt then} \; t_1 \; {\tt else} \; t_2 \;)$\\
  31.419 +02\>$( \; {\tt let} \; x=t \; {\tt in} \; u \; )$\\
  31.420 +03\>$( \; {\tt case} \; t \; {\tt of} \; {\it pat}_1
  31.421 +  \Rightarrow t_1 \; |\dots| \; {\it pat}_n\Rightarrow t_n \; )$
  31.422 +\end{tabbing}}
  31.423 +\noindent The running example's program uses some of these elements
  31.424 +(marked by {\tt tt-font} on p.\pageref{s:impl}): for instance {\tt
  31.425 +let}\dots{\tt in} in lines {\rm 02} \dots {\rm 13}. In fact, the whole program
  31.426 +is an Isabelle term with specific function constants like {\tt
  31.427 +program}, {\tt Take}, {\tt Rewrite}, {\tt Subproblem} and {\tt
  31.428 +Rewrite\_Set} in lines {\rm 01, 03. 04, 07, 10} and {\rm 11, 12}
  31.429 +respectively.
  31.430 +
  31.431 +% Terms may also contain $\lambda$-abstractions. For example, $\lambda
  31.432 +% x. \; x$ is the identity function.
  31.433 +
  31.434 +%JR warum auskommentiert? WN2...
  31.435 +%WN2 weil ein Punkt wie dieser in weiteren Zusammenh"angen innerhalb
  31.436 +%WN2 des Papers auftauchen m"usste; nachdem ich einen solchen
  31.437 +%WN2 Zusammenhang _noch_ nicht sehe, habe ich den Punkt _noch_ nicht
  31.438 +%WN2 gel"oscht.
  31.439 +%WN2 Wenn der Punkt nicht weiter gebraucht wird, nimmt er nur wertvollen
  31.440 +%WN2 Platz f"ur Anderes weg.
  31.441 +
  31.442 +\textbf{Formulae} are terms of type \textit{bool}. There are the basic
  31.443 +constants \textit{True} and \textit{False} and the usual logical
  31.444 +connectives (in decreasing order of precedence): $\neg, \land, \lor,
  31.445 +\rightarrow$.
  31.446 +
  31.447 +\textbf{Equality} is available in the form of the infix function $=$
  31.448 +of type $a \Rightarrow a \Rightarrow {\it bool}$. It also works for
  31.449 +formulas, where it means ``if and only if''.
  31.450 +
  31.451 +\textbf{Quantifiers} are written $\forall x. \; P$ and $\exists x. \;
  31.452 +P$.  Quantifiers lead to non-executable functions, so functions do not
  31.453 +always correspond to programs, for instance, if comprising \\$(
  31.454 +\;{\it if} \; \exists x.\;P \; {\it then} \; e_1 \; {\it else} \; e_2
  31.455 +\;)$.
  31.456 +
  31.457 +\subsection{\isac's Tactics for Lucas-Interpretation}\label{PL-tacs}
  31.458 +The prototype extends Isabelle's language by specific statements
  31.459 +called tactics~\footnote{{\sisac}'s. These tactics are different from
  31.460 +Isabelle's tactics: the former concern steps in a calculation, the
  31.461 +latter concern proofs.}. For the programmer these
  31.462 +statements are functions with the following signatures:
  31.463 +
  31.464 +\begin{description}
  31.465 +\item[Rewrite:] ${\it theorem}\Rightarrow{\it term}\Rightarrow{\it
  31.466 +term} * {\it term}\;{\it list}$:
  31.467 +this tactic applies {\it theorem} to a {\it term} yielding a {\it
  31.468 +term} and a {\it term list}, the list are assumptions generated by
  31.469 +conditional rewriting. For instance, the {\it theorem}
  31.470 +$b\not=0\land c\not=0\Rightarrow\frac{a\cdot c}{b\cdot c}=\frac{a}{b}$
  31.471 +applied to the {\it term} $\frac{2\cdot x}{3\cdot x}$ yields
  31.472 +$(\frac{2}{3}, [x\not=0])$.
  31.473 +
  31.474 +\item[Rewrite\_Set:] ${\it ruleset}\Rightarrow{\it
  31.475 +term}\Rightarrow{\it term} * {\it term}\;{\it list}$:
  31.476 +this tactic applies {\it ruleset} to a {\it term}; {\it ruleset} is
  31.477 +a confluent and terminating term rewrite system, in general. If
  31.478 +none of the rules ({\it theorem}s) is applicable on interpretation
  31.479 +of this tactic, an exception is thrown.
  31.480 +
  31.481 +% \item[Rewrite\_Inst:] ${\it substitution}\Rightarrow{\it
  31.482 +% theorem}\Rightarrow{\it term}\Rightarrow{\it term} * {\it term}\;{\it
  31.483 +% list}$:
  31.484 +% 
  31.485 +% \item[Rewrite\_Set\_Inst:] ${\it substitution}\Rightarrow{\it
  31.486 +% ruleset}\Rightarrow{\it term}\Rightarrow{\it term} * {\it term}\;{\it
  31.487 +% list}$:
  31.488 +
  31.489 +%SPACEvvv
  31.490 +\item[Substitute:] ${\it substitution}\Rightarrow{\it
  31.491 +term}\Rightarrow{\it term}$: allows to access sub-terms.
  31.492 +%SPACE^^^
  31.493 +
  31.494 +\item[Take:] ${\it term}\Rightarrow{\it term}$:
  31.495 +this tactic has no effect in the program; but it creates a side-effect
  31.496 +by Lucas-Interpretation (see below) and writes {\it term} to the
  31.497 +Worksheet.
  31.498 +
  31.499 +\item[Subproblem:] ${\it theory} * {\it specification} * {\it
  31.500 +method}\Rightarrow{\it argument}\;{\it list}\Rightarrow{\it term}$:
  31.501 +this tactic is a generalisation of a function call: it takes an
  31.502 +\textit{argument list} as usual, and additionally a triple consisting
  31.503 +of an Isabelle \textit{theory}, an implicit \textit{specification} of the
  31.504 +program and a \textit{method} containing data for Lucas-Interpretation,
  31.505 +last not least a program (as an explicit specification)~\footnote{In
  31.506 +interactive tutoring these three items can be determined explicitly
  31.507 +by the user.}.
  31.508 +\end{description}
  31.509 +The tactics play a specific role in
  31.510 +Lucas-Interpretation~\cite{wn:lucas-interp-12}: they are treated as
  31.511 +break-points where, as a side-effect, a line is added to a calculation
  31.512 +as a protocol for proceeding towards a solution in step-wise problem
  31.513 +solving. At the same points Lucas-Interpretation serves interactive
  31.514 +tutoring and hands over control to the user. The user is free to
  31.515 +investigate underlying knowledge, applicable theorems, etc.  And the
  31.516 +user can proceed constructing a solution by input of a tactic to be
  31.517 +applied or by input of a formula; in the latter case the
  31.518 +Lucas-Interpreter has built up a logical context (initialised with the
  31.519 +precondition of the formal specification) such that Isabelle can
  31.520 +derive the formula from this context --- or give feedback, that no
  31.521 +derivation can be found.
  31.522 +
  31.523 +\subsection{Tactics as Control Flow Statements}
  31.524 +The flow of control in a program can be determined by {\tt if then else}
  31.525 +and {\tt case of} as mentioned on p.\pageref{isabelle-stmts} and also
  31.526 +by additional tactics:
  31.527 +\begin{description}
  31.528 +\item[Repeat:] ${\it tactic}\Rightarrow{\it term}\Rightarrow{\it
  31.529 +term}$: iterates over tactics which take a {\it term} as argument as
  31.530 +long as a tactic is applicable (for instance, {\tt Rewrite\_Set} might
  31.531 +not be applicable).
  31.532 +
  31.533 +\item[Try:] ${\it tactic}\Rightarrow{\it term}\Rightarrow{\it term}$:
  31.534 +if {\it tactic} is applicable, then it is applied to {\it term},
  31.535 +otherwise {\it term} is passed on without changes.
  31.536 +
  31.537 +\item[Or:] ${\it tactic}\Rightarrow{\it tactic}\Rightarrow{\it
  31.538 +term}\Rightarrow{\it term}$: If the first {\it tactic} is applicable,
  31.539 +it is applied to the first {\it term} yielding another {\it term},
  31.540 +otherwise the second {\it tactic} is applied; if none is applicable an
  31.541 +exception is raised.
  31.542 +
  31.543 +\item[@@:] ${\it tactic}\Rightarrow{\it tactic}\Rightarrow{\it
  31.544 +term}\Rightarrow{\it term}$: applies the first {\it tactic} to the
  31.545 +first {\it term} yielding an intermediate term (not appearing in the
  31.546 +signature) to which the second {\it tactic} is applied.
  31.547 +
  31.548 +\item[While:] ${\it term::bool}\Rightarrow{\it tactic}\Rightarrow{\it
  31.549 +term}\Rightarrow{\it term}$: if the first {\it term} is true, then the
  31.550 +{\it tactic} is applied to the first {\it term} yielding an
  31.551 +intermediate term (not appearing in the signature); the intermediate
  31.552 +term is added to the environment the first {\it term} is evaluated in
  31.553 +etc. as long as the first {\it term} is true.
  31.554 +\end{description}
  31.555 +The tactics are not treated as break-points by Lucas-Interpretation
  31.556 +and thus do neither contribute to the calculation nor to interaction.
  31.557 +
  31.558 +\section{Concepts and Tasks in TP-based Programming}\label{trial}
  31.559 +%\section{Development of a Program on Trial}
  31.560 +
  31.561 +This section presents all the concepts involved in TP-based
  31.562 +programming and all the tasks to be accomplished by programmers. The
  31.563 +presentation uses the running example from
  31.564 +Fig.\ref{fig-interactive} on p.\pageref{fig-interactive}.
  31.565 +
  31.566 +\subsection{Mechanization of Math --- Domain Engineering}\label{isabisac}
  31.567 +
  31.568 +%WN was Fachleute unter obigem Titel interessiert findet sich
  31.569 +%WN unterhalb des auskommentierten Textes.
  31.570 +
  31.571 +%WN der Text unten spricht Benutzer-Aspekte anund ist nicht speziell
  31.572 +%WN auf Computer-Mathematiker fokussiert.
  31.573 +% \paragraph{As mentioned in the introduction,} a prototype of an
  31.574 +% educational math assistant called
  31.575 +% {{\sisac}}\footnote{{{\sisac}}=\textbf{Isa}belle for
  31.576 +% \textbf{C}alculations, see http://www.ist.tugraz.at/isac/.} bridges
  31.577 +% the gap between (1) introducation and (2) application of mathematics:
  31.578 +% {{\sisac}} is based on Computer Theorem Proving (TP), a technology which
  31.579 +% requires each fact and each action justified by formal logic, so
  31.580 +% {{{\sisac}{}}} makes justifications transparent to students in
  31.581 +% interactive step-wise problem solving. By that way {{\sisac}} already
  31.582 +% can serve both:
  31.583 +% \begin{enumerate}
  31.584 +%   \item Introduction of math stuff (in e.g. partial fraction
  31.585 +% decomposition) by stepwise explaining and exercising respective
  31.586 +% symbolic calculations with ``next step guidance (NSG)'' and rigorously
  31.587 +% checking steps freely input by students --- this also in context with
  31.588 +% advanced applications (where the stuff to be taught in higher
  31.589 +% semesters can be skimmed through by NSG), and
  31.590 +%   \item Application of math stuff in advanced engineering courses
  31.591 +% (e.g. problems to be solved by inverse Z-transform in a Signal
  31.592 +% Processing Lab) and now without much ado about basic math techniques
  31.593 +% (like partial fraction decomposition): ``next step guidance'' supports
  31.594 +% students in independently (re-)adopting such techniques.
  31.595 +% \end{enumerate} 
  31.596 +% Before the question is answers, how {{\sisac}}
  31.597 +% accomplishes this task from a technical point of view, some remarks on
  31.598 +% the state-of-the-art is given, therefor follow up Section~\ref{emas}.
  31.599 +% 
  31.600 +% \subsection{Educational Mathematics Assistants (EMAs)}\label{emas}
  31.601 +% 
  31.602 +% \paragraph{Educational software in mathematics} is, if at all, based
  31.603 +% on Computer Algebra Systems (CAS, for instance), Dynamic Geometry
  31.604 +% Systems (DGS, for instance \footnote{GeoGebra http://www.geogebra.org}
  31.605 +% \footnote{Cinderella http://www.cinderella.de/}\footnote{GCLC
  31.606 +% http://poincare.matf.bg.ac.rs/~janicic/gclc/}) or spread-sheets. These
  31.607 +% base technologies are used to program math lessons and sometimes even
  31.608 +% exercises. The latter are cumbersome: the steps towards a solution of
  31.609 +% such an interactive exercise need to be provided with feedback, where
  31.610 +% at each step a wide variety of possible input has to be foreseen by
  31.611 +% the programmer - so such interactive exercises either require high
  31.612 +% development efforts or the exercises constrain possible inputs.
  31.613 +% 
  31.614 +% \subparagraph{A new generation} of educational math assistants (EMAs)
  31.615 +% is emerging presently, which is based on Theorem Proving (TP). TP, for
  31.616 +% instance Isabelle and Coq, is a technology which requires each fact
  31.617 +% and each action justified by formal logic. Pushed by demands for
  31.618 +% \textit{proven} correctness of safety-critical software TP advances
  31.619 +% into software engineering; from these advancements computer
  31.620 +% mathematics benefits in general, and math education in particular. Two
  31.621 +% features of TP are immediately beneficial for learning:
  31.622 +% 
  31.623 +% \paragraph{TP have knowledge in human readable format,} that is in
  31.624 +% standard predicate calculus. TP following the LCF-tradition have that
  31.625 +% knowledge down to the basic definitions of set, equality,
  31.626 +% etc~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL.html};
  31.627 +% following the typical deductive development of math, natural numbers
  31.628 +% are defined and their properties
  31.629 +% proven~\footnote{http://isabelle.in.tum.de/dist/library/HOL/Number\_Theory/Primes.html},
  31.630 +% etc. Present knowledge mechanized in TP exceeds high-school
  31.631 +% mathematics by far, however by knowledge required in software
  31.632 +% technology, and not in other engineering sciences.
  31.633 +% 
  31.634 +% \paragraph{TP can model the whole problem solving process} in
  31.635 +% mathematical problem solving {\em within} a coherent logical
  31.636 +% framework. This is already being done by three projects, by
  31.637 +% Ralph-Johan Back, by ActiveMath and by Carnegie Mellon Tutor.
  31.638 +% \par
  31.639 +% Having the whole problem solving process within a logical coherent
  31.640 +% system, such a design guarantees correctness of intermediate steps and
  31.641 +% of the result (which seems essential for math software); and the
  31.642 +% second advantage is that TP provides a wealth of theories which can be
  31.643 +% exploited for mechanizing other features essential for educational
  31.644 +% software.
  31.645 +% 
  31.646 +% \subsubsection{Generation of User Guidance in EMAs}\label{user-guid}
  31.647 +% 
  31.648 +% One essential feature for educational software is feedback to user
  31.649 +% input and assistance in coming to a solution.
  31.650 +% 
  31.651 +% \paragraph{Checking user input} by ATP during stepwise problem solving
  31.652 +% is being accomplished by the three projects mentioned above
  31.653 +% exclusively. They model the whole problem solving process as mentioned
  31.654 +% above, so all what happens between formalized assumptions (or formal
  31.655 +% specification) and goal (or fulfilled postcondition) can be
  31.656 +% mechanized. Such mechanization promises to greatly extend the scope of
  31.657 +% educational software in stepwise problem solving.
  31.658 +% 
  31.659 +% \paragraph{NSG (Next step guidance)} comprises the system's ability to
  31.660 +% propose a next step; this is a challenge for TP: either a radical
  31.661 +% restriction of the search space by restriction to very specific
  31.662 +% problem classes is required, or much care and effort is required in
  31.663 +% designing possible variants in the process of problem solving
  31.664 +% \cite{proof-strategies-11}.
  31.665 +% \par
  31.666 +% Another approach is restricted to problem solving in engineering
  31.667 +% domains, where a problem is specified by input, precondition, output
  31.668 +% and postcondition, and where the postcondition is proven by ATP behind
  31.669 +% the scenes: Here the possible variants in the process of problem
  31.670 +% solving are provided with feedback {\em automatically}, if the problem
  31.671 +% is described in a TP-based programing language: \cite{plmms10} the
  31.672 +% programmer only describes the math algorithm without caring about
  31.673 +% interaction (the respective program is functional and even has no
  31.674 +% input or output statements!); interaction is generated as a
  31.675 +% side-effect by the interpreter --- an efficient separation of concern
  31.676 +% between math programmers and dialog designers promising application
  31.677 +% all over engineering disciplines.
  31.678 +% 
  31.679 +% 
  31.680 +% \subsubsection{Math Authoring in Isabelle/ISAC\label{math-auth}}
  31.681 +% Authoring new mathematics knowledge in {{\sisac}} can be compared with
  31.682 +% ``application programing'' of engineering problems; most of such
  31.683 +% programing uses CAS-based programing languages (CAS = Computer Algebra
  31.684 +% Systems; e.g. Mathematica's or Maple's programing language).
  31.685 +% 
  31.686 +% \paragraph{A novel type of TP-based language} is used by {{\sisac}{}}
  31.687 +% \cite{plmms10} for describing how to construct a solution to an
  31.688 +% engineering problem and for calling equation solvers, integration,
  31.689 +% etc~\footnote{Implementation of CAS-like functionality in TP is not
  31.690 +% primarily concerned with efficiency, but with a didactic question:
  31.691 +% What to decide for: for high-brow algorithms at the state-of-the-art
  31.692 +% or for elementary algorithms comprehensible for students?} within TP;
  31.693 +% TP can ensure ``systems that never make a mistake'' \cite{casproto} -
  31.694 +% are impossible for CAS which have no logics underlying.
  31.695 +% 
  31.696 +% \subparagraph{Authoring is perfect} by writing such TP based programs;
  31.697 +% the application programmer is not concerned with interaction or with
  31.698 +% user guidance: this is concern of a novel kind of program interpreter
  31.699 +% called Lucas-Interpreter. This interpreter hands over control to a
  31.700 +% dialog component at each step of calculation (like a debugger at
  31.701 +% breakpoints) and calls automated TP to check user input following
  31.702 +% personalized strategies according to a feedback module.
  31.703 +% \par
  31.704 +% However ``application programing with TP'' is not done with writing a
  31.705 +% program: according to the principles of TP, each step must be
  31.706 +% justified. Such justifications are given by theorems. So all steps
  31.707 +% must be related to some theorem, if there is no such theorem it must
  31.708 +% be added to the existing knowledge, which is organized in so-called
  31.709 +% \textbf{theories} in Isabelle. A theorem must be proven; fortunately
  31.710 +% Isabelle comprises a mechanism (called ``axiomatization''), which
  31.711 +% allows to omit proofs. Such a theorem is shown in
  31.712 +% Example~\ref{eg:neuper1}.
  31.713 +
  31.714 +The running example requires to determine the inverse ${\cal Z}$-transform
  31.715 +for a class of functions. The domain of Signal Processing
  31.716 +is accustomed to specific notation for the resulting functions, which
  31.717 +are absolutely capable of being totalled and are called step-response: $u[n]$, where $u$ is the
  31.718 +function, $n$ is the argument and the brackets indicate that the
  31.719 +arguments are discrete. Surprisingly, Isabelle accepts the rules for
  31.720 +$z^{-1}$ in this traditional notation~\footnote{Isabelle
  31.721 +experts might be particularly surprised, that the brackets do not
  31.722 +cause errors in typing (as lists).}:
  31.723 +%\vbox{
  31.724 +% \begin{example}
  31.725 +  \label{eg:neuper1}
  31.726 +  {\footnotesize\begin{tabbing}
  31.727 +  123\=123\=123\=123\=\kill
  31.728 +
  31.729 +  01\>axiomatization where \\
  31.730 +  02\>\>  rule1: ``$z^{-1}\;1 = \delta [n]$'' and\\
  31.731 +  03\>\>  rule2: ``$\vert\vert z \vert\vert > 1 \Rightarrow z^{-1}\;z / (z - 1) = u [n]$'' and\\
  31.732 +  04\>\>  rule3: ``$\vert\vert z \vert\vert < 1 \Rightarrow z / (z - 1) = -u [-n - 1]$'' and \\
  31.733 +  05\>\>  rule4: ``$\vert\vert z \vert\vert > \vert\vert$ $\alpha$ $\vert\vert \Rightarrow z / (z - \alpha) = \alpha^n \cdot u [n]$'' and\\
  31.734 +  06\>\>  rule5: ``$\vert\vert z \vert\vert < \vert\vert \alpha \vert\vert \Rightarrow z / (z - \alpha) = -(\alpha^n) \cdot u [-n - 1]$'' and\\
  31.735 +  07\>\>  rule6: ``$\vert\vert z \vert\vert > 1 \Rightarrow z/(z - 1)^2 = n \cdot u [n]$''
  31.736 +  \end{tabbing}}
  31.737 +% \end{example}
  31.738 +%}
  31.739 +These 6 rules can be used as conditional rewrite rules, depending on
  31.740 +the respective convergence radius. Satisfaction from accordance with traditional
  31.741 +notation contrasts with the above word {\em axiomatization}: As TP-based, the
  31.742 +programming language expects these rules as {\em proved} theorems, and
  31.743 +not as axioms implemented in the above brute force manner; otherwise
  31.744 +all the verification efforts envisaged (like proof of the
  31.745 +post-condition, see below) would be meaningless.
  31.746 +
  31.747 +Isabelle provides a large body of knowledge, rigorously proved from
  31.748 +the basic axioms of mathematics~\footnote{This way of rigorously
  31.749 +deriving all knowledge from first principles is called the
  31.750 +LCF-paradigm in TP.}. In the case of the ${\cal Z}$-transform the most advanced
  31.751 +knowledge can be found in the theories on Multivariate
  31.752 +Analysis~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL-Multivariate\_Analysis}. However,
  31.753 +building up knowledge such that a proof for the above rules would be
  31.754 +reasonably short and easily comprehensible, still requires lots of
  31.755 +work (and is definitely out of scope of our case study).
  31.756 +
  31.757 +%REMOVED DUE TO SPACE CONSTRAINTS
  31.758 +%At the state-of-the-art in mechanization of knowledge in engineering
  31.759 +%sciences, the process does not stop with the mechanization of
  31.760 +%mathematics traditionally used in these sciences. Rather, ``Formal
  31.761 +%Methods''~\cite{ fm-03} are expected to proceed to formal and explicit
  31.762 +%description of physical items.  Signal Processing, for instance is
  31.763 +%concerned with physical devices for signal acquisition and
  31.764 +%reconstruction, which involve measuring a physical signal, storing it,
  31.765 +%and possibly later rebuilding the original signal or an approximation
  31.766 +%thereof. For digital systems, this typically includes sampling and
  31.767 +%quantization; devices for signal compression, including audio
  31.768 +%compression, image compression, and video compression, etc.  ``Domain
  31.769 +%engineering''\cite{db:dom-eng} is concerned with {\em specification}
  31.770 +%of these devices' components and features; this part in the process of
  31.771 +%mechanization is only at the beginning in domains like Signal
  31.772 +%Processing.
  31.773 +%
  31.774 +%TP-based programming, concern of this paper, is determined to
  31.775 +%add ``algorithmic knowledge'' to the mechanised body of knowledge.
  31.776 +%% in Fig.\ref{fig:mathuni} on
  31.777 +%% p.\pageref{fig:mathuni}.  As we shall see below, TP-based programming
  31.778 +%% starts with a formal {\em specification} of the problem to be solved.
  31.779 +%% \begin{figure}
  31.780 +%%   \begin{center}
  31.781 +%%     \includegraphics[width=110mm]{../../fig/jrocnik/math-universe-small}
  31.782 +%%     \caption{The three-dimensional universe of mathematics knowledge}
  31.783 +%%     \label{fig:mathuni}
  31.784 +%%   \end{center}
  31.785 +%% \end{figure}
  31.786 +%% The language for both axes is defined in the axis at the bottom, deductive
  31.787 +%% knowledge, in {\sisac} represented by Isabelle's theories.
  31.788 +
  31.789 +\subsection{Preparation of Simplifiers for the Program}\label{simp}
  31.790 +
  31.791 +All evaluation in the prototype's Lucas-Interpreter is done by term rewriting on
  31.792 +Isabelle's terms, see \S\ref{meth} below; in this section some of respective
  31.793 +preparations are described. In order to work reliably with term rewriting, the
  31.794 +respective rule-sets must be confluent and terminating~\cite{nipk:rew-all-that},
  31.795 +then they are called (canonical) simplifiers. These properties do not go without
  31.796 +saying, their establishment is a difficult task for the programmer; this task is
  31.797 +not yet supported in the prototype.
  31.798 +
  31.799 +The prototype rewrites using theorems only. Axioms which are theorems as well 
  31.800 +have been already shown in \S\ref{eg:neuper1} on p.\pageref{eg:neuper1} , we
  31.801 +assemble them in a rule-set and apply them in ML as follows:
  31.802 +
  31.803 +{\footnotesize
  31.804 +\begin{verbatim}
  31.805 +   01  val inverse_z = Rls 
  31.806 +   02      {id       = "inverse_z",
  31.807 +   03       rew_ord  = dummy_ord,
  31.808 +   04       erls     = Erls,
  31.809 +   05       rules    = [Thm ("rule1", @{thm rule1}), Thm ("rule2", @{thm rule1}), 
  31.810 +   06                   Thm ("rule3", @{thm rule3}), Thm ("rule4", @{thm rule4}), 
  31.811 +   07                   Thm ("rule5", @{thm rule5}), Thm ("rule6", @{thm rule6})],
  31.812 +   08       errpatts = [],
  31.813 +   09       scr      = ""}
  31.814 +\end{verbatim}}
  31.815 +
  31.816 +\noindent The items, line by line, in the above record have the following purpose:
  31.817 +\begin{description}
  31.818 +\item[01..02] the ML-value \textit{inverse\_z} stores it's identifier
  31.819 +as a string for ``reflection'' when switching between the language
  31.820 +layers of Isabelle/ML (like in the Lucas-Interpreter) and
  31.821 +Isabelle/Isar (like in the example program on p.\pageref{s:impl} on
  31.822 +line {\rm 12}).
  31.823 +
  31.824 +\item[03..04] both, (a) the rewrite-order~\cite{nipk:rew-all-that}
  31.825 +\textit{rew\_ord} and (b) the rule-set \textit{erls} are trivial here:
  31.826 +(a) the \textit{rules} in {\rm 07..12} don't need ordered rewriting
  31.827 +and (b) the assumptions of the \textit{rules} need not be evaluated
  31.828 +(they just go into the context during rewriting).
  31.829 +
  31.830 +\item[05..07] the \textit{rules} are the axioms from p.\pageref{eg:neuper1};
  31.831 +also ML-functions (\S\ref{funs}) can come into this list as shown in
  31.832 +\S\ref{flow-prep}; so they are distinguished by type-constructors \textit{Thm}
  31.833 +and \textit{Calc} respectively; for the purpose of reflection both
  31.834 +contain their identifiers.
  31.835 +
  31.836 +\item[08..09] are error-patterns not discussed here and \textit{scr}
  31.837 +is prepared to get a program, automatically generated by {\sisac} for
  31.838 +producing intermediate rewrites when requested by the user.
  31.839 +
  31.840 +\end{description}
  31.841 +
  31.842 +%OUTCOMMENTED DUE TO SPACE RESTRICTIONS
  31.843 +% \noindent It is advisable to immediately test rule-sets; for that
  31.844 +% purpose an appropriate term has to be created; \textit{parse} takes a
  31.845 +% context \textit{ctxt} and a string (with \textit{ZZ\_1} denoting ${\cal
  31.846 +% Z}^{-1}$) and creates a term:
  31.847 +% 
  31.848 +% {\footnotesize
  31.849 +% \begin{verbatim}
  31.850 +%    01 ML {*
  31.851 +%    02   val t = parse ctxt "ZZ_1 (z / (z - 1) + z / (z - </alpha>) + 1)";
  31.852 +%    03 *}
  31.853 +%    04 val t = Const ("Build_Inverse_Z_Transform.ZZ_1", 
  31.854 +%    05   "RealDef.real => RealDef.real => RealDef.real") $
  31.855 +%    06     (Const (...) $ (Const (...) $ Free (...) $ (Const (...) $ Free (...) 
  31.856 +% \end{verbatim}}
  31.857 +% 
  31.858 +% \noindent The internal representation of the term, as required for
  31.859 +% rewriting, consists of \textit{Const}ants, a pair of a string
  31.860 +% \textit{"Groups.plus\_class.plus"} for $+$ and a type, variables
  31.861 +% \textit{Free} and the respective constructor \textit{\$}. Now the
  31.862 +% term can be rewritten by the rule-set \textit{inverse\_z}:
  31.863 +% 
  31.864 +% {\footnotesize
  31.865 +% \begin{verbatim}
  31.866 +%    01 ML {*
  31.867 +%    02   val SOME (t', asm) = rewrite_set_ @{theory} inverse\_z t;
  31.868 +%    03   term2str t';
  31.869 +%    04   terms2str asm;
  31.870 +%    05 *}
  31.871 +%    06 val it = "u[n] + </alpha> ^ n * u[n] + </delta>[n]" : string
  31.872 +%    07 val it = "|| z || > 1 & || z || > </alpha>" : string
  31.873 +% \end{verbatim}}
  31.874 +% 
  31.875 +% \noindent The resulting term \textit{t} and the assumptions
  31.876 +% \textit{asm} are converted to readable strings by \textit{term2str}
  31.877 +% and \textit{terms2str}.
  31.878 +
  31.879 +\subsection{Preparation of ML-Functions}\label{funs}
  31.880 +Some functionality required in programming, cannot be accomplished by
  31.881 +rewriting. So the prototype has a mechanism to call functions within
  31.882 +the rewrite-engine: certain redexes in Isabelle terms call these
  31.883 +functions written in SML~\cite{pl:milner97}, the implementation {\em
  31.884 +and} meta-language of Isabelle. The programmer has to use this
  31.885 +mechanism.
  31.886 +
  31.887 +In the running example's program on p.\pageref{s:impl} the lines {\rm
  31.888 +05} and {\rm 06} contain such functions; we go into the details with
  31.889 +\textit{argument\_in X\_z;}. This function fetches the argument from a
  31.890 +function application: Line {\rm 03} in the example calculation on
  31.891 +p.\pageref{exp-calc} is created by line {\rm 06} of the example
  31.892 +program on p.\pageref{s:impl} where the program's environment assigns
  31.893 +the value \textit{X z} to the variable \textit{X\_z}; so the function
  31.894 +shall extract the argument \textit{z}.
  31.895 +
  31.896 +\medskip In order to be recognised as a function constant in the
  31.897 +program source the constant needs to be declared in a theory, here in
  31.898 +\textit{Build\_Inverse\_Z\_Transform.thy}; then it can be parsed in
  31.899 +the context \textit{ctxt} of that theory:
  31.900 +
  31.901 +{\footnotesize
  31.902 +\begin{verbatim}
  31.903 +01   consts
  31.904 +02     argument'_in :: "real => real" ("argument'_in _" 10)
  31.905 +\end{verbatim}}
  31.906 +   
  31.907 +%^3.2^    ML {* val SOME t = parse ctxt "argument_in (X z)"; *}
  31.908 +%^3.2^    val t = Const ("Build_Inverse_Z_Transform.argument'_in", "RealDef.real ⇒ RealDef.real") 
  31.909 +%^3.2^              $ (Free ("X", "RealDef.real ⇒ RealDef.real") $ Free ("z", "RealDef.real")): term
  31.910 +%^3.2^ \end{verbatim}}
  31.911 +%^3.2^ 
  31.912 +%^3.2^ \noindent Parsing produces a term \texttt{t} in internal
  31.913 +%^3.2^ representation~\footnote{The attentive reader realizes the 
  31.914 +%^3.2^ differences between interal and extermal representation even in the
  31.915 +%^3.2^ strings, i.e \texttt{'\_}}, consisting of \texttt{Const
  31.916 +%^3.2^ ("argument'\_in", type)} and the two variables \texttt{Free ("X",
  31.917 +%^3.2^ type)} and \texttt{Free ("z", type)}, \texttt{\$} is the term
  31.918 +%^3.2^ constructor. 
  31.919 +The function body below is implemented directly in SML,
  31.920 +i.e in an \texttt{ML \{* *\}} block; the function definition provides
  31.921 +a unique prefix \texttt{eval\_} to the function name:
  31.922 +
  31.923 +{\footnotesize
  31.924 +\begin{verbatim}
  31.925 +01   ML {*
  31.926 +02     fun eval_argument_in _ 
  31.927 +03       "Build_Inverse_Z_Transform.argument'_in" 
  31.928 +04       (t as (Const ("Build_Inverse_Z_Transform.argument'_in", _) $(f $arg))) _ =
  31.929 +05         if is_Free arg (*could be something to be simplified before*)
  31.930 +06         then SOME (term2str t ^"="^ term2str arg, Trueprop $(mk_equality (t, arg)))
  31.931 +07         else NONE
  31.932 +08     | eval_argument_in _ _ _ _ = NONE;
  31.933 +09   *}
  31.934 +\end{verbatim}}
  31.935 +
  31.936 +\noindent The function body creates either \texttt{NONE}
  31.937 +telling the rewrite-engine to search for the next redex, or creates an
  31.938 +ad-hoc theorem for rewriting, thus the programmer needs to adopt many
  31.939 +technicalities of Isabelle, for instance, the \textit{Trueprop}
  31.940 +constant.
  31.941 +
  31.942 +\bigskip This sub-task particularly sheds light on basic issues in the
  31.943 +design of a programming language, the integration of differential language
  31.944 +layers, the layer of Isabelle/Isar and Isabelle/ML.
  31.945 +
  31.946 +Another point of improvement for the prototype is the rewrite-engine: The
  31.947 +program on p.\pageref{s:impl} would not allow to contract the two lines {\rm 05}
  31.948 +and {\rm 06} to
  31.949 +
  31.950 +{\small\it\label{s:impl}
  31.951 +\begin{tabbing}
  31.952 +123l\=123\=123\=123\=123\=123\=123\=((x\=123\=(x \=123\=123\=\kill
  31.953 +\>{\rm 05/06}\>\>\>  (z::real) = argument\_in (lhs X\_eq) ;
  31.954 +\end{tabbing}}
  31.955 +
  31.956 +\noindent because nested function calls would require creating redexes
  31.957 +inside-out; however, the prototype's rewrite-engine only works top down
  31.958 +from the root of a term down to the leaves.
  31.959 +
  31.960 +How all these technicalities are to be checked in the prototype is 
  31.961 +shown in \S\ref{flow-prep} below.
  31.962 +
  31.963 +% \paragraph{Explicit Problems} require explicit methods to solve them, and within
  31.964 +% this methods we have some explicit steps to do. This steps can be unique for
  31.965 +% a special problem or refindable in other problems. No mather what case, such
  31.966 +% steps often require some technical functions behind. For the solving process
  31.967 +% of the Inverse Z Transformation and the corresponding partial fraction it was
  31.968 +% neccessary to build helping functions like \texttt{get\_denominator},
  31.969 +% \texttt{get\_numerator} or \texttt{argument\_in}. First two functions help us
  31.970 +% to filter the denominator or numerator out of a fraction, last one helps us to
  31.971 +% get to know the bound variable in a equation.
  31.972 +% \par
  31.973 +% By taking \texttt{get\_denominator} as an example, we want to explain how to 
  31.974 +% implement new functions into the existing system and how we can later use them
  31.975 +% in our program.
  31.976 +% 
  31.977 +% \subsubsection{Find a place to Store the Function}
  31.978 +% 
  31.979 +% The whole system builds up on a well defined structure of Knowledge. This
  31.980 +% Knowledge sets up at the Path:
  31.981 +% \begin{center}\ttfamily src/Tools/isac/Knowledge\normalfont\end{center}
  31.982 +% For implementing the Function \texttt{get\_denominator} (which let us extract
  31.983 +% the denominator out of a fraction) we have choosen the Theory (file)
  31.984 +% \texttt{Rational.thy}.
  31.985 +% 
  31.986 +% \subsubsection{Write down the new Function}
  31.987 +% 
  31.988 +% In upper Theory we now define the new function and its purpose:
  31.989 +% \begin{verbatim}
  31.990 +%   get_denominator :: "real => real"
  31.991 +% \end{verbatim}
  31.992 +% This command tells the machine that a function with the name
  31.993 +% \texttt{get\_denominator} exists which gets a real expression as argument and
  31.994 +% returns once again a real expression. Now we are able to implement the function
  31.995 +% itself, upcoming example now shows the implementation of
  31.996 +% \texttt{get\_denominator}.
  31.997 +% 
  31.998 +% %\begin{example}
  31.999 +%   \label{eg:getdenom}
 31.1000 +%   \begin{verbatim}
 31.1001 +% 
 31.1002 +% 01  (*
 31.1003 +% 02   *("get_denominator",
 31.1004 +% 03   *  ("Rational.get_denominator", eval_get_denominator ""))
 31.1005 +% 04   *)
 31.1006 +% 05  fun eval_get_denominator (thmid:string) _ 
 31.1007 +% 06            (t as Const ("Rational.get_denominator", _) $
 31.1008 +% 07                (Const ("Rings.inverse_class.divide", _) $num 
 31.1009 +% 08                  $denom)) thy = 
 31.1010 +% 09          SOME (mk_thmid thmid "" 
 31.1011 +% 10              (Print_Mode.setmp [] 
 31.1012 +% 11                (Syntax.string_of_term (thy2ctxt thy)) denom) "", 
 31.1013 +% 12              Trueprop $ (mk_equality (t, denom)))
 31.1014 +% 13    | eval_get_denominator _ _ _ _ = NONE;\end{verbatim}
 31.1015 +% %\end{example}
 31.1016 +% 
 31.1017 +% Line \texttt{07} and \texttt{08} are describing the mode of operation the best -
 31.1018 +% there is a fraction\\ (\ttfamily Rings.inverse\_class.divide\normalfont) 
 31.1019 +% splittet
 31.1020 +% into its two parts (\texttt{\$num \$denom}). The lines before are additionals
 31.1021 +% commands for declaring the function and the lines after are modeling and 
 31.1022 +% returning a real variable out of \texttt{\$denom}.
 31.1023 +% 
 31.1024 +% \subsubsection{Add a test for the new Function}
 31.1025 +% 
 31.1026 +% \paragraph{Everytime when adding} a new function it is essential also to add
 31.1027 +% a test for it. Tests for all functions are sorted in the same structure as the
 31.1028 +% knowledge it self and can be found up from the path:
 31.1029 +% \begin{center}\ttfamily test/Tools/isac/Knowledge\normalfont\end{center}
 31.1030 +% This tests are nothing very special, as a first prototype the functionallity
 31.1031 +% of a function can be checked by evaluating the result of a simple expression
 31.1032 +% passed to the function. Example~\ref{eg:getdenomtest} shows the test for our
 31.1033 +% \textit{just} created function \texttt{get\_denominator}.
 31.1034 +% 
 31.1035 +% %\begin{example}
 31.1036 +% \label{eg:getdenomtest}
 31.1037 +% \begin{verbatim}
 31.1038 +% 
 31.1039 +% 01 val thy = @{theory Isac};
 31.1040 +% 02 val t = term_of (the (parse thy "get_denominator ((a +x)/b)"));
 31.1041 +% 03 val SOME (_, t') = eval_get_denominator "" 0 t thy;
 31.1042 +% 04 if term2str t' = "get_denominator ((a + x) / b) = b" then ()
 31.1043 +% 05 else error "get_denominator ((a + x) / b) = b" \end{verbatim}
 31.1044 +% %\end{example}
 31.1045 +% 
 31.1046 +% \begin{description}
 31.1047 +% \item[01] checks if the proofer set up on our {\sisac{}} System.
 31.1048 +% \item[02] passes a simple expression (fraction) to our suddenly created
 31.1049 +%           function.
 31.1050 +% \item[04] checks if the resulting variable is the correct one (in this case
 31.1051 +%           ``b'' the denominator) and returns.
 31.1052 +% \item[05] handels the error case and reports that the function is not able to
 31.1053 +%           solve the given problem.
 31.1054 +% \end{description}
 31.1055 +
 31.1056 +\subsection{Specification of the Problem}\label{spec}
 31.1057 +%WN <--> \chapter 7 der Thesis
 31.1058 +%WN die Argumentation unten sollte sich NUR auf Verifikation beziehen..
 31.1059 +
 31.1060 +Mechanical treatment requires to translate a textual problem
 31.1061 +description like in Fig.\ref{fig-interactive} on
 31.1062 +p.\pageref{fig-interactive} into a {\em formal} specification. The
 31.1063 +formal specification of the running example could look like is this
 31.1064 +~\footnote{The ``TODO'' in the postcondition indicates, that postconditions
 31.1065 +are not yet handled in the prototype; in particular, the postcondition, i.e.
 31.1066 +the correctness of the result is not yet automatically proved.}:
 31.1067 +
 31.1068 +%WN Hier brauchen wir die Spezifikation des 'running example' ...
 31.1069 +%JR Habe input, output und precond vom Beispiel eingefügt brauche aber Hilfe bei
 31.1070 +%JR der post condition - die existiert für uns ja eigentlich nicht aka
 31.1071 +%JR haben sie bis jetzt nicht beachtet WN...
 31.1072 +%WN2 Mein Vorschlag ist, das TODO zu lassen und deutlich zu kommentieren.
 31.1073 +%JR2 done
 31.1074 +
 31.1075 +\label{eg:neuper2}
 31.1076 +{\small\begin{tabbing}
 31.1077 +  123\=123\=postcond \=: \= $\forall \,A^\prime\, u^\prime \,v^\prime.\,$\=\kill
 31.1078 +  %\hfill \\
 31.1079 +  \>Specification:\\
 31.1080 +  \>  \>input    \>: ${\it filterExpression} \;\;X\;z=\frac{3}{z-\frac{1}{4}+-\frac{1}{8}*\frac{1}{z}}, \;{\it domain}\;\mathbb{R}-\{\frac{1}{2}, \frac{-1}{4}\}$\\
 31.1081 +  \>\>precond  \>: $\frac{3}{z-\frac{1}{4}+-\frac{1}{8}*\frac{1}{z}}\;\; {\it continuous\_on}\; \mathbb{R}-\{\frac{1}{2}, \frac{-1}{4}\}$ \\
 31.1082 +  \>\>output   \>: stepResponse $x[n]$ \\
 31.1083 +  \>\>postcond \>: TODO
 31.1084 +\end{tabbing}}
 31.1085 +
 31.1086 +%JR wie besprochen, kein remark, keine begründung, nur simples "nicht behandelt"
 31.1087 +
 31.1088 +% \begin{remark}
 31.1089 +%    Defining the postcondition requires a high amount mathematical 
 31.1090 +%    knowledge, the difficult part in our case is not to set up this condition 
 31.1091 +%    nor it is more to define it in a way the interpreter is able to handle it. 
 31.1092 +%    Due the fact that implementing that mechanisms is quite the same amount as 
 31.1093 +%    creating the programm itself, it is not avaible in our prototype.
 31.1094 +%    \label{rm:postcond}
 31.1095 +% \end{remark}
 31.1096 +
 31.1097 +The implementation of the formal specification in the present
 31.1098 +prototype, still bar-bones without support for authoring, is done
 31.1099 +like that:
 31.1100 +%WN Kopie von Inverse_Z_Transform.thy, leicht versch"onert:
 31.1101 +
 31.1102 +{\footnotesize\label{exp-spec}
 31.1103 +\begin{verbatim}
 31.1104 +   00 ML {*
 31.1105 +   01  store_specification
 31.1106 +   02    (prepare_specification
 31.1107 +   03      "pbl_SP_Ztrans_inv"
 31.1108 +   04      ["Jan Rocnik"]
 31.1109 +   05      thy
 31.1110 +   06      ( ["Inverse", "Z_Transform", "SignalProcessing"],
 31.1111 +   07        [ ("#Given", ["filterExpression X_eq", "domain D"]),
 31.1112 +   08          ("#Pre"  , ["(rhs X_eq) is_continuous_in D"]),
 31.1113 +   09          ("#Find" , ["stepResponse n_eq"]),
 31.1114 +   10          ("#Post" , [" TODO "])])
 31.1115 +   11        prls
 31.1116 +   12        NONE
 31.1117 +   13        [["SignalProcessing","Z_Transform","Inverse"]]);
 31.1118 +   14 *}
 31.1119 +\end{verbatim}}
 31.1120 +
 31.1121 +Although the above details are partly very technical, we explain them
 31.1122 +in order to document some intricacies of TP-based programming in the
 31.1123 +present state of the {\sisac} prototype:
 31.1124 +\begin{description}
 31.1125 +\item[01..02]\textit{store\_specification:} stores the result of the
 31.1126 +function \textit{prep\_specification} in a global reference
 31.1127 +\textit{Unsynchronized.ref}, which causes principal conflicts with
 31.1128 +Isabelle's asynchronous document model~\cite{Wenzel-11:doc-orient} and
 31.1129 +parallel execution~\cite{Makarius-09:parall-proof} and is under
 31.1130 +reconstruction already.
 31.1131 +
 31.1132 +\textit{prep\_specification:} translates the specification to an internal format
 31.1133 +which allows efficient processing; see for instance line {\rm 07}
 31.1134 +below.
 31.1135 +\item[03..04] are a unique identifier for the specification within {\sisac}
 31.1136 +and the ``mathematics author'' holding the copy-rights.
 31.1137 +\item[05] is the Isabelle \textit{theory} required to parse the
 31.1138 +specification in lines {\rm 07..10}.
 31.1139 +\item[06] is a key into the tree of all specifications as presented to
 31.1140 +the user (where some branches might be hidden by the dialogue
 31.1141 +component).
 31.1142 +\item[07..10] are the specification with input, pre-condition, output
 31.1143 +and post-condition respectively; note that the specification contains
 31.1144 +variables to be instantiated with concrete values for a concrete problem ---
 31.1145 +thus the specification actually captures a class of problems. The post-condition is not handled in
 31.1146 +the prototype presently.
 31.1147 +\item[11] is a rule-set (defined elsewhere) for evaluation of the pre-condition: \textit{(rhs X\_eq) is\_continuous\_in D}, instantiated with the values of a concrete problem, evaluates to true or false --- and all evaluation is done by
 31.1148 +rewriting determined by rule-sets.
 31.1149 +\item[12]\textit{NONE:} could be \textit{SOME ``solve ...''} for a
 31.1150 +problem associated to a function from Computer Algebra (like an
 31.1151 +equation solver) which is not the case here.
 31.1152 +\item[13] is a list of methods solving the specified problem (here
 31.1153 +only one list item) represented analogously to {\rm 06}.
 31.1154 +\end{description}
 31.1155 +
 31.1156 +
 31.1157 +%WN die folgenden Erkl"arungen finden sich durch "grep -r 'datatype pbt' *"
 31.1158 +%WN ...
 31.1159 +%  type pbt = 
 31.1160 +%     {guh  : guh,         (*unique within this isac-knowledge*)
 31.1161 +%      mathauthors: string list, (*copyright*)
 31.1162 +%      init  : pblID,      (*to start refinement with*)
 31.1163 +%      thy   : theory,     (* which allows to compile that pbt
 31.1164 +%			  TODO: search generalized for subthy (ref.p.69*)
 31.1165 +%      (*^^^ WN050912 NOT used during application of the problem,
 31.1166 +%       because applied terms may be from 'subthy' as well as from super;
 31.1167 +%       thus we take 'maxthy'; see match_ags !*)
 31.1168 +%      cas   : term option,(*'CAS-command'*)
 31.1169 +%      prls  : rls,        (* for preds in where_*)
 31.1170 +%      where_: term list,  (* where - predicates*)
 31.1171 +%      ppc   : pat list,
 31.1172 +%      (*this is the model-pattern; 
 31.1173 +%       it contains "#Given","#Where","#Find","#Relate"-patterns
 31.1174 +%       for constraints on identifiers see "fun cpy_nam"*)
 31.1175 +%      met   : metID list}; (* methods solving the pbt*)
 31.1176 +%
 31.1177 +%WN weil dieser Code sehr unaufger"aumt ist, habe ich die Erkl"arungen
 31.1178 +%WN oben selbst geschrieben.
 31.1179 +
 31.1180 +
 31.1181 +
 31.1182 +
 31.1183 +%WN das w"urde ich in \sec\label{progr} verschieben und
 31.1184 +%WN das SubProblem partial fractions zum Erkl"aren verwenden.
 31.1185 +% Such a specification is checked before the execution of a program is
 31.1186 +% started, the same applies for sub-programs. In the following example
 31.1187 +% (Example~\ref{eg:subprob}) shows the call of such a subproblem:
 31.1188 +% 
 31.1189 +% \vbox{
 31.1190 +%   \begin{example}
 31.1191 +%   \label{eg:subprob}
 31.1192 +%   \hfill \\
 31.1193 +%   {\ttfamily \begin{tabbing}
 31.1194 +%   ``(L\_L::bool list) = (\=SubProblem (\=Test','' \\
 31.1195 +%   ``\>\>[linear,univariate,equation,test],'' \\
 31.1196 +%   ``\>\>[Test,solve\_linear])'' \\
 31.1197 +%   ``\>[BOOL equ, REAL z])'' \\
 31.1198 +%   \end{tabbing}
 31.1199 +%   }
 31.1200 +%   {\small\textit{
 31.1201 +%     \noindent If a program requires a result which has to be
 31.1202 +% calculated first we can use a subproblem to do so. In our specific
 31.1203 +% case we wanted to calculate the zeros of a fraction and used a
 31.1204 +% subproblem to calculate the zeros of the denominator polynom.
 31.1205 +%     }}
 31.1206 +%   \end{example}
 31.1207 +% }
 31.1208 +
 31.1209 +\subsection{Implementation of the Method}\label{meth}
 31.1210 +A method collects all data required to interpret a certain program by
 31.1211 +Lucas-Interpretation. The \texttt{program} from p.\pageref{s:impl} of
 31.1212 +the running example is embedded on the last line in the following method:
 31.1213 +%The methods represent the different ways a problem can be solved. This can
 31.1214 +%include mathematical tactics as well as tactics taught in different courses.
 31.1215 +%Declaring the Method itself gives us the possibilities to describe the way of 
 31.1216 +%calculation in deep, as well we get the oppertunities to build in different
 31.1217 +%rulesets.
 31.1218 +
 31.1219 +{\footnotesize
 31.1220 +\begin{verbatim}
 31.1221 +   00 ML {*
 31.1222 +   01  store_method
 31.1223 +   02    (prep_method
 31.1224 +   03      "SP_InverseZTransformation_classic" 
 31.1225 +   04      ["Jan Rocnik"]
 31.1226 +   05      thy 
 31.1227 +   06      ( ["SignalProcessing", "Z_Transform", "Inverse"], 
 31.1228 +   07        [ ("#Given", ["filterExpression X_eq", "domain D"]),
 31.1229 +   08          ("#Pre"  , ["(rhs X_eq) is_continuous_in D"]),
 31.1230 +   09          ("#Find" , ["stepResponse n_eq"]),
 31.1231 +   10        rew_ord  erls
 31.1232 +   11        srls  prls  nrls
 31.1233 +   12        errpats 
 31.1234 +   13        program);
 31.1235 +   14 *}
 31.1236 +\end{verbatim}}
 31.1237 +
 31.1238 +\noindent The above code stores the whole structure analogously to a
 31.1239 +specification as described above:
 31.1240 +\begin{description}
 31.1241 +\item[01..06] are identical to those for the example specification on
 31.1242 +p.\pageref{exp-spec}.
 31.1243 +
 31.1244 +\item[07..09] show something looking like the specification; this is a
 31.1245 +{\em guard}: as long as not all \textit{Given} items are present and
 31.1246 +the \textit{Pre}-conditions is not true, interpretation of the program
 31.1247 +is not started.
 31.1248 +
 31.1249 +\item[10..11] all concern rewriting (the respective data are defined elsewhere): \textit{rew\_ord} is the rewrite order~\cite{nipk:rew-all-that} in case
 31.1250 +\textit{program} contains a \textit{Rewrite} tactic; and in case the respective rule is a conditional rewrite-rule, \textit{erls} features evaluating the conditions. The rule-sets 
 31.1251 +\textit{srls, prls, nrls} feature evaluating (a) the ML-functions in the program (e.g.
 31.1252 +\textit{lhs, argument\_in, rhs} in the program on p.\pageref{s:impl}, (b) the pre-condition analogous to the specification in line 11 on p.\pageref{exp-spec}
 31.1253 +and (c) is required for the derivation-machinery checking user-input formulas.
 31.1254 +
 31.1255 +\item[12..13] \textit{errpats} are error-patterns~\cite{gdaroczy-EP-13} for this method and \textit{program} is the variable holding the example from p.\pageref {s:impl}.
 31.1256 +\end{description}
 31.1257 +The many rule-sets above cause considerable efforts for the
 31.1258 +programmers, in particular, because there are no tools for checking
 31.1259 +essential features of rule-sets.
 31.1260 +
 31.1261 +% is again very technical and goes hard in detail. Unfortunataly
 31.1262 +% most declerations are not essential for a basic programm but leads us to a huge
 31.1263 +% range of powerful possibilities.
 31.1264 +% 
 31.1265 +% \begin{description}
 31.1266 +% \item[01..02] stores the method with the given name into the system under a global
 31.1267 +% reference.
 31.1268 +% \item[03] specifies the topic within which context the method can be found.
 31.1269 +% \item[04..05] as the requirements for different methods can be deviant we 
 31.1270 +% declare what is \emph{given} and and what to \emph{find} for this specific method.
 31.1271 +% The code again helds on the topic of the case studie, where the inverse 
 31.1272 +% z-transformation does a switch between a term describing a electrical filter into
 31.1273 +% its step response. Also the datatype has to be declared (bool - due the fact that 
 31.1274 +% we handle equations).
 31.1275 +% \item[06] \emph{rewrite order} is the order of this rls (ruleset), where one 
 31.1276 +% theorem of it is used for rewriting one single step.
 31.1277 +% \item[07] \texttt{rls} is the currently used ruleset for this method. This set
 31.1278 +% has already been defined before.
 31.1279 +% \item[08] we would have the possiblitiy to add this method to a predefined tree of
 31.1280 +% calculations, i.eg. if it would be a sub of a bigger problem, here we leave it
 31.1281 +% independend.
 31.1282 +% \item[09] The \emph{source ruleset}, can be used to evaluate list expressions in 
 31.1283 +% the source.
 31.1284 +% \item[10] \emph{predicates ruleset} can be used to indicates predicates within 
 31.1285 +% model patterns.
 31.1286 +% \item[11] The \emph{check ruleset} summarizes rules for checking formulas 
 31.1287 +% elementwise.
 31.1288 +% \item[12] \emph{error patterns} which are expected in this kind of method can be
 31.1289 +% pre-specified to recognize them during the method.
 31.1290 +% \item[13] finally the \emph{canonical ruleset}, declares the canonical simplifier 
 31.1291 +% of the specific method.
 31.1292 +% \item[14] for this code snipset we don't specify the programm itself and keep it 
 31.1293 +% empty. Follow up \S\ref{progr} for informations on how to implement this
 31.1294 +% \textit{main} part.
 31.1295 +% \end{description}
 31.1296 +
 31.1297 +\subsection{Implementation of the TP-based Program}\label{progr} 
 31.1298 +So finally all the prerequisites are described and the final task can
 31.1299 +be addressed. The program below comes back to the running example: it
 31.1300 +computes a solution for the problem from Fig.\ref{fig-interactive} on
 31.1301 +p.\pageref{fig-interactive}. The reader is reminded of
 31.1302 +\S\ref{PL-isab}, the introduction of the programming language:
 31.1303 +
 31.1304 +{\footnotesize\it\label{s:impl}
 31.1305 +\begin{tabbing}
 31.1306 +123l\=123\=123\=123\=123\=123\=123\=((x\=123\=(x \=123\=123\=\kill
 31.1307 +\>{\rm 00}\>ML \{*\\
 31.1308 +\>{\rm 00}\>val program =\\
 31.1309 +\>{\rm 01}\>  "{\tt Program} InverseZTransform (X\_eq::bool) =   \\
 31.1310 +\>{\rm 02}\>\>  {\tt let}                                       \\
 31.1311 +\>{\rm 03}\>\>\>  X\_eq = {\tt Take} X\_eq ;   \\
 31.1312 +\>{\rm 04}\>\>\>  X\_eq = {\tt Rewrite} prep\_for\_part\_frac X\_eq ; \\
 31.1313 +\>{\rm 05}\>\>\>  (X\_z::real) = lhs X\_eq ;       \\ %no inside-out evaluation
 31.1314 +\>{\rm 06}\>\>\>  (z::real) = argument\_in X\_z; \\
 31.1315 +\>{\rm 07}\>\>\>  (part\_frac::real) = {\tt SubProblem} \\
 31.1316 +\>{\rm 08}\>\>\>\>\>\>\>\>  ( Isac, [partial\_fraction, rational, simplification], [] )\\
 31.1317 +%\>{\rm 10}\>\>\>\>\>\>\>\>\>  [simplification, of\_rationals, to\_partial\_fraction] ) \\
 31.1318 +\>{\rm 09}\>\>\>\>\>\>\>\>  [ (rhs X\_eq)::real, z::real ]; \\
 31.1319 +\>{\rm 10}\>\>\>  (X'\_eq::bool) = {\tt Take} ((X'::real =$>$ bool) z = ZZ\_1 part\_frac) ; \\
 31.1320 +\>{\rm 11}\>\>\>  X'\_eq = (({\tt Rewrite\_Set} prep\_for\_inverse\_z) @@   \\
 31.1321 +\>{\rm 12}\>\>\>\>\>  $\;\;$ ({\tt Rewrite\_Set} inverse\_z)) X'\_eq \\
 31.1322 +\>{\rm 13}\>\>  {\tt in } \\
 31.1323 +\>{\rm 14}\>\>\>  X'\_eq"\\
 31.1324 +\>{\rm 15}\>*\}
 31.1325 +\end{tabbing}}
 31.1326 +% ORIGINAL FROM Inverse_Z_Transform.thy
 31.1327 +% "Script InverseZTransform (X_eq::bool) =            "^(*([], Frm), Problem (Isac, [Inverse, Z_Transform, SignalProcessing])*)
 31.1328 +% "(let X = Take X_eq;                                "^(*([1], Frm), X z = 3 / (z - 1 / 4 + -1 / 8 * (1 / z))*)
 31.1329 +% "  X' = Rewrite ruleZY False X;                     "^(*([1], Res), ?X' z = 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
 31.1330 +% "  (X'_z::real) = lhs X';                           "^(*            ?X' z*)
 31.1331 +% "  (zzz::real) = argument_in X'_z;                  "^(*            z *)
 31.1332 +% "  (funterm::real) = rhs X';                        "^(*            3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
 31.1333 +%
 31.1334 +% "  (pbz::real) = (SubProblem (Isac',                "^(**)
 31.1335 +% "    [partial_fraction,rational,simplification],    "^
 31.1336 +% "    [simplification,of_rationals,to_partial_fraction]) "^
 31.1337 +% "    [REAL funterm, REAL zzz]);                     "^(*([2], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
 31.1338 +%
 31.1339 +% "  (pbz_eq::bool) = Take (X'_z = pbz);              "^(*([3], Frm), ?X' z = 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
 31.1340 +% "  pbz_eq = Rewrite ruleYZ False pbz_eq;            "^(*([3], Res), ?X' z = 4 * (?z / (z - 1 / 2)) + -4 * (?z / (z - -1 / 4))*)
 31.1341 +% "  pbz_eq = drop_questionmarks pbz_eq;              "^(*               4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
 31.1342 +% "  (X_zeq::bool) = Take (X_z = rhs pbz_eq);         "^(*([4], Frm), X_z = 4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
 31.1343 +% "  n_eq = (Rewrite_Set inverse_z False) X_zeq;      "^(*([4], Res), X_z = 4 * (1 / 2) ^^^ ?n * ?u [?n] + -4 * (-1 / 4) ^^^ ?n * ?u [?n]*)
 31.1344 +% "  n_eq = drop_questionmarks n_eq                   "^(*            X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
 31.1345 +% "in n_eq)"                                            (*([], Res), X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
 31.1346 +The program is represented as a string and part of the method in
 31.1347 +\S\ref{meth}.  As mentioned in \S\ref{PL} the program is purely
 31.1348 +functional and lacks any input statements and output statements. So
 31.1349 +the steps of calculation towards a solution (and interactive tutoring
 31.1350 +in step-wise problem solving) are created as a side-effect by
 31.1351 +Lucas-Interpretation.  The side-effects are triggered by the tactics
 31.1352 +\texttt{Take}, \texttt{Rewrite}, \texttt{SubProblem} and
 31.1353 +\texttt{Rewrite\_Set} in the above lines {\rm 03, 04, 07, 10, 11} and
 31.1354 +{\rm 12} respectively. These tactics produce the respective lines in the
 31.1355 +calculation on p.\pageref{flow-impl}.
 31.1356 +
 31.1357 +The above lines {\rm 05, 06} do not contain a tactics, so they do not
 31.1358 +immediately contribute to the calculation on p.\pageref{flow-impl};
 31.1359 +rather, they compute actual arguments for the \texttt{SubProblem} in
 31.1360 +line {\rm 09}~\footnote{The tactics also are break-points for the
 31.1361 +interpreter, where control is handed over to the user in interactive
 31.1362 +tutoring.}. Line {\rm 11} contains tactical \textit{@@}.
 31.1363 +
 31.1364 +\medskip The above program also indicates the dominant role of interactive
 31.1365 +selection of knowledge in the three-dimensional universe of
 31.1366 +mathematics. The \texttt{SubProblem} in the above lines
 31.1367 +{\rm 07..09} is more than a function call with the actual arguments
 31.1368 +\textit{[ (rhs X\_eq)::real, z::real ]}. The programmer has to determine
 31.1369 +three items:
 31.1370 +
 31.1371 +\begin{enumerate}
 31.1372 +\item the theory, in the example \textit{Isac} because different
 31.1373 +methods can be selected in Pt.3 below, which are defined in different
 31.1374 +theories with \textit{Isac} collecting them.
 31.1375 +\item the specification identified by \textit{[partial\_fraction,
 31.1376 +rational, simplification]} in the tree of specifications; this
 31.1377 +specification is analogous to the specification of the main program
 31.1378 +described in \S\ref{spec}; the problem is to find a ``partial fraction
 31.1379 +decomposition'' for a univariate rational polynomial.
 31.1380 +\item the method in the above example is \textit{[ ]}, i.e. empty,
 31.1381 +which supposes the interpreter to select one of the methods predefined
 31.1382 +in the specification, for instance in line {\rm 13} in the running
 31.1383 +example's specification on p.\pageref{exp-spec}~\footnote{The freedom
 31.1384 +(or obligation) for selection carries over to the student in
 31.1385 +interactive tutoring.}.
 31.1386 +\end{enumerate}
 31.1387 +
 31.1388 +The program code, above presented as a string, is parsed by Isabelle's
 31.1389 +parser --- the program is an Isabelle term. This fact is expected to
 31.1390 +simplify verification tasks in the future; on the other hand, this
 31.1391 +fact causes troubles in error detection which are discussed as part
 31.1392 +of the work-flow in the subsequent section.
 31.1393 +
 31.1394 +\section{Work-flow of Programming in the Prototype}\label{workflow}
 31.1395 +The new prover IDE Isabelle/jEdit~\cite{makar-jedit-12} is a great
 31.1396 +step forward for interactive theory and proof development. The
 31.1397 +{\sisac}-prototype re-uses this IDE as a programming environment.  The
 31.1398 +experiences from this re-use show, that the essential components are
 31.1399 +available from Isabelle/jEdit. However, additional tools and features
 31.1400 +are required to achieve acceptable usability.
 31.1401 +
 31.1402 +So notable experiences are reported here, also as a requirement
 31.1403 +capture for further development of TP-based languages and respective
 31.1404 +IDEs.
 31.1405 +
 31.1406 +\subsection{Preparations and Trials}\label{flow-prep}
 31.1407 +The many sub-tasks to be accomplished {\em before} the first line of
 31.1408 +program code can be written and tested suggest an approach which
 31.1409 +step-wise establishes the prerequisites. The case study underlying
 31.1410 +this paper~\cite{jrocnik-bakk} documents the approach in a separate
 31.1411 +Isabelle theory,
 31.1412 +\textit{Build\_Inverse\_Z\_Transform.thy}~\footnote{http://www.ist.tugraz.at/projects/isac/publ/Build\_Inverse\_Z\_Transform.thy}. Part
 31.1413 +II in the study comprises this theory, \LaTeX ed from the theory by
 31.1414 +use of Isabelle's document preparation system. This paper resembles
 31.1415 +the approach in \S\ref{isabisac} to \S\ref{meth}, which in actual
 31.1416 +implementation work involves several iterations.
 31.1417 +
 31.1418 +\bigskip For instance, only the last step, implementing the program
 31.1419 +described in \S\ref{meth}, reveals details required. Let us assume,
 31.1420 +this is the ML-function \textit{argument\_in} required in line {\rm 06}
 31.1421 +of the example program on p.\pageref{s:impl}; how this function needs
 31.1422 +to be implemented in the prototype has been discussed in \S\ref{funs}
 31.1423 +already.
 31.1424 +
 31.1425 +Now let us assume, that calling this function from the program code
 31.1426 +does not work; so testing this function is required in order to find out
 31.1427 +the reason: type errors, a missing entry of the function somewhere or
 31.1428 +even more nasty technicalities \dots
 31.1429 +
 31.1430 +{\footnotesize
 31.1431 +\begin{verbatim}
 31.1432 +01   ML {*
 31.1433 +02     val SOME t = parseNEW ctxt "argument_in (X (z::real))";
 31.1434 +03     val SOME (str, t') = eval_argument_in "" 
 31.1435 +04       "Build_Inverse_Z_Transform.argument'_in" t 0;
 31.1436 +05     term2str t';
 31.1437 +06   *}
 31.1438 +07   val it = "(argument_in X z) = z": string\end{verbatim}}
 31.1439 +
 31.1440 +\noindent So, this works: we get an ad-hoc theorem, which used in
 31.1441 +rewriting would reduce \texttt{argument\_in X z} to \texttt{z}. Now we check this
 31.1442 +reduction and create a rule-set \texttt{rls} for that purpose:
 31.1443 +
 31.1444 +{\footnotesize
 31.1445 +\begin{verbatim}
 31.1446 +01   ML {*
 31.1447 +02     val rls = append_rls "test" e_rls 
 31.1448 +03       [Calc ("Build_Inverse_Z_Transform.argument'_in", eval_argument_in "")]
 31.1449 +04     val SOME (t', asm) = rewrite_set_ @{theory} rls t;
 31.1450 +05   *}
 31.1451 +06   val t' = Free ("z", "RealDef.real"): term
 31.1452 +07   val asm = []: term list\end{verbatim}}
 31.1453 +
 31.1454 +\noindent The resulting term \texttt{t'} is \texttt{Free ("z",
 31.1455 +"RealDef.real")}, i.e the variable \texttt{z}, so all is
 31.1456 +perfect. Probably we have forgotten to store this function correctly~?
 31.1457 +We review the respective \texttt{calclist} (again an
 31.1458 +\textit{Unsynchronized.ref} to be removed in order to adjust to
 31.1459 +Isabelle/Isar's asynchronous document model):
 31.1460 +
 31.1461 +{\footnotesize
 31.1462 +\begin{verbatim}
 31.1463 +01   calclist:= overwritel (! calclist, 
 31.1464 +02    [("argument_in",
 31.1465 +03     ("Build_Inverse_Z_Transform.argument'_in", eval_argument_in "")),
 31.1466 +04       ...
 31.1467 +05    ]);\end{verbatim}}
 31.1468 +
 31.1469 +\noindent The entry is perfect. So what is the reason~? Ah, probably there
 31.1470 +is something messed up with the many rule-sets in the method, see \S\ref{meth} ---
 31.1471 +right, the function \texttt{argument\_in} is not contained in the respective
 31.1472 +rule-set \textit{srls} \dots this just as an example of the intricacies in
 31.1473 +debugging a program in the present state of the prototype.
 31.1474 +
 31.1475 +\subsection{Implementation in Isabelle/{\isac}}\label{flow-impl}
 31.1476 +Given all the prerequisites from \S\ref{isabisac} to \S\ref{meth},
 31.1477 +usually developed within several iterations, the program can be
 31.1478 +assembled; on p.\pageref{s:impl} there is the complete program of the
 31.1479 +running example.
 31.1480 +
 31.1481 +The completion of this program required efforts for several weeks
 31.1482 +(after some months of familiarisation with {\sisac}), caused by the
 31.1483 +abundance of intricacies indicated above. Also writing the program is
 31.1484 +not pleasant, given Isabelle/Isar/ without add-ons for
 31.1485 +programming. Already writing and parsing a few lines of program code
 31.1486 +is a challenge: the program is an Isabelle term; Isabelle's parser,
 31.1487 +however, is not meant for huge terms like the program of the running
 31.1488 +example. So reading out the specific error (usually type errors) from
 31.1489 +Isabelle's message is difficult.
 31.1490 +
 31.1491 +\medskip Testing the evaluation of the program has to rely on very
 31.1492 +simple tools. Step-wise execution is modeled by a function
 31.1493 +\texttt{me}, short for mathematics-engine~\footnote{The interface used
 31.1494 +by the front-end which created the calculation on
 31.1495 +p.\pageref{fig-interactive} is different from this function}:
 31.1496 +%the following is a simplification of the actual function 
 31.1497 +
 31.1498 +{\footnotesize
 31.1499 +\begin{verbatim}
 31.1500 +01   ML {* me; *}
 31.1501 +02   val it = tac -> ctree * pos -> mout * tac * ctree * pos\end{verbatim}} 
 31.1502 +
 31.1503 +\noindent This function takes as arguments a tactic \texttt{tac} which
 31.1504 +determines the next step, the step applied to the interpreter-state
 31.1505 +\texttt{ctree * pos} as last argument taken. The interpreter-state is
 31.1506 +a pair of a tree \texttt{ctree} representing the calculation created
 31.1507 +(see the example below) and a position \texttt{pos} in the
 31.1508 +calculation. The function delivers a quadruple, beginning with the new
 31.1509 +formula \texttt{mout} and the next tactic followed by the new
 31.1510 +interpreter-state.
 31.1511 +
 31.1512 +This function allows to stepwise check the program:
 31.1513 +
 31.1514 +{\footnotesize\label{ml-check-program}
 31.1515 +\begin{verbatim}
 31.1516 +01   ML {*
 31.1517 +02     val fmz =
 31.1518 +03       ["filterExpression (X z = 3 / ((z::real) + 1/10 - 1/50*(1/z)))",
 31.1519 +04        "stepResponse (x[n::real]::bool)"];     
 31.1520 +05     val (dI,pI,mI) =
 31.1521 +06       ("Isac", 
 31.1522 +07        ["Inverse", "Z_Transform", "SignalProcessing"], 
 31.1523 +08        ["SignalProcessing","Z_Transform","Inverse"]);
 31.1524 +09     val (mout, tac, ctree, pos)  = CalcTreeTEST [(fmz, (dI, pI, mI))];
 31.1525 +10     val (mout, tac, ctree, pos)  = me tac (ctree, pos);
 31.1526 +11     val (mout, tac, ctree, pos)  = me tac (ctree, pos);
 31.1527 +12     val (mout, tac, ctree, pos)  = me tac (ctree, pos);
 31.1528 +13     ...
 31.1529 +\end{verbatim}} 
 31.1530 +
 31.1531 +\noindent Several dozens of calls for \texttt{me} are required to
 31.1532 +create the lines in the calculation below (including the sub-problems
 31.1533 +not shown). When an error occurs, the reason might be located
 31.1534 +many steps before: if evaluation by rewriting, as done by the prototype,
 31.1535 +fails, then first nothing happens --- the effects come later and
 31.1536 +cause unpleasant checks.
 31.1537 +
 31.1538 +The checks comprise watching the rewrite-engine for many different
 31.1539 +kinds of rule-sets (see \S\ref{meth}), the interpreter-state, in
 31.1540 +particular the environment and the context at the states position ---
 31.1541 +all checks have to rely on simple functions accessing the
 31.1542 +\texttt{ctree}. So getting the calculation below (which resembles the
 31.1543 +calculation in Fig.\ref{fig-interactive} on p.\pageref{fig-interactive})
 31.1544 +is the result of several weeks of development:
 31.1545 +
 31.1546 +{\small\it\label{exp-calc}
 31.1547 +\begin{tabbing}
 31.1548 +123l\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=\kill
 31.1549 +\>{\rm 01}\> $\bullet$  \> {\tt Problem } (Inverse\_Z\_Transform, [Inverse, Z\_Transform, SignalProcessing])       \`\\
 31.1550 +\>{\rm 02}\>\> $\vdash\;\;X z = \frac{3}{z - \frac{1}{4} - \frac{1}{8} \cdot z^{-1}}$       \`{\footnotesize {\tt Take} X\_eq}\\
 31.1551 +\>{\rm 03}\>\> $X z = \frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}$          \`{\footnotesize {\tt Rewrite} prep\_for\_part\_frac X\_eq}\\
 31.1552 +\>{\rm 04}\>\> $\bullet$\> {\tt Problem } [partial\_fraction,rational,simplification]        \`{\footnotesize {\tt SubProblem} \dots}\\
 31.1553 +\>{\rm 05}\>\>\>  $\vdash\;\;\frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}=$    \`- - -\\
 31.1554 +\>{\rm 06}\>\>\>  $\frac{24}{-1 + -2 \cdot z + 8 \cdot z^2}$                                   \`- - -\\
 31.1555 +\>{\rm 07}\>\>\>  $\bullet$\> solve ($-1 + -2 \cdot z + 8 \cdot z^2,\;z$ )                      \`- - -\\
 31.1556 +\>{\rm 08}\>\>\>\>   $\vdash$ \> $\frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}=0$ \`- - -\\
 31.1557 +\>{\rm 09}\>\>\>\>   $z = \frac{2+\sqrt{-4+8}}{16}\;\lor\;z = \frac{2-\sqrt{-4+8}}{16}$           \`- - -\\
 31.1558 +\>{\rm 10}\>\>\>\>   $z = \frac{1}{2}\;\lor\;z =$ \_\_\_                                           \`- - -\\
 31.1559 +\>        \>\>\>\>   \_\_\_                                                                        \`- - -\\
 31.1560 +\>{\rm 11}\>\> \dots\> $\frac{4}{z - \frac{1}{2}} + \frac{-4}{z - \frac{-1}{4}}$                   \`\\
 31.1561 +\>{\rm 12}\>\> $X^\prime z = {\cal z}^{-1} (\frac{4}{z - \frac{1}{2}} + \frac{-4}{z - \frac{-1}{4}})$ \`{\footnotesize {\tt Take} ((X'::real =$>$ bool) z = ZZ\_1 part\_frac)}\\
 31.1562 +\>{\rm 13}\>\> $X^\prime z = {\cal z}^{-1} (4\cdot\frac{z}{z - \frac{1}{2}} + -4\cdot\frac{z}{z - \frac{-1}{4}})$ \`{\footnotesize{\tt Rewrite\_Set} prep\_for\_inverse\_z X'\_eq }\\
 31.1563 +\>{\rm 14}\>\> $X^\prime z = 4\cdot(\frac{1}{2})^n \cdot u [n] + -4\cdot(\frac{-1}{4})^n \cdot u [n]$  \`{\footnotesize {\tt Rewrite\_Set} inverse\_z X'\_eq}\\
 31.1564 +\>{\rm 15}\> \dots\> $X^\prime z = 4\cdot(\frac{1}{2})^n \cdot u [n] + -4\cdot(\frac{-1}{4})^n \cdot u [n]$ \`{\footnotesize {\tt Check\_Postcond}}
 31.1565 +\end{tabbing}}
 31.1566 +The tactics on the right margin of the above calculation are those in
 31.1567 +the program on p.\pageref{s:impl} which create the respective formulas
 31.1568 +on the left.
 31.1569 +% ORIGINAL FROM Inverse_Z_Transform.thy
 31.1570 +%    "Script InverseZTransform (X_eq::bool) =            "^(*([], Frm), Problem (Isac, [Inverse, Z_Transform, SignalProcessing])*)
 31.1571 +%    "(let X = Take X_eq;                                "^(*([1], Frm), X z = 3 / (z - 1 / 4 + -1 / 8 * (1 / z))*)
 31.1572 +%    "  X' = Rewrite ruleZY False X;                     "^(*([1], Res), ?X' z = 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
 31.1573 +%    "  (X'_z::real) = lhs X';                           "^(*            ?X' z*)
 31.1574 +%    "  (zzz::real) = argument_in X'_z;                  "^(*            z *)
 31.1575 +%    "  (funterm::real) = rhs X';                        "^(*            3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
 31.1576 +% 
 31.1577 +%    "  (pbz::real) = (SubProblem (Isac',                "^(**)
 31.1578 +%    "    [partial_fraction,rational,simplification],    "^
 31.1579 +%    "    [simplification,of_rationals,to_partial_fraction]) "^
 31.1580 +%    "    [REAL funterm, REAL zzz]);                     "^(*([2], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
 31.1581 +% 
 31.1582 +%    "  (pbz_eq::bool) = Take (X'_z = pbz);              "^(*([3], Frm), ?X' z = 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
 31.1583 +%    "  pbz_eq = Rewrite ruleYZ False pbz_eq;            "^(*([3], Res), ?X' z = 4 * (?z / (z - 1 / 2)) + -4 * (?z / (z - -1 / 4))*)
 31.1584 +%    "  pbz_eq = drop_questionmarks pbz_eq;              "^(*               4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
 31.1585 +%    "  (X_zeq::bool) = Take (X_z = rhs pbz_eq);         "^(*([4], Frm), X_z = 4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
 31.1586 +%    "  n_eq = (Rewrite_Set inverse_z False) X_zeq;      "^(*([4], Res), X_z = 4 * (1 / 2) ^^^ ?n * ?u [?n] + -4 * (-1 / 4) ^^^ ?n * ?u [?n]*)
 31.1587 +%    "  n_eq = drop_questionmarks n_eq                   "^(*            X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
 31.1588 +%    "in n_eq)"                                            (*([], Res), X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
 31.1589 +
 31.1590 +\subsection{Transfer into the Isabelle/{\isac} Knowledge}\label{flow-trans}
 31.1591 +Finally \textit{Build\_Inverse\_Z\_Transform.thy} has got the job done
 31.1592 +and the knowledge accumulated in it can be distributed to appropriate
 31.1593 +theories: the program to \textit{Inverse\_Z\_Transform.thy}, the
 31.1594 +sub-problem accomplishing the partial fraction decomposition to
 31.1595 +\textit{Partial\_Fractions.thy}. Since there are hacks into Isabelle's
 31.1596 +internals, this kind of distribution is not trivial. For instance, the
 31.1597 +function \texttt{argument\_in} in \S\ref{funs} explicitly contains a
 31.1598 +string with the theory it has been defined in, so this string needs to
 31.1599 +be updated from \texttt{Build\_Inverse\_Z\_Transform} to
 31.1600 +\texttt{Atools} if that function is transferred to theory
 31.1601 +\textit{Atools.thy}.
 31.1602 +
 31.1603 +In order to obtain the functionality presented in Fig.\ref{fig-interactive} on p.\pageref{fig-interactive} data must be exported from SML-structures to XML.
 31.1604 +This process is also rather bare-bones without authoring tools and is
 31.1605 +described in detail in the {\sisac} wiki~\footnote{http://www.ist.tugraz.at/isac/index.php/Generate\_representations\_for\_ISAC\_Knowledge}.
 31.1606 +
 31.1607 +% \newpage
 31.1608 +% -------------------------------------------------------------------
 31.1609 +% 
 31.1610 +% Material, falls noch Platz bleibt ...
 31.1611 +% 
 31.1612 +% -------------------------------------------------------------------
 31.1613 +% 
 31.1614 +% 
 31.1615 +% \subsubsection{Trials on Notation and Termination}
 31.1616 +% 
 31.1617 +% \paragraph{Technical notations} are a big problem for our piece of software,
 31.1618 +% but the reason for that isn't a fault of the software itself, one of the
 31.1619 +% troubles comes out of the fact that different technical subtopics use different
 31.1620 +% symbols and notations for a different purpose. The most famous example for such
 31.1621 +% a symbol is the complex number $i$ (in cassique math) or $j$ (in technical
 31.1622 +% math). In the specific part of signal processing one of this notation issues is
 31.1623 +% the use of brackets --- we use round brackets for analoge signals and squared
 31.1624 +% brackets for digital samples. Also if there is no problem for us to handle this
 31.1625 +% fact, we have to tell the machine what notation leads to wich meaning and that
 31.1626 +% this purpose seperation is only valid for this special topic - signal
 31.1627 +% processing.
 31.1628 +% \subparagraph{In the programming language} itself it is not possible to declare
 31.1629 +% fractions, exponents, absolutes and other operators or remarks in a way to make
 31.1630 +% them pretty to read; our only posssiblilty were ASCII characters and a handfull
 31.1631 +% greek symbols like: $\alpha, \beta, \gamma, \phi,\ldots$.
 31.1632 +% \par
 31.1633 +% With the upper collected knowledge it is possible to check if we were able to
 31.1634 +% donate all required terms and expressions.
 31.1635 +% 
 31.1636 +% \subsubsection{Definition and Usage of Rules}
 31.1637 +% 
 31.1638 +% \paragraph{The core} of our implemented problem is the Z-Transformation, due
 31.1639 +% the fact that the transformation itself would require higher math which isn't
 31.1640 +% yet avaible in our system we decided to choose the way like it is applied in
 31.1641 +% labratory and problem classes at our university - by applying transformation
 31.1642 +% rules (collected in transformation tables).
 31.1643 +% \paragraph{Rules,} in {\sisac{}}'s programming language can be designed by the
 31.1644 +% use of axiomatizations like shown in Example~\ref{eg:ruledef}
 31.1645 +% 
 31.1646 +% \begin{example}
 31.1647 +%   \label{eg:ruledef}
 31.1648 +%   \hfill\\
 31.1649 +%   \begin{verbatim}
 31.1650 +%   axiomatization where
 31.1651 +%     rule1: ``1 = $\delta$[n]'' and
 31.1652 +%     rule2: ``|| z || > 1 ==> z / (z - 1) = u [n]'' and
 31.1653 +%     rule3: ``|| z || < 1 ==> z / (z - 1) = -u [-n - 1]''
 31.1654 +%   \end{verbatim}
 31.1655 +% \end{example}
 31.1656 +% 
 31.1657 +% This rules can be collected in a ruleset and applied to a given expression as
 31.1658 +% follows in Example~\ref{eg:ruleapp}.
 31.1659 +% 
 31.1660 +% \begin{example}
 31.1661 +%   \hfill\\
 31.1662 +%   \label{eg:ruleapp}
 31.1663 +%   \begin{enumerate}
 31.1664 +%   \item Store rules in ruleset:
 31.1665 +%   \begin{verbatim}
 31.1666 +%   val inverse_Z = append_rls "inverse_Z" e_rls
 31.1667 +%     [ Thm ("rule1",num_str @{thm rule1}),
 31.1668 +%       Thm ("rule2",num_str @{thm rule2}),
 31.1669 +%       Thm ("rule3",num_str @{thm rule3})
 31.1670 +%     ];\end{verbatim}
 31.1671 +%   \item Define exression:
 31.1672 +%   \begin{verbatim}
 31.1673 +%   val sample_term = str2term "z/(z-1)+z/(z-</delta>)+1";\end{verbatim}
 31.1674 +%   \item Apply ruleset:
 31.1675 +%   \begin{verbatim}
 31.1676 +%   val SOME (sample_term', asm) = 
 31.1677 +%     rewrite_set_ thy true inverse_Z sample_term;\end{verbatim}
 31.1678 +%   \end{enumerate}
 31.1679 +% \end{example}
 31.1680 +% 
 31.1681 +% The use of rulesets makes it much easier to develop our designated applications,
 31.1682 +% but the programmer has to be careful and patient. When applying rulesets
 31.1683 +% two important issues have to be mentionend:
 31.1684 +% \subparagraph{How often} the rules have to be applied? In case of
 31.1685 +% transformations it is quite clear that we use them once but other fields
 31.1686 +% reuqire to apply rules until a special condition is reached (e.g.
 31.1687 +% a simplification is finished when there is nothing to be done left).
 31.1688 +% \subparagraph{The order} in which rules are applied often takes a big effect
 31.1689 +% and has to be evaluated for each purpose once again.
 31.1690 +% \par
 31.1691 +% In our special case of Signal Processing and the rules defined in
 31.1692 +% Example~\ref{eg:ruledef} we have to apply rule~1 first of all to transform all
 31.1693 +% constants. After this step has been done it no mather which rule fit's next.
 31.1694 +% 
 31.1695 +% \subsubsection{Helping Functions}
 31.1696 +% 
 31.1697 +% \paragraph{New Programms require,} often new ways to get through. This new ways
 31.1698 +% means that we handle functions that have not been in use yet, they can be 
 31.1699 +% something special and unique for a programm or something famous but unneeded in
 31.1700 +% the system yet. In our dedicated example it was for example neccessary to split
 31.1701 +% a fraction into numerator and denominator; the creation of such function and
 31.1702 +% even others is described in upper Sections~\ref{simp} and \ref{funs}.
 31.1703 +% 
 31.1704 +% \subsubsection{Trials on equation solving}
 31.1705 +% %simple eq and problem with double fractions/negative exponents
 31.1706 +% \paragraph{The Inverse Z-Transformation} makes it neccessary to solve
 31.1707 +% equations degree one and two. Solving equations in the first degree is no 
 31.1708 +% problem, wether for a student nor for our machine; but even second degree
 31.1709 +% equations can lead to big troubles. The origin of this troubles leads from
 31.1710 +% the build up process of our equation solving functions; they have been
 31.1711 +% implemented some time ago and of course they are not as good as we want them to
 31.1712 +% be. Wether or not following we only want to show how cruel it is to build up new
 31.1713 +% work on not well fundamentials.
 31.1714 +% \subparagraph{A simple equation solving,} can be set up as shown in the next
 31.1715 +% example:
 31.1716 +% 
 31.1717 +% \begin{example}
 31.1718 +% \begin{verbatim}
 31.1719 +%   
 31.1720 +%   val fmz =
 31.1721 +%     ["equality (-1 + -2 * z + 8 * z ^^^ 2 = (0::real))",
 31.1722 +%      "solveFor z",
 31.1723 +%      "solutions L"];                                    
 31.1724 +% 
 31.1725 +%   val (dI',pI',mI') =
 31.1726 +%     ("Isac", 
 31.1727 +%       ["abcFormula","degree_2","polynomial","univariate","equation"],
 31.1728 +%       ["no_met"]);\end{verbatim}
 31.1729 +% \end{example}
 31.1730 +% 
 31.1731 +% Here we want to solve the equation: $-1+-2\cdot z+8\cdot z^{2}=0$. (To give
 31.1732 +% a short overview on the commands; at first we set up the equation and tell the
 31.1733 +% machine what's the bound variable and where to store the solution. Second step 
 31.1734 +% is to define the equation type and determine if we want to use a special method
 31.1735 +% to solve this type.) Simple checks tell us that the we will get two results for
 31.1736 +% this equation and this results will be real.
 31.1737 +% So far it is easy for us and for our machine to solve, but
 31.1738 +% mentioned that a unvariate equation second order can have three different types
 31.1739 +% of solutions it is getting worth.
 31.1740 +% \subparagraph{The solving of} all this types of solutions is not yet supported.
 31.1741 +% Luckily it was needed for us; but something which has been needed in this 
 31.1742 +% context, would have been the solving of an euation looking like:
 31.1743 +% $-z^{-2}+-2\cdot z^{-1}+8=0$ which is basically the same equation as mentioned
 31.1744 +% before (remember that befor it was no problem to handle for the machine) but
 31.1745 +% now, after a simple equivalent transformation, we are not able to solve
 31.1746 +% it anymore.
 31.1747 +% \subparagraph{Error messages} we get when we try to solve something like upside
 31.1748 +% were very confusing and also leads us to no special hint about a problem.
 31.1749 +% \par The fault behind is, that we have no well error handling on one side and
 31.1750 +% no sufficient formed equation solving on the other side. This two facts are
 31.1751 +% making the implemention of new material very difficult.
 31.1752 +% 
 31.1753 +% \subsection{Formalization of missing knowledge in Isabelle}
 31.1754 +% 
 31.1755 +% \paragraph{A problem} behind is the mechanization of mathematic
 31.1756 +% theories in TP-bases languages. There is still a huge gap between
 31.1757 +% these algorithms and this what we want as a solution - in Example
 31.1758 +% Signal Processing. 
 31.1759 +% 
 31.1760 +% \vbox{
 31.1761 +%   \begin{example}
 31.1762 +%     \label{eg:gap}
 31.1763 +%     \[
 31.1764 +%       X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY
 31.1765 +%     \]
 31.1766 +%     {\small\textit{
 31.1767 +%       \noindent A very simple example on this what we call gap is the
 31.1768 +% simplification above. It is needles to say that it is correct and also
 31.1769 +% Isabelle for fills it correct - \emph{always}. But sometimes we don't
 31.1770 +% want expand such terms, sometimes we want another structure of
 31.1771 +% them. Think of a problem were we now would need only the coefficients
 31.1772 +% of $X$ and $Y$. This is what we call the gap between mechanical
 31.1773 +% simplification and the solution.
 31.1774 +%     }}
 31.1775 +%   \end{example}
 31.1776 +% }
 31.1777 +% 
 31.1778 +% \paragraph{We are not able to fill this gap,} until we have to live
 31.1779 +% with it but first have a look on the meaning of this statement:
 31.1780 +% Mechanized math starts from mathematical models and \emph{hopefully}
 31.1781 +% proceeds to match physics. Academic engineering starts from physics
 31.1782 +% (experimentation, measurement) and then proceeds to mathematical
 31.1783 +% modeling and formalization. The process from a physical observance to
 31.1784 +% a mathematical theory is unavoidable bound of setting up a big
 31.1785 +% collection of standards, rules, definition but also exceptions. These
 31.1786 +% are the things making mechanization that difficult.
 31.1787 +% 
 31.1788 +% \vbox{
 31.1789 +%   \begin{example}
 31.1790 +%     \label{eg:units}
 31.1791 +%     \[
 31.1792 +%       m,\ kg,\ s,\ldots
 31.1793 +%     \]
 31.1794 +%     {\small\textit{
 31.1795 +%       \noindent Think about some units like that one's above. Behind
 31.1796 +% each unit there is a discerning and very accurate definition: One
 31.1797 +% Meter is the distance the light travels, in a vacuum, through the time
 31.1798 +% of 1 / 299.792.458 second; one kilogram is the weight of a
 31.1799 +% platinum-iridium cylinder in paris; and so on. But are these
 31.1800 +% definitions usable in a computer mechanized world?!
 31.1801 +%     }}
 31.1802 +%   \end{example}
 31.1803 +% }
 31.1804 +% 
 31.1805 +% \paragraph{A computer} or a TP-System builds on programs with
 31.1806 +% predefined logical rules and does not know any mathematical trick
 31.1807 +% (follow up example \ref{eg:trick}) or recipe to walk around difficult
 31.1808 +% expressions. 
 31.1809 +% 
 31.1810 +% \vbox{
 31.1811 +%   \begin{example}
 31.1812 +%     \label{eg:trick}
 31.1813 +%   \[ \frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)= \]
 31.1814 +%   \[ \frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=
 31.1815 +%      \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}= \]
 31.1816 +%   \[ \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} \]
 31.1817 +%     {\small\textit{
 31.1818 +%       \noindent Sometimes it is also useful to be able to apply some
 31.1819 +% \emph{tricks} to get a beautiful and particularly meaningful result,
 31.1820 +% which we are able to interpret. But as seen in this example it can be
 31.1821 +% hard to find out what operations have to be done to transform a result
 31.1822 +% into a meaningful one.
 31.1823 +%     }}
 31.1824 +%   \end{example}
 31.1825 +% }
 31.1826 +% 
 31.1827 +% \paragraph{The only possibility,} for such a system, is to work
 31.1828 +% through its known definitions and stops if none of these
 31.1829 +% fits. Specified on Signal Processing or any other application it is
 31.1830 +% often possible to walk through by doing simple creases. This creases
 31.1831 +% are in general based on simple math operational but the challenge is
 31.1832 +% to teach the machine \emph{all}\footnote{Its pride to call it
 31.1833 +% \emph{all}.} of them. Unfortunately the goal of TP Isabelle is to
 31.1834 +% reach a high level of \emph{all} but it in real it will still be a
 31.1835 +% survey of knowledge which links to other knowledge and {{\sisac}{}} a
 31.1836 +% trainer and helper but no human compensating calculator. 
 31.1837 +% \par
 31.1838 +% {{{\sisac}{}}} itself aims to adds \emph{Algorithmic Knowledge} (formal
 31.1839 +% specifications of problems out of topics from Signal Processing, etc.)
 31.1840 +% and \emph{Application-oriented Knowledge} to the \emph{deductive} axis of
 31.1841 +% physical knowledge. The result is a three-dimensional universe of
 31.1842 +% mathematics seen in Figure~\ref{fig:mathuni}.
 31.1843 +% 
 31.1844 +% \begin{figure}
 31.1845 +%   \begin{center}
 31.1846 +%     \includegraphics{fig/universe}
 31.1847 +%     \caption{Didactic ``Math-Universe'': Algorithmic Knowledge (Programs) is
 31.1848 +%              combined with Application-oriented Knowledge (Specifications) and Deductive Knowledge (Axioms, Definitions, Theorems). The Result
 31.1849 +%              leads to a three dimensional math universe.\label{fig:mathuni}}
 31.1850 +%   \end{center}
 31.1851 +% \end{figure}
 31.1852 +% 
 31.1853 +% %WN Deine aktuelle Benennung oben wird Dir kein Fachmann abnehmen;
 31.1854 +% %WN bitte folgende Bezeichnungen nehmen:
 31.1855 +% %WN 
 31.1856 +% %WN axis 1: Algorithmic Knowledge (Programs)
 31.1857 +% %WN axis 2: Application-oriented Knowledge (Specifications)
 31.1858 +% %WN axis 3: Deductive Knowledge (Axioms, Definitions, Theorems)
 31.1859 +% %WN 
 31.1860 +% %WN und bitte die R"ander von der Grafik wegschneiden (was ich f"ur *.pdf
 31.1861 +% %WN nicht hinkriege --- weshalb ich auch die eJMT-Forderung nicht ganz
 31.1862 +% %WN verstehe, separierte PDFs zu schicken; ich w"urde *.png schicken)
 31.1863 +% 
 31.1864 +% %JR Ränder und beschriftung geändert. Keine Ahnung warum eJMT sich pdf's
 31.1865 +% %JR wünschen, würde ebenfalls png oder ähnliches verwenden, aber wenn pdf's
 31.1866 +% %JR gefordert werden WN2...
 31.1867 +% %WN2 meiner Meinung nach hat sich eJMT unklar ausgedr"uckt (z.B. kann
 31.1868 +% %WN2 man meines Wissens pdf-figures nicht auf eine bestimmte Gr"osse
 31.1869 +% %WN2 zusammenschneiden um die R"ander weg zu bekommen)
 31.1870 +% %WN2 Mein Vorschlag ist, in umserem tex-file bei *.png zu bleiben und
 31.1871 +% %WN2 png + pdf figures mitzuschicken.
 31.1872 +% 
 31.1873 +% \subsection{Notes on Problems with Traditional Notation}
 31.1874 +% 
 31.1875 +% \paragraph{During research} on these topic severely problems on
 31.1876 +% traditional notations have been discovered. Some of them have been
 31.1877 +% known in computer science for many years now and are still unsolved,
 31.1878 +% one of them aggregates with the so called \emph{Lambda Calculus},
 31.1879 +% Example~\ref{eg:lamda} provides a look on the problem that embarrassed
 31.1880 +% us.
 31.1881 +% 
 31.1882 +% \vbox{
 31.1883 +%   \begin{example}
 31.1884 +%     \label{eg:lamda}
 31.1885 +% 
 31.1886 +%   \[ f(x)=\ldots\;  \quad R \rightarrow \quad R \]
 31.1887 +% 
 31.1888 +% 
 31.1889 +%   \[ f(p)=\ldots\;  p \in \quad R \]
 31.1890 +% 
 31.1891 +%     {\small\textit{
 31.1892 +%       \noindent Above we see two equations. The first equation aims to
 31.1893 +% be a mapping of an function from the reel range to the reel one, but
 31.1894 +% when we change only one letter we get the second equation which
 31.1895 +% usually aims to insert a reel point $p$ into the reel function. In
 31.1896 +% computer science now we have the problem to tell the machine (TP) the
 31.1897 +% difference between this two notations. This Problem is called
 31.1898 +% \emph{Lambda Calculus}.
 31.1899 +%     }}
 31.1900 +%   \end{example}
 31.1901 +% }
 31.1902 +% 
 31.1903 +% \paragraph{An other problem} is that terms are not full simplified in
 31.1904 +% traditional notations, in {{\sisac}} we have to simplify them complete
 31.1905 +% to check weather results are compatible or not. in e.g. the solutions
 31.1906 +% of an second order linear equation is an rational in {{\sisac}} but in
 31.1907 +% tradition we keep fractions as long as possible and as long as they
 31.1908 +% aim to be \textit{beautiful} (1/8, 5/16,...).
 31.1909 +% \subparagraph{The math} which should be mechanized in Computer Theorem
 31.1910 +% Provers (\emph{TP}) has (almost) a problem with traditional notations
 31.1911 +% (predicate calculus) for axioms, definitions, lemmas, theorems as a
 31.1912 +% computer program or script is not able to interpret every Greek or
 31.1913 +% Latin letter and every Greek, Latin or whatever calculations
 31.1914 +% symbol. Also if we would be able to handle these symbols we still have
 31.1915 +% a problem to interpret them at all. (Follow up \hbox{Example
 31.1916 +% \ref{eg:symbint1}})
 31.1917 +% 
 31.1918 +% \vbox{
 31.1919 +%   \begin{example}
 31.1920 +%     \label{eg:symbint1}
 31.1921 +%     \[
 31.1922 +%       u\left[n\right] \ \ldots \ unitstep
 31.1923 +%     \]
 31.1924 +%     {\small\textit{
 31.1925 +%       \noindent The unitstep is something we need to solve Signal
 31.1926 +% Processing problem classes. But in {{{\sisac}{}}} the rectangular
 31.1927 +% brackets have a different meaning. So we abuse them for our
 31.1928 +% requirements. We get something which is not defined, but usable. The
 31.1929 +% Result is syntax only without semantic.
 31.1930 +%     }}
 31.1931 +%   \end{example}
 31.1932 +% }
 31.1933 +% 
 31.1934 +% In different problems, symbols and letters have different meanings and
 31.1935 +% ask for different ways to get through. (Follow up \hbox{Example
 31.1936 +% \ref{eg:symbint2}}) 
 31.1937 +% 
 31.1938 +% \vbox{
 31.1939 +%   \begin{example}
 31.1940 +%     \label{eg:symbint2}
 31.1941 +%     \[
 31.1942 +%       \widehat{\ }\ \widehat{\ }\ \widehat{\ } \  \ldots \  exponent
 31.1943 +%     \]
 31.1944 +%     {\small\textit{
 31.1945 +%     \noindent For using exponents the three \texttt{widehat} symbols
 31.1946 +% are required. The reason for that is due the development of
 31.1947 +% {{{\sisac}{}}} the single \texttt{widehat} and also the double were
 31.1948 +% already in use for different operations.
 31.1949 +%     }}
 31.1950 +%   \end{example}
 31.1951 +% }
 31.1952 +% 
 31.1953 +% \paragraph{Also the output} can be a problem. We are familiar with a
 31.1954 +% specified notations and style taught in university but a computer
 31.1955 +% program has no knowledge of the form proved by a professor and the
 31.1956 +% machines themselves also have not yet the possibilities to print every
 31.1957 +% symbol (correct) Recent developments provide proofs in a human
 31.1958 +% readable format but according to the fact that there is no money for
 31.1959 +% good working formal editors yet, the style is one thing we have to
 31.1960 +% live with.
 31.1961 +% 
 31.1962 +% \section{Problems rising out of the Development Environment}
 31.1963 +% 
 31.1964 +% fehlermeldungen! TODO
 31.1965 +
 31.1966 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\end{verbatim}
 31.1967 +
 31.1968 +\section{Summary and Conclusions}\label{conclusion}
 31.1969 +
 31.1970 +%JR obvious
 31.1971 +
 31.1972 +%This paper gives a first experience report about programming with a
 31.1973 +%TP-based programming language.
 31.1974 +
 31.1975 +A brief re-introduction of the novel kind of programming
 31.1976 +language by example of the {\sisac}-prototype makes the paper
 31.1977 +self-contained. The main section describes all the main concepts
 31.1978 +involved in TP-based programming and all the sub-tasks concerning
 31.1979 +respective implementation in the {\sisac} prototype: mechanisation of mathematics and domain
 31.1980 +modeling, implementation of term rewriting systems for the
 31.1981 +rewriting-engine, formal (implicit) specification of the problem to be
 31.1982 +(explicitly) described by the program, implementation of the many components
 31.1983 +required for Lucas-Interpretation and finally implementation of the
 31.1984 +program itself.
 31.1985 +
 31.1986 +The many concepts and sub-tasks involved in programming require a
 31.1987 +comprehensive work-flow; first experiences with the work-flow as
 31.1988 +supported by the present prototype are described as well: Isabelle +
 31.1989 +Isar + jEdit provide appropriate components for establishing an
 31.1990 +efficient development environment integrating computation and
 31.1991 +deduction. However, the present state of the prototype is far off a
 31.1992 +state appropriate for wide-spread use: the prototype of the program
 31.1993 +language lacks expressiveness and elegance, the prototype of the
 31.1994 +development environment is hardly usable: error messages still address
 31.1995 +the developer of the prototype's interpreter rather than the
 31.1996 +application programmer, implementation of the many settings for the
 31.1997 +Lucas-Interpreter is cumbersome. 
 31.1998 +
 31.1999 +\subsection{Conclusions for Future Development}
 31.2000 +From the above mentioned experiences a successful proof of concept can be concluded:
 31.2001 +programming arbitrary problems from engineering sciences is possible,
 31.2002 +in principle even in the prototype. Furthermore the experiences allow
 31.2003 +to conclude detailed requirements for further development:
 31.2004 +\begin{enumerate}
 31.2005 +\item Clarify underlying logics such that programming is smoothly
 31.2006 +integrated with verification of the program; the post-condition should
 31.2007 +be proved more or less automatically, otherwise working engineers
 31.2008 +would not encounter such programming.
 31.2009 +\item Combine the prototype's programming language with Isabelle's
 31.2010 +powerful function package and probably with more of SML's
 31.2011 +pattern-matching features; include parallel execution on multi-core
 31.2012 +machines into the language design.
 31.2013 +\item Extend the prototype's Lucas-Interpreter such that it also
 31.2014 +handles functions defined by use of Isabelle's functions package; and
 31.2015 +generalize Isabelle's code generator such that efficient code for the
 31.2016 +whole definition of the programming language can be generated (for
 31.2017 +multi-core machines).
 31.2018 +\item Develop an efficient development environment with
 31.2019 +integration of programming and proving, with management not only of
 31.2020 +Isabelle theories, but also of large collections of specifications and
 31.2021 +of programs.
 31.2022 +\item\label{CAS} Extend Isabelle's computational features in direction of
 31.2023 +\textit{verfied} Computer Algebra: simplification extended by
 31.2024 +algorithms beyond rewriting (cancellation of multivariate rationals,
 31.2025 +factorisation, partial fraction decomposition, etc), equation solving
 31.2026 +, integration, etc.
 31.2027 +\end{enumerate} 
 31.2028 +Provided successful accomplishment, these points provide distinguished
 31.2029 +components for virtual workbenches appealing to practitioners of
 31.2030 +engineering in the near future.
 31.2031 +
 31.2032 +\subsection{Preview to Development of Course Material}
 31.2033 +Interactive course material, as addressed by the title,
 31.2034 +can comprise step-wise problem solving created as a side-effect of a
 31.2035 +TP-based program: The introduction \S\ref{intro} briefly shows that Lucas-Interpretation not only provides an
 31.2036 +interactive programming environment, Lucas-Interpretation also can
 31.2037 +provide TP-based services for a flexible dialogue component with
 31.2038 +adaptive user guidance for independent and inquiry-based learning.
 31.2039 +
 31.2040 +However, the {\sisac} prototype is not ready for use in field-tests,
 31.2041 +not only due to the above five requirements not sufficiently
 31.2042 +accomplished, but also due to usability of the fron-end, in particular
 31.2043 +the lack of an editor for formulas in 2-dimension representation.
 31.2044 +
 31.2045 +Nevertheless, the experiences from the case study described in this
 31.2046 +paper, allow to give a preview to the development of course material,
 31.2047 +if based on Lucas-Interpretation:
 31.2048 +
 31.2049 +\paragraph{Development of material from scratch} is too much effort
 31.2050 +just for e-learning; this has become clear with the case study.  For
 31.2051 +getting support for stepwise problem solving just in {\em one} example
 31.2052 +class, the one presented in this paper, involved the following tasks:
 31.2053 +\begin{itemize}
 31.2054 +\item Adapt the equation solver; since that was too laborous, the
 31.2055 +program has been adapted in an unelegant way.
 31.2056 +\item Implement an algorithms for partial fraction decomposition,
 31.2057 +which is considered a standard normal form in Computer Algebra.
 31.2058 +\item Implement a specification for partial fraction decomposition and
 31.2059 +locate it appropriately in the hierarchy of specification.
 31.2060 +\item Declare definitions and theorems within the theory of
 31.2061 +${\cal Z}$-transform, and prove the theorems (which was not done in the
 31.2062 +case study).
 31.2063 +\end{itemize}
 31.2064 +On the other hand, for the one the class of problems implemented,
 31.2065 +adding an arbitrary number of examples within this class requires a
 31.2066 +few minutes~\footnote{As shown in Fig.\ref{fig-interactive}, an
 31.2067 +example is called from an HTML-file by an URL, which addresses an
 31.2068 +XML-structure holding the respective data as shown on
 31.2069 +p.\pageref{ml-check-program}.} and the support for individual stepwise
 31.2070 +problem solving comes for free.
 31.2071 +
 31.2072 +\paragraph{E-learning benefits from Formal Domain Engineering} which can be
 31.2073 +expected for various domains in the near future. In order to cope with
 31.2074 +increasing complexity in domain of technology, specific domain
 31.2075 +knowledge is beeing mechanised, not only for software technology
 31.2076 +\footnote{For instance, the Archive of Formal Proofs
 31.2077 +http://afp.sourceforge.net/} but also for other engineering domains
 31.2078 +\cite{Dehbonei&94,Hansen94b,db:dom-eng}.  This fairly new part of
 31.2079 +engineering sciences is called ``domain engineering'' in
 31.2080 +\cite{db:SW-engIII}.
 31.2081 +
 31.2082 +Given this kind of mechanised knowledge including mathematical
 31.2083 +theories, domain specific definitions, specifications and algorithms,
 31.2084 +theorems and proofs, then e-learning with support for individual
 31.2085 +stepwise problem solving will not be much ado anymore; then e-learning
 31.2086 +media in technology education can be derived from this knowledge with
 31.2087 +reasonable effort.
 31.2088 +
 31.2089 +\paragraph{Development differentiates into tasks} more separated than
 31.2090 +without Lucas-Interpretation and more challenginging in specific
 31.2091 +expertise. These are the kinds of experts expected to cooperate in
 31.2092 +development of
 31.2093 +\begin{itemize}
 31.2094 +\item ``Domain engineers'', who accomplish fairly novel tasks
 31.2095 +described in this paper.
 31.2096 +\item Course designers, who provide the instructional design according
 31.2097 +to curricula, together with usability experts and media designers, are
 31.2098 +indispensable in production of e-learning media at the state-of-the
 31.2099 +art.
 31.2100 +\item ``Dialog designers'', whose part of development is clearly
 31.2101 +separated from the part of domain engineers as a consequence of
 31.2102 +Lucas-Interpretation: TP-based programs are functional, as mentioned,
 31.2103 +and are only concerned with describing mathematics --- and not at all
 31.2104 +concerned with interaction, psychology, learning theory and the like,
 31.2105 +because there are no in/output statements. Dialog designers can expect
 31.2106 +a high-level rule-based language~\cite{gdaroczy-EP-13} for describing
 31.2107 +their part.
 31.2108 +\end{itemize}
 31.2109 +
 31.2110 +% response-to-referees:
 31.2111 +% (2.1) details of novel technology in order to estimate the impact
 31.2112 +% (2.2) which kinds of expertise are required for production of e-learning media (instructional design, math authoring, dialog authoring, media design)
 31.2113 +% (2.3) what in particular is required for programming new exercises supported by next-step-guidance (expertise / efforts)
 31.2114 +% (2.4) estimation of break-even points for development of next-step-guidance
 31.2115 +% (2.5) usability of ISAC prototype at the present state
 31.2116 +% 
 31.2117 +% The points (1.*) seem to be well covered in the paper, the points (2.*) are not. So I decided to address the points (2.*) in a separate section §5.1."".
 31.2118 +
 31.2119 +\bigskip\noindent For this decade there seems to be a window of opportunity opening from
 31.2120 +one side inreasing demand for formal domain engineering and from the
 31.2121 +other side from TP more and more gaining industrial relevance. Within
 31.2122 +this window, development of TP-based educational software can take
 31.2123 +benefit from the fact, that the TPs leading in Europe, Coq~\cite{coq-team-10} and
 31.2124 +Isabelle are still open source together with the major part of
 31.2125 +mechanised knowledge.%~\footnote{NICTA}.
 31.2126 +
 31.2127 +\bibliographystyle{alpha}
 31.2128 +{\small\bibliography{references}}
 31.2129 +
 31.2130 +\end{document}
 31.2131 +% LocalWords:  TP IST SPSC Telematics Dialogues dialogue HOL bool nat Hindley
 31.2132 +% LocalWords:  Milner tt Subproblem Formulae ruleset generalisation initialised
 31.2133 +% LocalWords:  axiomatization LCF Simplifiers simplifiers Isar rew Thm Calc SML
 31.2134 +% LocalWords:  recognised hoc Trueprop redexes Unsynchronized pre rhs ord erls
 31.2135 +% LocalWords:  srls prls nrls lhs errpats InverseZTransform SubProblem IDE IDEs
 31.2136 +% LocalWords:  univariate jEdit rls RealDef calclist familiarisation ons pos eq
 31.2137 +% LocalWords:  mout ctree SignalProcessing frac ZZ Postcond Atools wiki SML's
 31.2138 +% LocalWords:  mechanisation multi
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/doc-isac/jrocnik/eJMT-paper/references.bib	Tue Sep 17 09:50:52 2013 +0200
    32.3 @@ -0,0 +1,343 @@
    32.4 +@Misc{coq-team-10,
    32.5 +  author = 	 {Coq development team},
    32.6 +  title = 	 {Coq 8.3 Reference Manual},
    32.7 +  howpublished = {http://coq.inria.fr/reman},
    32.8 +  year = 	 {2010},
    32.9 +  note = 	 {INRIA}
   32.10 +}
   32.11 +
   32.12 +@Book{db:dom-eng,
   32.13 +  author = 	 {Bj{\o}rner, Dines},
   32.14 +  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
   32.15 +  publisher = 	 {JAIST Press},
   32.16 +  year = 	 {2009},
   32.17 +  month = 	 {Feb},
   32.18 +  series = 	 {COE Research Monograph Series},
   32.19 +  volume = 	 {4},
   32.20 +  address = 	 {Nomi, Japan}
   32.21 +}
   32.22 +
   32.23 +@INPROCEEDINGS{Hansen94b,
   32.24 +  KEY           = "Hansen94",
   32.25 +  AUTHOR        = "Kirsten Mark Hansen",
   32.26 +  EDITOR        = "M. Naftalin, T. Denvir, M. Bertran",
   32.27 +  TITLE         = "Validation of a Railway Interlocking Model",
   32.28 +  BOOKTITLE     = "FME'94: Industrial Benefit of Formal Methods",
   32.29 +  PUBLISHER     = "Springer-Verlag",
   32.30 +  YEAR          = "1994",
   32.31 +  MONTH         = "October",
   32.32 +  PAGES         = "582-601",
   32.33 +  ANNOTE        = "",
   32.34 +  COMMENT       = "PGL has got the proceedings. ADN"
   32.35 +}
   32.36 +
   32.37 +@INPROCEEDINGS{Dehbonei&94,
   32.38 +  KEY           = "Dehbonei\&94",
   32.39 +  AUTHOR        = "Dehbonei, Babak and Mejia, Fernando",
   32.40 +  EDITOR        = "M. Naftalin, T. Denvir, M. Bertran",
   32.41 +  TITLE         = "Formal Methods in the Railways Signalling Industry",
   32.42 +  BOOKTITLE     = "FME'94:Industrial Benefit of Formal Methods",
   32.43 +  PUBLISHER     = "Springer-Verlag",
   32.44 +  YEAR          = "1994",
   32.45 +  MONTH         = "October",
   32.46 +  PAGES         = "26-34",
   32.47 +  ANNOTE        = "",
   32.48 +  COMMENT       = "Peter has got the proceedings. ADN"
   32.49 +}
   32.50 +
   32.51 +@Book{db:SW-engIII,
   32.52 +  author = 	 {Bj{\o}rner, Dines},
   32.53 +  title = 	 {Software Engineering},
   32.54 +  publisher = 	 {Springer},
   32.55 +  year = 	 {2006},
   32.56 +  volume = 	 {3},
   32.57 +  series = 	 {Texts in Theoretical Computer Science},
   32.58 +  address = 	 {Berlin, Heidelberg}
   32.59 +}
   32.60 +
   32.61 +@Book{pl:milner97,
   32.62 +  author = 	 {Robin Milner and Mads Tofte and Robert Harper and David MacQueen},
   32.63 +  title = 	 {The Definition of Standard ML (Revised)},
   32.64 +  publisher = 	 {The MIT Press},
   32.65 +  year = 	 1997,
   32.66 +  address =	 {Cambridge, London},
   32.67 +  annote =	 {97bok375}
   32.68 +}
   32.69 +
   32.70 +@book{nipk:rew-all-that,
   32.71 +        title={Term rewriting and all that}, 
   32.72 +        author={Baader, Franz and Nipkow, Tobias },
   32.73 +        publisher={Cambridge University Press},year={1998}, 
   32.74 +	volume={},series={},address={},edition={},month={}, 
   32.75 +	note={},status={},source={},location={IST} 
   32.76 +        }
   32.77 +
   32.78 +@Misc{jrocnik-bakk,
   32.79 +  author = 	 {Jan Rocnik},
   32.80 +  title = 	 {Interactive Course Material for Signal Processing based on Isabelle/{\isac}},
   32.81 +  howpublished = {Bakkalaureate Thesis},
   32.82 +  year = 	 {2012},
   32.83 +  note = 	 {IST, Graz University of Technology, http://www.ist.tugraz.at/projects/isac/publ/jrocnik\_bakk.pdf}
   32.84 +}
   32.85 +
   32.86 +@book{proakis2004contemporary,
   32.87 +  title={Contemporary communication systems using MATLAB and Simulink},
   32.88 +  author={Proakis, J.G. and Salehi, M. and Bauch, G.},
   32.89 +  isbn={9780534406172},
   32.90 +  lccn={31054410},
   32.91 +  series={BookWare companion series},
   32.92 +  url={http://books.google.at/books?id=5mXGQgAACAAJ},
   32.93 +  year={2004},
   32.94 +  publisher={Thomson--Brooks/Cole}
   32.95 +}
   32.96 +@book{oppenheim2010discrete,
   32.97 +  title={Discrete-time signal processing},
   32.98 +  author={Oppenheim, A.V. and Schafer, R.W.},
   32.99 +  isbn={9780131988422},
  32.100 +  series={Prentice-Hall signal processing series},
  32.101 +  url={http://books.google.at/books?id=mYsoAQAAMAAJ},
  32.102 +  year={2010},
  32.103 +  publisher={Prentice Hall}
  32.104 +}
  32.105 +@manual{wenzel2011system,
  32.106 +	title={The Isabelle System Manual},
  32.107 +	author={Wenzel, M. and Berghofer, S.},
  32.108 +	organization={TU Muenchen},
  32.109 +	year={2011},
  32.110 +	month={January}
  32.111 +}
  32.112 +@Book{Nipkow-Paulson-Wenzel:2002,
  32.113 +  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
  32.114 +  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
  32.115 +  publisher	= {Springer},
  32.116 +  series	= {LNCS},
  32.117 +  volume	= 2283,
  32.118 +  year		= 2002}
  32.119 +@Book{progr-mathematica,
  32.120 +  author = 	 {Maeder, Roman E.},
  32.121 +  title = 	 {Programming in Mathematica},
  32.122 +  publisher = 	 {Addison-Wesley},
  32.123 +  address = 	 {Reading, Mass.},
  32.124 +  year = 	 {1997}
  32.125 +}
  32.126 +@Book{prog-maple06,
  32.127 +  author = 	 {Aladjav, Victor and Bogdevicius, Marijonas},
  32.128 +  title = 	 {Maple: Programming, Physical and Engineering Problems},
  32.129 +  publisher = 	 {Fultus Corporation},
  32.130 +  year = 	 {2006},
  32.131 +  month = 	 {February 27},
  32.132 +  annote = 	 {ISBN: 1596820802}
  32.133 +}
  32.134 +@Article{plmms10,
  32.135 +  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
  32.136 +  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
  32.137 +  journal = 	 {ACM Communications in Computer Algebra},
  32.138 +  year = 	 {2010},
  32.139 +  volume = 	 {44},
  32.140 +  number = 	 {1/2},
  32.141 +  pages = 	 {27-41},
  32.142 +  month = 	 {March/June}
  32.143 +}
  32.144 +@inproceedings{casproto,
  32.145 +  author    = {Cezary Kaliszyk and
  32.146 +               Freek Wiedijk},
  32.147 +  title     = {Certified Computer Algebra on Top of an Interactive Theorem
  32.148 +               Prover},
  32.149 +  booktitle = {Calculemus},
  32.150 +  year      = {2007},
  32.151 +  pages     = {94-105},
  32.152 +  ee        = {http://dx.doi.org/10.1007/978-3-540-73086-6_8},
  32.153 +  crossref  = {DBLP:conf/mkm/2007},
  32.154 +  bibsource = {DBLP, http://dblp.uni-trier.de}
  32.155 +}
  32.156 +@InProceedings{wn:lucas-interp-12,
  32.157 +  author = 	 {Neuper, Walther},
  32.158 +  title = 	 {Automated Generation of User Guidance by Combining Computation and Deduction},
  32.159 +  booktitle = {THedu'11: CTP-compontents for educational software},
  32.160 +  year = 	 {2012},
  32.161 +  editor = 	 {Quaresma, Pedro},
  32.162 +  publisher = {EPTCS},
  32.163 +  note = {To appear}
  32.164 +}
  32.165 +@Manual{Huet_all:94,
  32.166 +  author = 	 {Huet, G. and Kahn, G. and  Paulin-Mohring, C.},
  32.167 +  title = 	 {The Coq Proof Assistant},
  32.168 +  institution =  {INRIA-Rocquencourt},
  32.169 +  year = 	 {1994},
  32.170 +  type = 	 {Tutorial},
  32.171 +  number = 	 {Version 5.10},
  32.172 +  address = 	 {CNRS-ENS Lyon},
  32.173 +  status={},source={Theorema},location={-}
  32.174 +}
  32.175 +@TECHREPORT{Back-SD09,
  32.176 +  author = {Back, Ralph-Johan},
  32.177 +  title = {Structured Derivations as a Unified Proof Style for Teaching Mathematics},
  32.178 +  institution = {TUCS - Turku Centre for Computer Science},
  32.179 +  year = {2009},
  32.180 +  type = {TUCS Technical Report},
  32.181 +  number = {949},
  32.182 +  address = {Turku, Finland},
  32.183 +  month = {July}
  32.184 +}
  32.185 +@InProceedings{ActiveMath-MAIN11,
  32.186 +  author = 	 {Melis, Erica and Siekmann, Jörg},
  32.187 +  title = 	 {An Intelligent Tutoring System for Mathematics},
  32.188 +  booktitle = {Seventh International Conference Artificial Intelligence and Soft Computing (ICAISC)},
  32.189 +  pages = 	 {91-101},
  32.190 +  year = 	 {2004},
  32.191 +  editor = 	 {Rutkowski, L. and Siekmann, J. and Tadeusiewicz, R. and Zadeh, L.A.},
  32.192 +  number = 	 {3070,},
  32.193 +  series = 	 {LNAI},
  32.194 +  publisher = {Springer-Verlag},
  32.195 +  doi =          {doi:10.1007/978-3-540-24844-6\_12}}
  32.196 +@TechReport{mat-tutor-cmu-MAIN11,
  32.197 +  author = 	 {John R. Anderson},
  32.198 +  title = 	 {Intelligent Tutoring and High School Mathematics},
  32.199 +  institution =  {Carnegie Mellon University, Department of Psychology},
  32.200 +  year = 	 {2008},
  32.201 +  type = 	 {Technical Report},
  32.202 +  number = 	 {20},
  32.203 +  note = 	 {http://repository.cmu.edu/psychology/20}
  32.204 +}
  32.205 +@PhdThesis{proof-strategies-11,
  32.206 +  author = 	 {Dietrich, Dominik},
  32.207 +  title = 	 {Proof Planning with Compiled Strategies},
  32.208 +  school = 	 {FR 6.2 Informatik, Saarland University},
  32.209 +  year = 	 {2011}
  32.210 +}
  32.211 +@proceedings{DBLP:conf/mkm/2007,
  32.212 +  editor    = {Manuel Kauers and
  32.213 +               Manfred Kerber and
  32.214 +               Robert Miner and
  32.215 +               Wolfgang Windsteiger},
  32.216 +  title     = {Towards Mechanized Mathematical Assistants, 14th Symposium,
  32.217 +               Calculemus 2007, 6th International Conference, MKM 2007,
  32.218 +               Hagenberg, Austria, June 27-30, 2007, Proceedings},
  32.219 +  booktitle = {Calculemus/MKM},
  32.220 +  publisher = {Springer},
  32.221 +  series    = {Lecture Notes in Computer Science},
  32.222 +  volume    = {4573},
  32.223 +  year      = {2007},
  32.224 +  isbn      = {978-3-540-73083-5},
  32.225 +  bibsource = {DBLP, http://dblp.uni-trier.de}
  32.226 +}
  32.227 +
  32.228 +@InProceedings{gdaroczy-EP-13,
  32.229 +  author = 	 {Gabriella Dar\'{o}czy and Walther Neuper},
  32.230 +  booktitle = {unknown},
  32.231 +  title = 	 {Error-Patterns within ``Next-Step-Guidance'' in TP-based Educational Systems},
  32.232 +  OPTpages = 	 {TODO-TODO},
  32.233 +  crossref =  {eduTPS-12},
  32.234 +  note = {to appear in this publication}
  32.235 +}
  32.236 +
  32.237 +
  32.238 +@Proceedings{eduTPS-12,
  32.239 +  title = 	 {Theorem-Prover based Systems for Education (eduTPS)},
  32.240 +  year = 	 {2013},
  32.241 +  OPTkey = 	 {},
  32.242 +  OPTbooktitle = {},
  32.243 +  OPTeditor = 	 {},
  32.244 +  OPTvolume = 	 {},
  32.245 +  OPTnumber = 	 {},
  32.246 +  OPTseries = 	 {},
  32.247 +  OPTaddress = 	 {},
  32.248 +  OPTmonth = 	 {},
  32.249 +  OPTorganization = {},
  32.250 +  publisher = {The Electronic Journal of Mathematics and Technology},
  32.251 +  note = 	 {to appear},
  32.252 +  OPTannote = 	 {}
  32.253 +}
  32.254 +
  32.255 +@Misc{nipkow-prog-prove,
  32.256 +  author = 	 {Nipkow, Tobias},
  32.257 +  title = 	 {Programming and Proving in {Isabelle/HOL}},
  32.258 +  howpublished = {contained in the Isabelle distribution},
  32.259 +  month = 	 {May 22},
  32.260 +  year = 	 {2012}
  32.261 +}
  32.262 +
  32.263 +@Book{pl:hind97,
  32.264 +  author = 	 {J. Roger Hindley},
  32.265 +  title = 	 {Basic Simple Type Theory},
  32.266 +  publisher = 	 {Cambridge University Press},
  32.267 +  year = 	 1997,
  32.268 +  editor =	 {S. Abramsky and P. H. Aczel and others},
  32.269 +  number =	 42,
  32.270 +  series =	 {Cambridge Tracts in Theoretical Computer Science},
  32.271 +  address =	 {Cambridge},
  32.272 +  annote =	 {97bok308}
  32.273 +}
  32.274 +
  32.275 +@Article{Milner-78,
  32.276 +  author = 	 {Milner, R.},
  32.277 +  title = 	 {A Theory of Type Polymorphism in Programming},
  32.278 +  journal = 	 {Journal of Computer and System Science (JCSS)},
  32.279 +  year = 	 {1978},
  32.280 +  number = 	 {17},
  32.281 +  volume = {0},
  32.282 +  pages = 	 {348-374}
  32.283 +}
  32.284 +
  32.285 +@inproceedings{Wenzel-11:doc-orient,
  32.286 + author = {Wenzel, Makarius},
  32.287 + title = {Isabelle as document-oriented proof assistant},
  32.288 + booktitle = {Proceedings of the 18th Calculemus and 10th international conference on Intelligent computer mathematics},
  32.289 + series = {MKM'11},
  32.290 + year = {2011},
  32.291 + isbn = {978-3-642-22672-4},
  32.292 + location = {Bertinoro, Italy},
  32.293 + pages = {244--259},
  32.294 + numpages = {16},
  32.295 + url = {http://dl.acm.org/citation.cfm?id=2032713.2032732},
  32.296 + acmid = {2032732},
  32.297 + publisher = {Springer-Verlag},
  32.298 + address = {Berlin, Heidelberg},
  32.299 +} 
  32.300 +@InProceedings{makar-jedit-12,
  32.301 +  author = 	 {Makarius Wenzel},
  32.302 +  title = 	 {Isabelle/{jEdit} — a Prover IDE within the {PIDE} framework},
  32.303 +  booktitle = {Conference on Intelligent Computer Mathematics (CICM 2012)},
  32.304 +  year = 	 {2012},
  32.305 +  editor = 	 { J. Jeuring and others},
  32.306 +  number = 	 {7362},
  32.307 +  series = 	 {LNAI},
  32.308 +  publisher = {Springer}
  32.309 +}
  32.310 +
  32.311 +@InProceedings{Makarius-09:parall-proof,
  32.312 +  author = 	 {Wenzel, Makarius},
  32.313 +  title = 	 {Parallel Proof Checking in {Isabelle/Isar}},
  32.314 +  booktitle = {ACM SIGSAM 2009 International Workshop on Programming Languages for Mechanized Mathematics Systems (PLMMS)},
  32.315 +  year = 	 {2009},
  32.316 +  editor = 	 {Dos Reis and L. Th\'ery},
  32.317 +  address = 	 {Munich},
  32.318 +  month = 	 {August},
  32.319 +  publisher = {ACM Digital library}
  32.320 +}
  32.321 +
  32.322 +@Book{fm-03,
  32.323 +  author = 	 {Jean Francois Monin and Michael G. Hinchey},
  32.324 +  title = 	 {Understanding formal methods},
  32.325 +  publisher = 	 {Springer},
  32.326 +  year = 	 {2003}
  32.327 +}
  32.328 +
  32.329 +@misc{wiki:1,
  32.330 +   author = {Wikipedia},
  32.331 +   Title = {Table of common Z-transform pairs},
  32.332 +   year = {2012},
  32.333 +   url = {http://en.wikipedia.org/wiki/Z-transform#Table_of_common_Z-transform_pairs},
  32.334 +   note = {[Online; accessed 31-Oct-2012]}
  32.335 + }
  32.336 +
  32.337 +@InProceedings{kremp.np:assess,
  32.338 +  author = 	 {Krempler, Alan and Neuper, Walther},
  32.339 +  title = 	 {Formative Assessment for User Guidance in Single Stepping Systems},
  32.340 +  booktitle = {Interactive Computer Aided Learning, Proceedings of ICL08},
  32.341 +  year = 	 {2008},
  32.342 +  editor = 	 {Aucher, Michael E.},
  32.343 +  address = 	 {Villach, Austria},
  32.344 +  note = 	 {$\,$\\http://www.ist.tugraz.at/projects/isac/publ/icl08.pdf}
  32.345 +}
  32.346 +
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/doc-isac/jrocnik/final/jrocnik_bakk.tex	Tue Sep 17 09:50:52 2013 +0200
    33.3 @@ -0,0 +1,688 @@
    33.4 +%   Title:  bakkarbeit_jrocnik.tex
    33.5 +%   Author: Jan Rocnik
    33.6 +%   (c) copyright due to lincense terms.
    33.7 +%2345678901234567890123456789012345678901234567890123456789012345678901234567890
    33.8 +%       10        20        30        40        50        60        70        80
    33.9 +
   33.10 +%define document class
   33.11 +\documentclass[a4paper, 12pt]{article}
   33.12 +
   33.13 +%packages for language and input
   33.14 +\usepackage[english]{babel} 
   33.15 +\usepackage[T1]{fontenc}
   33.16 +\usepackage[latin1]{inputenc}
   33.17 +
   33.18 +%generel packages
   33.19 +\usepackage{url}
   33.20 +\usepackage{endnotes}
   33.21 +\usepackage{trfsigns}
   33.22 +\usepackage{setspace}
   33.23 +\usepackage[pdfpagelabels]{hyperref}
   33.24 +\usepackage{longtable}
   33.25 +
   33.26 +\usepackage{float} %For restylefloat
   33.27 +\newfloat{example}{ht}{} %self made floats
   33.28 +\floatname{example}{Example} %name for float
   33.29 +\restylefloat{table} %float tables
   33.30 +\floatstyle{ruled} %boxes around floats
   33.31 +\restylefloat{example} %float examples --> boxes
   33.32 +\restylefloat{figure}
   33.33 +
   33.34 +%colors and graphics
   33.35 +\usepackage{graphicx}
   33.36 +\usepackage{color}
   33.37 +\definecolor{lgray}{RGB}{238,238,238}
   33.38 +
   33.39 +%isabelle relevant packages
   33.40 +\usepackage{isabelle,isabellesym}
   33.41 +%\isabellestyle{it}
   33.42 +
   33.43 +%define isac logos
   33.44 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   33.45 +\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   33.46 +
   33.47 +\newcommand{\HRule}{\rule{\linewidth}{0.2mm}}
   33.48 +
   33.49 +%start new even page
   33.50 +\usepackage{ifthen}
   33.51 +\newcommand{\newevenside}{
   33.52 +        \ifthenelse{\isodd{\thepage}}{\newpage}{
   33.53 +        \newpage
   33.54 +        \phantom{placeholder} % doesn't appear on page
   33.55 +        \thispagestyle{empty} % if want no header/footer
   33.56 +        \newpage
   33.57 +        }
   33.58 +}
   33.59 +
   33.60 +%this should be the last package used
   33.61 +%\usepackage{pdfsetup}
   33.62 +
   33.63 +%----------// BEGIN DOCUMENT \\----------%
   33.64 +
   33.65 +\begin{document}
   33.66 +
   33.67 +%----------// TITLE PAGE \\----------%1
   33.68 +
   33.69 +\input{./bakkarbeit_titlepage.tex}
   33.70 +\newpage
   33.71 +
   33.72 +%----------// EMPTY PAGE \\----------%2
   33.73 +
   33.74 +\setcounter{page}{2}
   33.75 +\thispagestyle{empty}\mbox{}\newpage
   33.76 +
   33.77 +%----------// THANKS \\----------%3
   33.78 +
   33.79 +\setcounter{page}{3}
   33.80 +\begin{center}
   33.81 +	Special Thanks to\\
   33.82 +	\hfill \\
   33.83 +	\emph{Dr.techn. Walther Neuper}\\
   33.84 +	\emph{Dipl.-Ing. Bernhard Geiger}
   33.85 +\end{center}
   33.86 +\thispagestyle{empty}
   33.87 +\newpage
   33.88 +
   33.89 +%----------// EMPTY PAGE \\----------%4
   33.90 +
   33.91 +%the following command was replaced by \newevenside
   33.92 +%\thispagestyle{empty}\mbox{}\newpage
   33.93 +
   33.94 +%----------// ABSTRACT \\----------%5
   33.95 +
   33.96 +\newevenside
   33.97 +\begin{abstract}
   33.98 +The Baccalaureate Thesis creates interactivee course material for Signal Processing (SP) based on the experimental educational math assistant Isabelle/{\sisac} ({\em Isa}belle for Transparent {\em C}alculations in Applied Mathematics).
   33.99 +\par The content of the course material is defined together with the Institute for Signal Processing and Speech Communication (SPSC) of Graz University of Technology (TUG). The content is planned to be used in specific lectures and labs of the SPSC and thus is thoroughly concerned with underlying mathematical and physical theory.
  33.100 +One challenge of this thesis is, that much theory required for SPSC is not yet mechanized in Computer Theorem Provers (TP); so this thesis will provide preliminary definitions  and theorems (without proofs~!) implemented in Isabelle \emph{theories}.
  33.101 +\par Another challenge is the implementation of interactivee courses: this is done within the educational math assistant Isabelle/{\sisac}, which is under development at Austrian Universities, one of them TU Graz. The present state of {\sisac{}} happens to provide the {\em first} occasion for authoring by a non-member of the {\sisac}-developer team. So this challenge involves  alpha-testing of the underlying \emph{TP-based programing language}, because error messages are still not user-friendly and need frequent contact with {\sisac}-developers.
  33.102 +So the practical outcome of this thesis is twofold:
  33.103 +\begin{enumerate}
  33.104 +\item Interactive course material hopefully useful in education within the SPSC and within \emph{STEOP}\footnote{German: "`Studieneingangs- und Orientierungsphase"'}, the introductory orientation phase at TUG, as a preview for students in Telematics on later application of math knowledge introduced in the first semester and
  33.105 +\item A detailed description of technicalities in programing implemented as an interactivee Isabelle/Isar theory, providing future programers with guidelines and {\sisac}-developers with feedback in usability of the CTP-based program language. 
  33.106 +\end{enumerate}
  33.107 +\end{abstract}
  33.108 +\clearpage
  33.109 +
  33.110 +%----------// EMPTY PAGE \\----------%6
  33.111 +
  33.112 +%the following command was replaced by \newevenside
  33.113 +%\thispagestyle{empty}\mbox{}\newpage
  33.114 +
  33.115 +%----------// T O C \\----------%7-9
  33.116 +
  33.117 +\newevenside
  33.118 +
  33.119 +\pagenumbering{Roman}
  33.120 +%This thesis is structured into a fundamental part introducing the motivation, the basic notions concerning the thesis aswell as the {\sisac{}} project and describing the mathematic base. Further a automatically generated practical part representing the work on {\sisac{}} which can be extended.
  33.121 +\tableofcontents
  33.122 +\clearpage
  33.123 +\pagenumbering{arabic}
  33.124 +\setcounter{page}{10}
  33.125 +
  33.126 +%----------// PART-1 \\----------%
  33.127 +
  33.128 +\newevenside
  33.129 +
  33.130 +\part{Project Fundamentals}
  33.131 +
  33.132 +\section{Introduction}
  33.133 +Didactics of mathematics faces a specific issue, a gap between (1) introduction of math concepts and skills and (2) application of these concepts and skills, which usually are separated into different units in curricula (for good reasons). For instance, (1) teaching partial fraction decomposition is separated from (2) application for inverse Z-transform in signal processing.
  33.134 +
  33.135 +This gap is an obstacle for applying math as an fundamental thinking technology in engineering: In (1) motivation is lacking because the question ``What is this stuff good for~?'' cannot be treated sufficiently, and in (2) the ``stuff'' is not available to students in higher semesters as widespread experience shows.
  33.136 +
  33.137 +\medskip
  33.138 +Motivated by this didactical issue on the one hand, and ongoing R\&D on a novel kind of educational mathematics assistant at Graz University of Technology~\footnote{http://www.ist.tugraz.at/isac/} promising to cope with this issue on the other hand, several institutes are planning to join their expertise: the Institutes for Institute for Information Systems and Computer Media (IICM), the Institute for Software Technology (IST), the Institutes for Mathematics, the Signal Processing and Speech Communication Institute (SPSC), the Institute for Structural Analysis and the Institute of Electrical Measurement and Measurement Signal Processing.
  33.139 +\par This thesis is the first attempt to tackle the above mentioned issue, it focuses on Telematics, because these specific studies focus on mathematics in \emph{STEOP}, the introductory orientation phase. \emph{STEOP} is considered an opportunity to investigate the impact of {\sisac}'s prototype on the issue and others.
  33.140 +
  33.141 +\medskip
  33.142 +The thesis is structured as follows: Part~I concerns theory and project controlling, Part~II the implementation work, where the latter is the main work, Part~III the resume including summary, open questions and conclusion and the appendixes in Part~IV.
  33.143 +\par In part I, Section~\ref{isabisac} gives a brief description of the state-of-the-art for educational math assistants (Section~\ref{emas}) and introduces the notions required for the implementation work (Section~\ref{math-auth}). In particular, Section~\ref{user-guid} explains, why math authoring in {\sisac{}} is {\em not} concerned with interaction (and thus not with user guidance etc at all~!). So a concise description of the thesis' goals needs to be postponed to Section~\ref{sec:goals}.
  33.144 +\par Section~\ref{sp} analyzes a problems defined by the SPSC for the knowledge already provided (Section~\ref{know-isab}, Section~\ref{know-isac}), discusses the selection of problems for implementation (Section~\ref{know-missing}) TODO: further structure ?
  33.145 +%(\S\ref{})
  33.146 +
  33.147 +\section{Mechanization of Math in Isabelle/ISAC\label{isabisac}}
  33.148 +
  33.149 +%\subsubsection*{Notes on Mechanization of Mathematics}
  33.150 +%This thesis tries to \emph{connect} these two worlds and is one of the first guidelines to implement problem classes in {\sisac}. As we are still in a eary part of development, this is the first thesis dealing within this topic and there is \emph{no} related work to guid through. A more detailed description about this fact can be found in Section \ref{sec:related}.
  33.151 +%The major challenge of the practical part, of this thesis, is, that "connecting the two worlds" involves programing in a CTP-based programing language which is in a very early state of prototyping. There is no concrete experience data ready to grep.
  33.152 +%
  33.153 +As mentioned in the introduction, a prototype of an educational math assistant called {\sisac}\footnote{{\sisac}=\textbf{Isa}belle \cite{Nipkow-Paulson-Wenzel:2002} for \textbf{C}alculations, see http://www.ist.tugraz.at/isac/.} bridges the gap between (1) introducation and (2) application of mathematics: {\sisac} is based on Computer Theorem Proving (TP), a technology which requires each fact and each action justified by formal logic, so {{\sisac{}}} makes justifications transparent to students in interactivee step-wise problem solving. By that way {\sisac} already can serve both:
  33.154 +\begin{enumerate}
  33.155 +\item Introduction of math stuff (in e.g. partial fraction decomposition) by stepwise explaining and exercising respective symbolic calculations with ``next step guidance (NSG)'' and rigorously checking steps freely input by students  --- this also in context with advanced applications (where the stuff to be taught in higher semesters can be skimmed through by NSG), and
  33.156 +\item Application of math stuff in advanced engineering courses (e.g. problems to be solved by inverse Z-transform in a Signal Processing Lab) --- and now without much ado about basic math techniques (like partial fraction decomposition): ``next step guidance'' supports students in independently (re-)adopting such techniques.
  33.157 +\end{enumerate}
  33.158 +Before the question is answers, how {\sisac} accomplishes this task from a technical point of view, some remarks on the state-of-the-art is given, therefor follow up Section~\ref{emas}.
  33.159 +
  33.160 +\subsection{Educational Mathematics Assistants (EMAs)}\label{emas}
  33.161 +Educational software in mathematics is, if at all, based on Computer Algebra Systems (CAS, for instance \cite{progr-mathematica,prog-maple06}), Dynamic Geometry Systems (DGS, for instance \footnote{GeoGebra http://www.geogebra.org, Cinderella http://www.cinderella.de/, GCLC http://poincare.matf.bg.ac.rs/~janicic/gclc/}) or spread-sheets. These base technologies are used to program math lessons and sometimes even exercises. The latter are cumbersome: the steps towards a solution of such an interactivee exercise need to be provided with feedback, where at each step a wide variety of possible input has to be foreseen by the programer --- so such interactivee exercises either require high development efforts or the exercises constrain possible inputs.
  33.162 +
  33.163 +A new generation of educational math assistants (EMAs) is emerging presently, which is based on Theorem Proving (TP). TP, for instance Isabelle \cite{Nipkow-Paulson-Wenzel:2002} and Coq \cite{Huet_all:94}, is a technology which requires each fact and each action justified by formal logic. Pushed by demands for \textit{proven} correctness of safety-critical software TP advances into software engineering; from these advancements computer mathematics benefits in general, and math education in particular. Two features of TP are immediately beneficial for learning:
  33.164 +
  33.165 +\paragraph{TP have knowledge in human readable format,} that is in standard predicate calculus. TP following the LCF-tradition have that knowledge down to the basic definitions of set, equality, etc~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL.html}; following the typical deductive development of math, natural numbers are defined and their properties proven~\footnote{http://isabelle.in.tum.de/dist/library/HOL/Number\_Theory/Primes.html}, etc. Present knowledge mechanized in TP exceeds high-school mathematics by far, however by knowledge required in software technology, and not in other engineering sciences.
  33.166 +
  33.167 +\paragraph{TP can model the whole problem solving process} in mathematical problem solving {\em within} a coherent logical framework. This is already being done by three projects, by Ralph-Johan Back \cite{Back-SD09}, by ActiveMath \cite{ActiveMath-MAIN11} and by Carnegie Mellon Tutor \cite{mat-tutor-cmu-MAIN11}.
  33.168 +
  33.169 +Having the whole problem solving process within a logical coherent system, such a design guarantees correctness of intermediate steps and of the result (which seems essential for math software); and the second advantage is that TP provides a wealth of theories which can be exploited for mechanizing other features essential for educational software.
  33.170 +
  33.171 +\subsection{Generation of User Guidance in EMAs}\label{user-guid}
  33.172 +One essential feature for educational software is feedback to user input and assistance in coming to a solution.
  33.173 +
  33.174 +\paragraph{Checking user input} by ATP during stepwise problem solving is being accomplished by the three projects mentioned above \cite{Back-SD09,ActiveMath-MAIN11,mat-tutor-cmu-MAIN11} exclusively. They model the whole problem solving process as mentioned above, so all what happens between formalized assumptions (or formal specification) and goal (or fulfilled postcondition) can be mechanized. Such mechanization promises to greatly extend the scope of educational software in stepwise problem solving.
  33.175 +
  33.176 +\paragraph{Next step guidance (NSG)} comprises the system's ability to propose a next step; this is a challenge for TP: either a radical restriction of the search space by restriction to very specific problem classes is required, or much care and effort is required in designing possible variants in the process of problem solving \cite{proof-strategies-11}.
  33.177 +
  33.178 +Another approach is restricted to problem solving in engineering domains, where a problem is specified by input, precondition, output and postcondition, and where the postcondition is proven by ATP behind the scenes \cite{wn:lucas-interp-12}: Here the possible variants in the process of problem solving are provided with feedback {\em automatically}, if the problem is described in a TP-based programing language~\cite{plmms10}: the programer only describes the math algorithm without caring about interaction (the respective program is functional and even has no in/output statements~!); interaction is generated as a side-effect by the interpreter --- an efficient separation of concern between math programers and dialog designers promising application all over engineering disciplines.
  33.179 +
  33.180 +
  33.181 +\subsection{Math Authoring in Isabelle/ISAC\label{math-auth}}
  33.182 +Authoring new mathematics knowledge in {\sisac} can be compared with ``application programing'' of engineering problems; most of such programing uses CAS-based programing languages (CAS = Computer Algebra Systems; e.g. Mathematica's \cite{progr-mathematica} or Maple's programing language \cite{prog-maple06}).
  33.183 +
  33.184 +{\sisac}, however, uses a novel type of TP-based language \cite{plmms10} for describing how to construct a solution to an engineering problem and for calling equation solvers, integration, etc~\footnote{Implementation of CAS-like functionality in TP is not primarily concerned with efficiency, but with a didactic question: What to decide for: for high-brow algorithms at the state-of-the-art or for elementary algorithms comprehensible for students~?} within TP; TP can ensure ``systems that never make a mistake'' \cite{casproto} --- are impossible for CAS which have no logics underlying.
  33.185 +
  33.186 +With writing such TP-based programs authoring is perfect, the application programer is not concerned with interaction or with user guidance: this is concern of a novel kind of program interpreter called Lucas-Interpreter \cite{wn:lucas-interp-12}. This interpreter hands over control to a dialog component at each step of calculation (like a debugger at breakpoints) and calls automated TP to check user input following personalized strategies according to a feedback module.
  33.187 +
  33.188 +\medskip
  33.189 +However ``application programing with TP'' is not done with writing a program: according to the principles of TP, each step must be justified. Such justifications are given by theorems. So all steps must be related to some theorem, if there is no such theorem it must be added to the existing knowledge, which is organized in so-called \textbf{theories} in  Isabelle. A theorem must be proven; fortunately Isabelle comprises a mechanism (called ``axiomatization''), which allows to omit proofs. Such a theorem is shown in Example~\ref{eg:neuper1}.
  33.190 +
  33.191 +\begin{example}
  33.192 +{\small\begin{tabbing}
  33.193 +123\=123\=123\=123\=\kill
  33.194 +\hfill \\
  33.195 +\>axiomatization where \\
  33.196 +\>\>  rule1: "1 = $\delta$ [n]" and\\
  33.197 +\>\>  rule2: "|| z || > 1 ==> z / (z - 1) = u [n]" and\\
  33.198 +\>\>  rule3: "|| z || < 1 ==> z / (z - 1) = -u [-n - 1]" and \\
  33.199 +\>\>  rule4: "|| z || > || $\alpha$ || ==> z / (z - $\alpha$) = $\alpha^n$ * u [n]" and\\
  33.200 +\>\>  rule5: "|| z || < || $\alpha$ || ==> z / (z - $\alpha$) = -($\alpha^n$) * u [-n - 1]" and\\
  33.201 +\>\>  rule6: "|| z || > 1 ==> z/(z - 1)$^2$ = n $\cdot$ u [n]"
  33.202 +\end{tabbing}
  33.203 +}
  33.204 +\caption{Axiomatization in Isabelle\label{eg:neuper1}}
  33.205 +\end{example}
  33.206 +
  33.207 +In order to provide TP with logical facts for checking user input, the Lucas-Interpreter requires a \textbf{specification}. Such a specification is shown in Example~\ref{eg:neuper2}.
  33.208 +
  33.209 +\begin{example}
  33.210 +{\small\begin{tabbing}
  33.211 +123,\=postcond \=: \= $\forall \,A^\prime\, u^\prime \,v^\prime.\,$\=\kill
  33.212 +\hfill \\
  33.213 +Specification no.1:\\
  33.214 +%\>input\>: $\{\;r={\it arbitraryFix}\;\}$  \\
  33.215 +\>input    \>: $\{\;r\;\}$  \\
  33.216 +\>precond  \>: $0 < r$   \\
  33.217 +\>output   \>: $\{\;A,\; u,v\;\}$ \\
  33.218 +\>postcond \>:{\small  $\;A=2uv-u^2 \;\land\; (\frac{u}{2})^2+(\frac{v}{2})^2=r^2 \;\land$}\\
  33.219 +\>     \>\>{\small $\;\forall \;A^\prime\; u^\prime \;v^\prime.\;(A^\prime=2u^\prime v^\prime-(u^\prime)^2 \land
  33.220 +(\frac{u^\prime}{2})^2+(\frac{v^\prime}{2})^2=r^2) \Longrightarrow A^\prime \leq A$} \\
  33.221 +\>props\>: $\{\;A=2uv-u^2,\;(\frac{u}{2})^2+(\frac{v}{2})^2=r^2\;\}$
  33.222 +\end{tabbing}
  33.223 +}
  33.224 +\caption{Specification for the Lucas-Interpreter\label{eg:neuper2}}
  33.225 +\end{example}
  33.226 +
  33.227 +Such a specification is checked before the execution of a program is started, the same applies for sub-programs. In the following example program (Example~\ref{eg:subprob}) the sub-programs are designated by \ttfamily SubProblem \normalfont:
  33.228 +
  33.229 +\begin{example}
  33.230 +\hfill \\
  33.231 +{\ttfamily \begin{tabbing}
  33.232 +``(L\_L::bool list) = (\=SubProblem (\=Test','' \\
  33.233 +``\>\>[linear,univariate,equation,test],'' \\
  33.234 +``\>\>[Test,solve\_linear])'' \\
  33.235 +``\>[BOOL equ, REAL z])'' \\
  33.236 +\end{tabbing}
  33.237 +}
  33.238 +{\small\textit{
  33.239 +	\noindent If a program requires a result which has to be calculated first we can use a subproblem to do so. In our specific case we wanted to calculate the zeros of a fraction and used a subproblem to calculate the zeros of the denominator polynom.
  33.240 +	}}
  33.241 +\caption{Usage of Subproblems in Programs\label{eg:subprob}}
  33.242 +\end{example}
  33.243 +
  33.244 +
  33.245 +\subsection{Goals of the Thesis}\label{sec:goals}
  33.246 +Imagine a piece of software would be able to support you by understanding every problem class, upcoming in the first years attending university - wouldn't it be great?
  33.247 +\par {{\sisac{}}} tries to do that, but the current state of the art is miles away from this goal and a single implementation of a problem is not enough to change this circumstance. Through this fact it is all the more essential to try, test, research and document the implementation of problem classes from "`real world"' applications. Responding to the abstract at the begin of this document the thesis has two folds; on the one hand certainly to provide interactivee course material for Signal Processing (which means to implement a single problem provided by the Institute of Signal Processing and Speech Communication (SPSC); follow up Calulcations), and to extract experience data respectively help the {{\sisac{}}}-team by setting up a detailed description of technicalities hacking {\sisac{}} on the other hand.
  33.248 +
  33.249 +All the notions are in place to describe the task ``Interactive Course Material for Signal Processing based on Isabelle/{\sisac}'', the main task of this thesis, appropriately by the following points:
  33.250 +\begin{enumerate}
  33.251 +\item Analyze the problems given by the SPSC Lab for mathematics \textbf{knowledge required}, search the knowledge already available in Isabelle/{\sisac}, estimate efforts required to fill the gap between knowledge required and knowledge available, and finally select problems for implementation accordingly.
  33.252 +\item Implement the selected problems in Isabelle/{\sisac}, which means, in appropriate Isabelle theories \textbf{for each problem} implement:
  33.253 +  \begin{enumerate}
  33.254 +  \item \textbf{Definitions and theorems} required within the specification (including ``descriptions'' for input variables and output variables) and the program (proofs omitted via ``axiomatization'')
  33.255 +  \item \textbf{A specification} which describes the input variables, the preconditions on the input (a challenge for rigorously exact mathematics~!), the output variables and the postcondition, which relates input to output such that the problem is characterized formally (another challenge for rigorously exact mathematics~!)
  33.256 +  \item \textbf{A program} describing the algorithm which solves the problem, i.e. which constructs output meeting the postcondition. Programming involves identifying the steps (tactics~!) which create the calculation and calling CAS-functions (simplification, equation solvers, etc) appropriately. Modularization of programs into {\tt SubProblems} has to prepare for re-use of code.
  33.257 +  \end{enumerate}
  33.258 +\item Add \textbf{multimedia explanations} to each problem (i.e. to specific definitions, theorems, the specification and the program) such that non-expert students (e.g. within \emph{STEOP}, the introductory orientation phase at TUG) get an idea the problem is about.
  33.259 +\item \textbf{Document the implementation} such that
  33.260 +  \begin{enumerate}
  33.261 +  \item Interactive course material hopefully useful in education within the SPSC and within \emph{STEOP}, the introductory orientation phase at TUG, as a preview for students in Telematics on later application of math knowledge introduced in the first semester and
  33.262 +  \item A detailed description of technicalities in programing implemented as an interactivee Isabelle/Isar theory, providing future programers with guidelines and {\sisac}-developers with feedback in usability of the TP-based program language. 
  33.263 +  \item subsequent application programers have guidelines for further implementation of interactivee course material in SPSC and other engineering sciences
  33.264 +  \item {\sisac{}} developers get feedback for ongoing improvement of the TP-based programing language, the respective development environment and the respective program interpreter (called Lucas-Interpreter)
  33.265 +  \item development of knowledge for engineering sciences is being motivated in the Isabelle community.
  33.266 +  \end{enumerate}
  33.267 +\end{enumerate}
  33.268 +
  33.269 +
  33.270 +\section{Mechanization of Signal Processing Problems}\label{sp}
  33.271 +\subsection{Relevant Knowledge available in Isabelle}\label{know-isab}
  33.272 +Isabelle is developed now for a long time and so we are able to access a huge range of theories and useful snippets. The main problem according this snip sets is that isabelle still is a theorem proofer and not an algebra system. But due the work of the {\sisac}-development team there are already also many calculation examples provided.
  33.273 +\par The SPSC provided a list of problems which are often done wrong or are misunderstood by students in term of the problem classes. Out of these tasks we tried to extract the core operations and looked up which parts are already implemented or useful. The provided problem classes are:
  33.274 +\begin{itemize}
  33.275 +	\item Fourier-Transformation
  33.276 +	\item Convolution
  33.277 +	\item Inverse Z-Transformation and partial fraction decomposition
  33.278 +	\item Index transformation
  33.279 +\end{itemize}
  33.280 +
  33.281 +A survey of these selected Problems on their "`correct"' solution can be found in Appendix~\ref{app:calc}. After manually solving this problems we started checking which of them are able to realizable. As already remarked above, isabelle is just a theorem proover due this fact isabelle only provides some theories which are useful for the provided problem classes.
  33.282 +\par Yet, isabelle also has some problems on traditional notation. For example a theory called FFT is already implemented this theory does not provide methods for solving fourier transformation tasks, it only defines the basic condition a fast Fourier transformed expression has to fulfill.
  33.283 +\par For the problems we had a look-on isabelle did not provide specific theories which can be implemented one by one, so a look at the mechanized knowledge in {\sisac} is the next step, therefore follow up Section~\ref{know-isac}.
  33.284 +
  33.285 +\subsection{Relevant Knowledge available in ISAC}\label{know-isac}
  33.286 +{\sisac} already provides a small registry of useful programs and surveys on using isabelle as for solving problems. These snip sets are things like norming rational numbers, solving variate and univariate equations, substitutions, some simple integrals and so on. For a detailed review on the currently implemented theories a look at the {\sisac} project web-page\footnote{http://www.ist.tugraz.at/projects/isac/www/kbase/pbl/index\_pbl.html} is strongly recommended, as the appreciation for this thesis is no describing all parts of {\sisac} in detail. This would also not be possible as {\sisac} is permanently growing.
  33.287 +\par After we differenced {\sisac} and isabelle we are able to introduce two axes in the project. This axes are the specifications (``application axis'' represented as isabelle) and methods (``algorithmic axis'' represented as {\sisac}).
  33.288 +\par During the first weeks of work on this thesis we decided on implementing the Z-Transformation and particullary the included partial fraction decomposion first. The algoritmix axis therefor already provides the knowledge for the following parts:
  33.289 +\begin{description}
  33.290 +\item[Partial Fractions] We now how to handle them and we are able to illustrate them.
  33.291 +\item[Cancellation of multivariate rational terms] Simplification is possible.
  33.292 +\item[Equations] The possibility of solving linear and second order equations is provided, also the possibility to get the left or right hand side of an equation.
  33.293 +\item[Substitution] We are able to substitute given variables in terms, we are also able to subsitude a list of variables in terms.
  33.294 +\end{description}
  33.295 +
  33.296 +\subsection{Survey on Required Knowledge}\label{know-missing}
  33.297 +Following tables (Table~\ref{tab:eff-four},~\ref{tab:eff-conv},~\ref{tab:eff-ztrans}) are showing the expected development effort for specific problems. The values are only very inaccurately approximations of the real work, but needed as a basis for descieding with which problem to start:
  33.298 +
  33.299 +\begin{table}
  33.300 +	\centering
  33.301 +	\begin{tabular}{p{4cm}|p{5cm}|rp{2.5cm}}
  33.302 +		\textbf{Requirements}   & \textbf{Comments}    &\textbf{Effort}\\ \hline\hline
  33.303 +		solving Integrals		    & simple via properties table     &     20\\
  33.304 +		                        & \emph{real}          &    MT\\ \hline
  33.305 +		transformation table    & simple transform     &    20\\ \hline
  33.306 +		visualisation						& backend							 &    10\\ \hline
  33.307 +		example collection      & with explanations    &    20\\ \hline\hline
  33.308 +		\multicolumn{2}{c|}{}                          & 70-80\\
  33.309 +	\end{tabular}
  33.310 +	
  33.311 +	\caption{Fourier-Transformation development effort\label{tab:eff-four}}
  33.312 +\end{table}
  33.313 +	
  33.314 +
  33.315 +\begin{table}
  33.316 +	\centering
  33.317 +	\begin{tabular}{p{4cm}|p{5cm}|rp{2.5cm}}
  33.318 +		\textbf{Requirements}   & \textbf{Comments}    &\textbf{Effort}\\ \hline\hline
  33.319 +		simplify rationals      & {\sisac}             &     0\\ \hline
  33.320 +		define $\sum\limits_{i=0}^{n}i$ & partly {\sisac}  &    10\\ \hline
  33.321 +		simplify sum			      & termorder            &    10\\
  33.322 +		                        & simplify rules       &    20\\
  33.323 +		                        & use simplify rationals&     0\\ \hline
  33.324 +		index adjustments       & with unit step       &      10\\ \hline
  33.325 +		example collection      & with explanations    &    20\\ \hline\hline
  33.326 +		\multicolumn{2}{c|}{}                      & 70-90\\
  33.327 +	\end{tabular}
  33.328 +
  33.329 +	\caption{Convolution Operations development effort\label{tab:eff-conv}}
  33.330 +\end{table}
  33.331 +
  33.332 +\begin{table}
  33.333 +	\centering
  33.334 +	\begin{tabular}{p{4cm}|p{5cm}|rp{2.5cm}}
  33.335 +		\textbf{Requirements}   & \textbf{Comments}    &\textbf{Effort}\\ \hline\hline
  33.336 +		solve for part.fract.   & {\sisac}: degree 2   &     0\\
  33.337 +		                        & complex nomminators  &    30\\
  33.338 +		                        & degree > 2           &    MT\\ \hline
  33.339 +		simplify polynomial     & {\sisac}             &     0\\
  33.340 +		simplify rational       & {\sisac}             &     0\\ \hline
  33.341 +		partial fraction        & degree 2,            &    20\\
  33.342 +		decomposition           & specification, method&    30\\ \hline
  33.343 +		${\cal Z}^{-1}$ table   & explanations, figures&    20\\ \hline
  33.344 +		example collection      & with explanations    &    20\\ \hline\hline
  33.345 +		\multicolumn{2}{c|}{}                          & 90-120\\
  33.346 +	\end{tabular}
  33.347 +
  33.348 +\caption{Z-Transformation development effort\label{tab:eff-ztrans}}
  33.349 +\end{table}
  33.350 +
  33.351 +As conclusion of the summarized efforts it is evident that only one topic can be tried to realized as a baccalaureate thesis. In accord with Dr. Neuper we decided after some practical tests to start with the implementation of the (Inverse) Z-Transformation. The Reason is that this topic can mostly be done with knowledge which was already tried to be mechanized in {\sisac}.
  33.352 +
  33.353 +\subsection{Formalization of missing knowledge in Isabelle}
  33.354 +
  33.355 +A problem behind is the mechanization of mathematic theories in TP-bases languages. There is still a huge gap between these algorithms and this what we want as a solution - in Example Signal Processing. 
  33.356 +\begin{example}
  33.357 +	\[
  33.358 +		X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY
  33.359 +  \]
  33.360 +	{\small\textit{
  33.361 +		\noindent A very simple example on this what we call gap is the simplification above. It is needles to say that it is correct and also Isabelle for fills it correct - \emph{always}. But sometimes we don't want expand such terms, sometimes we want another structure of them. Think of a problem were we now would need only the coefficients of $X$ and $Y$. This is what we call the gap between mechanical simplification and the solution.
  33.362 +	}}
  33.363 +	\caption{Correct but not useful}\label{eg:gap}
  33.364 +\end{example}
  33.365 +Until we are not able to fill this gap we have to live with it but first have a look on the meaning of this statement:
  33.366 +\par Mechanized math starts from mathematical models and \emph{hopefully} proceeds to match physics. Academic engineering starts from physics (experimentation, measurement) and then proceeds to mathematical modeling and formalization. The process from a physical observance to a mathematical theory is unavoidable bound of setting up a big collection of standards, rules, definition but also exceptions. These are the things making mechanization that difficult.
  33.367 +\begin{example}
  33.368 +	\[
  33.369 +		m,\ kg,\ s,\ldots
  33.370 +  \]
  33.371 +	{\small\textit{
  33.372 +		\noindent Think about some units like that one's above. Behind each unit there is a discerning and very accurate definition: One Meter is the distance the light travels, in a vacuum, through the time of 1 / 299.792.458 second; one kilogram is the weight of a platinum-iridium cylinder in paris; and so on. But are these definitions usable in a computer mechanized world?!
  33.373 +	}}
  33.374 +	\caption{Units in measurement}\label{eg:units}
  33.375 +\end{example}
  33.376 +\par A computer or a TP-System builds on programs with predefined logical rules and does not know any mathematical trick (follow up example \ref{eg:trick}) or recipe to walk around difficult expressions. 
  33.377 +\begin{example}
  33.378 +\[ \frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)= \]
  33.379 +\[ \frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=
  33.380 +	 \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}= \]
  33.381 +\[ \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} \]
  33.382 +	{\small\textit{
  33.383 +		\noindent Sometimes it is also useful to be able to apply some \emph{tricks} to get a beautiful and particularly meaningful result, which we are able to interpret. But as seen in this example it can be hard to find out what operations have to be done to transform a result into a meaningful one.
  33.384 +	}}
  33.385 +	\caption{Mathematic tricks}\label{eg:trick}
  33.386 +\end{example}
  33.387 +For such a system the only possibility is to work through its known definitions and stops if none of these fits. Specified on Signal Processing or any other application it is often possible to walk through by doing simple creases. This creases are in generell based on simple math operatiopms but the challenge is to teach the machine \emph{all}\footnote{Its pride to call it \emph{all}.} of them. Unfortunately the goal of TP Isabelle is to reach a high level of \emph{all} but it in real it will still be a survey of knowledge which links to other knowledge and {\sisac{}} a trainer and helper but no human compensating calculator. 
  33.388 +\par {{\sisac{}}} itself aims to adds an \emph{application} axis (formal specifications of problems out of topics from Signal Processing, etc.) and an \emph{algorithmic} axis to the \emph{deductive} axis of physical knowledge. The result is a three-dimensional universe of mathematics seen in Figure~\ref{fig:mathuni}.
  33.389 +
  33.390 +\begin{figure}
  33.391 +\hfill \\
  33.392 +  \begin{center}
  33.393 +    \includegraphics[scale=0.7]{math-universe}
  33.394 +  \end{center}
  33.395 +  \caption{Three-dimensional universe of mathematics\label{fig:mathuni}}
  33.396 +\end{figure}
  33.397 +
  33.398 +\subsection{Notes on Problems with Traditional Notation}
  33.399 +Due the thesis work we discovers sever ell problems of traditional notations. Some of them have been known in computer science for many years now and are still unsolved, one of them aggregates with the so called \emph{Lambda Calculus}, Example~\ref{eg:lamda} provides a look on the problem that embarrassed us.
  33.400 +
  33.401 +\begin{example}
  33.402 +
  33.403 +\[ f(x)=\ldots\;	\quad R \rightarrow \quad R \]
  33.404 +
  33.405 +
  33.406 +\[ f(p)=\ldots\;	p \in \quad R \]
  33.407 +
  33.408 +	{\small\textit{
  33.409 +		\noindent Above we see two equations. The first equation aims to be a mapping of an function from the reell range to the reell one, but when we change only one letter we get the second equation which usually aims to insert a reel point $p$ into the reell function. In computer science now we have the problem to tell the machine (TP) the difference between this two notations. This Problem is called Lambda Calculus.
  33.410 +	}}
  33.411 +	\caption{Towards the Lambda Calculus\label{eg:lamda}}
  33.412 +\end{example}
  33.413 +
  33.414 +An other problem is that terms are not full simplified in traditional notations, in {\sisac} we have to simplify them complete to check weather results are compatible or not. in e.g. the solutions of an second order linear equation is an rational in {\sisac} but in tradition we keep fractions as long as possible and as long as they aim to be 'beautiful' (1/8, 5/16,...).
  33.415 +
  33.416 +The math which should be mechanized in Computer Theorem Provers (\emph{TP}) has (almost) a problem with traditional notations (predicate calculus) for axioms, definitions, lemmas, theorems as a computer program or script is not able to interpret every Greek or Latin letter and every Greek, Latin or whatever calculations symbol. Also if we would be able to handle these symbols we still have a problem to interpret them at all. (Follow up \hbox{Example \ref{eg:symbint1}})
  33.417 +
  33.418 +\begin{example}
  33.419 +	\[
  33.420 +		u\left[n\right] \ \ldots \ unitstep
  33.421 +	\]
  33.422 +	{\small\textit{
  33.423 +		\noindent The unitstep is something we need to solve Signal Processing problem classes. But in {{\sisac{}}} the 	rectangular brackets have a different meaning. So we abuse them for our requirements. We get something which is not defined, but usable. The Result is syntax only without semantic.
  33.424 +	}}
  33.425 +	\caption{Expression Interpretation}\label{eg:symbint1}
  33.426 +\end{example}
  33.427 +
  33.428 +\noindent In different problems, symbols and letters have different meanings and ask for different ways to get through. (Follow up \hbox{Example \ref{eg:symbint2}}) 
  33.429 +\begin{example}
  33.430 +	\[
  33.431 +		\widehat{\ }\ \widehat{\ }\ \widehat{\ } \  \ldots \  exponent
  33.432 +	\]
  33.433 +	{\small\textit{
  33.434 +	\noindent For using exponents the three widehat symbols are required. The reason for that is due the development of {{\sisac{}}} the single widehat and also the double were already in use for different operations.
  33.435 +	}}
  33.436 +	\caption{Symbol Interpretation}\label{eg:symbint2}
  33.437 +\end{example}
  33.438 +Exclusive from the input, also the output can be a problem. We are familiar with a specified notations and style taught in university but a computer program has no knowledge of the form proved by a professor and the machines themselves also have not yet the possibilities to print every symbol (correct) Recent developments provide proofs in a human readable format but according to the fact that there is no money for good working formel editors yet, the style is one thing we have to live with.
  33.439 +
  33.440 +\section{Project Controlling}
  33.441 +We decided to split the thesis into five Iteration defined in Section~\ref{sec:milesurv}. As there is also a lot of work to do outer the thesis we accord on an increased contact by mail. For the coordination of the whole  {\sisac} files i got access to the mercurial repository. We also appointed on periodic team meetings.
  33.442 +
  33.443 +\subsection{Survey on Milestones\label{sec:milesurv}}
  33.444 +Doing something completely new requires a good controlling, the thesis itself also needs it. After the first meetings and the definition of the intrinsic work we decided on splitting the thesis into the following iterations.
  33.445 +\begin{description}
  33.446 +	\item[1st Iteration] Information Collection
  33.447 +	\item[2nd Iteration] Problem Selection
  33.448 +	\item[3rd Iteration] Implementation
  33.449 +	\item[4th Iteration] Thesis Writing
  33.450 +	\item[5th Iteration] Finalization
  33.451 +\end{description}
  33.452 +A more detailed description of this milestones can be found in Section~\ref{sec:detmile}.
  33.453 +
  33.454 +\subsection{Milestone Details\label{sec:detmile}}
  33.455 +\begin{description}
  33.456 +	\item[Information Collection] The first iteration starts by an introduction to the {\sisac} System and ends up with the first presentation. Listeners of the first presentation were \em Dr. Walther Neuper \normalfont and \em DI Bernhard Geiger\normalfont. We talked about common SPSC problems and the possibilities of realize them in the {\sisac} System. In preparation of the Presentation \em DI Geiger \normalfont sent us a few example problems and we had a experimental survey about the realization effort.
  33.457 +	\item[Problem Selection] In the second iteration we collected informations about the knowledge mechanized in {\sisac} (cf. Section~\ref{know-isab}). After the first iteration it was clear that implementing of problems in {\sisac} requires a higher effort than originally expected due this fact the second iteration ends up on the decision which of the provided problems is going to be implemented. We wrote and collected a handful of experimental scripts regarding sums, Fourier transformation and partial fraction decomposition.
  33.458 +	\item[Implementation] Unfortunately the biggest and most important part is the implementation. The iteration started with the decision on the problem and ends up by finishing the test Script (seen in Part~\ref{part:impl}) as well as the integration of this work into the {\sisac}-Knowledge. For a better controlling and result of this iteration we had severe ll regular meetings (\em Dr. Neuper \normalfont and \em Jan Ro\v{c}nik\normalfont) and contact over e-mail to assess the state of the {\sisac}-developers work.
  33.459 +	\item[Thesis Writing] One part of this thesis is generated automatically out of \ttfamily Build\_Inverse\_Z\_Transform\normalfont. Maybe this part well be the most important result of the thesis as it will be used as a documentation for the upcoming developers. Due this fact this iteration started also contemporaneous with the implementation but ends up separate after finishing the implementation with describing the needed theory and background.
  33.460 +	\item[Finalization] The work ends up with the last iteration - finalization. It is started by completing the written thesis and the preparation of the second presentation which concludes this project. In the second presentation we will have demonstrated our realized problem embedded in the new {\sisac}-frontend as well as the work, hiding behind. We will also want to give a clear view about the power of {\sisac} and animate the attending agents to go on working within this project.
  33.461 +\end{description}
  33.462 +
  33.463 +%\clearpage
  33.464 +
  33.465 +%----------// PART 2 \\----------%
  33.466 +
  33.467 +\newevenside
  33.468 +
  33.469 +\part{Implementation\label{part:impl}}
  33.470 +\input{./preambleForGeneratedDocuments.tex}
  33.471 +\par Please be aware that this is only a part of the thesis output, also follow up the theories and according tests that have been improved or created by me and are involved to the work on this thesis:
  33.472 +\begin{itemize}
  33.473 +\item \ttfamily Partial\_Fractions.thy \normalfont - \ttfamily partial\_fractions.sml \normalfont
  33.474 +\item \ttfamily Inverse\_Z\_Transformation.thy \normalfont - \ttfamily inverse\_z\_transformation.sml \normalfont
  33.475 +\item \ttfamily Rational.thy \normalfont - \ttfamily rational.sml \normalfont
  33.476 +\end{itemize}
  33.477 +\HRule
  33.478 +%\setcounter{section}{0}
  33.479 +\input{../../../test/Tools/isac/ADDTESTS/course/SignalProcess/document/Build_Inverse_Z_Transform}
  33.480 +
  33.481 +\clearpage
  33.482 +
  33.483 +%----------// PART 3 \\----------%
  33.484 +
  33.485 +\newevenside
  33.486 +\part{Thesis Summary and Review}
  33.487 +\section{Related Work}\label{sec:related}
  33.488 +Unusual for a Baccalaureate Thesis, there is {\em no} related work; this requires explanation.
  33.489 +Of course, this thesis relies on front-of-the wave computer mathematics, on TP. But {{\sisac{}}} uses TP in a very specific way, which is too weakly related to other work: programing in the TP-based language and rigorous formal specification of problems in Signal Processing where the main tasks in the practical part of this thesis. The major challenge for the practical work was given by the fact, that the work concerned alpha-testing of the TP-based programing environment.
  33.490 +\par Another  area of work could be considered as related work: authoring of e-learning content. However, {{\sisac{}}} provides division of concern such that the practical part of this thesis could focus on computer mathematics; this work was not concerned with interaction (the TP-based programing language has neither input statements nor output statements), nor with dialog guidance nor with any kind of learning theory.
  33.491 +\par These two reasons are given for the unusual statement, that there is no related work to be discussed in this thesis. 
  33.492 +
  33.493 +\section{Issues and Open Questions}
  33.494 +At the end of the first Iteration we agreed on a view issues that might have to be accomplished during the thesis. This Issues were:
  33.495 +\begin{itemize}
  33.496 +	\item What knowledge is already mechanized in \emph{Isabelle}?
  33.497 +	\item How can missing theorems and definitions be mechanized?
  33.498 +	\item What is the effort for such mechanization?
  33.499 +	\item How do calculations look like, by using mechanized knowledge?
  33.500 +	\item What problems and subproblems have to be solved?
  33.501 +	\item Which problems are already implemented in {\sisac}?
  33.502 +	\item How are the new problems specified ({\sisac})?
  33.503 +	\item Which variants of programs in {\sisac} solve the problems?
  33.504 +	\item What is the contents of the interactive course material (Figures, etc.)?
  33.505 +\end{itemize}
  33.506 +The significant part of this list was declared during the thesis. Next sections will review the most important items, regardless they where accomplished or not.
  33.507 +
  33.508 +\subsection{Accomplished}
  33.509 +We discovered the process how missing theorems and definitions can be mechanized and used this knowledge to implement new material. Now we ware able to solve partial fractions, we built theorems, specification and program. We completed the background work for interactive solving them. The same thing applies to the inverse Z-transformation with partial fractions; we built theorems, specification and program to step through an amount of exercises. But the most important accomplished part is the Isabelle theory (\ttfamily Build\_Inverse\_Z\_Transform.thy\normalfont) indicating issues for the coming {\sisac}-developers. Until we were not able to fulfill all the things we wanted, this is the most recent work and will be the headstone for the further work on {\sisac}.
  33.510 +\par Expect the necessary theories for solving the mentioned part and the guideline we also put tests for the new theories to the system and added some new methods to existing theories with their according tests. Also we were able to answer the questions about the mechanized knowledge in \emph{isabelle} and {\sisac}. We checked the required effort to add new material to the system and we walked through the question what subproblems have to be solved and how they are declared, when adding new material. Now we also know how problems are declared and which variants exist to solve them. All this can be found in this thesis.
  33.511 +\subsection{Partially Accomplished}
  33.512 +As already told upwards, we accomplished a guideline for upcoming {\sisac}-developers this was a very important and necessary task; but through upcoming changes in the development environment and programing language there is a need for more descriptions and informations. This changes are not yet fulfilled and so it was not possible to include a correct guideline fot them in our example theory or this thesis.
  33.513 +\par Also we were not able to provide a representative count of example problems for partial fractions or the inverse Z-Transformation. We are able to say that our accomplished material can handle one problem each, exactly as we wanted and it is toughed but due to less time we have no more experience data.
  33.514 +\subsection{Not Accomplished}
  33.515 +The properly longest item is the list with the not accomplished issues, but there is no need to count this as a negative aspect due the fact that we collected experience data for following needs:
  33.516 +\par We were not able to put explanations, figures to examples, theorem descriptions and problem description to our course material. The reason for that was the time at one side and the ongoing restructuration of the system on the other side.
  33.517 +\par Only a sufficient number of topics was implemented. There were more problems to solve than we expected. We were only able to implement one from the SPSC given tasks m entered in Appendix~\ref{app:calc}. Due this fact the material we got as an output of the thesis will be no support for labs or lectures at the SPSC and also no material for the STEOP, which also was a big wish at the beginning.
  33.518 +\subsection{Open Questions and Work}
  33.519 +At the end of this thesis there is now part left unattended, but many parts that require beauty corrections and many parts that require a few more manpower. This upcoming open tasks are:
  33.520 +\begin{itemize}
  33.521 +	\item What is the contents of the interactive course material (Figures, etc.)?
  33.522 +	\item What are the pre and post conditions of the problems?
  33.523 +	\item How would a correct implementation of the Z-Transformation look like?
  33.524 +	\item What do students expect of this implementation?
  33.525 +\end{itemize}
  33.526 +To complete the task of creating course material describing the needed steps to do a partial fraction or inverse Z-Transformation in {\sisac} the real effort is not conceivable. But for a first usable version only a few steps are left to do this steps would be:
  33.527 +\begin{enumerate}
  33.528 +	\item Cleanup the\ttfamily InverseZTransformation.thy\normalfont file and put it into the {\sisac} knowledge tree like it was done with\ttfamily PartialFractions.thy\normalfont.
  33.529 +	\item Create a good example program and test it.
  33.530 +	\item Describe the used theories with the mathematic definitions and background.
  33.531 +	\item Add figures and small examples.
  33.532 +\end{enumerate}
  33.533 +There are also needs on finishing other parts to get a complete part of course material but this would be the steps to get a first usable version.
  33.534 +
  33.535 +\section{Conclusion and Personal Experience}
  33.536 +After working on {\sisac} for month, it is hard do find the right words about the system. For sure the system itself is a great idea and it would have been a big relaxation if i would have been able to use this system in the last years for sever ell subjects. But for me the biggest disadvantage of {\sisac} is the frontend until there is no mathematical notation and visualisation of simply fractions i don't think that i or other students would be able to use it for learning. I also think that for learning there is no need of complex examples or complex solutions, examples have to be simple but also have to cover all necessary steps of a calculation. Unfortunately there exist different learning types and I'm a visual one, what is also the explanation for my maybe drastic explanation.
  33.537 +\par About the backend, what finally was my main work there is not much left to say. The programing language requires a long time to work in and to find out how decelerations work and how isabelle and {\sisac} is build up, maybe this period of collecting informations is to long for a Bakk. Thesis. Also it is hard to find informations about the theories until there was no related work and no usable documentation wether for {\sisac} nor for isabelle or ML.
  33.538 +\par When working within the {\sisac} sources you often hung up on problems which would be simple to solve but are hard to discover, therefor it was often necessary to make breaks and define concrete steps on problem solving. Also when having a plan of the upcoming implementation I had to break myself out to do not to much step at once. Often its better to implement small parts and test, write tests and wait then hurrying up. An other aspect is that it was necessary to build {\sisac} from scratch after every change; this and the fact that my finally theories had over 1000 lines often made the development process to a stop and go dilemma.
  33.539 +\par Finally I have to say a big \bfseries thank you \normalfont to Dr.~Neuper who invested a lot of his time in my thesis and the {\sisac} project, I remember some hard and long meetings but finally I look back glad.
  33.540 +
  33.541 +\subsection{Anecdotes}
  33.542 +At the very beginning of the thesis i made some calculations and thoughed of every step more than twice. This calculations were the ground stone of my work, we build every step in the calculation following up the real calculations - when doing them by hand. Time went on and after adding the last commands to the programm for applying the transformation ruleset i compared the results - oh wonder there was a mistake in my calculation :)
  33.543 +\begin{center}
  33.544 +Thank you {\sisac}!
  33.545 +\end{center}
  33.546 +
  33.547 +%----------// BIB \\-----------%
  33.548 +
  33.549 +\renewcommand{\refname}{\section{References}}
  33.550 +\bibliographystyle{alpha}
  33.551 +\bibliography{references}
  33.552 +\clearpage
  33.553 +
  33.554 +%----------// APPENDIX \\-----------%
  33.555 +\newevenside
  33.556 +\part{Appendix}
  33.557 +\appendix
  33.558 +%----------// WORK TIME \\-----------%
  33.559 +
  33.560 +
  33.561 +\section{Record of Working Time}
  33.562 +\begin{footnotesize}
  33.563 +\begin{longtable}{l p{6.5cm} c c r}
  33.564 +{\bf Date} & {\bf Description} & {\bf Begin} & {\bf End} & {\bf Dur.}\\
  33.565 +\hline \hline
  33.566 +\endhead
  33.567 +
  33.568 +\hline 
  33.569 +  \multicolumn{5}{r}{{Continued on next page}} \\
  33.570 +\hline
  33.571 +\endfoot
  33.572 +
  33.573 +\hline 
  33.574 +\hline
  33.575 +\endlastfoot
  33.576 +
  33.577 +\multicolumn{5}{l}{Start 1st Iteration} \\
  33.578 +\hline
  33.579 +29.06.2011 & Meeting Dr. Neuper and DI Geiger & 15:00 & 17:30 & 2,50 \\
  33.580 +02.07.2011 & Working on Examples from DI Geiger & 20:00 & 21:30 & 1,50 \\
  33.581 +03.07.2011 & Working on Examples from DI Geiger & 21:00 & 22:45 & 1,75 \\
  33.582 +05.07.2011 & Meeting Dr. Neuper, Information Exchange & 10:00 & 13:00 & 3,00 \\
  33.583 +06.07.2011 & Installing Isabelle & 20:00 & 22:30 & 2,50 \\
  33.584 +07.07.2011 & Meeting Dr. Neuper, present-1 & 14:45 & 16:15 & 1,50 \\
  33.585 +18.07.2011 & Meeting Dr. Neuper, present-1 Structure & 14:15 & 16:00 & 1,75 \\
  33.586 +19.07.2011 & Meeting Dr. Neuper, present-1 Content & 07:20 & 09:20 & 2,00\\
  33.587 +19.07.2011 & Meeting Dr. Neuper & 10:00 & 12:00 & 2,00\\
  33.588 +21.07.2011 & HG Error Correction, Latex for Thesis & 11:10 & 14:00 & 2,83\\
  33.589 +22.07.2011 & Meeting Dr. Neuper & 10:00 & 12:00 & 2,00\\
  33.590 +23.07.2011 & Latex for Calculations & 13:45 & 16:30 & 2,75\\
  33.591 +24.07.2011 & Meeting Dr. Neuper, present-1 & 20:10 & 20:40 & 0,50\\
  33.592 +25.07.2011 & Meeting Dr. Neuper, present-1 & 15:15 & 17:55 & 2,67\\
  33.593 +26.07.2011 & Work on Test\_Complex.thy & 10:45 & 12:10 & 1,42\\
  33.594 +27.07.2011 & present-1 (Dr. Neuper, DI Geiger) & 10:00 & 12:00 & 2,00\\
  33.595 +\hline
  33.596 +\multicolumn{5}{l}{End 1st Iteration} \\
  33.597 +\multicolumn{5}{l}{Start 2nd Iteration} \\
  33.598 +\hline
  33.599 +02.09.2011 & Meeting Dr. Neuper, Latex for Thesis & 08:30 & 10:20 & 1,83\\
  33.600 +05.09.2011 & Meeting Dr. Neuper, Partial\_Frations.thy & 09:30 & 12:45 & 3,25\\
  33.601 +05.09.2011 & Partial\_Fractions.thy & 17:10 & 18:30 & 1,33\\
  33.602 +06.09.2011 & Documentation Partial\_Fractions.thy & 10:00 & 13:15 & 3,25\\
  33.603 +07.09.2011 & Meeting Dr. Neuper, ML Introduction & 10:00 & 12:50 & 2,83\\
  33.604 +08.09.2011 & Preparing Scripts for Latex Output & 19:00 & 22:45 & 3,75\\
  33.605 +09.09.2011 & Preparing Scripts for Latex Output & 11:40 & 15:00 & 3,33\\
  33.606 +10.09.2011 & Meeting Dr. Neuper, Latex Output, HG Errors & 10:00 & 12:00 & 2,00\\
  33.607 +\hline
  33.608 +\multicolumn{5}{l}{End 2nd Iteration} \\
  33.609 +\multicolumn{5}{l}{Start 3rd and 4th Iteration} \\
  33.610 +\hline
  33.611 +14.09.2011 & Start on Inverse\_Z\_Transf. Script & 09:10 & 12:25 & 3,25\\
  33.612 +16.09.2011 & Information Exchange Sums & 13:15 & 16:00 & 2,75\\
  33.613 +19.09.2011 & Programming on Inverse\_Z\_Transf. & 10:00 & 13:10 & 3,17\\
  33.614 +20.09.2011 & Meeting Dr. Neuper, Inverse\_Z\_Transf. Script & 15:30 & 18:10 & 2,67\\
  33.615 +23.09.2011 & New IsaMakefile for Latex generation & 13:00 & 14:30 & 1,50\\
  33.616 +23.09.2011 & Meeting Dr. Neuper, Inverse\_Z\_Transf. Script & 14:30 & 17:30 & 3,00\\
  33.617 +26.09.2011 & Partial\_Fractions.thy, get\_Argument & 13:30 & 16:15 & 2,75\\
  33.618 +27.09.2011 & Meeting Dr. Neuper, HG Error & 09:00 & 12:20 & 3,33\\
  33.619 +28.09.2011 & Meeting Dr. Neuper, Hierarchy Reconstruction & 10:00 & 12:30 & 2,50\\
  33.620 +01.10.2011 & Some Testing & 10:00 & 11:00 & 1,00\\
  33.621 +02.10.2011 & Inverse\_Z\_Transf. Errors & 15:00 & 16:10 & 1,17\\
  33.622 +06.10.2011 & Meeting Dr. Neuper & 15:00 & 17:50 & 2,83\\
  33.623 +07.10.2011 & Meeting Dr. Neuper, Inverse\_Z\_Transf. Script & 15:00 & 16:50 & 1,83\\
  33.624 +09.10.2011 & Work on Thesis & 16:30 & 18:45 & 2,25\\
  33.625 +11.10.2011 & Meeting Dr. Neuper, Abstract & 14:10 & 17:10 & 3,00\\
  33.626 +13.10.2011 & Work on Thesis, Implemention part & 08:30 & 10:00 & 1,50\\
  33.627 +18.10.2011 & Work on Thesis & 20:30 & 22:50 & 2,33\\
  33.628 +19.10.2011 & Work on Thesis & 21:20 & 23:40 & 2,33\\
  33.629 +20.10.2011 & Work on Thesis & 08:45 & 10:45 & 2,00\\
  33.630 +25.10.2011 & Meeting Dr. Neuper: thesis review & 08:00 & 10:00 & 2,00\\
  33.631 +25.10.2011 & Reorganising after meeting & 20:10 & 23:50 & 3,67\\
  33.632 +26.10.2011 & Reorganising after meeting, examples in thesis & 08:30 & 11:10 & 2,67\\
  33.633 +07.11.2011 & Meeting Preparation & 16:30 & 17:15 & 0,75\\
  33.634 +08.11.2011 & Meeting Dr. Neuper: thesis addons & 16:00 & 17:30 & 1,50\\
  33.635 +12.11.2011 & Reorganization after meeting & 21:10 & 22:30 & 1,33\\
  33.636 +20.11.2011 & Review of Inv\_Z\_Trans & 10:15 & 13:30 & 3,25\\
  33.637 +21.11.2011 & get\_numerator & 12:15 & 14:30 & 2,25\\
  33.638 +23.11.2011 & get\_numerator & 20:30 & 21:15 & 0,75\\
  33.639 +24.11.2011 & get\_numerator final & 14:10 & 15:30 & 1,33\\
  33.640 +28.11.2011 & tried to go on in build\_inverse\_ & 11:00 & 13:10 & 2,17\\
  33.641 +01.12.2012 & Tuning Invers\_Z\_Tansf. Script & 16:15 & 19:30 & 3,25\\
  33.642 +04.12.2012 & Moved Some Tests to Knowledge & 15:30 & 18:15 & 2,75\\
  33.643 +05.12.2012 & Tuning Invers\_Z\_Tansf. Script & 13:10 & 14:15 & 1,08\\
  33.644 +08.12.2012 & Inverse\_Z\_Tansf. Script, Factors from Solution & 14:30 & 16:15 & 1,75\\
  33.645 +10.12.2012 & Moved Some Tests to Knowledge & 20:10 & 23:00 & 2,83\\
  33.646 +11.12.2012 & Inverse\_Z\_Tansf. Script, PBZ Ansatz & 10:10 & 12:30 & 2,33\\
  33.647 +12.12.2012 & Inverse\_Z\_Tansf. Script, Subsitution & 09:00 & 11:30 & 2,50\\
  33.648 +16.12.2012 & Tuning Invers\_Z\_Tansf. Script & 17:15 & 18:45 & 1,50\\
  33.649 +19.12.2012 & Tuning Invers\_Z\_Tansf. Script & 19:00 & 20:30 & 1,50\\
  33.650 +14.01.2012 & Inverse\_Z\_Tansf. Script, Substitution & 18:45 & 20:30 & 1,75\\
  33.651 +22.01.2012 & Inverse\_Z\_Transf. Script, Calc Coeff. & 20:10 & 21:45 & 1,58\\
  33.652 +12.02.2012 & Inverse\_Z\_Transf. Script & 17:30 & 19:00 & 1,50\\
  33.653 +13.02.2012 & Finished Work on Inverse\_Z\_Transf. Script & 19:30 & 22:10 & 2,67\\
  33.654 +14.02.2012 & Formatting for Latex output & 09:00 & 14:45 & 5,75\\
  33.655 +15.02.2012 & Formatting for Latex output & 10:00 & 15:30 & 5,50\\
  33.656 +16.02.2012 & Going on Work on Thesis & 14:45 & 18:30 & 3,75\\
  33.657 +17.02.2012 & Tuning Invers\_Z\_Tansf. Script & 18:30 & 19:45 & 1,25\\
  33.658 +19.02.2012 & Meeting Dr. Neuper, present-2 & 09:00 & 13:30 & 4,50\\
  33.659 +19.02.2012 & Meeting Dr. Neuper, Integration of work to Isac & 15:00 & 19:10 & 4,17\\
  33.660 +20.02.2012 & Meeting Dr. Neuper, Integration of work to Isac & 09:00 & 12:45 & 3,75\\
  33.661 +20.02.2012 & Meeting Dr. Neuper, Integration of work to Isac & 14:10 & 18:30 & 4,33\\
  33.662 +\hline
  33.663 +\multicolumn{5}{l}{End 3rd Iteration}\\
  33.664 +\hline
  33.665 +20.02.2012 & Finishing Thesis & 20:30 & 22:50 & 2,33\\
  33.666 +21.02.2012 & Finishing Thesis & 13:30 & 14:45 & 1,25\\
  33.667 +02.03.2012 & Finishing Thesis & 15:45 & 19:00 & 3,25\\
  33.668 +06.03.2012 & Finishing Thesis & 09:15 & 10:30 & 1,25\\
  33.669 +07.03.2012 & Finishing Thesis & 13:15 & 16:00 & 2,75\\
  33.670 +\hline
  33.671 +\multicolumn{5}{l}{End 4th Iteration} \\
  33.672 +\multicolumn{5}{l}{Start 5th Iteration} \\
  33.673 +\hline
  33.674 +26.02.2012 & Preparing present-2 & 09:30 & 13:00 & 3,5 \\
  33.675 +20.03.2012 & Preparing present-2 & 14:00 & 16:30 & 2,5 \\
  33.676 +08.05.2012 & Meeting Dr. Neuper, present-2, work on isac & 08:00 & 12:00 & 4,0 \\
  33.677 +08.05.2012 & present-2 & 14:00 & 15:00 & 1,0 \\
  33.678 +\hline
  33.679 +\multicolumn{5}{l}{End 5th Iteration} \\
  33.680 +\hline
  33.681 +\multicolumn{4}{l}{Total working time:} & 203 \\
  33.682 +\end{longtable}
  33.683 +\end{footnotesize}
  33.684 +
  33.685 +%----------// CALCULATIONS \\-----------%
  33.686 +
  33.687 +\newevenside
  33.688 +\section{Calculations\label{app:calc}}
  33.689 +\input{calulations}
  33.690 +\end{document}
  33.691 +
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/doc-isac/jrocnik/final/jrocnik_present1.tex	Tue Sep 17 09:50:52 2013 +0200
    34.3 @@ -0,0 +1,434 @@
    34.4 +
    34.5 +\documentclass{beamer}
    34.6 +
    34.7 +
    34.8 +\mode<presentation>
    34.9 +{
   34.10 +  \usetheme{Hannover}
   34.11 +  \setbeamercovered{transparent}
   34.12 +}
   34.13 +
   34.14 +\usepackage[english]{babel}
   34.15 +\usepackage[utf8]{inputenc}
   34.16 +\usepackage{times}
   34.17 +\usepackage[T1]{fontenc}
   34.18 +
   34.19 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   34.20 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   34.21 +
   34.22 +\title[SPSC in \isac] % (optional, use only with long paper titles)
   34.23 +{Interactive Course Material\\ for Signal Processing\\ based on Isabelle/\isac}
   34.24 +
   34.25 +\subtitle{Baccalaureate Thesis}
   34.26 +
   34.27 +\author[Ro\v{c}nik]
   34.28 +{Jan Rocnik}
   34.29 +
   34.30 +\institute % (optional, but mostly needed)
   34.31 +{
   34.32 +  Technische Universit\"at Graz\\
   34.33 +  Institut f\"ur TODO
   34.34 +}
   34.35 +
   34.36 +% If you have a file called "university-logo-filename.xxx", where xxx
   34.37 +% is a graphic format that can be processed by latex or pdflatex,
   34.38 +% resp., then you can add a logo as follows:
   34.39 +
   34.40 +% \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename}
   34.41 +% \logo{\pgfuseimage{university-logo}}
   34.42 +
   34.43 +
   34.44 +
   34.45 +% Delete this, if you do not want the table of contents to pop up at
   34.46 +% the beginning of each subsection:
   34.47 +\AtBeginSubsection[]
   34.48 +{
   34.49 +  \begin{frame}<beamer>{Outline}
   34.50 +    \tableofcontents[currentsection,currentsubsection]
   34.51 +  \end{frame}
   34.52 +}
   34.53 +
   34.54 +\begin{document}
   34.55 +
   34.56 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.57 +%%												Title Page                             %%
   34.58 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.59 +
   34.60 +\begin{frame}
   34.61 +  \titlepage
   34.62 +\end{frame}
   34.63 +
   34.64 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.65 +%%												Table of Contents                      %%
   34.66 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.67 +
   34.68 +\begin{frame}{Outline}
   34.69 +  \tableofcontents
   34.70 +  % You might wish to add the option [pausesections]
   34.71 +\end{frame}
   34.72 +
   34.73 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.74 +%%---------------------------------------------------------------%%
   34.75 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.76 +
   34.77 +\section[Intro]{Introduction}
   34.78 +
   34.79 +\begin{frame}{Issues to be Accomplished}
   34.80 +
   34.81 +\begin{itemize}
   34.82 +
   34.83 +\item What knowledge is already mechanised in \emph{Isabelle}?
   34.84 +\item How can missing theorems and definitions be mechanised?
   34.85 +\item What is the effort for such mechanisation?
   34.86 +\item How do calculations look like, by using mechanised knowledge?
   34.87 +\item What problems and subproblems have to be solved?
   34.88 +\item Which problems are already implemented in \sisac?
   34.89 +\item How are the new problems specified (\sisac)?
   34.90 +\item Which variantes of programms in \sisac\ solve the problems?
   34.91 +\item What is the contents of the interactiv course material (Figures, etc.)?
   34.92 +
   34.93 +\end{itemize}
   34.94 +\end{frame}
   34.95 +
   34.96 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.97 +%%---------------------------------------------------------------%%
   34.98 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   34.99 +
  34.100 +\section[Fourier]{Fourier transformation}
  34.101 +\subsection[Fourier]{Fourier transform}
  34.102 +
  34.103 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.104 +%%												Fourier INTRO                          %%
  34.105 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.106 +
  34.107 +\begin{frame}\frametitle{Fourier Transformation: Introduction}
  34.108 +Possibilities:
  34.109 +\begin{itemize}
  34.110 +\item Transform operation by using property-tables
  34.111 +\item Transform operation by using integral
  34.112 +\end{itemize}
  34.113 +Also Important:
  34.114 +\begin{itemize}
  34.115 +\item Visualisation?!
  34.116 +\end{itemize}
  34.117 +\end{frame}
  34.118 +
  34.119 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.120 +%%										Transform expl   SPEC                      %%
  34.121 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.122 +
  34.123 +\begin{frame}\frametitle{Fourier Transformation: Specification}
  34.124 +{\footnotesize
  34.125 +
  34.126 +Determine the fourier transform for the given rectangular impulse:
  34.127 +
  34.128 +\begin{center}
  34.129 +$x(t)= \left\{
  34.130 +     \begin{array}{lr}
  34.131 +       1 & -1\leq t\leq1\\
  34.132 +       0 & else
  34.133 +     \end{array}
  34.134 +   \right.$
  34.135 +\end{center}
  34.136 +
  34.137 +\hrulefill
  34.138 +
  34.139 +\begin{tabbing}
  34.140 +1\=postcond \=: \= \= $\;\;\;\;$\=\kill
  34.141 +\>given    \>:\>  piecewise\_function \\
  34.142 +\>         \> \>  \>$fun (x (t::real),\ x=1\ ((t>=-1)\ \&\ (t<=1)),\ x=0)$\\
  34.143 +\>precond  \>:\>  TODO\\
  34.144 +\>find     \>:\>  $X(j\cdot\omega)$\\
  34.145 +\>postcond \>:\>  TODO\\
  34.146 +\end{tabbing}
  34.147 +
  34.148 +}
  34.149 +\end{frame}
  34.150 +
  34.151 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.152 +%%												Transform expl   REQ                   %%
  34.153 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.154 +
  34.155 +\begin{frame}\frametitle{Fourier Transform: Development effort}
  34.156 +{\small
  34.157 +\begin{center}
  34.158 +\begin{tabular}{l|l|r}
  34.159 +requirements            & comments             &effort\\ \hline\hline
  34.160 +solving Intrgrals		    & simple via propertie table     &     20\\
  34.161 +                        & \emph{real}          &    MT\\ \hline
  34.162 +transformation table    & simple transform     &    20\\ \hline
  34.163 +visualisation						& backend							 &    10\\ \hline
  34.164 +example collection      & with explanations    &    20\\ \hline\hline
  34.165 +                        &                      & 70-80\\
  34.166 +\end{tabular}
  34.167 +\end{center}
  34.168 +effort --- in 45min units\\
  34.169 +MT --- thesis ``Integrals'' (mathematics)
  34.170 +}
  34.171 +\end{frame}
  34.172 +
  34.173 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.174 +%%--------------------FOURIER---Conclusion-----------------------%%
  34.175 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.176 +
  34.177 +\begin{frame}{Fourier Transformation: Summary}
  34.178 +\begin{itemize}
  34.179 +
  34.180 +\item Standard integrals can be solved with tables
  34.181 +\item No real integration (yet avaible)
  34.182 +\item Math \emph{tricks} difficult to implement
  34.183 +
  34.184 +
  34.185 +\end{itemize}
  34.186 +\end{frame}
  34.187 +
  34.188 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.189 +%-----------------------------------------------------------------%
  34.190 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.191 +
  34.192 +\section[LTI Systems]{LTI systems}
  34.193 +\subsection[Convolution]{Convolution (Faltung)}
  34.194 +
  34.195 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.196 +%%												LTI INTRO				                       %%
  34.197 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.198 +
  34.199 +\begin{frame}\frametitle{Convolution: Introduction}
  34.200 +\begin{itemize}
  34.201 +\item Calculation include sums
  34.202 +\item Demonstrative examples
  34.203 +\item Visualisation is important
  34.204 +\end{itemize}
  34.205 +\end{frame}
  34.206 +
  34.207 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.208 +%%												LTI SPEC				                       %%
  34.209 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.210 +
  34.211 +\begin{frame}\frametitle{Convolution: Specification}
  34.212 +{\footnotesize
  34.213 +
  34.214 +Consider the two discrete-time, linear and time-invariant (LTI) systems with the following impulse response:
  34.215 +
  34.216 +\begin{center}
  34.217 +$h_1[n]=\left(\frac{3}{5}\right)^n\cdot u[n]$\\
  34.218 +$h_1[n]=\left(-\frac{2}{3}\right)^n\cdot u[n]$
  34.219 +\end{center}
  34.220 +
  34.221 +The two systems are cascaded seriell. Derive the impulse respinse of the overall system $h_c[n]$.
  34.222 +
  34.223 +\hrulefill
  34.224 +
  34.225 +\begin{tabbing}
  34.226 +1\=postcond \=: \= \= $\;\;\;\;$\=\kill
  34.227 +\>given    \>:\>  Signals h1[n], h2[n] \\
  34.228 +\>         \> \>  \>((h1[n]=(3/5)\textasciicircum{}n*u[n]),\,h2[n]=(-2/3)\textasciicircum{}n*u[n]))\\
  34.229 +                        
  34.230 +\>precond  \>:\>  TODO\\
  34.231 +\>find     \>:\>  $h1[n]\,*\,h2[n]$\\
  34.232 +\>postcond \>:\>  TODO\\
  34.233 +\end{tabbing}
  34.234 +
  34.235 +}
  34.236 +\end{frame}
  34.237 +
  34.238 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.239 +%%												LTI REQ  				                       %%
  34.240 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.241 +
  34.242 +\begin{frame}\frametitle{Convolution: Development effort}
  34.243 +{\small
  34.244 +\begin{center}
  34.245 +\begin{tabular}{l|l|r}
  34.246 +requirements            & comments             &effort\\ \hline\hline
  34.247 +simplify rationals      & \sisac               &     0\\ \hline
  34.248 +define $\sum\limits_{i=0}^{n}i$ & partly \sisac  &    10\\ \hline
  34.249 +simplify sum			      & termorder            &    10\\
  34.250 +                        & simplify rules       &    20\\
  34.251 +                        & use simplify rationals&     0\\ \hline
  34.252 +index adjustments       & with unit step       &      10\\ \hline
  34.253 +example collection      & with explanations    &    20\\ \hline\hline
  34.254 +                        &                      & 70-90\\
  34.255 +\end{tabular}
  34.256 +\end{center}
  34.257 +effort --- in 45min units\\
  34.258 +}
  34.259 +\end{frame}
  34.260 +
  34.261 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.262 +%%--------------------LTI-------Conclusion-----------------------%%
  34.263 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.264 +
  34.265 +\begin{frame}{Convolution: Summary}
  34.266 +\begin{itemize}
  34.267 +
  34.268 +\item Standard example
  34.269 +\item Straight forward
  34.270 +\item Challenge are sum limits
  34.271 +
  34.272 +\end{itemize}
  34.273 +\end{frame}
  34.274 +
  34.275 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.276 +%-----------------------------------------------------------------%
  34.277 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.278 +
  34.279 +\section[Z-transform]{Z-Transform}
  34.280 +\subsection[(Inverse) Z-Transform]{(Inverse) Z-Transform}
  34.281 +
  34.282 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.283 +%%												Z-Transform  INTRO                     %%
  34.284 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.285 +
  34.286 +\begin{frame}\frametitle{(Inverse) ${\cal Z}$-Transformation: Introduction}
  34.287 +\begin{itemize}
  34.288 +\item Pure Transformation is simple to realise with Z-Transform Properties (Table)
  34.289 +\item Partial Fraction are just math simplifications
  34.290 +\end{itemize}
  34.291 +\end{frame}
  34.292 +
  34.293 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.294 +%%												Z-Transform  SPEC                      %%
  34.295 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.296 +
  34.297 +\begin{frame}\frametitle{(Inverse) Z-Transformation: Specification}
  34.298 +{\footnotesize
  34.299 +
  34.300 +Determine the inverse z transform of the following expression. Hint: applay the partial fraction expansion.
  34.301 +
  34.302 +\begin{center}
  34.303 +$X(z)=\frac{3}{z-\frac{1}{4}-\frac{1}{8}z^{-1}},\ \ x[n]$ is absolute summable
  34.304 +\end{center}
  34.305 +
  34.306 +
  34.307 +\hrulefill
  34.308 +
  34.309 +\begin{tabbing}
  34.310 +1\=postcond \=: \= \= $\;\;\;\;$\=\kill
  34.311 +\>given    \>:\>  Expression of z \\
  34.312 +\>         \> \>  \>(X (z::complex),3/(z-1/4-1/8\,z\textasciicircum{}(-1)))\\
  34.313 +\>precond  \>:\>  TODO\\
  34.314 +\>find     \>:\>  Expression of n\\
  34.315 +\>         \> \>  \>$h[n]$\\
  34.316 +\>postcond \>:\>  TODO\\
  34.317 +\end{tabbing}
  34.318 +
  34.319 +}
  34.320 +\end{frame}
  34.321 +
  34.322 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.323 +%%												Z expl		REQ	                         %%
  34.324 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.325 +
  34.326 +
  34.327 +\begin{frame}\frametitle{(Inverse) Z-Transformation: Development effort}
  34.328 +{\small
  34.329 +\begin{center}
  34.330 +\begin{tabular}{l|l|r}
  34.331 +requirements            & comments             &effort\\ \hline\hline
  34.332 +solve for part.fract.   & \sisac: degree 2     &     0\\
  34.333 +                        & complex nomminators  &    30\\
  34.334 +                        & degree > 2           &    MT\\ \hline
  34.335 +simplify polynomial     & \sisac               &     0\\
  34.336 +simplify rational       & \sisac               &     0\\ \hline
  34.337 +part.fract.decomposition& degree 2             &      \\
  34.338 +                        & specification, method&    30\\ \hline
  34.339 +${\cal Z}^{-1}$ table    &                       &   20\\
  34.340 +                        & explanations, figures&    20\\ \hline
  34.341 +example collection      & with explanations    &    20\\ \hline\hline
  34.342 +                        &                      & 90-120\\
  34.343 +%                        &                      & 1 MT
  34.344 +\end{tabular}
  34.345 +\end{center}
  34.346 +effort --- in 45min units\\
  34.347 +MT --- thesis ``factorization'' (mathematics)
  34.348 +}
  34.349 +\end{frame}
  34.350 +
  34.351 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.352 +%%--------------------Z-TRANS---Conclusion-----------------------%%
  34.353 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.354 +
  34.355 +\begin{frame}{(Inverse) Z-Transformation: Summary}
  34.356 +\begin{itemize}
  34.357 +
  34.358 +\item No \emph{higher} math operations
  34.359 +\item Different subproblems of math (equation systems, etc.)
  34.360 +\item Both directions have the same effort
  34.361 +
  34.362 +\end{itemize}
  34.363 +\end{frame}
  34.364 +
  34.365 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.366 +%-----------------------------------------------------------------%
  34.367 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.368 +
  34.369 +\section[Conclusions]{Conclusions}
  34.370 +
  34.371 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.372 +%--------------------------DEMONSTRATION--------------------------%
  34.373 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.374 +
  34.375 +\begin{frame}{Demonstration}
  34.376 +
  34.377 +\centering{Demonstration}
  34.378 +
  34.379 +\end{frame}
  34.380 +
  34.381 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.382 +%--------------------------CONCLUSION-----------------------------%
  34.383 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.384 +
  34.385 +\begin{frame}{Conclusions}
  34.386 +
  34.387 +Design Challanges:
  34.388 +
  34.389 +{\small
  34.390 +\begin{itemize}
  34.391 +
  34.392 +\item Pre and Post conditions
  34.393 +\item Exact mathematic behind functions
  34.394 +\item Accurate mathematic notation
  34.395 +
  34.396 +\end{itemize}
  34.397 +}
  34.398 +
  34.399 +Goals:
  34.400 +{\small
  34.401 +\begin{itemize}
  34.402 +
  34.403 +\item Spot the power of \sisac
  34.404 +\item Implementation of generell but simple math problems
  34.405 +\item Setting up a good first guideline (documentation) for furher problem implemenations
  34.406 +
  34.407 +\end{itemize}
  34.408 +
  34.409 +\centering{Efforts are only approximations, due we have no \emph{real} experience data!}
  34.410 +}
  34.411 +
  34.412 +\end{frame}
  34.413 +
  34.414 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.415 +%--------------------------TIME LINE------------------------------%
  34.416 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.417 +
  34.418 +\begin{frame}{Comming up}
  34.419 +
  34.420 +{\small
  34.421 +\begin{tabular}{l r}
  34.422 +
  34.423 +Juli 2011 & project startup\\
  34.424 +Juli 2011 & information collection, 1st presentation\\
  34.425 +August 2011 & extern traineeship\\
  34.426 +September 2011 & main work\\
  34.427 +after Oktober & finishing, documentation\\
  34.428 +
  34.429 +\end{tabular}
  34.430 +}
  34.431 +
  34.432 +\end{frame}
  34.433 +
  34.434 +
  34.435 +\end{document}
  34.436 +
  34.437 +
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/doc-isac/jrocnik/final/jrocnik_present2.tex	Tue Sep 17 09:50:52 2013 +0200
    35.3 @@ -0,0 +1,299 @@
    35.4 +\documentclass[%
    35.5 +%handout, % prints handouts (=no animations, for printed version)
    35.6 +%mathserif
    35.7 +%xcolor=pst,
    35.8 +14pt
    35.9 +% fleqn
   35.10 +]{beamer}
   35.11 +
   35.12 +\usepackage{beamerthemedefault}
   35.13 +
   35.14 +\usepackage{color}
   35.15 +\definecolor{lgray}{RGB}{238,238,238}
   35.16 +
   35.17 +\useoutertheme[subsection=false]{smoothbars}
   35.18 +\useinnertheme{circles}
   35.19 +
   35.20 +\setbeamercolor{block title}{fg=black,bg=gray}
   35.21 +\setbeamercolor{block title alerted}{use=alerted text,fg=black,bg=alerted text.fg!75!bg}
   35.22 +\setbeamercolor{block title example}{use=example text,fg=black,bg=example text.fg!75!bg}
   35.23 +\setbeamercolor{block body}{parent=normal text,use=block title,bg=block title.bg!25!bg}
   35.24 +\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!25!bg}
   35.25 +\setbeamercolor{block body example}{parent=normal text,use=block title example,bg=block title example.bg!25!bg}
   35.26 +
   35.27 +%activate hyperlinks at the end
   35.28 +%\usepackage{hyperref}
   35.29 +
   35.30 +\usepackage[english]{babel}
   35.31 +\usepackage[utf8]{inputenc}
   35.32 +\usepackage{array}
   35.33 +\usepackage{setspace}
   35.34 +
   35.35 +\definecolor{tug}{rgb}{0.96862,0.14509,0.27450}
   35.36 +
   35.37 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   35.38 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   35.39 +
   35.40 +\setbeamertemplate{headline}[text line]{
   35.41 +	\begin{beamercolorbox}[wd=\paperwidth,ht=8ex,dp=4ex]{}
   35.42 +		\insertnavigation{0.85\paperwidth} 
   35.43 +		\raisebox{-10pt}{\includegraphics[width=15mm]{tuglogo}}\vskip2pt
   35.44 +		\hskip-1pt\rule{\paperwidth}{0.3pt}
   35.45 +	\end{beamercolorbox}
   35.46 +}
   35.47 +
   35.48 +\setbeamertemplate{navigation symbols}{}
   35.49 +
   35.50 +\definecolor{gray}{rgb}{0.8,0.8,0.8}
   35.51 +\setbeamercolor{footline}{fg=black,bg=gray}
   35.52 +
   35.53 +% Fusszeile mit Autor, Titel und Foliennummer / Gesamtfolienzahl
   35.54 +\setbeamertemplate{footline}[text line]{
   35.55 +	\hskip-1pt
   35.56 +	\begin{beamercolorbox}[wd=\paperwidth]{footline}
   35.57 +			\rule{\paperwidth}{0.3pt}
   35.58 +			\colorbox{tug}{\rule{3pt}{0pt}\rule{0pt}{3pt}}
   35.59 +			\textbf{\rule{0pt}{5pt}\insertshortauthor\hfill\insertshortinstitute\hfill%
   35.60 +					\insertshorttitle\rule{1em}{0pt}}
   35.61 +			\rule{\paperwidth}{0.3pt}
   35.62 +	\end{beamercolorbox}
   35.63 +	\begin{beamercolorbox}[wd=\paperwidth,ht=2ex,dp=2ex]{white}
   35.64 +	\end{beamercolorbox}
   35.65 +}%
   35.66 +
   35.67 +%% Titelblatt-Einstellungen
   35.68 +\institute[IST, SPSC]{Institute for Software Technology\\Institute of Signal Processing and Speech Communication\\Graz University of Technology}
   35.69 +\title[ISAC for Signal Processing]{Interactive Course Material for\\ Signal Processing based on\\ Isabelle/\isac}
   35.70 +\subtitle{Baccalaureate Thesis}
   35.71 +\author{Jan Rocnik}
   35.72 +\date{\today}
   35.73 +
   35.74 +% Subject and Keywords for PDF
   35.75 +\subject{Final presentation of Baccalaureate Thesis}
   35.76 +\keywords{Isac, Isabelle, ist, spsc, thesis, course material}
   35.77 +
   35.78 +\titlegraphic{\includegraphics[width=20mm]{tuglogo}}
   35.79 +
   35.80 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   35.81 +\begin{document}
   35.82 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   35.83 +
   35.84 +\begin{frame}[plain]
   35.85 +  \frametitle{}
   35.86 +  \titlepage
   35.87 +\end{frame}
   35.88 +
   35.89 +
   35.90 +
   35.91 +\begin{frame}
   35.92 +  \frametitle{Contents}
   35.93 +  \begin{spacing}{0.3}
   35.94 +        \tableofcontents[hideallsubsections %
   35.95 +                        % ,pausesections
   35.96 +                        ] % erzeugt Inhaltsverzeichnis
   35.97 +  \end{spacing}
   35.98 +\end{frame}
   35.99 +
  35.100 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.101 +\section{Introduction}
  35.102 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.103 +
  35.104 +\subsection{isabelle}
  35.105 +\begin{frame}
  35.106 +	\frametitle{What is Isabelle?}
  35.107 +	\begin{spacing}{1.5}
  35.108 +		\begin{itemize}
  35.109 +			\item Generic Proof Assistant
  35.110 +			\item Formula proofing in logical calculus
  35.111 +			\item Developed in Cambridge, Muenchen and Paris
  35.112 +		\end{itemize}
  35.113 +	\end{spacing}
  35.114 +\end{frame}
  35.115 +
  35.116 +\subsection{isac}
  35.117 +\begin{frame}
  35.118 +	\frametitle{What is {\isac}?}
  35.119 +	\begin{spacing}{1.5}
  35.120 +		\begin{itemize}
  35.121 +			\item \textcolor{tug}{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal A}$}belle for~{}\textcolor{tug}{${\cal C}$}alculations
  35.122 +			\item Interactive Course Material
  35.123 +			\item Learning Coach
  35.124 +			\item Developed at Austrian Universities
  35.125 +		\end{itemize}
  35.126 +	\end{spacing}
  35.127 +\end{frame}
  35.128 +
  35.129 +\subsection{motivation}
  35.130 +\begin{frame}
  35.131 +	\frametitle{Motivation - {\isac{}}'s~Potential}
  35.132 +	\begin{itemize}
  35.133 +		\item Stepwise solving of engineering problems\\
  35.134 +					{\small $\rightarrow$ \textcolor{tug}{Consistent Framework}}
  35.135 +		\item Explaining underlying knowledge\\
  35.136 +					{\small $\rightarrow$  \textcolor{tug}{Transparent Content, Access to Multimedia Content}}
  35.137 +		\item Checking steps input by the student\\
  35.138 +					{\small $\rightarrow$ \textcolor{tug}{Proof Situation}}
  35.139 +		\item Assessing stepwise problem solving\\
  35.140 +					{\small $\rightarrow$ \textcolor{tug}{One system for tutoring and assessment}}
  35.141 +	\end{itemize}
  35.142 +\end{frame}
  35.143 +
  35.144 +
  35.145 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.146 +\section{Thesis Definition}
  35.147 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.148 +
  35.149 +\begin{frame}
  35.150 +	\frametitle{Thesis Definition}
  35.151 +	%---> Follow up thesis abstract! <---%
  35.152 +	\begin{spacing}{1.2}
  35.153 +		\begin{itemize}
  35.154 +			\item Creation of interactive course material\\
  35.155 +						{\small Based on problems given by SPSC}
  35.156 +			\item Content should be usable\ldots
  35.157 +			\begin{itemize}
  35.158 +				\item in Signalprocessing Problem Classes
  35.159 +				\item in \emph{STEOP}
  35.160 +			\end{itemize}
  35.161 +			\item Guideline for upcoming TP-Programmers.
  35.162 +			\item Feedback of usability\\
  35.163 +			      {\small (TP-Programming-Language)}
  35.164 +		\end{itemize}
  35.165 +	\end{spacing}
  35.166 +\end{frame}
  35.167 +
  35.168 +\subsection{issues}
  35.169 +\begin{frame}
  35.170 +	\frametitle{Issues to Accomplish I}
  35.171 +	\begin{spacing}{1.4}
  35.172 +		\begin{itemize}
  35.173 +			\item What knowledge is mechanized in Isabelle?\\
  35.174 +						{\small How about new?}
  35.175 +			\item What problems are implemented in {\sisac{}}?\\
  35.176 +						{\small How about new?}
  35.177 +			\item What is the effort?
  35.178 +		\end{itemize}
  35.179 +	\end{spacing}
  35.180 +\end{frame}
  35.181 +
  35.182 +\begin{frame}
  35.183 +	\frametitle{Issues to Accomplish II}
  35.184 +\begin{spacing}{1.4}
  35.185 +\begin{itemize}
  35.186 +	\item How look calculations like?\\
  35.187 +				{\small Ansatzs, Subproblems?}
  35.188 +	\item How are problems specified?\\
  35.189 +				{\small Given, Pre-/Postcondition, Find?}
  35.190 +	\item What is the contents of the interactive course material?\\
  35.191 +				{\small Figures, Explanations,\ldots}
  35.192 +\end{itemize}
  35.193 +\end{spacing}
  35.194 +\end{frame}
  35.195 +
  35.196 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.197 +\section{Details}
  35.198 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.199 +
  35.200 +\subsection{Technical Survey}
  35.201 +\begin{frame}
  35.202 +	\frametitle{Technical Survey I {\normalsize Mechanizing Knowledge}}
  35.203 +	\begin{spacing}{1.5}
  35.204 +		\begin{itemize}
  35.205 +			\item Not enough knowledge is mechanized\\
  35.206 +						{\small Equation Solving, Integrals,\ldots}
  35.207 +			\item Computer Mathematicians required!\\
  35.208 +						{\small Mathematics: Equation solving, Engineer: Z-Transform}
  35.209 +			\item RISC Linz, Mathematics TU Graz
  35.210 +		\end{itemize}
  35.211 +	\end{spacing}
  35.212 +\end{frame}
  35.213 +
  35.214 +\begin{frame}
  35.215 +	\frametitle{Technical Survey II {\normalsize Notation Problems} }
  35.216 +	\begin{spacing}{1.5}
  35.217 +		\begin{itemize}
  35.218 +			\item Different brackets have different meanings\\
  35.219 +						{\small $u[n] \neq u(n)$\ldots in Math; but also in the source code}
  35.220 +			\item Simplification, tricks and beauty\\
  35.221 +						{\small $X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY$}\\
  35.222 +						{\small $\frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)=\frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=$}\\
  35.223 +						{\small $=\frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}=\frac{1}{\omega}\,e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} $}
  35.224 +		\end{itemize}
  35.225 +	\end{spacing}
  35.226 +\end{frame}
  35.227 +
  35.228 +\subsection{Demonstration}
  35.229 +\begin{frame}
  35.230 +	\frametitle{Demonstration of {\isac}}
  35.231 +	\begin{spacing}{1.5}
  35.232 +		\begin{itemize}
  35.233 +			\item {\Large Development Environment} (Backend)
  35.234 +			\vspace{15mm}
  35.235 +			\item {\Large Math Assistant} (Frontend)
  35.236 +		\end{itemize}
  35.237 +	\end{spacing}
  35.238 +\end{frame}
  35.239 +
  35.240 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.241 +\section{Summary}
  35.242 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.243 +
  35.244 +\subsection{Accomplished Work}
  35.245 +\begin{frame}
  35.246 +	\frametitle{Accomplished Work}
  35.247 +	\begin{itemize}
  35.248 +      \item Partial Fractions\\ {\small Theorems, Specification, Program}
  35.249 +      \item Inverse Z-Transform with Partial Fractions\\ {\small Theorems, Specification, Program}
  35.250 +      \item Isabelle Theory indicating issues\\ {\small Preparation for {\sisac{}}-developers}
  35.251 +	\end{itemize}
  35.252 +\end{frame}
  35.253 +
  35.254 +\subsection{Partially Accomplished}
  35.255 +\begin{frame}
  35.256 +	\frametitle{Partially Accomplished}
  35.257 +	\begin{spacing}{1.4}
  35.258 +		\begin{itemize}
  35.259 +	     \item Guidelines for Upcoming TP-Programmers\\
  35.260 +	           {\small \textbf{Note:} Development environment and languages changes} 
  35.261 +	     \item Examples
  35.262 +		\end{itemize}
  35.263 +	\end{spacing}
  35.264 +\end{frame}
  35.265 +
  35.266 +\subsection{Not Accomplished}
  35.267 +\begin{frame}
  35.268 +	\frametitle{Not Accomplished}
  35.269 +	\begin{spacing}{1.2}
  35.270 +		\begin{itemize}
  35.271 +	    \item Content of interactive course material\\
  35.272 +	    			{\small Figures, Explanations,\ldots}
  35.273 +	    \item A sufficient count of implementations
  35.274 +	    \item No support of labs and lectures atm
  35.275 +	    \item No material for \emph{STEOP} atm
  35.276 +		\end{itemize}
  35.277 +	\end{spacing}
  35.278 +\end{frame}
  35.279 +
  35.280 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.281 +\section{Conclusion}
  35.282 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.283 +
  35.284 +\begin{frame}
  35.285 +	\frametitle{Conclusion}
  35.286 +	\begin{spacing}{1.2}
  35.287 +	    \begin{itemize}
  35.288 +				\item TP-based language not ready
  35.289 +				\item Programming guideline not yet sufficient
  35.290 +				\item Hope for usability in enginieering studies
  35.291 +				\vspace{5mm}
  35.292 +				\item Hard to spend 200h on 1 programm
  35.293 +				\item \isac{} pointed at my own error
  35.294 +			\end{itemize}
  35.295 +		\end{spacing}
  35.296 +\end{frame}
  35.297 +
  35.298 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.299 +\end{document}
  35.300 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35.301 +
  35.302 +%% EOF
  35.303 \ No newline at end of file
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/doc-isac/jrocnik/fixbookmarks.pl	Tue Sep 17 09:50:52 2013 +0200
    36.3 @@ -0,0 +1,4 @@
    36.4 +
    36.5 +s/\\([a-zA-Z]+)\s*/$1/g;
    36.6 +s/\$//g;
    36.7 +s/^BOOKMARK/\\BOOKMARK/g;
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/doc-isac/jrocnik/isabelle.sty	Tue Sep 17 09:50:52 2013 +0200
    37.3 @@ -0,0 +1,218 @@
    37.4 +%%
    37.5 +%% macros for Isabelle generated LaTeX output
    37.6 +%%
    37.7 +
    37.8 +%%% Simple document preparation (based on theory token language and symbols)
    37.9 +
   37.10 +% isabelle environments
   37.11 +
   37.12 +\newcommand{\isabellecontext}{UNKNOWN}
   37.13 +
   37.14 +\newcommand{\isastyle}{\UNDEF}
   37.15 +\newcommand{\isastyleminor}{\UNDEF}
   37.16 +\newcommand{\isastylescript}{\UNDEF}
   37.17 +\newcommand{\isastyletext}{\normalsize\rm}
   37.18 +\newcommand{\isastyletxt}{\rm}
   37.19 +\newcommand{\isastylecmt}{\rm}
   37.20 +
   37.21 +%symbol markup -- \emph achieves decent spacing via italic corrections
   37.22 +\newcommand{\isamath}[1]{\emph{$#1$}}
   37.23 +\newcommand{\isatext}[1]{\emph{#1}}
   37.24 +\DeclareRobustCommand{\isascriptstyle}{\def\isamath##1{##1}\def\isatext##1{\mbox{\isastylescript##1}}}
   37.25 +\newcommand{\isactrlsub}[1]{\emph{\isascriptstyle${}\sb{#1}$}}
   37.26 +\newcommand{\isactrlsup}[1]{\emph{\isascriptstyle${}\sp{#1}$}}
   37.27 +\newcommand{\isactrlisub}[1]{\emph{\isascriptstyle${}\sb{#1}$}}
   37.28 +\newcommand{\isactrlisup}[1]{\emph{\isascriptstyle${}\sp{#1}$}}
   37.29 +\DeclareRobustCommand{\isactrlbsub}{\emph\bgroup\math{}\sb\bgroup\mbox\bgroup\isastylescript}
   37.30 +\DeclareRobustCommand{\isactrlesub}{\egroup\egroup\endmath\egroup}
   37.31 +\DeclareRobustCommand{\isactrlbsup}{\emph\bgroup\math{}\sp\bgroup\mbox\bgroup\isastylescript}
   37.32 +\DeclareRobustCommand{\isactrlesup}{\egroup\egroup\endmath\egroup}
   37.33 +\newcommand{\isactrlbold}[1]{{\bfseries\upshape\boldmath#1}}
   37.34 +\newcommand{\isactrlloc}[1]{{\bfseries\upshape\boldmath#1}}
   37.35 +
   37.36 +\newenvironment{isaantiq}{{\isacharat\isacharbraceleft}}{{\isacharbraceright}}
   37.37 +\newcommand{\isaantiqopen}{\isakeyword{\isacharbraceleft}}
   37.38 +\newcommand{\isaantiqclose}{\isakeyword{\isacharbraceright}}
   37.39 +
   37.40 +\newdimen\isa@parindent\newdimen\isa@parskip
   37.41 +
   37.42 +\newenvironment{isabellebody}{%
   37.43 +\isamarkuptrue\par%
   37.44 +\isa@parindent\parindent\parindent0pt%
   37.45 +\isa@parskip\parskip\parskip0pt%
   37.46 +\isastyle}{\par}
   37.47 +
   37.48 +\newenvironment{isabelle}
   37.49 +{\begin{trivlist}\begin{isabellebody}\item\relax}
   37.50 +{\end{isabellebody}\end{trivlist}}
   37.51 +
   37.52 +\newcommand{\isa}[1]{\emph{\isastyleminor #1}}
   37.53 +
   37.54 +\newcommand{\isaindent}[1]{\hphantom{#1}}
   37.55 +\newcommand{\isanewline}{\mbox{}\par\mbox{}}
   37.56 +\newcommand{\isasep}{}
   37.57 +\newcommand{\isadigit}[1]{#1}
   37.58 +
   37.59 +\newcommand{\isachardefaults}{%
   37.60 +\chardef\isacharbang=`\!%
   37.61 +\chardef\isachardoublequote=`\"%
   37.62 +\chardef\isachardoublequoteopen=`\"%
   37.63 +\chardef\isachardoublequoteclose=`\"%
   37.64 +\chardef\isacharhash=`\#%
   37.65 +\chardef\isachardollar=`\$%
   37.66 +\chardef\isacharpercent=`\%%
   37.67 +\chardef\isacharampersand=`\&%
   37.68 +\chardef\isacharprime=`\'%
   37.69 +\chardef\isacharparenleft=`\(%
   37.70 +\chardef\isacharparenright=`\)%
   37.71 +\chardef\isacharasterisk=`\*%
   37.72 +\chardef\isacharplus=`\+%
   37.73 +\chardef\isacharcomma=`\,%
   37.74 +\chardef\isacharminus=`\-%
   37.75 +\chardef\isachardot=`\.%
   37.76 +\chardef\isacharslash=`\/%
   37.77 +\chardef\isacharcolon=`\:%
   37.78 +\chardef\isacharsemicolon=`\;%
   37.79 +\chardef\isacharless=`\<%
   37.80 +\chardef\isacharequal=`\=%
   37.81 +\chardef\isachargreater=`\>%
   37.82 +\chardef\isacharquery=`\?%
   37.83 +\chardef\isacharat=`\@%
   37.84 +\chardef\isacharbrackleft=`\[%
   37.85 +\chardef\isacharbackslash=`\\%
   37.86 +\chardef\isacharbrackright=`\]%
   37.87 +\chardef\isacharcircum=`\^%
   37.88 +\chardef\isacharunderscore=`\_%
   37.89 +\def\isacharunderscorekeyword{\_}%
   37.90 +\chardef\isacharbackquote=`\`%
   37.91 +\chardef\isacharbackquoteopen=`\`%
   37.92 +\chardef\isacharbackquoteclose=`\`%
   37.93 +\chardef\isacharbraceleft=`\{%
   37.94 +\chardef\isacharbar=`\|%
   37.95 +\chardef\isacharbraceright=`\}%
   37.96 +\chardef\isachartilde=`\~%
   37.97 +\def\isacharverbatimopen{\isacharbraceleft\isacharasterisk}%
   37.98 +\def\isacharverbatimclose{\isacharasterisk\isacharbraceright}%
   37.99 +}
  37.100 +
  37.101 +\newcommand{\isaliteral}[2]{#2}
  37.102 +\newcommand{\isanil}{}
  37.103 +
  37.104 +
  37.105 +% keyword and section markup
  37.106 +
  37.107 +\newcommand{\isakeyword}[1]
  37.108 +{\emph{\bf\def\isachardot{.}\def\isacharunderscore{\isacharunderscorekeyword}%
  37.109 +\def\isacharbraceleft{\{}\def\isacharbraceright{\}}#1}}
  37.110 +\newcommand{\isacommand}[1]{\isakeyword{#1}}
  37.111 +
  37.112 +\newcommand{\isamarkupheader}[1]{\section{#1}}
  37.113 +\newcommand{\isamarkupchapter}[1]{\chapter{#1}}
  37.114 +\newcommand{\isamarkupsection}[1]{\section{#1}}
  37.115 +\newcommand{\isamarkupsubsection}[1]{\subsection{#1}}
  37.116 +\newcommand{\isamarkupsubsubsection}[1]{\subsubsection{#1}}
  37.117 +\newcommand{\isamarkupsect}[1]{\section{#1}}
  37.118 +\newcommand{\isamarkupsubsect}[1]{\subsection{#1}}
  37.119 +\newcommand{\isamarkupsubsubsect}[1]{\subsubsection{#1}}
  37.120 +
  37.121 +\newif\ifisamarkup
  37.122 +\newcommand{\isabeginpar}{\par\ifisamarkup\relax\else\medskip\fi}
  37.123 +\newcommand{\isaendpar}{\par\medskip}
  37.124 +\newenvironment{isapar}{\parindent\isa@parindent\parskip\isa@parskip\isabeginpar}{\isaendpar}
  37.125 +\newenvironment{isamarkuptext}{\par\isastyletext\begin{isapar}}{\end{isapar}}
  37.126 +\newenvironment{isamarkuptxt}{\par\isastyletxt\begin{isapar}}{\end{isapar}}
  37.127 +\newcommand{\isamarkupcmt}[1]{{\isastylecmt--- #1}}
  37.128 +
  37.129 +
  37.130 +% styles
  37.131 +
  37.132 +\def\isabellestyle#1{\csname isabellestyle#1\endcsname}
  37.133 +
  37.134 +\newcommand{\isabellestyledefault}{%
  37.135 +\renewcommand{\isastyle}{\small\tt\slshape}%
  37.136 +\renewcommand{\isastyleminor}{\small\tt\slshape}%
  37.137 +\renewcommand{\isastylescript}{\footnotesize\tt\slshape}%
  37.138 +\isachardefaults%
  37.139 +}
  37.140 +\isabellestyledefault
  37.141 +
  37.142 +\newcommand{\isabellestylett}{%
  37.143 +\renewcommand{\isastyle}{\small\tt}%
  37.144 +\renewcommand{\isastyleminor}{\small\tt}%
  37.145 +\renewcommand{\isastylescript}{\footnotesize\tt}%
  37.146 +\isachardefaults%
  37.147 +}
  37.148 +
  37.149 +\newcommand{\isabellestyleit}{%
  37.150 +\renewcommand{\isastyle}{\small\it}%
  37.151 +\renewcommand{\isastyleminor}{\it}%
  37.152 +\renewcommand{\isastylescript}{\footnotesize\it}%
  37.153 +\renewcommand{\isacharunderscorekeyword}{\mbox{-}}%
  37.154 +\renewcommand{\isacharbang}{\isamath{!}}%
  37.155 +\renewcommand{\isachardoublequote}{\isanil}%
  37.156 +\renewcommand{\isachardoublequoteopen}{\isanil}%
  37.157 +\renewcommand{\isachardoublequoteclose}{\isanil}%
  37.158 +\renewcommand{\isacharhash}{\isamath{\#}}%
  37.159 +\renewcommand{\isachardollar}{\isamath{\$}}%
  37.160 +\renewcommand{\isacharpercent}{\isamath{\%}}%
  37.161 +\renewcommand{\isacharampersand}{\isamath{\&}}%
  37.162 +\renewcommand{\isacharprime}{\isamath{\mskip2mu{'}\mskip-2mu}}%
  37.163 +\renewcommand{\isacharparenleft}{\isamath{(}}%
  37.164 +\renewcommand{\isacharparenright}{\isamath{)}}%
  37.165 +\renewcommand{\isacharasterisk}{\isamath{*}}%
  37.166 +\renewcommand{\isacharplus}{\isamath{+}}%
  37.167 +\renewcommand{\isacharcomma}{\isamath{\mathord,}}%
  37.168 +\renewcommand{\isacharminus}{\isamath{-}}%
  37.169 +\renewcommand{\isachardot}{\isamath{\mathord.}}%
  37.170 +\renewcommand{\isacharslash}{\isamath{/}}%
  37.171 +\renewcommand{\isacharcolon}{\isamath{\mathord:}}%
  37.172 +\renewcommand{\isacharsemicolon}{\isamath{\mathord;}}%
  37.173 +\renewcommand{\isacharless}{\isamath{<}}%
  37.174 +\renewcommand{\isacharequal}{\isamath{=}}%
  37.175 +\renewcommand{\isachargreater}{\isamath{>}}%
  37.176 +\renewcommand{\isacharat}{\isamath{@}}%
  37.177 +\renewcommand{\isacharbrackleft}{\isamath{[}}%
  37.178 +\renewcommand{\isacharbackslash}{\isamath{\backslash}}%
  37.179 +\renewcommand{\isacharbrackright}{\isamath{]}}%
  37.180 +\renewcommand{\isacharunderscore}{\mbox{-}}%
  37.181 +\renewcommand{\isacharbraceleft}{\isamath{\{}}%
  37.182 +\renewcommand{\isacharbar}{\isamath{\mid}}%
  37.183 +\renewcommand{\isacharbraceright}{\isamath{\}}}%
  37.184 +\renewcommand{\isachartilde}{\isamath{{}\sp{\sim}}}%
  37.185 +\renewcommand{\isacharbackquoteopen}{\isatext{\raise.3ex\hbox{$\scriptscriptstyle\langle$}}}%
  37.186 +\renewcommand{\isacharbackquoteclose}{\isatext{\raise.3ex\hbox{$\scriptscriptstyle\rangle$}}}%
  37.187 +\renewcommand{\isacharverbatimopen}{\isamath{\langle\!\langle}}%
  37.188 +\renewcommand{\isacharverbatimclose}{\isamath{\rangle\!\rangle}}%
  37.189 +}
  37.190 +
  37.191 +\newcommand{\isabellestylesl}{%
  37.192 +\isabellestyleit%
  37.193 +\renewcommand{\isastyle}{\small\sl}%
  37.194 +\renewcommand{\isastyleminor}{\sl}%
  37.195 +\renewcommand{\isastylescript}{\footnotesize\sl}%
  37.196 +}
  37.197 +
  37.198 +
  37.199 +% tagged regions
  37.200 +
  37.201 +%plain TeX version of comment package -- much faster!
  37.202 +\let\isafmtname\fmtname\def\fmtname{plain}
  37.203 +\usepackage{comment}
  37.204 +\let\fmtname\isafmtname
  37.205 +
  37.206 +\newcommand{\isafold}[1]{\emph{$\langle\mathord{\mathit{#1}}\rangle$}}
  37.207 +
  37.208 +\newcommand{\isakeeptag}[1]%
  37.209 +{\includecomment{isadelim#1}\includecomment{isatag#1}\csarg\def{isafold#1}{}}
  37.210 +\newcommand{\isadroptag}[1]%
  37.211 +{\excludecomment{isadelim#1}\excludecomment{isatag#1}\csarg\def{isafold#1}{}}
  37.212 +\newcommand{\isafoldtag}[1]%
  37.213 +{\includecomment{isadelim#1}\excludecomment{isatag#1}\csarg\def{isafold#1}{\isafold{#1}}}
  37.214 +
  37.215 +\isakeeptag{theory}
  37.216 +\isakeeptag{proof}
  37.217 +\isakeeptag{ML}
  37.218 +\isakeeptag{visible}
  37.219 +\isadroptag{invisible}
  37.220 +
  37.221 +\IfFileExists{isabelletags.sty}{\usepackage{isabelletags}}{}
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/doc-isac/jrocnik/isabellesym.sty	Tue Sep 17 09:50:52 2013 +0200
    38.3 @@ -0,0 +1,358 @@
    38.4 +%%
    38.5 +%% definitions of standard Isabelle symbols
    38.6 +%%
    38.7 +
    38.8 +\newcommand{\isasymzero}{\isamath{\mathbf{0}}}  %requires amssymb
    38.9 +\newcommand{\isasymone}{\isamath{\mathbf{1}}}  %requires amssymb
   38.10 +\newcommand{\isasymtwo}{\isamath{\mathbf{2}}}  %requires amssymb
   38.11 +\newcommand{\isasymthree}{\isamath{\mathbf{3}}}  %requires amssymb
   38.12 +\newcommand{\isasymfour}{\isamath{\mathbf{4}}}  %requires amssymb
   38.13 +\newcommand{\isasymfive}{\isamath{\mathbf{5}}}  %requires amssymb
   38.14 +\newcommand{\isasymsix}{\isamath{\mathbf{6}}}  %requires amssymb
   38.15 +\newcommand{\isasymseven}{\isamath{\mathbf{7}}}  %requires amssymb
   38.16 +\newcommand{\isasymeight}{\isamath{\mathbf{8}}}  %requires amssymb
   38.17 +\newcommand{\isasymnine}{\isamath{\mathbf{9}}}  %requires amssymb
   38.18 +\newcommand{\isasymA}{\isamath{\mathcal{A}}}
   38.19 +\newcommand{\isasymB}{\isamath{\mathcal{B}}}
   38.20 +\newcommand{\isasymC}{\isamath{\mathcal{C}}}
   38.21 +\newcommand{\isasymD}{\isamath{\mathcal{D}}}
   38.22 +\newcommand{\isasymE}{\isamath{\mathcal{E}}}
   38.23 +\newcommand{\isasymF}{\isamath{\mathcal{F}}}
   38.24 +\newcommand{\isasymG}{\isamath{\mathcal{G}}}
   38.25 +\newcommand{\isasymH}{\isamath{\mathcal{H}}}
   38.26 +\newcommand{\isasymI}{\isamath{\mathcal{I}}}
   38.27 +\newcommand{\isasymJ}{\isamath{\mathcal{J}}}
   38.28 +\newcommand{\isasymK}{\isamath{\mathcal{K}}}
   38.29 +\newcommand{\isasymL}{\isamath{\mathcal{L}}}
   38.30 +\newcommand{\isasymM}{\isamath{\mathcal{M}}}
   38.31 +\newcommand{\isasymN}{\isamath{\mathcal{N}}}
   38.32 +\newcommand{\isasymO}{\isamath{\mathcal{O}}}
   38.33 +\newcommand{\isasymP}{\isamath{\mathcal{P}}}
   38.34 +\newcommand{\isasymQ}{\isamath{\mathcal{Q}}}
   38.35 +\newcommand{\isasymR}{\isamath{\mathcal{R}}}
   38.36 +\newcommand{\isasymS}{\isamath{\mathcal{S}}}
   38.37 +\newcommand{\isasymT}{\isamath{\mathcal{T}}}
   38.38 +\newcommand{\isasymU}{\isamath{\mathcal{U}}}
   38.39 +\newcommand{\isasymV}{\isamath{\mathcal{V}}}
   38.40 +\newcommand{\isasymW}{\isamath{\mathcal{W}}}
   38.41 +\newcommand{\isasymX}{\isamath{\mathcal{X}}}
   38.42 +\newcommand{\isasymY}{\isamath{\mathcal{Y}}}
   38.43 +\newcommand{\isasymZ}{\isamath{\mathcal{Z}}}
   38.44 +\newcommand{\isasyma}{\isamath{\mathrm{a}}}
   38.45 +\newcommand{\isasymb}{\isamath{\mathrm{b}}}
   38.46 +\newcommand{\isasymc}{\isamath{\mathrm{c}}}
   38.47 +\newcommand{\isasymd}{\isamath{\mathrm{d}}}
   38.48 +\newcommand{\isasyme}{\isamath{\mathrm{e}}}
   38.49 +\newcommand{\isasymf}{\isamath{\mathrm{f}}}
   38.50 +\newcommand{\isasymg}{\isamath{\mathrm{g}}}
   38.51 +\newcommand{\isasymh}{\isamath{\mathrm{h}}}
   38.52 +\newcommand{\isasymi}{\isamath{\mathrm{i}}}
   38.53 +\newcommand{\isasymj}{\isamath{\mathrm{j}}}
   38.54 +\newcommand{\isasymk}{\isamath{\mathrm{k}}}
   38.55 +\newcommand{\isasyml}{\isamath{\mathrm{l}}}
   38.56 +\newcommand{\isasymm}{\isamath{\mathrm{m}}}
   38.57 +\newcommand{\isasymn}{\isamath{\mathrm{n}}}
   38.58 +\newcommand{\isasymo}{\isamath{\mathrm{o}}}
   38.59 +\newcommand{\isasymp}{\isamath{\mathrm{p}}}
   38.60 +\newcommand{\isasymq}{\isamath{\mathrm{q}}}
   38.61 +\newcommand{\isasymr}{\isamath{\mathrm{r}}}
   38.62 +\newcommand{\isasyms}{\isamath{\mathrm{s}}}
   38.63 +\newcommand{\isasymt}{\isamath{\mathrm{t}}}
   38.64 +\newcommand{\isasymu}{\isamath{\mathrm{u}}}
   38.65 +\newcommand{\isasymv}{\isamath{\mathrm{v}}}
   38.66 +\newcommand{\isasymw}{\isamath{\mathrm{w}}}
   38.67 +\newcommand{\isasymx}{\isamath{\mathrm{x}}}
   38.68 +\newcommand{\isasymy}{\isamath{\mathrm{y}}}
   38.69 +\newcommand{\isasymz}{\isamath{\mathrm{z}}}
   38.70 +\newcommand{\isasymAA}{\isamath{\mathfrak{A}}}  %requires eufrak
   38.71 +\newcommand{\isasymBB}{\isamath{\mathfrak{B}}}  %requires eufrak
   38.72 +\newcommand{\isasymCC}{\isamath{\mathfrak{C}}}  %requires eufrak
   38.73 +\newcommand{\isasymDD}{\isamath{\mathfrak{D}}}  %requires eufrak
   38.74 +\newcommand{\isasymEE}{\isamath{\mathfrak{E}}}  %requires eufrak
   38.75 +\newcommand{\isasymFF}{\isamath{\mathfrak{F}}}  %requires eufrak
   38.76 +\newcommand{\isasymGG}{\isamath{\mathfrak{G}}}  %requires eufrak
   38.77 +\newcommand{\isasymHH}{\isamath{\mathfrak{H}}}  %requires eufrak
   38.78 +\newcommand{\isasymII}{\isamath{\mathfrak{I}}}  %requires eufrak
   38.79 +\newcommand{\isasymJJ}{\isamath{\mathfrak{J}}}  %requires eufrak
   38.80 +\newcommand{\isasymKK}{\isamath{\mathfrak{K}}}  %requires eufrak
   38.81 +\newcommand{\isasymLL}{\isamath{\mathfrak{L}}}  %requires eufrak
   38.82 +\newcommand{\isasymMM}{\isamath{\mathfrak{M}}}  %requires eufrak
   38.83 +\newcommand{\isasymNN}{\isamath{\mathfrak{N}}}  %requires eufrak
   38.84 +\newcommand{\isasymOO}{\isamath{\mathfrak{O}}}  %requires eufrak
   38.85 +\newcommand{\isasymPP}{\isamath{\mathfrak{P}}}  %requires eufrak
   38.86 +\newcommand{\isasymQQ}{\isamath{\mathfrak{Q}}}  %requires eufrak
   38.87 +\newcommand{\isasymRR}{\isamath{\mathfrak{R}}}  %requires eufrak
   38.88 +\newcommand{\isasymSS}{\isamath{\mathfrak{S}}}  %requires eufrak
   38.89 +\newcommand{\isasymTT}{\isamath{\mathfrak{T}}}  %requires eufrak
   38.90 +\newcommand{\isasymUU}{\isamath{\mathfrak{U}}}  %requires eufrak
   38.91 +\newcommand{\isasymVV}{\isamath{\mathfrak{V}}}  %requires eufrak
   38.92 +\newcommand{\isasymWW}{\isamath{\mathfrak{W}}}  %requires eufrak
   38.93 +\newcommand{\isasymXX}{\isamath{\mathfrak{X}}}  %requires eufrak
   38.94 +\newcommand{\isasymYY}{\isamath{\mathfrak{Y}}}  %requires eufrak
   38.95 +\newcommand{\isasymZZ}{\isamath{\mathfrak{Z}}}  %requires eufrak
   38.96 +\newcommand{\isasymaa}{\isamath{\mathfrak{a}}}  %requires eufrak
   38.97 +\newcommand{\isasymbb}{\isamath{\mathfrak{b}}}  %requires eufrak
   38.98 +\newcommand{\isasymcc}{\isamath{\mathfrak{c}}}  %requires eufrak
   38.99 +\newcommand{\isasymdd}{\isamath{\mathfrak{d}}}  %requires eufrak
  38.100 +\newcommand{\isasymee}{\isamath{\mathfrak{e}}}  %requires eufrak
  38.101 +\newcommand{\isasymff}{\isamath{\mathfrak{f}}}  %requires eufrak
  38.102 +\newcommand{\isasymgg}{\isamath{\mathfrak{g}}}  %requires eufrak
  38.103 +\newcommand{\isasymhh}{\isamath{\mathfrak{h}}}  %requires eufrak
  38.104 +\newcommand{\isasymii}{\isamath{\mathfrak{i}}}  %requires eufrak
  38.105 +\newcommand{\isasymjj}{\isamath{\mathfrak{j}}}  %requires eufrak
  38.106 +\newcommand{\isasymkk}{\isamath{\mathfrak{k}}}  %requires eufrak
  38.107 +\newcommand{\isasymll}{\isamath{\mathfrak{l}}}  %requires eufrak
  38.108 +\newcommand{\isasymmm}{\isamath{\mathfrak{m}}}  %requires eufrak
  38.109 +\newcommand{\isasymnn}{\isamath{\mathfrak{n}}}  %requires eufrak
  38.110 +\newcommand{\isasymoo}{\isamath{\mathfrak{o}}}  %requires eufrak
  38.111 +\newcommand{\isasympp}{\isamath{\mathfrak{p}}}  %requires eufrak
  38.112 +\newcommand{\isasymqq}{\isamath{\mathfrak{q}}}  %requires eufrak
  38.113 +\newcommand{\isasymrr}{\isamath{\mathfrak{r}}}  %requires eufrak
  38.114 +\newcommand{\isasymss}{\isamath{\mathfrak{s}}}  %requires eufrak
  38.115 +\newcommand{\isasymtt}{\isamath{\mathfrak{t}}}  %requires eufrak
  38.116 +\newcommand{\isasymuu}{\isamath{\mathfrak{u}}}  %requires eufrak
  38.117 +\newcommand{\isasymvv}{\isamath{\mathfrak{v}}}  %requires eufrak
  38.118 +\newcommand{\isasymww}{\isamath{\mathfrak{w}}}  %requires eufrak
  38.119 +\newcommand{\isasymxx}{\isamath{\mathfrak{x}}}  %requires eufrak
  38.120 +\newcommand{\isasymyy}{\isamath{\mathfrak{y}}}  %requires eufrak
  38.121 +\newcommand{\isasymzz}{\isamath{\mathfrak{z}}}  %requires eufrak
  38.122 +\newcommand{\isasymalpha}{\isamath{\alpha}}
  38.123 +\newcommand{\isasymbeta}{\isamath{\beta}}
  38.124 +\newcommand{\isasymgamma}{\isamath{\gamma}}
  38.125 +\newcommand{\isasymdelta}{\isamath{\delta}}
  38.126 +\newcommand{\isasymepsilon}{\isamath{\varepsilon}}
  38.127 +\newcommand{\isasymzeta}{\isamath{\zeta}}
  38.128 +\newcommand{\isasymeta}{\isamath{\eta}}
  38.129 +\newcommand{\isasymtheta}{\isamath{\vartheta}}
  38.130 +\newcommand{\isasymiota}{\isamath{\iota}}
  38.131 +\newcommand{\isasymkappa}{\isamath{\kappa}}
  38.132 +\newcommand{\isasymlambda}{\isamath{\lambda}}
  38.133 +\newcommand{\isasymmu}{\isamath{\mu}}
  38.134 +\newcommand{\isasymnu}{\isamath{\nu}}
  38.135 +\newcommand{\isasymxi}{\isamath{\xi}}
  38.136 +\newcommand{\isasympi}{\isamath{\pi}}
  38.137 +\newcommand{\isasymrho}{\isamath{\varrho}}
  38.138 +\newcommand{\isasymsigma}{\isamath{\sigma}}
  38.139 +\newcommand{\isasymtau}{\isamath{\tau}}
  38.140 +\newcommand{\isasymupsilon}{\isamath{\upsilon}}
  38.141 +\newcommand{\isasymphi}{\isamath{\varphi}}
  38.142 +\newcommand{\isasymchi}{\isamath{\chi}}
  38.143 +\newcommand{\isasympsi}{\isamath{\psi}}
  38.144 +\newcommand{\isasymomega}{\isamath{\omega}}
  38.145 +\newcommand{\isasymGamma}{\isamath{\Gamma}}
  38.146 +\newcommand{\isasymDelta}{\isamath{\Delta}}
  38.147 +\newcommand{\isasymTheta}{\isamath{\Theta}}
  38.148 +\newcommand{\isasymLambda}{\isamath{\Lambda}}
  38.149 +\newcommand{\isasymXi}{\isamath{\Xi}}
  38.150 +\newcommand{\isasymPi}{\isamath{\Pi}}
  38.151 +\newcommand{\isasymSigma}{\isamath{\Sigma}}
  38.152 +\newcommand{\isasymUpsilon}{\isamath{\Upsilon}}
  38.153 +\newcommand{\isasymPhi}{\isamath{\Phi}}
  38.154 +\newcommand{\isasymPsi}{\isamath{\Psi}}
  38.155 +\newcommand{\isasymOmega}{\isamath{\Omega}}
  38.156 +\newcommand{\isasymbool}{\isamath{\mathrm{I}\mkern-3.8mu\mathrm{B}}}
  38.157 +\newcommand{\isasymcomplex}{\isamath{\mathrm{C}\mkern-15mu{\phantom{\mathrm{t}}\vrule}\mkern9mu}}
  38.158 +\newcommand{\isasymnat}{\isamath{\mathrm{I}\mkern-3.8mu\mathrm{N}}}
  38.159 +\newcommand{\isasymrat}{\isamath{\mathrm{Q}\mkern-16mu{\phantom{\mathrm{t}}\vrule}\mkern10mu}}
  38.160 +\newcommand{\isasymreal}{\isamath{\mathrm{I}\mkern-3.8mu\mathrm{R}}}
  38.161 +\newcommand{\isasymint}{\isamath{\mathsf{Z}\mkern-7.5mu\mathsf{Z}}}
  38.162 +\newcommand{\isasymleftarrow}{\isamath{\leftarrow}}
  38.163 +\newcommand{\isasymlongleftarrow}{\isamath{\longleftarrow}}
  38.164 +\newcommand{\isasymrightarrow}{\isamath{\rightarrow}}
  38.165 +\newcommand{\isasymlongrightarrow}{\isamath{\longrightarrow}}
  38.166 +\newcommand{\isasymLeftarrow}{\isamath{\Leftarrow}}
  38.167 +\newcommand{\isasymLongleftarrow}{\isamath{\Longleftarrow}}
  38.168 +\newcommand{\isasymRightarrow}{\isamath{\Rightarrow}}
  38.169 +\newcommand{\isasymLongrightarrow}{\isamath{\Longrightarrow}}
  38.170 +\newcommand{\isasymleftrightarrow}{\isamath{\leftrightarrow}}
  38.171 +\newcommand{\isasymlongleftrightarrow}{\isamath{\longleftrightarrow}}
  38.172 +\newcommand{\isasymLeftrightarrow}{\isamath{\Leftrightarrow}}
  38.173 +\newcommand{\isasymLongleftrightarrow}{\isamath{\Longleftrightarrow}}
  38.174 +\newcommand{\isasymmapsto}{\isamath{\mapsto}}
  38.175 +\newcommand{\isasymlongmapsto}{\isamath{\longmapsto}}
  38.176 +\newcommand{\isasymmidarrow}{\isamath{\relbar}}
  38.177 +\newcommand{\isasymMidarrow}{\isamath{\Relbar}}
  38.178 +\newcommand{\isasymhookleftarrow}{\isamath{\hookleftarrow}}
  38.179 +\newcommand{\isasymhookrightarrow}{\isamath{\hookrightarrow}}
  38.180 +\newcommand{\isasymleftharpoondown}{\isamath{\leftharpoondown}}
  38.181 +\newcommand{\isasymrightharpoondown}{\isamath{\rightharpoondown}}
  38.182 +\newcommand{\isasymleftharpoonup}{\isamath{\leftharpoonup}}
  38.183 +\newcommand{\isasymrightharpoonup}{\isamath{\rightharpoonup}}
  38.184 +\newcommand{\isasymrightleftharpoons}{\isamath{\rightleftharpoons}}
  38.185 +\newcommand{\isasymleadsto}{\isamath{\leadsto}}  %requires amssymb
  38.186 +\newcommand{\isasymdownharpoonleft}{\isamath{\downharpoonleft}}  %requires amssymb
  38.187 +\newcommand{\isasymdownharpoonright}{\isamath{\downharpoonright}}  %requires amssymb
  38.188 +\newcommand{\isasymupharpoonleft}{\isamath{\upharpoonleft}}  %requires amssymb
  38.189 +\newcommand{\isasymupharpoonright}{\isamath{\upharpoonright}}  %requires amssymb
  38.190 +\newcommand{\isasymrestriction}{\isamath{\restriction}}  %requires amssymb
  38.191 +\newcommand{\isasymColon}{\isamath{\mathrel{::}}}
  38.192 +\newcommand{\isasymup}{\isamath{\uparrow}}
  38.193 +\newcommand{\isasymUp}{\isamath{\Uparrow}}
  38.194 +\newcommand{\isasymdown}{\isamath{\downarrow}}
  38.195 +\newcommand{\isasymDown}{\isamath{\Downarrow}}
  38.196 +\newcommand{\isasymupdown}{\isamath{\updownarrow}}
  38.197 +\newcommand{\isasymUpdown}{\isamath{\Updownarrow}}
  38.198 +\newcommand{\isasymlangle}{\isamath{\langle}}
  38.199 +\newcommand{\isasymrangle}{\isamath{\rangle}}
  38.200 +\newcommand{\isasymlceil}{\isamath{\lceil}}
  38.201 +\newcommand{\isasymrceil}{\isamath{\rceil}}
  38.202 +\newcommand{\isasymlfloor}{\isamath{\lfloor}}
  38.203 +\newcommand{\isasymrfloor}{\isamath{\rfloor}}
  38.204 +\newcommand{\isasymlparr}{\isamath{\mathopen{(\mkern-3mu\mid}}}
  38.205 +\newcommand{\isasymrparr}{\isamath{\mathclose{\mid\mkern-3mu)}}}
  38.206 +\newcommand{\isasymlbrakk}{\isamath{\mathopen{\lbrack\mkern-3mu\lbrack}}}
  38.207 +\newcommand{\isasymrbrakk}{\isamath{\mathclose{\rbrack\mkern-3mu\rbrack}}}
  38.208 +\newcommand{\isasymlbrace}{\isamath{\mathopen{\lbrace\mkern-4.5mu\mid}}}
  38.209 +\newcommand{\isasymrbrace}{\isamath{\mathclose{\mid\mkern-4.5mu\rbrace}}}
  38.210 +\newcommand{\isasymguillemotleft}{\isatext{\flqq}}  %requires babel
  38.211 +\newcommand{\isasymguillemotright}{\isatext{\frqq}}  %requires babel
  38.212 +\newcommand{\isasymbottom}{\isamath{\bot}}
  38.213 +\newcommand{\isasymtop}{\isamath{\top}}
  38.214 +\newcommand{\isasymand}{\isamath{\wedge}}
  38.215 +\newcommand{\isasymAnd}{\isamath{\bigwedge}}
  38.216 +\newcommand{\isasymor}{\isamath{\vee}}
  38.217 +\newcommand{\isasymOr}{\isamath{\bigvee}}
  38.218 +\newcommand{\isasymforall}{\isamath{\forall\,}}
  38.219 +\newcommand{\isasymexists}{\isamath{\exists\,}}
  38.220 +\newcommand{\isasymnexists}{\isamath{\nexists\,}}  %requires amssymb
  38.221 +\newcommand{\isasymnot}{\isamath{\neg}}
  38.222 +\newcommand{\isasymbox}{\isamath{\Box}}  %requires amssymb
  38.223 +\newcommand{\isasymdiamond}{\isamath{\Diamond}}  %requires amssymb
  38.224 +\newcommand{\isasymturnstile}{\isamath{\vdash}}
  38.225 +\newcommand{\isasymTurnstile}{\isamath{\models}}
  38.226 +\newcommand{\isasymtturnstile}{\isamath{\vdash\!\!\!\vdash}}
  38.227 +\newcommand{\isasymTTurnstile}{\isamath{\mid\!\models}}
  38.228 +\newcommand{\isasymstileturn}{\isamath{\dashv}}
  38.229 +\newcommand{\isasymsurd}{\isamath{\surd}}
  38.230 +\newcommand{\isasymle}{\isamath{\le}}
  38.231 +\newcommand{\isasymge}{\isamath{\ge}}
  38.232 +\newcommand{\isasymlless}{\isamath{\ll}}
  38.233 +\newcommand{\isasymggreater}{\isamath{\gg}}
  38.234 +\newcommand{\isasymlesssim}{\isamath{\lesssim}}  %requires amssymb
  38.235 +\newcommand{\isasymgreatersim}{\isamath{\gtrsim}}  %requires amssymb
  38.236 +\newcommand{\isasymlessapprox}{\isamath{\lessapprox}}  %requires amssymb
  38.237 +\newcommand{\isasymgreaterapprox}{\isamath{\gtrapprox}}  %requires amssymb
  38.238 +\newcommand{\isasymin}{\isamath{\in}}
  38.239 +\newcommand{\isasymnotin}{\isamath{\notin}}
  38.240 +\newcommand{\isasymsubset}{\isamath{\subset}}
  38.241 +\newcommand{\isasymsupset}{\isamath{\supset}}
  38.242 +\newcommand{\isasymsubseteq}{\isamath{\subseteq}}
  38.243 +\newcommand{\isasymsupseteq}{\isamath{\supseteq}}
  38.244 +\newcommand{\isasymsqsubset}{\isamath{\sqsubset}}  %requires amssymb
  38.245 +\newcommand{\isasymsqsupset}{\isamath{\sqsupset}}  %requires amssymb
  38.246 +\newcommand{\isasymsqsubseteq}{\isamath{\sqsubseteq}}
  38.247 +\newcommand{\isasymsqsupseteq}{\isamath{\sqsupseteq}}
  38.248 +\newcommand{\isasyminter}{\isamath{\cap}}
  38.249 +\newcommand{\isasymInter}{\isamath{\bigcap\,}}
  38.250 +\newcommand{\isasymunion}{\isamath{\cup}}
  38.251 +\newcommand{\isasymUnion}{\isamath{\bigcup\,}}
  38.252 +\newcommand{\isasymsqunion}{\isamath{\sqcup}}
  38.253 +\newcommand{\isasymSqunion}{\isamath{\bigsqcup\,}}
  38.254 +\newcommand{\isasymsqinter}{\isamath{\sqcap}}
  38.255 +\newcommand{\isasymSqinter}{\isamath{\bigsqcap\,}}  %requires stmaryrd
  38.256 +\newcommand{\isasymsetminus}{\isamath{\setminus}}
  38.257 +\newcommand{\isasympropto}{\isamath{\propto}}
  38.258 +\newcommand{\isasymuplus}{\isamath{\uplus}}
  38.259 +\newcommand{\isasymUplus}{\isamath{\biguplus\,}}
  38.260 +\newcommand{\isasymnoteq}{\isamath{\not=}}
  38.261 +\newcommand{\isasymsim}{\isamath{\sim}}
  38.262 +\newcommand{\isasymdoteq}{\isamath{\doteq}}
  38.263 +\newcommand{\isasymsimeq}{\isamath{\simeq}}
  38.264 +\newcommand{\isasymapprox}{\isamath{\approx}}
  38.265 +\newcommand{\isasymasymp}{\isamath{\asymp}}
  38.266 +\newcommand{\isasymcong}{\isamath{\cong}}
  38.267 +\newcommand{\isasymsmile}{\isamath{\smile}}
  38.268 +\newcommand{\isasymequiv}{\isamath{\equiv}}
  38.269 +\newcommand{\isasymfrown}{\isamath{\frown}}
  38.270 +\newcommand{\isasymJoin}{\isamath{\Join}}  %requires amssymb
  38.271 +\newcommand{\isasymbowtie}{\isamath{\bowtie}}
  38.272 +\newcommand{\isasymprec}{\isamath{\prec}}
  38.273 +\newcommand{\isasymsucc}{\isamath{\succ}}
  38.274 +\newcommand{\isasympreceq}{\isamath{\preceq}}
  38.275 +\newcommand{\isasymsucceq}{\isamath{\succeq}}
  38.276 +\newcommand{\isasymparallel}{\isamath{\parallel}}
  38.277 +\newcommand{\isasymbar}{\isamath{\mid}}
  38.278 +\newcommand{\isasymplusminus}{\isamath{\pm}}
  38.279 +\newcommand{\isasymminusplus}{\isamath{\mp}}
  38.280 +\newcommand{\isasymtimes}{\isamath{\times}}
  38.281 +\newcommand{\isasymdiv}{\isamath{\div}}
  38.282 +\newcommand{\isasymcdot}{\isamath{\cdot}}
  38.283 +\newcommand{\isasymstar}{\isamath{\star}}
  38.284 +\newcommand{\isasymbullet}{\boldmath\isamath{\mathchoice{\displaystyle{\cdot}}{\textstyle{\cdot}}{\scriptstyle{\bullet}}{\scriptscriptstyle{\bullet}}}}
  38.285 +\newcommand{\isasymcirc}{\isamath{\circ}}
  38.286 +\newcommand{\isasymdagger}{\isamath{\dagger}}
  38.287 +\newcommand{\isasymddagger}{\isamath{\ddagger}}
  38.288 +\newcommand{\isasymlhd}{\isamath{\lhd}}  %requires amssymb
  38.289 +\newcommand{\isasymrhd}{\isamath{\rhd}}  %requires amssymb
  38.290 +\newcommand{\isasymunlhd}{\isamath{\unlhd}}  %requires amssymb
  38.291 +\newcommand{\isasymunrhd}{\isamath{\unrhd}}  %requires amssymb
  38.292 +\newcommand{\isasymtriangleleft}{\isamath{\triangleleft}}
  38.293 +\newcommand{\isasymtriangleright}{\isamath{\triangleright}}
  38.294 +\newcommand{\isasymtriangle}{\isamath{\triangle}}
  38.295 +\newcommand{\isasymtriangleq}{\isamath{\triangleq}}  %requires amssymb
  38.296 +\newcommand{\isasymoplus}{\isamath{\oplus}}
  38.297 +\newcommand{\isasymOplus}{\isamath{\bigoplus\,}}
  38.298 +\newcommand{\isasymotimes}{\isamath{\otimes}}
  38.299 +\newcommand{\isasymOtimes}{\isamath{\bigotimes\,}}
  38.300 +\newcommand{\isasymodot}{\isamath{\odot}}
  38.301 +\newcommand{\isasymOdot}{\isamath{\bigodot\,}}
  38.302 +\newcommand{\isasymominus}{\isamath{\ominus}}
  38.303 +\newcommand{\isasymoslash}{\isamath{\oslash}}
  38.304 +\newcommand{\isasymdots}{\isamath{\dots}}
  38.305 +\newcommand{\isasymcdots}{\isamath{\cdots}}
  38.306 +\newcommand{\isasymSum}{\isamath{\sum\,}}
  38.307 +\newcommand{\isasymProd}{\isamath{\prod\,}}
  38.308 +\newcommand{\isasymCoprod}{\isamath{\coprod\,}}
  38.309 +\newcommand{\isasyminfinity}{\isamath{\infty}}
  38.310 +\newcommand{\isasymintegral}{\isamath{\int\,}}
  38.311 +\newcommand{\isasymointegral}{\isamath{\oint\,}}
  38.312 +\newcommand{\isasymclubsuit}{\isamath{\clubsuit}}
  38.313 +\newcommand{\isasymdiamondsuit}{\isamath{\diamondsuit}}
  38.314 +\newcommand{\isasymheartsuit}{\isamath{\heartsuit}}
  38.315 +\newcommand{\isasymspadesuit}{\isamath{\spadesuit}}
  38.316 +\newcommand{\isasymaleph}{\isamath{\aleph}}
  38.317 +\newcommand{\isasymemptyset}{\isamath{\emptyset}}
  38.318 +\newcommand{\isasymnabla}{\isamath{\nabla}}
  38.319 +\newcommand{\isasympartial}{\isamath{\partial}}
  38.320 +\newcommand{\isasymRe}{\isamath{\Re}}
  38.321 +\newcommand{\isasymIm}{\isamath{\Im}}
  38.322 +\newcommand{\isasymflat}{\isamath{\flat}}
  38.323 +\newcommand{\isasymnatural}{\isamath{\natural}}
  38.324 +\newcommand{\isasymsharp}{\isamath{\sharp}}
  38.325 +\newcommand{\isasymangle}{\isamath{\angle}}
  38.326 +\newcommand{\isasymcopyright}{\isatext{\rm\copyright}}
  38.327 +\newcommand{\isasymregistered}{\isatext{\rm\textregistered}}
  38.328 +\newcommand{\isasymhyphen}{\isatext{\rm-}}
  38.329 +\newcommand{\isasyminverse}{\isamath{{}^{-1}}}
  38.330 +\newcommand{\isasymonesuperior}{\isamath{{}^1}}
  38.331 +\newcommand{\isasymonequarter}{\isatext{\rm\textonequarter}}  %requires textcomp
  38.332 +\newcommand{\isasymtwosuperior}{\isamath{{}^2}}
  38.333 +\newcommand{\isasymonehalf}{\isatext{\rm\textonehalf}}  %requires textcomp
  38.334 +\newcommand{\isasymthreesuperior}{\isamath{{}^3}}
  38.335 +\newcommand{\isasymthreequarters}{\isatext{\rm\textthreequarters}}  %requires textcomp
  38.336 +\newcommand{\isasymordfeminine}{\isatext{\rm\textordfeminine}}
  38.337 +\newcommand{\isasymordmasculine}{\isatext{\rm\textordmasculine}}
  38.338 +\newcommand{\isasymsection}{\isatext{\rm\S}}
  38.339 +\newcommand{\isasymparagraph}{\isatext{\rm\P}}
  38.340 +\newcommand{\isasymexclamdown}{\isatext{\rm\textexclamdown}}
  38.341 +\newcommand{\isasymquestiondown}{\isatext{\rm\textquestiondown}}
  38.342 +\newcommand{\isasymeuro}{\isatext{\textgreek{\euro}}}  %requires greek babel
  38.343 +\newcommand{\isasympounds}{\isamath{\pounds}}
  38.344 +\newcommand{\isasymyen}{\isatext{\yen}}  %requires amssymb
  38.345 +\newcommand{\isasymcent}{\isatext{\textcent}}  %requires textcomp
  38.346 +\newcommand{\isasymcurrency}{\isatext{\textcurrency}} %requires textcomp
  38.347 +\newcommand{\isasymdegree}{\isatext{\rm\textdegree}}  %requires textcomp
  38.348 +\newcommand{\isasymamalg}{\isamath{\amalg}}
  38.349 +\newcommand{\isasymmho}{\isamath{\mho}}  %requires amssymb
  38.350 +\newcommand{\isasymlozenge}{\isamath{\lozenge}}  %requires amssymb
  38.351 +\newcommand{\isasymwp}{\isamath{\wp}}
  38.352 +\newcommand{\isasymwrong}{\isamath{\wr}}
  38.353 +\newcommand{\isasymstruct}{\isamath{\diamond}}
  38.354 +\newcommand{\isasymacute}{\isatext{\'\relax}}
  38.355 +\newcommand{\isasymindex}{\isatext{\i}}
  38.356 +\newcommand{\isasymdieresis}{\isatext{\"\relax}}
  38.357 +\newcommand{\isasymcedilla}{\isatext{\c\relax}}
  38.358 +\newcommand{\isasymhungarumlaut}{\isatext{\H\relax}}
  38.359 +\newcommand{\isasymspacespace}{\isamath{~~}}
  38.360 +\newcommand{\isasymmodule}{\isamath{\langle}\isakeyword{module}\isamath{\rangle}}
  38.361 +\newcommand{\isasymsome}{\isamath{\epsilon\,}}
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/doc-isac/jrocnik/jrocnik_cadgme.tex	Tue Sep 17 09:50:52 2013 +0200
    39.3 @@ -0,0 +1,281 @@
    39.4 +\documentclass[%
    39.5 +%handout, % prints handouts (=no animations, for printed version)
    39.6 +%mathserif
    39.7 +%xcolor=pst,
    39.8 +14pt
    39.9 +% fleqn
   39.10 +]{beamer}
   39.11 +
   39.12 +\usepackage{beamerthemedefault}
   39.13 +
   39.14 +\usepackage{color}
   39.15 +\definecolor{lgray}{RGB}{238,238,238}
   39.16 +\definecolor{gray}{rgb}{0.8,0.8,0.8}
   39.17 +
   39.18 +\useoutertheme[subsection=false]{smoothbars}
   39.19 +%\useinnertheme{circles}
   39.20 +
   39.21 +\setbeamercolor{block title}{fg=black,bg=gray}
   39.22 +\setbeamercolor{block title alerted}{use=alerted text,fg=black,bg=alerted text.fg!75!bg}
   39.23 +\setbeamercolor{block title example}{use=example text,fg=black,bg=example text.fg!75!bg}
   39.24 +\setbeamercolor{block body}{parent=normal text,use=block title,bg=block title.bg!25!bg}
   39.25 +\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!25!bg}
   39.26 +\setbeamercolor{block body example}{parent=normal text,use=block title example,bg=block title example.bg!25!bg}
   39.27 +
   39.28 +%activate hyperlinks at the end
   39.29 +%\usepackage{hyperref}
   39.30 +
   39.31 +\usepackage[english]{babel}
   39.32 +\usepackage[utf8]{inputenc}
   39.33 +\usepackage{array}
   39.34 +\usepackage{setspace}
   39.35 +\usepackage{url}
   39.36 +
   39.37 +\definecolor{tug}{rgb}{0.96862,0.14509,0.27450}
   39.38 +
   39.39 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   39.40 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   39.41 +
   39.42 +\setbeamertemplate{headline}[text line]{
   39.43 +	\begin{beamercolorbox}[wd=\paperwidth,ht=8ex,dp=4ex]{}
   39.44 +		\insertnavigation{0.85\paperwidth} 
   39.45 +		\raisebox{-10pt}{\includegraphics[width=15mm]{tuglogo}}\vskip2pt
   39.46 +		\hskip-1pt\rule{\paperwidth}{0.3pt}
   39.47 +	\end{beamercolorbox}
   39.48 +}
   39.49 +
   39.50 +\setbeamertemplate{navigation symbols}{}
   39.51 +\setbeamercolor{footline}{fg=black,bg=gray}
   39.52 +
   39.53 +% Fusszeile mit Autor, Titel und Foliennummer / Gesamtfolienzahl
   39.54 +\setbeamertemplate{footline}[text line]{
   39.55 +	\hskip-1pt
   39.56 +	\begin{beamercolorbox}[wd=\paperwidth]{footline}
   39.57 +			\rule{\paperwidth}{0.3pt}
   39.58 +			\colorbox{tug}{\rule{3pt}{0pt}\rule{0pt}{3pt}}
   39.59 +			\textbf{\rule{0pt}{5pt}\insertshortauthor\hfill\insertshortinstitute\hfill%
   39.60 +					\insertshorttitle\rule{1em}{0pt}}
   39.61 +			\rule{\paperwidth}{0.3pt}
   39.62 +	\end{beamercolorbox}
   39.63 +	\begin{beamercolorbox}[wd=\paperwidth,ht=2ex,dp=2ex]{white}
   39.64 +	\end{beamercolorbox}
   39.65 +}%
   39.66 +
   39.67 +%% Titelblatt-Einstellungen
   39.68 +\institute[IST]{Institute for Software Technology\\Graz University of Technology}
   39.69 +\title[ISAC for Signal Processing]{Interactive Course Material by TP-based Programming}
   39.70 +\subtitle{A Case Study}
   39.71 +\author{Jan Ro\v{c}nik}
   39.72 +\date{24. June 2012}
   39.73 +
   39.74 +% Subject and Keywords for PDF
   39.75 +\subject{CADGME Presentation}
   39.76 +\keywords{interactive course material, signal processing, z transform, TP-based programming
   39.77 +language, Lucas-Interpreter, Theorem Proving}
   39.78 +
   39.79 +\titlegraphic{\includegraphics[width=20mm]{tuglogo}}
   39.80 +
   39.81 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   39.82 +\begin{document}
   39.83 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   39.84 +
   39.85 +\begin{frame}[plain]
   39.86 +  \frametitle{}
   39.87 +  \titlepage
   39.88 +\end{frame}
   39.89 +
   39.90 +
   39.91 +
   39.92 +%\begin{frame}
   39.93 +%  \frametitle{Contents}
   39.94 +%  \begin{spacing}{0.3}
   39.95 +%        \tableofcontents[hideallsubsections %
   39.96 +%                        % ,pausesections
   39.97 +%                        ] % erzeugt Inhaltsverzeichnis
   39.98 +%  \end{spacing}
   39.99 +%\end{frame}
  39.100 +
  39.101 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.102 +\section{Introduction}
  39.103 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.104 +
  39.105 +\subsection{isabelle}
  39.106 +\begin{frame}
  39.107 +	\frametitle{What is Isabelle?}
  39.108 +	\begin{spacing}{2}
  39.109 +		\begin{itemize}
  39.110 +			\item Interactive Theorem Prover (Interactice TP)
  39.111 +			\item Large body of mechanized math knowledge
  39.112 +			\item Developed in Cambridge, Munich and Paris
  39.113 +		\end{itemize}
  39.114 +	\end{spacing}
  39.115 +\end{frame}
  39.116 +
  39.117 +\subsection{isac}
  39.118 +\begin{frame}
  39.119 +	\frametitle{What is {\isac}?}
  39.120 +	\begin{spacing}{1.7}
  39.121 +		\begin{itemize}
  39.122 +			\item \textcolor{tug}{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal A}$}belle for~{}\textcolor{tug}{${\cal C}$}alculations
  39.123 +			\item Interactive Course Material
  39.124 +			\item Learning Coach
  39.125 +			\item Developed at Austrian Universities
  39.126 +		\end{itemize}
  39.127 +	\end{spacing}
  39.128 +\end{frame}
  39.129 +
  39.130 +\subsection{motivation}
  39.131 +\begin{frame}
  39.132 +	\frametitle{{\isac{}} for Interactive Course Material}
  39.133 +	\begin{itemize}
  39.134 +		\item Stepwise solving of engineering problems\\
  39.135 +					{\small $\rightarrow$ \textcolor{tug}{One Framework for all phases of problem solving}}
  39.136 +		\item Explaining underlying knowledge\\
  39.137 +					{\small $\rightarrow$  \textcolor{tug}{Transparent Content, Access to Multimedia Content}}
  39.138 +		\item Checking steps input by the student\\
  39.139 +					{\small $\rightarrow$ \textcolor{tug}{Proof Situation}}
  39.140 +		\item Assessing stepwise problem solving\\
  39.141 +					{\small $\rightarrow$ \textcolor{tug}{One system for tutoring and assessment}}
  39.142 +	\end{itemize}
  39.143 +\end{frame}
  39.144 +
  39.145 +
  39.146 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.147 +\section{Material Creation}
  39.148 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.149 +
  39.150 +\subsection{steps}
  39.151 +\begin{frame}
  39.152 +	\frametitle{Course Material Creation {\normalsize Iterations}} %tasks? work flow?
  39.153 +	\begin{spacing}{1.3}
  39.154 +		\begin{enumerate}
  39.155 +			\item Problem Analysis\\
  39.156 +				{\small Variants of problem solving steps} %example partial fractions
  39.157 +			\item \textbf{Analysis of mechanized knowledge}\\
  39.158 +				{\small Existing and missing knowledge}
  39.159 +			\item \textbf{Programming in a TP based language (TP-PL)}			
  39.160 +			\item Additional Content\\
  39.161 +				{\small Multimedia explanations for underlying knowledge}
  39.162 +		\end{enumerate}
  39.163 +	\end{spacing}
  39.164 +\end{frame}
  39.165 +
  39.166 +\subsection{issues}
  39.167 +\begin{frame}
  39.168 +	\frametitle{Issues to Accomplish {\normalsize Information Collection}}
  39.169 +	\begin{spacing}{1.3}
  39.170 +		\begin{itemize}
  39.171 +			\item What knowledge is mechanized in Isabelle?\\
  39.172 +						{\small Theorems, Definitions, Numbers,\ldots}
  39.173 +			\item What knowledge is mechanized in {\isac{}}?\\
  39.174 +						{\small Problem specifications, Programs,\ldots}
  39.175 +			\item What additional explanations are required?\\
  39.176 +				{\small Figures, Examples,\ldots}
  39.177 +		\end{itemize}
  39.178 +	\end{spacing}
  39.179 +\end{frame}
  39.180 +
  39.181 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.182 +\section{Details}
  39.183 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.184 +
  39.185 +\subsection{Technical Survey}
  39.186 +%\begin{frame}
  39.187 +%	\frametitle{Technical Survey I {\normalsize Mechanizing Knowledge}}
  39.188 +%	\begin{spacing}{1.5}
  39.189 +%		\begin{itemize}
  39.190 +%			\item Not enough knowledge is mechanized\\
  39.191 +%						{\small Equation Solving, Integrals,\ldots}
  39.192 +%			\item Computer Mathematicians required!\\
  39.193 +%						{\small Mathematics: Equation solving, Engineer: Z-Transform}
  39.194 +%			\item RISC Linz, Mathematics TU Graz
  39.195 +%		\end{itemize}
  39.196 +%	\end{spacing}
  39.197 +%\end{frame}
  39.198 +
  39.199 +%\begin{frame}
  39.200 +%	\frametitle{Technical Survey II {\normalsize Representation Problems} }
  39.201 +%	\begin{spacing}{1.9}
  39.202 +%		\begin{itemize}
  39.203 +%			\item Different brackets have different meanings\\
  39.204 +%						{\small $u[n]$ is a specific function application :) }
  39.205 +%			\item We need Symbols, Indizes and Hochzahlen
  39.206 +%			\item Different Representations for different purpos %winkel in polar oder kartesischen koordinaten usw.
  39.207 +%		\end{itemize}
  39.208 +%	\end{spacing}
  39.209 +%\end{frame}
  39.210 +
  39.211 +\begin{frame}
  39.212 +	\frametitle{Representation Problems}
  39.213 +	\begin{spacing}{1.4}
  39.214 +		\begin{center}
  39.215 +			
  39.216 +			  \begin{itemize}
  39.217 +			  		\item Can meaning of symbols be varied?\\
  39.218 +							{\small $u[n]$ is a specific function in Signal Processing}
  39.219 +						\item Simplification, tricks and beauty
  39.220 +				\end{itemize}
  39.221 +				
  39.222 +				{\small $X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY$}\\
  39.223 +				\vspace{3mm}
  39.224 +				{\small $\frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)=\frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=$}\\
  39.225 +				{\small $=\frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}=\frac{1}{\omega}\,e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} $}
  39.226 +		
  39.227 +		
  39.228 +		\end{center}
  39.229 +	\end{spacing}
  39.230 +\end{frame}
  39.231 +
  39.232 +\subsection{Demonstration}
  39.233 +\begin{frame}
  39.234 +	\frametitle{Demonstration}
  39.235 +	\begin{spacing}{1.5}
  39.236 +		\begin{itemize}
  39.237 +			\item Backend
  39.238 +			\begin{itemize}
  39.239 +				\item Equation solving
  39.240 +				\item Notation problems, Working with Rulesets
  39.241 +				\item Framework expansion
  39.242 +				\item My Work
  39.243 +			\end{itemize}
  39.244 +		\end{itemize}
  39.245 +	\end{spacing}
  39.246 +\end{frame}
  39.247 +
  39.248 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.249 +\section{Summary}
  39.250 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.251 +
  39.252 +\subsection{conclusion}
  39.253 +\begin{frame}
  39.254 +	\frametitle{Conclusion}
  39.255 +	\begin{spacing}{1.2}
  39.256 +	    \begin{itemize}
  39.257 +	    	\item Proof of concept for TP-PL succesfull
  39.258 +				\item Usability of TP-PL not sufficient
  39.259 +				\item Requirements for improved usability clarified
  39.260 +				\vspace{5mm}
  39.261 +				\item Unacceptable to spend 200h on 1 program
  39.262 +				\item \isac{} pointed at my own error
  39.263 +			\end{itemize}
  39.264 +		\end{spacing}
  39.265 +\end{frame}
  39.266 +
  39.267 +\subsection{contact}
  39.268 +\begin{frame}
  39.269 +	\frametitle{Contact}
  39.270 +	\begin{spacing}{1.7}
  39.271 +	    \begin{tabular}{lr}
  39.272 +				Isabelle & \small \texttt{\href{isabelle.in.tum.de}{isabelle.in.tum.de}}\\
  39.273 +				The {\isac}-Project & \small \texttt{\href{www.ist.tugraz.at/isac}{www.ist.tugraz.at/isac}}\\
  39.274 +				Project leader & \small \texttt{\href{mailto:wneuper@ist.tugraz.at}{wneuper@ist.tugraz.at}}\\
  39.275 +				Jan Rocnik & \small \texttt{\href{mailto:jan.rocnik@student.tugraz.at}{jan.rocnik@student.tugraz.at}}
  39.276 +			\end{tabular}
  39.277 +		\end{spacing}
  39.278 +\end{frame}
  39.279 +
  39.280 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.281 +\end{document}
  39.282 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39.283 +
  39.284 +%% EOF
  39.285 \ No newline at end of file
    40.1 Binary file doc-isac/jrocnik/math-universe.png has changed
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/doc-isac/jrocnik/pdfsetup.sty	Tue Sep 17 09:50:52 2013 +0200
    41.3 @@ -0,0 +1,7 @@
    41.4 +%%
    41.5 +%% default hyperref setup (both for pdf and dvi output)
    41.6 +%%
    41.7 +
    41.8 +\usepackage{color}
    41.9 +\definecolor{linkcolor}{rgb}{0,0,0.5}
   41.10 +\usepackage[colorlinks=true,linkcolor=linkcolor,citecolor=linkcolor,filecolor=linkcolor,pagecolor=linkcolor,urlcolor=linkcolor]{hyperref}
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/doc-isac/jrocnik/preambleForGeneratedDocuments.tex	Tue Sep 17 09:50:52 2013 +0200
    42.3 @@ -0,0 +1,5 @@
    42.4 +\section*{Preamble}
    42.5 +This part gives a detailed review on the development and testing process of new programms. All of the following part is automatically generated out of an {\sisac{}}-theory file (\texttt{.thy} - extension). In this case the file is called \texttt{Build\_Inverse\_Z\_Transform} it can be found in the {\sisac{}} directory: 
    42.6 +\begin{center}\texttt{test/Tools/isac/ADDTESTS/course/}\end{center}
    42.7 +{\sisac{}} provides inbuild tools for translating theories into latex documents. To set up such an envoriemt a file  called \texttt{isacmakefile} is needed. Further information about this automatic generation can be found in \cite{wenzel2011system}.
    42.8 +\par The following theory can be modified and used as a guiedline for implementing new material. Everything found here is just a snapshot of the work by \today.
    42.9 \ No newline at end of file
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/doc-isac/jrocnik/references.bib	Tue Sep 17 09:50:52 2013 +0200
    43.3 @@ -0,0 +1,142 @@
    43.4 +@book{proakis2004contemporary,
    43.5 +  title={Contemporary communication systems using MATLAB and Simulink},
    43.6 +  author={Proakis, J.G. and Salehi, M. and Bauch, G.},
    43.7 +  isbn={9780534406172},
    43.8 +  lccn={31054410},
    43.9 +  series={BookWare companion series},
   43.10 +  url={http://books.google.at/books?id=5mXGQgAACAAJ},
   43.11 +  year={2004},
   43.12 +  publisher={Thomson--Brooks/Cole}
   43.13 +}
   43.14 +@book{oppenheim2010discrete,
   43.15 +  title={Discrete-time signal processing},
   43.16 +  author={Oppenheim, A.V. and Schafer, R.W.},
   43.17 +  isbn={9780131988422},
   43.18 +  series={Prentice-Hall signal processing series},
   43.19 +  url={http://books.google.at/books?id=mYsoAQAAMAAJ},
   43.20 +  year={2010},
   43.21 +  publisher={Prentice Hall}
   43.22 +}
   43.23 +@manual{wenzel2011system,
   43.24 +	title={The Isabelle System Manual},
   43.25 +	author={Wenzel, M. and Berghofer, S.},
   43.26 +	organization={TU Muenchen},
   43.27 +	year={2011},
   43.28 +	month={January}
   43.29 +}
   43.30 +@Book{Nipkow-Paulson-Wenzel:2002,
   43.31 +  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
   43.32 +  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
   43.33 +  publisher	= {Springer},
   43.34 +  series	= {LNCS},
   43.35 +  volume	= 2283,
   43.36 +  year		= 2002}
   43.37 +@Book{progr-mathematica,
   43.38 +  author = 	 {Maeder, Roman E.},
   43.39 +  title = 	 {Programming in Mathematica},
   43.40 +  publisher = 	 {Addison-Wesley},
   43.41 +  address = 	 {Reading, Mass.},
   43.42 +  year = 	 {1997}
   43.43 +}
   43.44 +@Book{prog-maple06,
   43.45 +  author = 	 {Aladjav, Victor and Bogdevicius, Marijonas},
   43.46 +  title = 	 {Maple: Programming, Physical and Engineering Problems},
   43.47 +  publisher = 	 {Fultus Corporation},
   43.48 +  year = 	 {2006},
   43.49 +  month = 	 {February 27},
   43.50 +  annote = 	 {ISBN: 1596820802}
   43.51 +}
   43.52 +@Article{plmms10,
   43.53 +  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
   43.54 +  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
   43.55 +  journal = 	 {ACM Communications in Computer Algebra},
   43.56 +  year = 	 {2010},
   43.57 +  volume = 	 {44},
   43.58 +  number = 	 {1/2},
   43.59 +  pages = 	 {27-41} %,
   43.60 +  %month = 	 {March/June},
   43.61 +  %note = 	 {http://www.ist.tugraz.at/projects/isac/publ/plmms-10.pdf}
   43.62 +}
   43.63 +@inproceedings{casproto,
   43.64 +  author    = {Cezary Kaliszyk and
   43.65 +               Freek Wiedijk},
   43.66 +  title     = {Certified Computer Algebra on Top of an Interactive Theorem
   43.67 +               Prover},
   43.68 +  booktitle = {Calculemus},
   43.69 +  year      = {2007},
   43.70 +  pages     = {94-105},
   43.71 +  ee        = {http://dx.doi.org/10.1007/978-3-540-73086-6_8},
   43.72 +  crossref  = {DBLP:conf/mkm/2007},
   43.73 +  bibsource = {DBLP, http://dblp.uni-trier.de}
   43.74 +}
   43.75 +@InProceedings{wn:lucas-interp-12,
   43.76 +  author = 	 {Neuper, Walther},
   43.77 +  title = 	 {Automated Generation of User Guidance by Combining Computation and Deduction},
   43.78 +  booktitle = {THedu'11: CTP-compontents for educational software},
   43.79 +  year = 	 {2012},
   43.80 +  editor = 	 {Quaresma, Pedro},
   43.81 +  publisher = {EPTCS},
   43.82 +  note = {To appear}
   43.83 +}
   43.84 +@Manual{Huet_all:94,
   43.85 +  author = 	 {Huet, G. and Kahn, G. and  Paulin-Mohring, C.},
   43.86 +  title = 	 {The Coq Proof Assistant},
   43.87 +  institution =  {INRIA-Rocquencourt},
   43.88 +  year = 	 {1994},
   43.89 +  type = 	 {Tutorial},
   43.90 +  number = 	 {Version 5.10},
   43.91 +  address = 	 {CNRS-ENS Lyon},
   43.92 +  status={},source={Theorema},location={-}
   43.93 +}
   43.94 +@TECHREPORT{Back-SD09,
   43.95 +  author = {Back, Ralph-Johan},
   43.96 +  title = {Structured Derivations as a Unified Proof Style for Teaching Mathematics},
   43.97 +  institution = {TUCS - Turku Centre for Computer Science},
   43.98 +  year = {2009},
   43.99 +  type = {TUCS Technical Report},
  43.100 +  number = {949},
  43.101 +  address = {Turku, Finland},
  43.102 +  month = {July}
  43.103 +}
  43.104 +@InProceedings{ActiveMath-MAIN11,
  43.105 +  author = 	 {Melis, Erica and Siekmann, Jrg},
  43.106 +  title = 	 {An Intelligent Tutoring System for Mathematics},
  43.107 +  booktitle = {Seventh International Conference Artificial Intelligence and Soft Computing (ICAISC)},
  43.108 +  pages = 	 {91-101},
  43.109 +  year = 	 {2004},
  43.110 +  editor = 	 {Rutkowski, L. and Siekmann, J. and Tadeusiewicz, R. and Zadeh, L.A.},
  43.111 +  number = 	 {3070,},
  43.112 +  series = 	 {LNAI},
  43.113 +  publisher = {Springer-Verlag},
  43.114 +  doi =          {doi:10.1007/978-3-540-24844-6\_12}}
  43.115 +@TechReport{mat-tutor-cmu-MAIN11,
  43.116 +  author = 	 {John R. Anderson},
  43.117 +  title = 	 {Intelligent Tutoring and High School Mathematics},
  43.118 +  institution =  {Carnegie Mellon University, Department of Psychology},
  43.119 +  year = 	 {2008},
  43.120 +  type = 	 {Technical Report},
  43.121 +  number = 	 {20},
  43.122 +  note = 	 {http://repository.cmu.edu/psychology/20}
  43.123 +}
  43.124 +@PhdThesis{proof-strategies-11,
  43.125 +  author = 	 {Dietrich, Dominik},
  43.126 +  title = 	 {Proof Planning with Compiled Strategies},
  43.127 +  school = 	 {FR 6.2 Informatik, Saarland University},
  43.128 +  year = 	 {2011}
  43.129 +}
  43.130 +@proceedings{DBLP:conf/mkm/2007,
  43.131 +  editor    = {Manuel Kauers and
  43.132 +               Manfred Kerber and
  43.133 +               Robert Miner and
  43.134 +               Wolfgang Windsteiger},
  43.135 +  title     = {Towards Mechanized Mathematical Assistants, 14th Symposium,
  43.136 +               Calculemus 2007, 6th International Conference, MKM 2007,
  43.137 +               Hagenberg, Austria, June 27-30, 2007, Proceedings},
  43.138 +  booktitle = {Calculemus/MKM},
  43.139 +  publisher = {Springer},
  43.140 +  series    = {Lecture Notes in Computer Science},
  43.141 +  volume    = {4573},
  43.142 +  year      = {2007},
  43.143 +  isbn      = {978-3-540-73083-5},
  43.144 +  bibsource = {DBLP, http://dblp.uni-trier.de}
  43.145 +}
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/doc-isac/jrocnik/sedindex	Tue Sep 17 09:50:52 2013 +0200
    44.3 @@ -0,0 +1,21 @@
    44.4 +#! /bin/sh
    44.5 +#
    44.6 +#sedindex - shell script to create indexes, preprocessing LaTeX's .idx file
    44.7 +#
    44.8 +#  puts strings prefixed by * into \tt font
    44.9 +#    terminator characters for strings are |!@{}
   44.10 +#
   44.11 +# a space terminates the \tt part to allow \index{*NE theorem}, etc.
   44.12 +#
   44.13 +# change *"X"Y"Z"W  to  "X"Y"Z"W@{\tt "X"Y"Z"W}
   44.14 +# change *"X"Y"Z    to  "X"Y"Z@{\tt "X"Y"Z}
   44.15 +# change *"X"Y      to  "X"Y@{\tt "X"Y}
   44.16 +# change *"X        to  "X@{\tt "X}
   44.17 +# change *IDENT  to  IDENT@{\tt IDENT}  
   44.18 +#    where IDENT is any string not containing | ! or @
   44.19 +# FOUR backslashes: to escape the shell AND sed
   44.20 +sed -e "s~\*\(\".\".\".\".\)~\1@{\\\\tt \1}~g
   44.21 +s~\*\(\".\".\".\)~\1@{\\\\tt \1}~g
   44.22 +s~\*\(\".\".\)~\1@{\\\\tt \1}~g
   44.23 +s~\*\(\".\)~\1@{\\\\tt \1}~g
   44.24 +s~\*\([^ |!@{}][^ |!@{}]*\)~\1@{\\\\tt \1}~g" $1.idx | makeindex -c -q -o $1.ind
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/doc-isac/jrocnik/wn-notes.txt	Tue Sep 17 09:50:52 2013 +0200
    45.3 @@ -0,0 +1,76 @@
    45.4 +WN110711
    45.5 +HOL/Multivariate_Analysis/
    45.6 +######################### _multi_variate ... nothing else found
    45.7 +
    45.8 +src$ grep -r "interior " *
    45.9 +==========================
   45.10 +HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy
   45.11 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   45.12 +definition "interior S = {x. \<exists>T. open T \<and> x \<in> T \<and> T \<subseteq> S}"
   45.13 +
   45.14 +grep -r "definition \"interval" *
   45.15 +=================================
   45.16 +HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy
   45.17 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   45.18 +definition "interval_bij = (\<lambda> (a::'a,b::'a) (u::'a,v::'a) (x::'a::ordered_euclidean_space).
   45.19 +    (\<chi>\<chi> i. u$$i + (x$$i - a$$i) / (b$$i - a$$i) * (v$$i - u$$i))::'a)"
   45.20 +
   45.21 +
   45.22 +??? "{a<..<b} \<subseteq> {c..d} \<union> s" ?definition interval?
   45.23 +
   45.24 +src$ grep -r ".nti.eriv" *
   45.25 +=========================
   45.26 +1 file except isac:
   45.27 +# HOL/Multivariate_Analysis/Derivative.thy
   45.28 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   45.29 +header {* Kurzweil-Henstock Gauge Integration in many dimensions. *}
   45.30 +definition differentiable :: "('a::real_normed_vector \<Rightarrow> 'b::real_normed_vector) \<Rightarrow> 'a net \<Rightarrow> bool" (infixr "differentiable" 30) where
   45.31 +  "f differentiable net \<equiv> (\<exists>f'. (f has_derivative f') net)"
   45.32 +
   45.33 +definition differentiable_on :: "('a::real_normed_vector \<Rightarrow> 'b::real_normed_vector) \<Rightarrow> 'a set \<Rightarrow> bool" (infixr "differentiable'_on" 30) where
   45.34 +  "f differentiable_on s \<equiv> (\<forall>x\<in>s. f differentiable (at x within s))"
   45.35 +
   45.36 +definition "frechet_derivative f net = (SOME f'. (f has_derivative f') net)"
   45.37 +
   45.38 +/
   45.39 +=========================
   45.40 +HOL/Multivariate_Analysis/Integration.thy
   45.41 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   45.42 +header {* Kurzweil-Henstock Gauge Integration in many dimensions. *}
   45.43 +definition "integral i f \<equiv> SOME y. (f has_integral y) i"
   45.44 +
   45.45 +/
   45.46 +=========================
   45.47 +HOL/Multivariate_Analysis/Real_Integration.thy
   45.48 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   45.49 +text{*We follow John Harrison in formalizing the Gauge integral.*}
   45.50 +
   45.51 +definition Integral :: "real set \<Rightarrow> (real \<Rightarrow> real) \<Rightarrow> real \<Rightarrow> bool" where
   45.52 +  "Integral s f k = (f o dest_vec1 has_integral k) (vec1 ` s)"
   45.53 +
   45.54 +Multivariate_Analysis/L2_Norm.thy:header {* Square root of sum of squares *}
   45.55 +
   45.56 +
   45.57 +################################################################################
   45.58 +### sum
   45.59 +################################################################################
   45.60 +src/HOL$ grep -r " sum " *
   45.61 +==========================
   45.62 +ex/Summation.thy:text {* The formal sum operator. *}
   45.63 +ex/Termination.thy:function sum :: "nat \<Rightarrow> nat \<Rightarrow> nat"
   45.64 +ex/Termination.thy:  "sum i N = (if i > N then 0 else i + sum (Suc i) N)"
   45.65 +Isar_Examples/Summation.thy
   45.66 +~~~~~~~~~~~~~~~~~~~~~~~~~~~
   45.67 +text {* The sum of natural numbers $0 + \cdots + n$ equals $n \times
   45.68 +
   45.69 +Series.thy
   45.70 +~~~~~~~~~~
   45.71 +header{*Finite Summation and Infinite Series*}
   45.72 +
   45.73 +Deriv.thy
   45.74 +~~~~~~~~~
   45.75 +definition
   45.76 +  deriv :: "['a::real_normed_field \<Rightarrow> 'a, 'a, 'a] \<Rightarrow> bool"
   45.77 +    --{*Differentiation: D is derivative of function f at x*}
   45.78 +          ("(DERIV (_)/ (_)/ :> (_))" [1000, 1000, 60] 60) where
   45.79 +  "DERIV f x :> D = ((%h. (f(x + h) - f x) / h) -- 0 --> D)"
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/doc-isac/mat-eng-de.lot	Tue Sep 17 09:50:52 2013 +0200
    46.3 @@ -0,0 +1,12 @@
    46.4 +\addvspace {10\p@ }
    46.5 +\addvspace {10\p@ }
    46.6 +\addvspace {10\p@ }
    46.7 +\addvspace {10\p@ }
    46.8 +\addvspace {10\p@ }
    46.9 +\addvspace {10\p@ }
   46.10 +\addvspace {10\p@ }
   46.11 +\addvspace {10\p@ }
   46.12 +\contentsline {table}{\numberline {8.1}{\ignorespaces Kleinste Teilchen des KB}}{37}
   46.13 +\contentsline {table}{\numberline {8.2}{\ignorespaces Welche tactics verwenden die Teile des KB\nobreakspace {}?}}{38}
   46.14 +\contentsline {table}{\numberline {8.3}{\ignorespaces theory von der ersten Version von ${\cal I}\mkern -2mu{\cal S}\mkern -5mu{\cal AC}$}}{39}
   46.15 +\contentsline {table}{\numberline {8.4}{\ignorespaces Daten in {\tt *.thy}- und {\tt *.ML}-files}}{40}
    47.1 Binary file doc-isac/mat-eng-de.pdf has changed
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/doc-isac/mat-eng-de.tex	Tue Sep 17 09:50:52 2013 +0200
    48.3 @@ -0,0 +1,1354 @@
    48.4 +\documentclass[11pt,a4paper,headline,headcount,towside,nocenter]{report}
    48.5 +\usepackage{latexsym} 
    48.6 +
    48.7 +%\usepackage{ngerman}
    48.8 +%\grmn@dq@error ...and \dq \string #1 is undefined}
    48.9 +%l.989 ...tch the problem type \\{\tt["squareroot",
   48.10 +%                                                  "univ
   48.11 +\bibliographystyle{alpha}
   48.12 +
   48.13 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   48.14 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   48.15 +
   48.16 +\title{\isac \\
   48.17 +  Experimente zur Computermathematik\\[1.0ex]
   48.18 +  und\\[1.0ex]
   48.19 +  Handbuch f\"ur Autoren der\\
   48.20 +  Mathematik-Wissensbasis\\[1.0ex]}
   48.21 +\author{Alexandra Hirn und Eva Rott\\
   48.22 +  \tt isac-users@ist.tugraz.at\\[1.0ex]}
   48.23 +\date{\today}
   48.24 +
   48.25 +\begin{document}
   48.26 +\maketitle
   48.27 +\newpage
   48.28 +\tableofcontents
   48.29 +\newpage
   48.30 +\listoftables
   48.31 +\newpage
   48.32 +
   48.33 +\chapter{Einleitung}
   48.34 +Dies ist die \"Ubersetzung der dersten Kapitel einer englischen Version \footnote{http://www.ist.tugraz.at/projects/isac/publ/mat-eng.pdf}, auf den Stand von \sisac{} 2008 gebracht. Die \"Ubersetzung und Anpassung erfolgte durch die Autorinnen im Rahmen einer Ferialpraxis am Institut f\"ur Softwaretechnologie der TU Graz.
   48.35 +
   48.36 +Diese Version zeichnet sich dadurch aus, dass sie von ``Nicht-Computer-Freaks''  f\"ur ``Nicht-Computer-Freaks'' geschrieben wurde.
   48.37 +
   48.38 +\section{``Authoring'' und ``Tutoring''}
   48.39 +\paragraph{TO DO} Mathematik lernen -- verschiedene Autoren -- Isabelle
   48.40 +Die Grundlage f\"ur \isac{} bildet Isabelle. Dies ist ein ``theorem prover'', der von L. Paulson und T. Nipkow entwickelt wird und Hard- und Software pr\"uft.
   48.41 +\section{Der Inhalt des Dokuments}
   48.42 +\paragraph{TO DO} {Als Anleitung:} Dieses Dokument beschreibt das Kerngebiet (KE) von \isac{}, das Gebiet der mathematics engine (ME) im Kerngebiet und die verschiedenen Funktionen wie das Umschreiben und der Vergleich.
   48.43 +
   48.44 +\isac{} und KE wurden in SML geschrieben, die Sprache in Verbindung mit dem Vorg\"anger des theorem Provers Isabelle entwickelt. So kam es, dass in diesem Dokument die Ebene ASCII als SML Code pr\"asentiert wird. Der Leser wird vermutlich erkennen, dass der \isac{} Benutzer eine vollkommen andere Sichtweise auf eine grafische Benutzeroberfl\"ache bekommt.
   48.45 +
   48.46 +Das Dokument ist eigenst\"andig; Basiswissen \"uber SML (f\"ur eine Einf\"uhrung siehe \cite{Paulson:91}), Terme und Umschreibung wird vorrausgesetzt.
   48.47 +
   48.48 +%The interfaces will be moderately exended during the first phase of development of the mathematics knowledge. The work on the subprojects defined should {\em not} create interfaces of any interest to a user or another author of knowledge except identifiers (of type string) for theorems, rulesets etc.
   48.49 +
   48.50 +Hinweis: SML Code, Verzeichnis, Dateien sind {\tt in 'tt' geschrieben}; besonders in {\tt ML>} ist das Kerngebiet schnell.
   48.51 +
   48.52 +\paragraph{Versuchen Sie es!}  Ein weiteres Anliegen dieses Textes ist, dem Leser Tipps f\"ur Versuche mit den Anwendungen zu geben.
   48.53 +
   48.54 +\section{Gleich am Computer ausprobieren!}\label{get-started}
   48.55 +\paragraph{TO DO screenshot} Bevor Sie mit Ihren Versuchen beginnen, m\"ochten wir Ihnen noch einige Hinweise geben:
   48.56 +\begin{itemize}
   48.57 + \item System starten
   48.58 + \item Shell aufmachen und die Datei mat-eng-de.sml \"offnen.
   48.59 + \item $>$  :  Hinter diesem Zeichen (``Prompt'') stehen jene, die Sie selbst eingeben bzw. mit Copy und Paste aus der Datei kopieren.
   48.60 + \item Die Eingabe wird mit ``;'' und ``Enter'' abgeschlossen.
   48.61 + \item Zeilen, die nicht mit Prompt beginnen, werden vom Computer ausgegeben.
   48.62 + 
   48.63 +\end{itemize}
   48.64 +
   48.65 +\part{Experimentelle Ann\"aherung}
   48.66 +
   48.67 +\chapter{Terme und Theorien}
   48.68 +Wie bereits erw\"ahnt, geht es um Computer-Mathematik. In den letzten Jahren hat die ``computer science'' grosse Fortschritte darin gemacht, Mathematik auf dem Computer verst\"andlich darzustellen. Dies gilt f\"ur mathematische Formeln, f\"ur die Beschreibung von Problemen, f\"ur L\"osungsmethoden etc. Wir beginnen mit mathematischen Formeln.
   48.69 +
   48.70 +\section{Von der Formel zum Term}
   48.71 +Um ein Beispiel zu nennen: Die Formel $a+b\cdot 3$ l\"asst sich in lesbarer Form so eingeben:
   48.72 +{\footnotesize\begin{verbatim}
   48.73 +   > "a + b * 3";
   48.74 +      val it = "a + b * 3" : string
   48.75 +\end{verbatim}}
   48.76 +\noindent ``a + b * 3'' ist also ein string (eine Zeichenfolge). In dieser Form weiss der Computer nicht, dass z.B. eine Multiplikation {\em vor} einer Addition zu rechnen ist. Isabelle braucht dazu eine andere Darstellung f\"ur Formeln. In diese kann man mit der Funktion {\tt str2term} (string to term) umrechnen:
   48.77 +{\footnotesize\begin{verbatim}
   48.78 +   > str2term "a + b * 3";
   48.79 +      val it =
   48.80 +         Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
   48.81 +               Free ("a", "RealDef.real") $
   48.82 +            (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
   48.83 +               ...) : Term.term
   48.84 +\end{verbatim}}
   48.85 +\noindent Diese Form heisst {\tt term} und ist nicht f\"ur den Menschen zum lesen gedacht. Isabelle braucht sie aber intern zum Rechnen. Wir wollen sie mit Hilfe von {\tt val} (value) auf der Variable {\tt t} speichern:
   48.86 +{\footnotesize\begin{verbatim}
   48.87 +   > val t = str2term "a + b * 3";
   48.88 +      val t =  
   48.89 +         Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
   48.90 +               Free ("a", "RealDef.real") $
   48.91 +            (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
   48.92 +               ...) : Term.term
   48.93 +\end{verbatim}}
   48.94 +Von dieser Variablen {\tt t} kann man den Wert jederzeit abrufen:
   48.95 +{\footnotesize\begin{verbatim}
   48.96 +   > t;
   48.97 +      val it =
   48.98 +         Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
   48.99 +               Free ("a", "RealDef.real") $
  48.100 +            (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
  48.101 +               ...) : Term.term
  48.102 +\end{verbatim}}
  48.103 +Der auf {\tt t} gespeicherte Term kann einer Funktion {\tt atomty} \"ubergeben werden, die diesen in einer dritten Form zeigt:
  48.104 +{\footnotesize\begin{verbatim}
  48.105 +   > atomty term;
  48.106 + 
  48.107 +   ***
  48.108 +   *** Const (op +, [real, real] => real)
  48.109 +   *** . Free (a, real)
  48.110 +   *** . Const (op *, [real, real] => real)
  48.111 +   *** . . Free (b, real)
  48.112 +   *** . . Free (3, real)
  48.113 +   ***
  48.114 + 
  48.115 +   val it = () : unit
  48.116 +\end{verbatim}}
  48.117 +Diese Darstellung nennt man ``abstract syntax'' und macht unmittelbar klar, dass man a und b nicht addieren kann, weil ein Mal vorhanden ist.
  48.118 +\newline Es gibt noch eine vierte Art von Term, den cterm. Er wird weiter unten verwendet, weil er sich als string lesbar darstellt.
  48.119 +
  48.120 +\section{``Theory'' und ``Parsing``}
  48.121 +Der Unterschied zwischen \isac{} und bisheriger Mathematiksoftware (GeoGebra, Mathematica, Maple, Derive etc.) ist, dass das mathematische Wissen nicht im Programmcode steht, sondern in sogenannten theories (Theorien).
  48.122 +Dort wird das Mathematikwissen in einer f\"ur nicht Programmierer lesbaren Form geschrieben. Das Wissen von \isac{} ist in folgenden Theorien entahlten:
  48.123 +{\footnotesize\begin{verbatim}
  48.124 +   > Isac.thy;
  48.125 +      val it =
  48.126 +         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
  48.127 +         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
  48.128 +         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
  48.129 +         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
  48.130 +         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
  48.131 +         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
  48.132 +         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
  48.133 +         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
  48.134 +         Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
  48.135 +         Float, ComplexI, Descript, Atools, Simplify, Poly, Rational, PolyMinus,
  48.136 +         Equation, LinEq, Root, RootEq, RatEq, RootRat, RootRatEq, PolyEq, Vect,
  48.137 +         Calculus, Trig, LogExp, Diff, DiffApp, Integrate, EqSystem, Biegelinie,
  48.138 +         AlgEin, Test, Isac} : Theory.theory
  48.139 +\end{verbatim}}
  48.140 +{\tt ProtoPure} und {\tt CPure} enthalten diese logischen Grundlagen, die in {\tt HOL} und den nachfolgenden Theorien erweitert werden. \isac{} als letzte Theorie beinhaltet das gesamte Wissen.
  48.141 +Dass das Mal vor dem Plus berechnet wird, ist so festgelegt:
  48.142 +{\footnotesize\begin{verbatim}
  48.143 +   class plus =
  48.144 +   fixes plus :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" (infixl "+" 65)
  48.145 +
  48.146 +   class minus =
  48.147 +   fixes minus :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" (infixl "-" 65)
  48.148 +
  48.149 +   class uminus =
  48.150 +   fixes uminus :: "'a \<Rightarrow> 'a" ("- _" [81] 80)
  48.151 +
  48.152 +   class times =
  48.153 +   fixes times :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" (infixl "*" 70) 
  48.154 +\end{verbatim}}
  48.155 +{\tt infix} gibt an, dass der Operator zwischen den Zahlen steht und nicht, wie in ''abstract syntax``, vorne oben.
  48.156 +Die Zahlen rechts davon legen die Priorit\"at fest. 70 f\"ur Mal ist gr\"osser als 65 f\"ur Plus und wird daher zuerst berechnet.
  48.157 +
  48.158 +Wollen Sie wissen, wie die einzelnen Rechengesetze aussehen, k\"onnen Sie im Internet folgenden Link ansehen: http://isabelle.in.tum.de/dist/library/HOL/Groups.html
  48.159 +
  48.160 +\paragraph{} Der Vorgang, bei dem aus einem {\tt string} ein Term entsteht, nennt man Parsing. Dazu wird Wissen aus der Theorie ben\"otigt, denn {\tt str2term} nimmt intern eine parse-Funktion, bei der immer das gesamte \isac{}-Wissen verwendet wird. Bei dieser Funktion wird weiters festgelegt, aus welcher Theorie das Wissen genommen werden soll.
  48.161 +{\footnotesize\begin{verbatim}
  48.162 +   > parse Isac.thy "a + b";
  48.163 +      val it = Some "a + b" : Thm.cterm Library.option
  48.164 +\end{verbatim}}
  48.165 +Um sich das Weiterrechnen zu erleichtern, kann das Ergebnis vom Parsing auf eine Variable, wie zum Beispiel {\tt t} gespeichert werden:
  48.166 +{\footnotesize\begin{verbatim}
  48.167 +   > val t = parse Isac.thy "a + b";
  48.168 +      val t = Some "a + b" : Thm.cterm Library.option
  48.169 +\end{verbatim}}
  48.170 +{\tt Some} bedeutet, dass das n\"otige Wissen vorhanden ist, um die Rechnung durchzuf\"uhren. {\tt None} zeigt uns, dass das Wissen fehlt oder ein Fehler aufgetreten ist. Daher sieht man im folgenden Beispiel, dass {\tt HOL.thy} nicht ausreichend Wissen enth\"alt:
  48.171 +{\footnotesize\begin{verbatim}
  48.172 +   > parse HOL.thy "a + b";
  48.173 +      val it = None : Thm.cterm Library.option
  48.174 +\end{verbatim}}
  48.175 +Anschliessend zeigen wir Ihnen noch ein zweites Beispiel, bei dem sowohl ein Fehler aufgetreten ist, als auch das Wissen fehlt:
  48.176 +{\footnotesize\begin{verbatim}
  48.177 +   > parse Isac.thy "a + ";
  48.178 +      *** Inner syntax error: unexpected end of input
  48.179 +      *** Expected tokens: "contains_root" "is_root_free" "q_" "M_b" "M_b'"
  48.180 +      *** "Integral" "differentiate" "E_" "some_of" "||" "|||" "argument_in"
  48.181 +      *** "filter_sameFunId" "I__" "letpar" "Rewrite_Inst" "Rewrite_Set"
  48.182 +      *** "Rewrite_Set_Inst" "Check_elementwise" "Or_to_List" "While" "Script"
  48.183 +      *** "\\" "\\" "\\" "CHR" "xstr" "SOME" "\\" "@"
  48.184 +      *** "GREATEST" "[" "[]" "num" "\\" "{)" "{.." "\\" "(|"
  48.185 +      *** "\\" "SIGMA" "()" "\\" "PI" "\\" "\\" "{" "INT"
  48.186 +      *** "UN" "{}" "LEAST" "\\" "0" "1" "-" "!" "?" "?!" "\\"
  48.187 +      *** "\\" "\\" "\\!" "THE" "let" "case" "~" "if" "ALL"
  48.188 +      *** "EX" "EX!" "!!" "_" "\\" "\\" "PROP" "[|" "OFCLASS"
  48.189 +      *** "\\" "op" "\\" "%" "TYPE" "id" "longid" "var" "..."
  48.190 +      *** "\\" "("
  48.191 +      val it = None : Thm.cterm Library.option
  48.192 +\end{verbatim}}
  48.193 +
  48.194 +Das mathematische Wissen w\"achst mit jeder Theorie von ProtoPure bis Isac. In den folgenden Beispielen wird gezeigt, wie das Wissen w\"achst.
  48.195 +
  48.196 +{\footnotesize\begin{verbatim}
  48.197 +   > (*-1-*);
  48.198 +   > parse HOL.thy "2^^^3";
  48.199 +      *** Inner lexical error at: "^^^3"
  48.200 +      val it = None : Thm.cterm Library.option         
  48.201 +\end{verbatim}}
  48.202 +''Inner lexical error`` und ''None`` bedeuten, dass ein Fehler aufgetreten ist, denn das Wissen \"uber {\tt *} findet sich erst in der {\tt theorie group}.
  48.203 +
  48.204 +{\footnotesize\begin{verbatim}
  48.205 +   > (*-2-*);
  48.206 +   > parse HOL.thy "d_d x (a + x)";
  48.207 +      val it = None : Thm.cterm Library.option               
  48.208 +\end{verbatim}}
  48.209 +Hier wiederum ist noch kein Wissen \"uber das Differenzieren vorhanden.
  48.210 +
  48.211 +{\footnotesize\begin{verbatim}
  48.212 +   > (*-3-*);
  48.213 +   > parse Rational.thy "2^^^3";
  48.214 +      val it = Some "2 ^^^ 3" : Thm.cterm Library.option               
  48.215 +\end{verbatim}}
  48.216 +
  48.217 +{\footnotesize\begin{verbatim}
  48.218 +   > (*-4-*);
  48.219 +   > val Some t4 = parse Rational.thy "d_d x (a + x)";
  48.220 +      val t4 = "d_d x (a + x)" : Thm.cterm              
  48.221 +\end{verbatim}}
  48.222 +
  48.223 +{\footnotesize\begin{verbatim}
  48.224 +   > (*-5-*);
  48.225 +   > val Some t5 = parse Diff.thy  "d_d x (a + x)";
  48.226 +      val t5 = "d_d x (a + x)" : Thm.cterm             
  48.227 +\end{verbatim}}
  48.228 +Die letzen drei Aufgaben k\"onnen schon gel\"ost werden, da {\tt Rational.thy} \"uber das n\"otige Wissen verf\"ugt.
  48.229 +
  48.230 +\section{Details von Termen}
  48.231 +Mit Hilfe der darunterliegenden Darstellung sieht man, dass ein cterm in einen Term umgewandelt werden kann.
  48.232 +{\footnotesize\begin{verbatim}
  48.233 +   > term_of;
  48.234 +      val it = fn : Thm.cterm -> Term.term
  48.235 +\end{verbatim}}
  48.236 +Durch die Umwandlung eines cterms in einen Term sieht man die einzelnen Teile des Terms. ''Free`` bedeutet, dass man die Variable \"andern kann.
  48.237 +{\footnotesize\begin{verbatim}
  48.238 +   > term_of t4;
  48.239 +      val it =
  48.240 +         Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
  48.241 +         ...: Term.term
  48.242 +
  48.243 +\end{verbatim}}
  48.244 +In diesem Fall sagt uns das ''Const``, dass die Variable eine Konstante ist, also ein Fixwert, der immer die selbe Funktion hat.
  48.245 +{\footnotesize\begin{verbatim}
  48.246 +   > term_of t5;
  48.247 +      val it =
  48.248 +         Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
  48.249 +         ... : Term.term
  48.250 +\end{verbatim}}
  48.251 +Sollten verschiedene Teile des ''output`` (= das vom Computer Ausgegebene) nicht sichtbar sein, kann man mit einem bestimmten Befehl alles angezeigt werden.
  48.252 +{\footnotesize\begin{verbatim}
  48.253 +   > print_depth;
  48.254 +      val it = fn : int -> unit
  48.255 + \end{verbatim}}
  48.256 +Zuerst gibt man den Befehl ein, danach den Term, der gr\"osser werden soll. Dabei kann man selbst einen Wert f\"ur die L\"ange bestimmen.
  48.257 +{\footnotesize\begin{verbatim}
  48.258 +   > print_depth 10;
  48.259 +      val it = () : unit
  48.260 +   > term_of t4;
  48.261 +         val it =
  48.262 +            Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
  48.263 +                Free ("x", "RealDef.real") $
  48.264 +            (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
  48.265 +                Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
  48.266 +         : Term.term
  48.267 +
  48.268 +   > print_depth 10;
  48.269 +         val it = () : unit
  48.270 +   > term_of t5;
  48.271 +         val it =
  48.272 +            Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
  48.273 +                Free ("x", "RealDef.real") $
  48.274 +            (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
  48.275 +                Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
  48.276 +         : Term.term
  48.277 +\end{verbatim}}
  48.278 +\paragraph{Versuchen Sie es!}
  48.279 +Eine andere Variante um den Unterschied der beiden Terme zu sehen ist folgende: 
  48.280 +{\footnotesize\begin{verbatim}
  48.281 +   > (*-4-*) val thy = Rational.thy;
  48.282 +      val thy =
  48.283 +         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
  48.284 +         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
  48.285 +         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
  48.286 +         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
  48.287 +         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
  48.288 +         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
  48.289 +         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
  48.290 +         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
  48.291 +         Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
  48.292 +         Float, ComplexI, Descript, Atools, Simplify, Poly, Rational}
  48.293 +     : Theory.theory
  48.294 +   > ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
  48.295 + 
  48.296 +      ***
  48.297 +      *** Free (d_d, [real, real] => real)
  48.298 +      *** . Free (x, real)
  48.299 +      *** . Const (op +, [real, real] => real)
  48.300 +      *** . . Free (a, real)
  48.301 +      *** . . Free (x, real)
  48.302 +      ***
  48.303 + 
  48.304 +      val it = () : unit
  48.305 +
  48.306 +
  48.307 +   > (*-5-*) val thy = Diff.thy;
  48.308 +      val thy =
  48.309 +         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
  48.310 +         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
  48.311 +         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
  48.312 +         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
  48.313 +         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
  48.314 +         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
  48.315 +         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
  48.316 +         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
  48.317 +         Ring_and_Field, Complex_Numbers, Real, Calculus, Trig, ListG, Tools,
  48.318 +         Script, Typefix, Float, ComplexI, Descript, Atools, Simplify, Poly,
  48.319 +         Equation, LinEq, Root, RootEq, Rational, RatEq, RootRat, RootRatEq,
  48.320 +         PolyEq, LogExp, Diff} : Theory.theory
  48.321 + 
  48.322 +   > ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
  48.323 + 
  48.324 +      ***
  48.325 +      *** Const (Diff.d_d, [real, real] => real)
  48.326 +      *** . Free (x, real)
  48.327 +      *** . Const (op +, [real, real] => real)
  48.328 +      *** . . Free (a, real)
  48.329 +      *** . . Free (x, real)
  48.330 +      ***
  48.331 + 
  48.332 +      val it = () : unit
  48.333 +\end{verbatim}}
  48.334 +
  48.335 +
  48.336 +\chapter{''Rewriting``}
  48.337 +\section{Was ist Rewriting?}
  48.338 +Bei Rewriting handelt es sich um das Umformen von Termen nach vorgegebenen Regeln. Folgende zwei Funktionen sind notwendig:
  48.339 +{\footnotesize\begin{verbatim}
  48.340 +   > rewrite;
  48.341 +      val it = fn
  48.342 +      :
  48.343 +      theory' ->
  48.344 +      rew_ord' ->
  48.345 +      rls' -> bool -> thm' -> cterm' -> (string * string list) Library.option
  48.346 +\end{verbatim}}
  48.347 +Die Funktion hat zwei Argumente, die mitgeschickt werden m\"ussen, damit die Funktion arbeiten kann. Das letzte Element {\tt (cterm' * cterm' list) Library.option} im unteren Term ist das Ergebnis, das die Funktionen {\tt rewrite} zur\"uckgeben und die zwei vorhergehenden Argumente, {\tt theorem} und {\tt cterm}, sind die f\"ur uns wichtigen. {\tt Theorem} ist die Rechenregel und {\tt cterm} jene Formel auf die die Rechenregel angewendet wird.
  48.348 +{\footnotesize\begin{verbatim}
  48.349 +   > rewrite_inst;
  48.350 +      val it = fn
  48.351 +      :
  48.352 +      theory' ->
  48.353 +      rew_ord' ->
  48.354 +      rls' ->bool -> 'a -> thm' -> cterm' -> (cterm' * cterm' list) Library.option
  48.355 +\end{verbatim}}
  48.356 +Die Funktion {\tt rewrite\_inst} wird ben\"otigt, um Gleichungen, Rechnungen zum Differenzieren etc. zu l\"osen. Dabei wird die gebundene Variable (bdv) instanziiert, d.h. es wird die Variable angegeben, nach der man differenzieren will, bzw. f\"ur die ein Wert bei einer Gleichung herauskommen soll.
  48.357 +Um zu sehen wie der Computer vorgeht nehmen wir folgendes Beispiel, dessen Ergebnis offenbar 0 ist, was der Computer jedoch erst nach einer Reihe von Schritten herausfindet.
  48.358 +Im Beispiel wird differenziert, wobei \isac's Schreibweise jene von Computer Algebra Systemen (CAS) anzugleichen: in CAS wird differenziert mit $\frac{d}{dx}\; x^2 + 3 \cdot x + 4$, in \isac{} mit {\tt d\_d x (x \^{ }\^{ }\^{ } 2 + 3 * x + 4)}.
  48.359 +Zuerst werden die einzelnen Werte als Variablen gespeichert:
  48.360 +{\footnotesize\begin{verbatim}
  48.361 +   > val thy' = "Diff.thy";
  48.362 +      val thy' = "Diff.thy" : string
  48.363 +   > val ro = "tless_true";
  48.364 +      val ro = "tless_true" : string
  48.365 +   > val er = "eval_rls";
  48.366 +      val er = "eval_rls" : string
  48.367 +   > val inst = [("bdv","x::real")];
  48.368 +      val inst = [("bdv", "x::real")] : (string * string) list
  48.369 +   > val ct = "d_d x (a + a * (2 + b))";
  48.370 +      val ct = "d_d x (a + a * (2 + b))" : string
  48.371 +\end{verbatim}}
  48.372 +Nun wird die Rechnung nach den Regeln ausgerechnet, wobei am Ende mehrere Dinge zugleich gemacht werden.
  48.373 +Folgende Regeln werden ben\"otigt: Summenregel, Produktregel, Multiplikationsregel mit einem konstanten Faktor und zum Schluss die Additionsregel.
  48.374 +{\footnotesize\begin{verbatim}
  48.375 +   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_sum","") ct;
  48.376 +      val ct = "d_d x a + d_d x (a * (2 + b))" : cterm'
  48.377 +   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_prod","") ct;
  48.378 +      val ct = "d_d x a + (d_d x a * (2 + b) + a * d_d x (2 + b))" : cterm'
  48.379 +   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_const","") ct;
  48.380 +      val ct = "d_d x a + (d_d x a * (2 + b) + a * 0) " : cterm'
  48.381 +   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_const","") ct;
  48.382 +      val ct = "d_d x a + (0 * (2 + b) + a * 0)" : cterm'
  48.383 +   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_const","") ct;
  48.384 +      val ct = "0 + (0 * (2 + b) + a * 0)" : cterm'
  48.385 +   > val Some (ct,_) = rewrite_set thy' true "make_polynomial" ct;
  48.386 +      val ct = "0" : string
  48.387 +\end{verbatim}}
  48.388 +Was {\tt rewrite\_set} genau macht, finden Sie im n\"achsten Kapitel.
  48.389 +
  48.390 +Dies w\"are ein etwas ernsthafteres Beispiel zum Differenzieren:
  48.391 +{\footnotesize\begin{verbatim}
  48.392 +   > val ct = "d_d x (x ^^^ 2 + 3 * x + 4)";
  48.393 +   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_sum","") ct;
  48.394 +\end{verbatim}}
  48.395 +\paragraph{Versuchen Sie es,} diese Beispiel zu Ende zu f\"uhren! Die Regeln, die \isac{} kennt und zum Umformen verwenden kann, finden Sie im Internet \footnote{{\tiny\tt http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Diff.html}}.
  48.396 +
  48.397 +\section{Welche W\"unsche kann man an Rewriting stellen?}
  48.398 +Es gibt verschiedene Varianten von Rewriting, die alle eine bestimmte Bedeutung haben.
  48.399 +{\tt rewrite\_ set} wandelt Terme in ein ganzes rule set um, die normalerweise nur mit einem Theorem vereinfacht dargestellt werden.
  48.400 +Hierbei werden auch folgende Argumente verwendet:\\
  48.401 +\tabcolsep=4mm
  48.402 +\def\arraystretch{1.5}
  48.403 +\begin{tabular}{lp{11.0cm}}
  48.404 +{\tt theory} & Die Theory von Isabelle, die alle n\"otigen Informationen f\"ur das Parsing {\tt term} enth\"alt. \\
  48.405 +{\tt rew\_ord}& die Ordnung f\"ur das geordnete Rewriting. F\"ur {\em no} ben\"otigt das geordnete Rewriting {\tt tless\_true}, eine Ordnung, die f\"ur alle nachgiebigen Argumente true ist \\
  48.406 +{\tt rls} & Das rule set; zur Auswertung von bestimmten Bedingungen in {\tt thm} falls {\tt thm} eine conditional rule ist \\
  48.407 +{\tt bool} & ein Bitschalter, der die Berechnungen der m\"oglichen condition in {\tt thm} ausl\"ost: wenn sie {\tt false} ist, dann wird die condition bewertet und auf Grund des Resultats wendet man {\tt thm} an, oder nicht; wenn {\tt true} dann wird die condition nicht ausgewertet, aber man gibt sie in eine Menge von Hypothesen \\
  48.408 +{\tt thm} & das theorem versucht den {\tt term} zu \"uberschreiben \\
  48.409 +{\tt term} & {\tt thm} wendet Rewriting m\"oglicherweise auf den Term an \\
  48.410 +\end{tabular}\\
  48.411 +
  48.412 +{\footnotesize\begin{verbatim}
  48.413 +   > rewrite_set;
  48.414 +      val it = fn : theory' -> bool -> rls' -> ...
  48.415 +\end{verbatim}}
  48.416 +{\footnotesize\begin{verbatim}
  48.417 +   > rewrite_set_inst;
  48.418 +      val it = fn : theory' -> bool -> subs' -> .
  48.419 +\end{verbatim}}
  48.420 +Wenn man sehen m\"ochte wie Rewriting bei den einzelnen theorems funktioniert kann man dies mit {\tt trace\_rewrite} versuchen.
  48.421 +{\footnotesize\begin{verbatim}
  48.422 +   > trace_rewrite := true;
  48.423 +      val it = () : unit
  48.424 +\end{verbatim}}
  48.425 +
  48.426 +
  48.427 +\section{Rule sets}
  48.428 +Einige der oben genannten Varianten von Rewriting beziehen sich nicht nur auf einen theorem, sondern auf einen ganzen Block von theorems, die man als rule set bezeichnet.
  48.429 +Dieser wird so lange angewendet, bis ein Element davon f\"ur Rewriting verwendet werden kann. Sollte der Begriff ''terminate`` fehlen, wird das Rule set nicht beendet und l\"auft weiter.
  48.430 +Ein Beispiel f\"ur einen rule set ist folgendes:
  48.431 +{\footnotesize\begin{verbatim}
  48.432 +???????????
  48.433 +\end{verbatim}}
  48.434 +
  48.435 +{\footnotesize\begin{verbatim}
  48.436 +   > sym;
  48.437 +      val it = "?s = ?t ==> ?t = ?s" : Thm.thm
  48.438 +   > rearrange_assoc;
  48.439 +      val it =
  48.440 +         Rls
  48.441 +            {id = "rearrange_assoc",
  48.442 +               scr = Script (Free ("empty_script", "RealDef.real")),
  48.443 +               calc = [],
  48.444 +               erls =
  48.445 +               Rls
  48.446 +                  {id = "e_rls",
  48.447 +                     scr = EmptyScr,
  48.448 +                     calc = [],
  48.449 +                     erls = Erls,
  48.450 +                     srls = Erls,
  48.451 +                     rules = [],
  48.452 +                     rew_ord = ("dummy_ord", fn),
  48.453 +                     preconds = []},
  48.454 +               srls =
  48.455 +               Rls
  48.456 +                  {id = "e_rls",
  48.457 +                     scr = EmptyScr,
  48.458 +                     calc = [],
  48.459 +                     erls = Erls,
  48.460 +                     srls = Erls,
  48.461 +                     rules = [],
  48.462 +                     rew_ord = ("dummy_ord", fn),
  48.463 +                     preconds = []},
  48.464 +               rules =
  48.465 +               [Thm ("sym_radd_assoc", "?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1"  [.]),
  48.466 +                  Thm
  48.467 +                     ("sym_rmult_assoc",
  48.468 +                        "?m1 * (?n1 * ?k1) = ?m1 * ?n1 * ?k1"  [.])],
  48.469 +               rew_ord = ("e_rew_ord", fn),
  48.470 +               preconds = []} : rls
  48.471 +\end{verbatim}}
  48.472 +
  48.473 +
  48.474 +\section{Berechnung von Konstanten}
  48.475 +Sobald Konstanten in dem Bereich des Subterms sind, k\"onnen sie von einer Funktion berechnet werden:
  48.476 +{\footnotesize\begin{verbatim}
  48.477 +   > calculate;
  48.478 +      val it = fn
  48.479 +      :
  48.480 +         theory' ->
  48.481 +         string *
  48.482 +         (
  48.483 +         string ->
  48.484 +         Term.term -> Theory.theory -> (string * Term.term) Library.option) ->
  48.485 +         cterm' -> (string * thm') Library.option
  48.486 +
  48.487 +   > calculate_;
  48.488 +      val it = fn
  48.489 +      :
  48.490 +         Theory.theory ->
  48.491 +         string *
  48.492 +         (
  48.493 +         string ->
  48.494 +         Term.term -> Theory.theory -> (string * Term.term) Library.option) ->
  48.495 +         Term.term -> (Term.term * (string * Thm.thm)) Library.option
  48.496 +\end{verbatim}}
  48.497 +Man bekommt das Ergebnis und das theorem bezieht sich darauf. Daher sind die folgenden mathematischen Rechnungen m\"oglich:
  48.498 +{\footnotesize\begin{verbatim}
  48.499 +   > calclist;
  48.500 +      val it =
  48.501 +         [("Vars", ("Tools.Vars", fn)), ("matches", ("Tools.matches", fn)),
  48.502 +            ("lhs", ("Tools.lhs", fn)), ("plus", ("op +", fn)),
  48.503 +            ("times", ("op *", fn)), ("divide_", ("HOL.divide", fn)),
  48.504 +            ("power_", ("Atools.pow", fn)), ("is_const", ("Atools.is'_const", fn)),
  48.505 +            ("le", ("op <", fn)), ("leq", ("op <=", fn)),
  48.506 +            ("ident", ("Atools.ident", fn)), ("sqrt", ("Root.sqrt", fn)),
  48.507 +            ("Test.is_root_free", ("is'_root'_free", fn)),
  48.508 +            ("Test.contains_root", ("contains'_root", fn))]
  48.509 +      :
  48.510 +         (
  48.511 +         string *
  48.512 +         (
  48.513 +         string *
  48.514 +         (
  48.515 +         string ->
  48.516 +         Term.term -> Theory.theory -> (string * Term.term) Library.option))) list
  48.517 +\end{verbatim}}
  48.518 +
  48.519 +
  48.520 +
  48.521 +
  48.522 +\chapter{Termordnung}
  48.523 +Die Anordnungen der Begriffe sind unverzichtbar f\"ur den Gebrauch des Umschreibens von normalen Funktionen und von normalen Formeln, die n\"otig sind um passende Modelle f\"ur Probleme zu finden.
  48.524 +
  48.525 +\section{Beispiel f\"ur Termordnungen}
  48.526 +Es ist nicht unbedeutend, eine Verbindung zu Termen herzustellen, die wirklich eine Ordnung besitzen. Diese Ordnungen sind selbstaufrufende Bahnordnungen:
  48.527 +
  48.528 +{\footnotesize\begin{verbatim}
  48.529 +   > sqrt_right;
  48.530 +      val it = fn : bool -> Theory.theory -> subst -> Term.term * Term.term -> b       ool
  48.531 +   > tless_true;
  48.532 +      val it = fn : subst -> Term.term * Term.term -> bool
  48.533 +\end{verbatim}}
  48.534 +
  48.535 +Das ''bool`` Argument gibt Ihnen die M\"oglichkeit, die Kontrolle zu den zugeh\"origen Unterordunungen zur\"uck zu verfolgen, damit sich die Unterordnungen, die 'true' sind, als strings anzeigen lassen.
  48.536 +
  48.537 +{\section{Geordnetes Rewriting}}
  48.538 +Beim Rewriting entstehen Probleme, die vom ''law of commutativity`` (= Kommutativgesetz) durch '+' und '*' verursacht werden. Diese Probleme k\"onnen nur durch geordnetes Rewriting gel\"ost werden, da hier ein Term nur umgeschrieben wird, wenn ein kleinerer dadurch entsteht.
  48.539 +
  48.540 +
  48.541 +\chapter{Problem hierachy}
  48.542 +\section{''Matching``}
  48.543 +Matching ist eine Technik von Rewriting, die von \isac{} verwendet wird, um ein Problem und den passenden problem type daf\"ur zu finden. Die folgende Funktion \"uberpr\"uft, ob Matching m\"oglich ist:
  48.544 +{\footnotesize\begin{verbatim}
  48.545 +> matches;
  48.546 +val it = fn : Theory.theory -> Term.term -> Term.term -> bool
  48.547 +\end{verbatim}}
  48.548 +Die folgende Gleichung wird in Operatoren und freie Variablen zerlegt.
  48.549 +{\footnotesize\begin{verbatim}
  48.550 +> val t = (term_of o the o (parse thy)) "3 * x^^^2 = 1";
  48.551 +val t =
  48.552 +Const ("op =", "[RealDef.real, RealDef.real] => bool") $
  48.553 +(Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $
  48.554 +Free ("3", "RealDef.real") $
  48.555 +(Const
  48.556 +("Atools.pow",
  48.557 +"[RealDef.real, RealDef.real] => RealDef.real") $
  48.558 +Free ("x", "RealDef.real") $ Free ("2", " RealDef.real"))) $
  48.559 +Free ("1", "RealDef.real") : Term.term
  48.560 +\end{verbatim}}
  48.561 +Nun wird ein Modell erstellt, das sich nicht auf bestimmte Zahlen bezieht, sondern nur eine generelle Zerlegung durchf\"uhrt.
  48.562 +{\footnotesize\begin{verbatim}
  48.563 +> val p = (term_of o the o (parse thy)) "a * b^^^2 = c";
  48.564 +val p =
  48.565 +Const ("op =", "[RealDef.real, RealDef.real] => bool") $
  48.566 +(Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $
  48.567 +Free ("a", "RealDef.real") $
  48.568 +(Const
  48.569 +("Atools.pow",
  48.570 +"[RealDef.real, RealDef.real] => RealDef.real") $
  48.571 +Free ("b", "RealDef.real") $ Free ("2", "RealDef.real"))) $
  48.572 +Free ("c", "RealDef.real") : Term.term
  48.573 +\end{verbatim}}
  48.574 +Dieses Modell enth\"alt sogenannte \textit{scheme variables}.
  48.575 +{\footnotesize\begin{verbatim}
  48.576 +> atomt p;
  48.577 +"*** -------------"
  48.578 +"*** Const (op =)"
  48.579 +"*** . Const (op *)""*** . . Free (a, )"
  48.580 +"*** . . Const (Atools.pow)"
  48.581 +"*** . . . Free (b, )"
  48.582 +"*** . . . Free (2, )"
  48.583 +"*** . Free (c, )"
  48.584 +"\n"
  48.585 +val it = "\n" : string
  48.586 +\end{verbatim}}
  48.587 +Das Modell wird durch den Befehl \textit{free2var} erstellt.
  48.588 +{\footnotesize\begin{verbatim}
  48.589 +> free2var;
  48.590 +val it = fn : Term.term -> Term.term
  48.591 +> val pat = free2var p;
  48.592 +val pat =
  48.593 +Const ("op =", "[RealDef.real, RealDef.real] => bool") $
  48.594 +(Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $
  48.595 +Var (("a", 0), "RealDef.real") $
  48.596 +(Const
  48.597 +("Atools.pow",
  48.598 +"[RealDef.real, RealDef.real] => RealDef.real") $
  48.599 +Var (("b", 0), "RealDef.real") $
  48.600 +Free ("2", "RealDef.real"))) $ Var (("c", 0), "RealDef.real")
  48.601 +: Term.term
  48.602 +> Sign.string_of_term (sign_of thy) pat;
  48.603 +val it = "?a * ?b ^^^ 2 = ?c" : string
  48.604 +\end{verbatim}}
  48.605 +Durch \textit{atomt pat} wird der Term aufgespalten und in eine Form gebracht, die f\"ur die weiteren Schritte ben\"otigt wird.
  48.606 +{\footnotesize\begin{verbatim}
  48.607 +> atomt pat;
  48.608 +"*** -------------"
  48.609 +"*** Const (op =)"
  48.610 +"*** . Const (op *)"
  48.611 +"*** . . Var ((a, 0), )"
  48.612 +"*** . . Const (Atools.pow)"
  48.613 +"*** . . . Var ((b, 0), )"
  48.614 +"*** . . . Free (2, )"
  48.615 +"*** . Var ((c, 0), )"
  48.616 +"\n"
  48.617 +val it = "\n" : string
  48.618 +\end{verbatim}}
  48.619 +Jetzt kann das Matching an den beiden vorigen Terme angewendet werden.
  48.620 +{\footnotesize\begin{verbatim}
  48.621 +> matches thy t pat;
  48.622 +val it = true : bool
  48.623 +> val t2 = (term_of o the o (parse thy)) "x^^^2 = 1";
  48.624 +val t2 =
  48.625 +Const ("op =", "[RealDef.real, RealDef.real] => bool") $
  48.626 +(Const
  48.627 +("Atools.pow",
  48.628 +"[RealDef.real, RealDef.real] => RealDef.real") $
  48.629 +Free ("x", "RealDef.real") $ Free ("2", "RealDef.real")) $
  48.630 +Free ("1", "RealDef.real") : Term.term
  48.631 +> matches thy t2 pat;
  48.632 +val it = false : bool
  48.633 +> val pat2 = (term_of o the o (parse thy)) "?u^^^2 = ?v";
  48.634 +val pat2 =
  48.635 +Const ("op =", "[RealDef.real, RealDef.real] => bool") $
  48.636 +(Const
  48.637 +("Atools.pow",
  48.638 +"[RealDef.real, RealDef.real] => RealDef.real") $
  48.639 +Var (("u", 0), "RealDef.real") $ Free ("2", "RealDef.real")) $
  48.640 +Var (("v", 0), "RealDef.real") : Term.term
  48.641 +> matches thy t2 pat2;
  48.642 +val it = true : bool
  48.643 +\end{verbatim}}
  48.644 +
  48.645 +\section{Zugriff auf die hierachy}
  48.646 +Man verwendet folgenden Befehl, um sich Zugang zur hierachy von problem type zu verschaffen.
  48.647 +{\footnotesize\begin{verbatim}
  48.648 +> show_ptyps;
  48.649 +val it = fn : unit -> unit
  48.650 +> show_ptyps();
  48.651 +[
  48.652 +["e_pblID"],
  48.653 +["simplification", "polynomial"],
  48.654 +["simplification", "rational"],
  48.655 +["vereinfachen", "polynom", "plus_minus"],
  48.656 +["vereinfachen", "polynom", "klammer"],
  48.657 +["vereinfachen", "polynom", "binom_klammer"],
  48.658 +["probe", "polynom"],
  48.659 +["probe", "bruch"],
  48.660 +["equation", "univariate", "linear"],
  48.661 +["equation", "univariate", "root", "sq", "rat"],
  48.662 +["equation", "univariate", "root", "normalize"],
  48.663 +["equation", "univariate", "rational"],
  48.664 +["equation", "univariate", "polynomial", "degree_0"],
  48.665 +["equation", "univariate", "polynomial", "degree_1"],
  48.666 +["equation", "univariate", "polynomial", "degree_2", "sq_only"],
  48.667 +["equation", "univariate", "polynomial", " 
  48.668 + degree_2", "bdv_only"],
  48.669 +["equation", "univariate", "polynomial", "degree_2", "pqFormula"],
  48.670 +["equation", "univariate", "polynomial", "degree_2", "abcFormula"],
  48.671 +["equation", "univariate", "polynomial", "degree_3"],
  48.672 +["equation", "univariate", "polynomial", "degree_4"],
  48.673 +["equation", "univariate", "polynomial", "normalize"],
  48.674 +["equation", "univariate", "expanded", "degree_2"],
  48.675 +["equation", "makeFunctionTo"],
  48.676 +["function", "derivative_of", "named"],
  48.677 +["function", "maximum_of", "on_interval"],
  48.678 +["function", "make", "by_explicit"],
  48.679 +["function", "make", "by_new_variable"],
  48.680 +["function", "integrate", "named"],
  48.681 +["tool", "find_values"],
  48.682 +["system", "linear", "2x2", "triangular"],
  48.683 +["system", "linear", "2x2", "normalize"],
  48.684 +["system", "linear", "3x3"],
  48.685 +["system", "linear", "4x4", "triangular"],
  48.686 +["system", "linear", "4x4", "normalize"],
  48.687 +["Biegelinien", "
  48.688 +MomentBestimmte"],
  48.689 +["Biegelinien", "MomentGegebene"],
  48.690 +["Biegelinien", "einfache"],
  48.691 +["Biegelinien", "QuerkraftUndMomentBestimmte"],
  48.692 +["Biegelinien", "vonBelastungZu"],
  48.693 +["Biegelinien", "setzeRandbedingungen"],
  48.694 +["Berechnung", "numerischSymbolische"],
  48.695 +["test", "equation", "univariate", "linear"],
  48.696 +["test", "equation", "univariate", "plain_square"],
  48.697 +["test", "equation", "univariate", "polynomial", "degree_two", "pq_formula"],
  48.698 +["test", "equation", "univariate", "polynomial", "degree_two", "abc_formula"],
  48.699 +["test", "equation", "univariate", "squareroot"],
  48.700 +["test", "equation", "univariate", "normalize"],
  48.701 +["test", "equation", "univariate", "sqroot-test"]
  48.702 +]
  48.703 +val it = () : unit
  48.704 +\end{verbatim}}
  48.705 +
  48.706 +\section{Die passende ''formalization`` f\"ur den problem type}
  48.707 +Eine andere Art des Matching ist es die richtige ''formalization`` zum jeweiligen problem type zu finden. Wenn eine solche vorhanden ist, kann \isac{} selbstst\"andig die Probleme l\"osen.
  48.708 +
  48.709 +\section{''problem-refinement``}
  48.710 +Will man die problem hierachy (= ) aufstellen, so ist darauf zu achten, dass man die verschiedenen Branches so konstruiert, dass das problem-refinement automatisch durchgef\"uhrt werden kann.
  48.711 +{\footnotesize\begin{verbatim}
  48.712 +> refine;
  48.713 +val it = fn : fmz_ -> pblID -> SpecifyTools.match list
  48.714 +> val fmz = ["equality (sqrt(9 + 4 * x)=sqrt x 
  48.715 ++ sqrt (5 + x))",
  48.716 +# "soleFor x","errorBound (eps=0)",
  48.717 +# "solutions L"];
  48.718 +val fmz =
  48.719 +["equality (sqrt(9 + 4 * x)=sqrt x + sqrt (5 + x))", "soleFor x",
  48.720 +"errorBound (eps=0)", ...] : string list
  48.721 +> refine fmz ["univariate","equation"];
  48.722 +*** pass ["equation","univariate"]
  48.723 +*** comp_dts: ??.empty $ soleFor x
  48.724 +Exception- ERROR raised
  48.725 +\end{verbatim}}
  48.726 +Wenn die ersten zwei Regeln nicht angewendet werden k\"onnen, kommt die dritte zum Einsatz:
  48.727 +{\footnotesize\begin{verbatim}
  48.728 +> val fmz = ["equality (x + 1 = 2)",
  48.729 +# "solveFor x","errorBound (eps=0)",
  48.730 +# "solutions L"];
  48.731 +val fmz = ["equality (x + 1 = 2)", "solveFor x", "errorBound (eps=0)", ...]
  48.732 +: string list
  48.733 +> refine fmz ["univariate","equation"];
  48.734 +*** pass ["equation","univariate"]
  48.735 +*** pass ["equation","univariate","linear"]
  48.736 +*** pass ["equation","univariate","root"]
  48.737 +*** pass ["equation","univariate","rational"]
  48.738 +*** pass ["equation","univariate","polynomial" ]
  48.739 +*** pass ["equation","univariate","polynomial","degree_0"]
  48.740 +*** pass ["equation","univariate","polynomial","degree_1"]
  48.741 +*** pass ["equation","univariate","polynomial","degree_2"]
  48.742 +*** pass ["equation","univariate","polynomial","degree_3"]
  48.743 +*** pass ["equation","univariate","polynomial","degree_4"]
  48.744 +*** pass ["equation","univariate","polynomial","normalize"]
  48.745 +val it =
  48.746 +[Matches
  48.747 +(["univariate", "equation"],
  48.748 +{Find = [Correct "solutions L"], With = [...], ...}),
  48.749 +NoMatch (["linear", "univariate", ...], {Find = [...], ...}),
  48.750 +NoMatch (["root", ...], ...), ...] : SpecifyTools.match list
  48.751 +\end{verbatim}}
  48.752 +Der problem type wandelt $x + 1 = 2$ in die normale Form $-1 + x = 0$ um. Diese Suche nach der jeweiligen problem hierachy kann mit Hilfe eines ''proof state`` durchgef\"uhrt werden (siehe n\"achstes Kapitel).
  48.753 +
  48.754 +
  48.755 +\chapter{''Methods``}
  48.756 +Methods werden dazu verwendet, Probleme von type zu l\"osen. Sie sind in einer anderen Programmiersprache beschrieben. Die Sprache sieht einfach aus, betreibt aber im Hintergrund einen enormen Pr\"ufaufwand. So muss sich der Programmierer nicht mit technischen Details befassen, gleichzeitig k\"onnen aber auch keine falschen Anweisungen eingegeben werden.
  48.757 +\section{Der ''Syntax`` des script}
  48.758 +Syntax beschreibt den Zusammenhang der einzelnen Zeichen und Zeichenfolgen mit den Theorien.
  48.759 +Er kann so definiert werden:
  48.760 +\begin{tabbing}
  48.761 +123\=123\=expr ::=\=$|\;\;$\=\kill
  48.762 +\>script ::= {\tt Script} id arg$\,^*$ = body\\
  48.763 +\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
  48.764 +\>\>body ::= expr\\
  48.765 +\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
  48.766 +\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
  48.767 +\>\>\>$|\;$\>listexpr\\
  48.768 +\>\>\>$|\;$\>id\\
  48.769 +\>\>\>$|\;$\>seqex id\\
  48.770 +\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
  48.771 +\>\>\>$|\;$\>{\tt Repeat} seqex\\
  48.772 +\>\>\>$|\;$\>{\tt Try} seqex\\
  48.773 +\>\>\>$|\;$\>seqex {\tt Or} seqex\\
  48.774 +\>\>\>$|\;$\>seqex {\tt @@} seqex\\
  48.775 +\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
  48.776 +\>\>type ::= id\\
  48.777 +\>\>tac ::= id
  48.778 +\end{tabbing}
  48.779 +
  48.780 +\section{\"Uberpr\"ufung der Auswertung}
  48.781 +Das Kontrollsystem arbeitet mit den folgenden Script-Ausdr\"ucken, die {\it tacticals} genannt werden:
  48.782 +\begin{description}
  48.783 +\item{{\tt while} prop {\tt Do} expr id} 
  48.784 +\item{{\tt if} prop {\tt then} expr {\tt else} expr}
  48.785 +\end{description}
  48.786 +W\"ahrend die genannten Befehle das Kontrollsystem durch Auswertung der Formeln ausl\"osen, h\"angen die anderen von der Anwendbarkeit der Formel in den entsprechenden Unterbegriffen ab:
  48.787 +\begin{description}
  48.788 +\item{{\tt Repeat} expr id}
  48.789 +\item{{\tt Try} expr id}
  48.790 +\item{expr {\tt Or} expr id}
  48.791 +\item{expr {\tt @@} expr id}
  48.792 +\item xxx
  48.793 +\end{description}
  48.794 +
  48.795 +
  48.796 +
  48.797 +\chapter{Befehle von \isac{}}
  48.798 +In diesem Kapitel werden alle schon zur Verf\"ugung stehenden Schritte aufgelistet. Diese Liste kann sich auf Grund von weiteren Entwicklungen von \isac{} noch \"andern.\
  48.799 +\newline\linebreak \textbf{Init\_Proof\_Hid (dialogmode, formalization, specifictaion)} gibt die eingegebenen Befehle an die mathematic engine weiter, wobei die beiden letzten Begriffe die Beispiele automatisch speichern. Es ist nicht vorgesehen, dass der Sch\"uler tactic verwendet.\
  48.800 +\newline\linebreak \textbf{Init\_Proof} bildet mit einem ''proof tree`` ein leeres Modell.\
  48.801 +\newline\linebreak \textbf{Model\_Problem problem} bestimmt ein problemtype, das wom\"oglich in der ''hierachy`` gefunden wurde, und verwendet es f\"ur das Umformen.\
  48.802 +\newline\linebreak \textbf{Add\_Given, Add\_Find, Add\_Relation formula} f\"ugt eine Formel in ein bestimmtes Feld eines Modells ein. Dies ist notwendig, solange noch kein Objekt f\"ur den Benutzer vorhanden ist, in dem man die Formel eingeben kann, und nicht die gew\"unschte tactic und Formel von einer Liste w\"ahlen will.\
  48.803 +\newline\linebreak \textbf{Specify\_Theorie theory, Specify\_Problem proble, Specify\_Method method} gibt das entsprechende Element des Basiswissens an.\
  48.804 +\newline\linebreak \textbf{Refine\_Problem problem} sucht nach einem Problem in der hierachy, das auf das vorhandene zutrifft.\
  48.805 +\newline\linebreak \textbf{Apply\_Method method} beendet das Modell und die Beschreibung. Danach wird die L\"osungmeldung ge\"offnet.\
  48.806 +\newline\linebreak \textbf{Free\_Solve} beginnt eine L\"osungsmeldung ohne die Hilfe einer method.\
  48.807 +\newline\linebreak \textbf{Rewrite theorem} bef\"ordert ein theorem in die aktuelle Formel und wandelt es demenetsprechend um. Wenn dies nicht m\"oglich ist, kommt eine Meldung mit ''error``.\
  48.808 +\newline\linebreak \textbf{Rewrite\_Asm theorem} hat die gleiche Funktion wie Rewrite, speichert jedoch eine endg\"ultige Vorraussetzung des theorems, anstatt diese zu sch\"atzen.\
  48.809 +\newline\linebreak \textbf{Rewrite\_Set ruleset} hat \"ahnliche Funktionen wie Rewrite, gilt aber f\"ur einen ganzen Satz von theorems, dem rule set.\
  48.810 +\newline\linebreak \textbf{Rewrite\_Inst (substitution, theorem), Rewrite\_Set\_Inst (substitution, rule set)} ist vergleichbar mit besonderen tactics, ersetzt aber Konstanten im theorem, bevor es zu einer Anwendung kommt.\
  48.811 +\newline\linebreak \textbf{Calculate operation} berechnet das Ergebnis der Eingabe mit der aktuellen Formel (plus, minus, times, cancel, pow, sqrt).\
  48.812 +\newline\linebreak \textbf{Substitute substitution} f\"ugt der momentanen Formel {\tt substitution} hinzu und wandelt es um.\
  48.813 +\newline\linebreak \textbf{Take formula} startet eine neue Reihe von Rechnungen in den Formeln, wo sich schon eine andere Rechnung befindet.\
  48.814 +\newline\linebreak \textbf{Subproblem (theory, problem)} beginnt ein subproblem innerhalb einer Rechnung.\
  48.815 +\newline\linebreak \textbf{Function formula} ruft eine Funktion auf, in der der Name in der Formel enthalten ist. ???????\
  48.816 +\newline\linebreak \textbf{Split\_And, Conclude\_And, Split\_Or, Conclude\_Or, Begin\_Trans, End\_Trans, Begin\_Sequ, End\_Sequ, Split\_Intersect, End\_Intersect} betreffen den Bau einzelner branches des proof trees. Normalerweise werden sie vom dialog guide verdr\"angt.\
  48.817 +\newline\linebreak \textbf{Check\_elementwise assumption} wird in Bezug auf die aktuelle Formel verwendet, die Elemente in einer Liste enth\"alt.\
  48.818 +\newline\linebreak \textbf{Or\_to\_List} wandelt eine Verbindung von Gleichungen in eine Liste von Gleichungen um.\
  48.819 +\newline\linebreak \textbf{Check\_postcond} \"uberpr\"uft die momentane Formel im Bezug auf die Nachbedinung beim Beenden des subproblem.\
  48.820 +\newline\linebreak \textbf{End\_Proof} beendet eine \"Uberpr\"ufung und gibt erst dann ein Ergebnis aus, wenn Check\_postcond erfolgreich abgeschlossen wurde.
  48.821 +
  48.822 +\section{Die Funktionsweise der mathematic engine}
  48.823 +Ein proof (= Beweis) wird in der mathematic engine me von der tactic {\tt Init\_Proof} gestartet und wird wechselwirkend mit anderen tactics vorangebracht. Auf den input (= das, was eingegeben wurde) einzelner tactics folgt eine Formel, die von der me ausgegeben wird, und die darauf folgende tactic gilt. Der proof ist beendet, sobald die me {\tt End\_Proof} als n\"achste tactic vorschl\"agt.
  48.824 +\newline Im Anschluss werden Sie einen Rechenbeweis sehen, der von der L\"osung einer Gleichung (= equation) handelt, bei der diese automatisch differenziert wird. 
  48.825 +{\footnotesize\begin{verbatim}
  48.826 +??????????????????????????????????????????????????????????????????????????????????   
  48.827 +
  48.828 +ML> val fmz = ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x",
  48.829 +                  "errorBound (eps=#0)","solutions L"];
  48.830 +   val fmz =
  48.831 +     ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
  48.832 +      "solutions L"] : string list
  48.833 +   ML>
  48.834 +   ML> val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
  48.835 +                                 ("SqRoot.thy","no_met"));
  48.836 +   val dom = "SqRoot.thy" : string
  48.837 +   val pbt = ["univariate","equation"] : string list
  48.838 +   val met = ("SqRoot.thy","no_met") : string * string
  48.839 +\end{verbatim}}
  48.840 +
  48.841 +\section{Der Beginn einer Rechnung}
  48.842 +
  48.843 +Der proof state wird von einem proof tree und einer position ausgegeben. Beide sind zu Beginn leer. Die tactic {\tt Init\_Proof} ist, wie alle anderen tactics auch, an einen string gekoppelt. Um einen neuen proof beginnen zu k\"onnen, werden folgende Schritte durchgef\"uhrt:
  48.844 +{\footnotesize\begin{verbatim}
  48.845 +???????????????????????????????????????????????????????????????????????????????????????????? 
  48.846 +ML>  val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
  48.847 +   val mID = "Init_Proof" : string
  48.848 +   val m =
  48.849 +     Init_Proof
  48.850 +       (["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
  48.851 +         "solutions L"],("SqRoot.thy",[#,#],(#,#))) : mstep
  48.852 +   ML>
  48.853 +   ML>  val (p,_,f,nxt,_,pt) = me (mID,m) e_pos' c EmptyPtree;
  48.854 +   val p = ([],Pbl) : pos'
  48.855 +   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
  48.856 +   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
  48.857 +     : string * mstep
  48.858 +   val pt =
  48.859 +     Nd
  48.860 +       (PblObj
  48.861 +          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
  48.862 +           result=#,spec=#},[]) : ptree
  48.863 +\end{verbatim}}
  48.864 +Die mathematics engine gibt etwas mit dem type {\tt mout} aus, was in unserem Fall ein Problem darstellt. Sobald mehr angezeigt wird, m\"usste dieses jedoch gel\"ost sein.
  48.865 +{\footnotesize\begin{verbatim}
  48.866 +?????????????????????????????????????????????????????????????????????????????????????????????
  48.867 +   ML> Compiler.Control.Print.printDepth:=8; (*4 default*)
  48.868 +   val it = () : unit
  48.869 +   ML>
  48.870 +   ML> f;
  48.871 +   val it =
  48.872 +     Form'
  48.873 +       (PpcKF
  48.874 +          (0,EdUndef,0,Nundef,
  48.875 +           (Problem [],
  48.876 +            {Find=[Incompl "solutions []"],
  48.877 +             Given=[Incompl "equality",Incompl "solveFor"],Relate=[],
  48.878 +             Where=[False "matches (?a = ?b) e_"],With=[]}))) : mout
  48.879 +\end{verbatim}}
  48.880 +{\footnotesize\begin{verbatim}
  48.881 +?????????????????????????????????????????????????????????????????????????????????????????????
  48.882 +   ML>  nxt;
  48.883 +   val it = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
  48.884 +     : string * mstep
  48.885 +   ML>
  48.886 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.887 +   val nxt = ("Model_Problem",Model_Problem ["normalize","univariate","equation"])
  48.888 +     : string * mstep
  48.889 +   ML>
  48.890 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.891 +\end{verbatim}}
  48.892 +
  48.893 +\section{The phase of modeling}
  48.894 +Dieses Kapitel besch\"aftigt sich mit dem input der Einzelheiten bei einem Problem. Die me kann dabei helfen, wenn man die formalization durch {\tt Init\_Proof} darauf hinweist. Normalerweise weiss die mathematics engine die n\"achste gute tactic.
  48.895 +{\footnotesize\begin{verbatim}
  48.896 +?????????????????????????????????????????????????????????????????????????????????????????????
  48.897 +   ML>  nxt;
  48.898 +   val it =
  48.899 +     ("Add_Given",Add_Given "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)")
  48.900 +     : string * mstep
  48.901 +   ML>
  48.902 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.903 +   val nxt = ("Add_Given",Add_Given "solveFor x") : string * mstep
  48.904 +   ML>
  48.905 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.906 +   val nxt = ("Add_Find",Add_Find "solutions L") : string * mstep
  48.907 +   ML>
  48.908 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt; 
  48.909 +   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
  48.910 +\end{verbatim}}
  48.911 +{\footnotesize\begin{verbatim}
  48.912 +?????????????????????????????????????????????????????????????????????????????????????????????
  48.913 +   ML>  Compiler.Control.Print.printDepth:=8;
  48.914 +   ML>  f;
  48.915 +   val it =
  48.916 +     Form'
  48.917 +       (PpcKF
  48.918 +          (0,EdUndef,0,Nundef,
  48.919 +           (Problem [],
  48.920 +            {Find=[Correct "solutions L"],
  48.921 +             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
  48.922 +                    Correct "solveFor x"],Relate=[],Where=[],With=[]}))) : mout
  48.923 +\end{verbatim}}
  48.924 +
  48.925 +
  48.926 +\section{The phase of specification}
  48.927 +Diese phase liefert eindeutige Bestimmungen einer domain, den problem type und die method damit man sie verwenden kann. F\"ur gew\"ohnlich wird die Suche nach dem richtigen problem type unterst\"utzt. Dazu sind zwei tactics verwendbar: {\tt Specify\_Problem} entwickelt ein Feedback, wie ein problem type bei dem jetzigen problem zusammenpasst und {\tt Refine\_Problem} stellt Hilfe durch das System bereit, falls der Benutzer die \"Ubersicht verliert.
  48.928 +{\footnotesize\begin{verbatim}
  48.929 +??????????????????????????????????????????????????????????????????????????????????????????
  48.930 +   ML> nxt;
  48.931 +   val it = ("Specify_Domain",Specify_Domain "SqRoot.thy") : string * mstep
  48.932 +   ML>
  48.933 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.934 +   val nxt =
  48.935 +     ("Specify_Problem",Specify_Problem ["normalize","univariate","equation"])
  48.936 +     : string * mstep
  48.937 +   val pt =
  48.938 +     Nd
  48.939 +       (PblObj
  48.940 +          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
  48.941 +              result=#,spec=#},[]) : ptree
  48.942 +\end{verbatim}}
  48.943 +Die me erkennt den richtigen Problem type und arbeitet so weiter:
  48.944 +{\footnotesize\begin{verbatim}
  48.945 +?????????????????????????????????????????????????????????????????????????????????????????
  48.946 +   ML> val nxt = ("Specify_Problem",
  48.947 +               Specify_Problem ["polynomial","univariate","equation"]);
  48.948 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.949 +   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
  48.950 +   val nxt =
  48.951 +     ("Refine_Problem",Refine_Problem ["normalize","univariate","equation"])
  48.952 +     : string * mstep
  48.953 +   ML>
  48.954 +   ML> val nxt = ("Specify_Problem",
  48.955 +               Specify_Problem ["linear","univariate","equation"]);
  48.956 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.957 +   val f =
  48.958 +     Form'
  48.959 +       (PpcKF
  48.960 +          (0,EdUndef,0,Nundef,
  48.961 +           (Problem ["linear","univariate","equation"],
  48.962 +            {Find=[Correct "solutions L"],
  48.963 +             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
  48.964 +                    Correct "solveFor x"],Relate=[],
  48.965 +             Where=[False
  48.966 +                    "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
  48.967 +             With=[]}))) : mout 
  48.968 +\end{verbatim}}
  48.969 +Wir nehmen wieder an, dass der dialog guide die n\"achsten tactics, veranlasst von der mathematic engine, versteckt und der Sch\"uler Hilfe ben\"otigt. Dann muss {\tt Refine\_Problem} angewandt werden. Dieser Befehl findet immer den richtigen Weg, wenn man es auf den problem type bezieht [''univariate``, ''equation``].
  48.970 +{\footnotesize\begin{verbatim}
  48.971 +????????????????????????????????????????????????????????????????????????????????????????????
  48.972 +   ML> val nxt = ("Refine_Problem",
  48.973 +                  Refine_Problem ["linear","univariate","equation
  48.974 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.975 +   val f = Problems (RefinedKF [NoMatch #]) : mout
  48.976 +   ML>
  48.977 +   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
  48.978 +   val f =
  48.979 +     Problems
  48.980 +       (RefinedKF
  48.981 +          [NoMatch
  48.982 +             (["linear","univariate","equation"],
  48.983 +              {Find=[Correct "solutions L"],
  48.984 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
  48.985 +                      Correct "solveFor x"],Relate=[],
  48.986 +               Where=[False
  48.987 +                     "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
  48.988 +               With=[]})]) : mout
  48.989 +   ML>
  48.990 +   ML> val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
  48.991 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  48.992 +   val f =
  48.993 +     Problems
  48.994 +       (RefinedKF [Matches #,NoMatch #,NoMatch #,NoMatch #,NoMatch #,Matches #])
  48.995 +     : mout
  48.996 +   ML>
  48.997 +   ML>
  48.998 +   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
  48.999 +   val f =
 48.1000 +     Problems
 48.1001 +       (RefinedKF
 48.1002 +          [Matches
 48.1003 +             (["univariate","equation"],
 48.1004 +              {Find=[Correct "solutions L"],
 48.1005 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 48.1006 +                      Correct "solveFor x"],Relate=[],
 48.1007 +               Where=[Correct
 48.1008 +               With=[]}),
 48.1009 +           NoMatch
 48.1010 +             (["linear","univariate","equation"],
 48.1011 +              {Find=[Correct "solutions L"],
 48.1012 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 48.1013 +                      Correct "solveFor x"],Relate=[],
 48.1014 +               Where=[False
 48.1015 +                      "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
 48.1016 +                  With=[]}),
 48.1017 +           NoMatch
 48.1018 +             ...
 48.1019 +             ...   
 48.1020 +           Matches
 48.1021 +             (["normalize","univariate","equation"],
 48.1022 +              {Find=[Correct "solutions L"],
 48.1023 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 48.1024 +                      Correct "solveFor x"],Relate=[],Where=[],With=[]})]) : mout
 48.1025 +\end{verbatim}}
 48.1026 +Die tactic {\tt Refine\_Problem} wandelt alle matches wieder in problem types um und sucht in der problem hierachy weiter.
 48.1027 +
 48.1028 +
 48.1029 +\section{The phase of solving}
 48.1030 +Diese phase beginnt mit dem Aufruf einer method, die eine normale form innerhalb einer tactic ausf\"uhrt: {\tt Rewrite rnorm\_equation\_add} und {\tt Rewrite\_Set SqRoot\_simplify}:
 48.1031 +{\footnotesize\begin{verbatim} 
 48.1032 +   ML> nxt;
 48.1033 +   val it = ("Apply_Method",Apply_Method ("SqRoot.thy","norm_univar_equation"))
 48.1034 +     : string * mstep
 48.1035 +   ML>
 48.1036 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 48.1037 +   val f =
 48.1038 +     Form' (FormKF (~1,EdUndef,1,Nundef,"(x + #1) * (x + #2) = x ^^^ #2 + #8"))
 48.1039 +   val nxt =
 48.1040 +     ("Rewrite", Rewrite
 48.1041 +        ("rnorm_equation_add","~ ?b =!= #0 ==> (?a = ?b) = (?a + #-1 * ?b = #0)"))
 48.1042 +   ML>
 48.1043 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 48.1044 +   val f =
 48.1045 +     Form' (FormKF (~1,EdUndef,1,Nundef,
 48.1046 +           "(x + #1) * (x + #2) + #-1 * (x ^^^ #2 + #8) = #0")) : mout
 48.1047 +   val nxt = ("Rewrite_Set",Rewrite_Set "SqRoot_simplify") : string * mstep
 48.1048 +   ML>
 48.1049 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 48.1050 +   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"#-6 + #3 * x = #0")) : mout
 48.1051 +   val nxt = ("Subproblem",Subproblem ("SqRoot.thy",[#,#])) : string * mstep
 48.1052 +\end{verbatim}}
 48.1053 +Die Formel $-6 + 3\cdot x = 0$ ist die Eingabe eine subproblems, das wiederum gebraucht wird, um die Gleichungsart zu erkennen und die entsprechende method auszuf\"uhren:
 48.1054 +{\footnotesize\begin{verbatim}
 48.1055 +   ML> nxt;
 48.1056 +   val it = ("Subproblem",Subproblem ("SqRoot.thy",["univariate","equation"]))
 48.1057 +   ML>   
 48.1058 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 48.1059 +   val f =
 48.1060 +     Form' (FormKF
 48.1061 +          (~1,EdUndef,1,Nundef,"Subproblem (SqRoot.thy, [univariate, equation])"))
 48.1062 +     : mout
 48.1063 +   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
 48.1064 +   ML>
 48.1065 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 48.1066 +   val nxt = ("Model_Problem",Model_Problem ["linear","univariate","equation"])
 48.1067 +\end{verbatim}}
 48.1068 +{\tt Refine [''univariate``, ''equation``]} sucht die passende Gleichungsart aus der problem hierachy heraus, welche man mit {\tt Model\_Problem [''linear``, ''univariate``, ''equation``]} \"uber das System ansehen kann.
 48.1069 +Nun folgt erneut die phase of modeling und die phase of specification.
 48.1070 +
 48.1071 +\section{The final phase: \"Uberpr\"ufung der ''post-condition``}
 48.1072 +Die gezeigten problems, die durch \isac{} gel\"ost wurden, sind so genannte 'example construction problems'. Das massivste Merkmal solcher problems ist die post-condition. Im Umgang mit dieser gibt es noch offene Fragen.
 48.1073 +Dadurch wird die post-condition im folgenden Beispiel als problem und subproblem erw\"ahnt.
 48.1074 +{\footnotesize\begin{verbatim}
 48.1075 +   ML> nxt;
 48.1076 +   val it = ("Check_Postcond",Check_Postcond ["linear","univariate","equation"])
 48.1077 +   ML>
 48.1078 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 48.1079 +   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"[x = #2]")) : mout
 48.1080 +   val nxt =
 48.1081 +     ("Check_Postcond",Check_Postcond ["normalize","univariate","equation"])
 48.1082 +   ML>
 48.1083 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 48.1084 +   val f = Form' (FormKF (~1,EdUndef,0,Nundef,"[x = #2]")) : mout
 48.1085 +   val nxt = ("End_Proof'",End_Proof') : string * mstep
 48.1086 +\end{verbatim}}
 48.1087 +Die tactic {\tt End\_Proof'} bedeutet, dass der proof erflogreich beendet wurde.\\
 48.1088 +
 48.1089 +\paragraph{Versuchen Sie es!} Die tactics, die vom System vorgeschlagen werden, m\"ussen vom Benutzer nicht angewendet werden. Er kann selbstverst\"andlich auch andere tactics verwenden und das System wird melden, ob dieser Befehl zutreffend ist oder nicht.
 48.1090 +
 48.1091 +
 48.1092 +\part{Handbuch f\"ur Autoren}
 48.1093 +
 48.1094 +\chapter{Die Struktur des Grundlagenwissens}
 48.1095 +
 48.1096 +\section{''tactics`` und Daten}
 48.1097 +Zuerst betrachten wir die me von aussen. Wir sehen uns tactics und an und verbinden sie mit unserem Grundwissen (KB). Im Bezug auf das KB befassen wir uns mit den kleinsten Teilchen, die von den Autoren des KB sehr genau durchgef\"uhrt werden m\"ussen.
 48.1098 +Diese Teile sind in alphabetischer Anordnung in Tab.\ref{kb-items} auf Seite \pageref{kb-items} aufgelistet.
 48.1099 +
 48.1100 +{\begin{table}[h]
 48.1101 +\caption{Kleinste Teilchen des KB} \label{kb-items}
 48.1102 +%\tabcolsep=0.3mm
 48.1103 +\begin{center}
 48.1104 +\def\arraystretch{1.0}
 48.1105 +\begin{tabular}{lp{9.0cm}}
 48.1106 +Abk\"urzung & Beschreibung \\
 48.1107 +\hline
 48.1108 +&\\
 48.1109 +{\it calc\_list}
 48.1110 +& gesammelte Liste von allen ausgewerteten Funktionen\\
 48.1111 +{\it eval\_fn}
 48.1112 +& ausgewertete Funktionen f\"ur Zahlen und f\"ur Eigenschaften, die in SML kodiert sind\\
 48.1113 +{\it eval\_rls }
 48.1114 +& rule set {\it rls} f\"ur einfache Ausdr\"ucke mit {\it eval\_fn}s\\
 48.1115 +{\it fmz}
 48.1116 +& Formalisierung, d.h. eine sehr geringe Darstellung von einem Beispiel \\
 48.1117 +{\it met}
 48.1118 +& eine method d.h. eine Datenstruktur, die alle Informationen zum L\"osen einer phase enth\"alt ({\it rew\_ord}, {\it scr}, etc.)\\
 48.1119 +{\it metID}
 48.1120 +& bezieht sich auf {\it met}\\
 48.1121 +{\it op}
 48.1122 +& ein Operator, der der Schl\"ussel zu {\it eval\_fn} in einer {\it calc\_list} ist \\
 48.1123 +{\it pbl}
 48.1124 +& Problem d.h. der Knotenpunkt in der problem hierachy\\
 48.1125 +{\it pblID}
 48.1126 +& bezieht sich auf {\it pbl}\\
 48.1127 +{\it rew\_ord}
 48.1128 +& Anordnung beim Rewriting\\
 48.1129 +{\it rls}
 48.1130 +& rule set, d.h. eine Datenstruktur, die theorems {\it thm} und Operatoren {\it op} zur Vereinfachung (mit {\it rew\_ord}) enth\"alt \\
 48.1131 +{\it Rrls}
 48.1132 +& rule set f\"ur das 'reverse rewriting' (eine \isac-Technik, die schrittweise Rewriting entwickelt, z.B. f\"ur die zur\"uckgenommenen Teile)\\
 48.1133 +{\it scr}
 48.1134 +& script, das die Algorithmen durch Anwenden von tactics beschreibt und ein Teil von {\it met} ist \\
 48.1135 +{\it norm\_rls}
 48.1136 +& spezielles Regelwerk zum Berechnen von Normalformen, im Zusammenhang mit {\it thy}\\
 48.1137 +{\it spec}
 48.1138 +& Spezifikation, z.B, ein Tripel ({\it thyID, pblID, metID})\\
 48.1139 +{\it subs}
 48.1140 +& Ersatz, z.B. eine Liste von Variablen und ihren jeweiligen Werten\\
 48.1141 +{\it Term}
 48.1142 +& Term von Isabelle, z.B. eine Formel\\
 48.1143 +{\it thm}
 48.1144 +& theorem\\
 48.1145 +{\it thy}
 48.1146 +& theory\\
 48.1147 +{\it thyID}
 48.1148 +& im Bezug auf {\it thy} \\
 48.1149 +\end{tabular}\end{center}\end{table}}
 48.1150 +
 48.1151 +Die Verbindung zwischen tactics und Daten werden in Tab.\ref{tac-kb} auf Seite \pageref{tac-kb} dargestellt.
 48.1152 +
 48.1153 +
 48.1154 +\begin{table}[h]
 48.1155 +\caption{Welche tactics verwenden die Teile des KB~?} \label{tac-kb}
 48.1156 +\tabcolsep=0.3mm
 48.1157 +\begin{center}
 48.1158 +\begin{tabular}{|ll||cccc|ccc|cccc|} \hline
 48.1159 +tactic &Eingabe & & & &norm\_& &rew\_&rls &eval\_&eval\_&calc\_& \\
 48.1160 +& &thy &scr &Rrls&rls &thm &ord &Rrls&fn &rls &list &dsc\\
 48.1161 +\hline\hline
 48.1162 +Init\_Proof
 48.1163 +&fmz & x & & & x & & & & & & & x \\
 48.1164 +&spec & & & & & & & & & & & \\
 48.1165 +\hline
 48.1166 +\multicolumn{13}{|l|}{model phase}\\
 48.1167 +\hline
 48.1168 +Add\_*
 48.1169 +&Term & x & & & x & & & & & & & x \\
 48.1170 +FormFK &model & x & & & x & & & & & & & x \\
 48.1171 +\hline
 48.1172 +\multicolumn{13}{|l|}{specify phase}\\
 48.1173 +\hline
 48.1174 +Specify\_Theory
 48.1175 +&thyID & x & & & x & & & & x & x & & x \\
 48.1176 +Specify\_Problem
 48.1177 +&pblID & x & & & x & & & & x & x & & x \\
 48.1178 +Refine\_Problem
 48.1179 +&pblID & x & & & x & & & & x & x & & x \\
 48.1180 +Specify\_Method
 48.1181 +&metID & x & & & x & & & & x & x & & x \\
 48.1182 +Apply\_Method
 48.1183 +&metID & x & x & & x & & & & x & x & & x \\
 48.1184 +\hline
 48.1185 +\multicolumn{13}{|l|}{solve phase}\\
 48.1186 +\hline
 48.1187 +Rewrite,\_Inst
 48.1188 +&thm & x & x & & & x &met & & x &met & & \\
 48.1189 +Rewrite, Detail
 48.1190 +&thm & x & x & & & x &rls & & x &rls & & \\
 48.1191 +Rewrite, Detail
 48.1192 +&thm & x & x & & & x &Rrls & & x &Rrls & & \\
 48.1193 +Rewrite\_Set,\_Inst
 48.1194 +&rls & x & x & & & & & x & x & x & & \\
 48.1195 +Calculate
 48.1196 +&op & x & x & & & & & & & & x & \\
 48.1197 +Substitute
 48.1198 +&subs & x & & & x & & & & & & & \\
 48.1199 +& & & & & & & & & & & & \\
 48.1200 +SubProblem
 48.1201 +&spec & x & x & & x & & & & x & x & & x \\
 48.1202 +&fmz & & & & & & & & & & & \\
 48.1203 +\hline
 48.1204 +\end{tabular}\end{center}\end{table}
 48.1205 +
 48.1206 +
 48.1207 +\section{Die theories von \isac{}}
 48.1208 +Die theories von \isac{} basieren auf den theories f\"ur HOL und Real von Isabelle. Diese theories haben eine spezielle Form, die durch die Endung {\tt *.thy} gekennzeichnet sind; normalerweise werden diese theories zusammen mit SML verwendet. Dann haben sie den selben Dateinamen, aber die Endung {\tt *.ML}.
 48.1209 +Die theories von \isac{} representieren den Teil vom Basiswissen von \isac{}, die hierachy von den zwei theories ist nach diesen strukturiert. Die {\tt *.ML} Dateien beinhalten {\em alle} Daten von den anderen zwei Hauptlinien des Basiswissens, die problems und methods (ohne ihre jeweilige Struktur, die von den problem Browsern und den method Browsern gemacht wird, zu pr\"asentieren.
 48.1210 +Die Tab.\ref{theories} auf Seite \pageref{theories} listet die base theories auf, die geplant sind in der Version \isac{} 1 angewendet zu werden. Wir erwarten, dass die Liste erweitert wird in n\"aherer Zukunft, und wir werden uns auch den theorie Browser genauer ansehen.
 48.1211 +Die ersten drei theories auf der Liste geh\"oren {\em nicht} zum Grundwissen von \isac{}; sie besch\"aftigen sich mit der Skriptsprache f\"ur methods und ist hier nur zur Vollst\"andigkeit angef\"uhrt.
 48.1212 +
 48.1213 +{\begin{table}[h]
 48.1214 +\caption{theory von der ersten Version von \isac} \label{theories}
 48.1215 +%\tabcolsep=0.3mm
 48.1216 +\begin{center}
 48.1217 +\def\arraystretch{1.0}
 48.1218 +\begin{tabular}{lp{9.0cm}}
 48.1219 +theory & Beschreibung \\
 48.1220 +\hline
 48.1221 +&\\
 48.1222 +ListI.thy
 48.1223 +& ordnet die Bezeichnungen den Funktionen, die in {\tt Isabelle2002/src/HOL/List.thy} sind, zu und (intermediatly~?) definiert einige weitere Listen von Funktionen\\
 48.1224 +ListI.ML
 48.1225 +& {\tt eval\_fn} f\"ur die zus\"atzliche Listen von Funktionen\\
 48.1226 +Tools.thy
 48.1227 +& Funktion, die f\"ur die Auswertung von Skripten ben\"otigt wird\\
 48.1228 +Tools.ML
 48.1229 +& bezieht sich auf {\tt eval\_fn}s\\
 48.1230 +Script.thy
 48.1231 +& Vorraussetzung f\"ur script: types, tactics, tacticals\\
 48.1232 +Script.ML
 48.1233 +& eine Reihe von tactics und Funktionen f\"ur den internen Gebrauch\\
 48.1234 +& \\
 48.1235 +\hline
 48.1236 +& \\
 48.1237 +Typefix.thy
 48.1238 +& fortgeschrittener Austritt, um den type Fehlern zu entkommen\\
 48.1239 +Descript.thy
 48.1240 +& {\it Beschreibungen} f\"ur die Formeln von {\it Modellen} und {\it Problemen}\\
 48.1241 +Atools
 48.1242 +& Neudefinierung von Operatoren; allgemeine Eigenschaften und Funktionen f\"ur Vorraussetzungen; theorems f\"ur {\tt eval\_rls}\\
 48.1243 +Float
 48.1244 +& Gleitkommerzahlendarstellung\\
 48.1245 +Equation
 48.1246 +& grunds\"atzliche Vorstellung f\"ur  Gleichungen und Gleichungssysteme\\
 48.1247 +Poly
 48.1248 +& Polynome\\
 48.1249 +PolyEq
 48.1250 +& polynomiale Gleichungen und Gleichungssysteme \\
 48.1251 +Rational.thy
 48.1252 +& zus\"atzliche theorems f\"ur Rationale Zahlen\\
 48.1253 +Rational.ML
 48.1254 +& abbrechen, hinzuf\"ugen und vereinfachen von Rationalen Zahlen durch Verwenden von (einer allgemeineren Form von) Euclids Algorithmus; die entsprechenden umgekehrten Regels\"atze\\
 48.1255 +RatEq
 48.1256 +& Gleichung mit rationalen Zahlen\\
 48.1257 +Root
 48.1258 +& Radikanten; berechnen der Normalform; das betreffende umgekehrte Regelwerk\\
 48.1259 +RootEq
 48.1260 +& Gleichungen mit Wurzeln\\
 48.1261 +RatRootEq
 48.1262 +& Gleichungen mit rationalen Zahlen und Wurzeln (z.B. mit Termen, die beide Vorg\"ange enthalten)\\
 48.1263 +Vect
 48.1264 +& Vektoren Analysis\\
 48.1265 +Trig
 48.1266 +& Trigonometrie\\
 48.1267 +LogExp
 48.1268 +& Logarithmus und Exponentialfunktionen\\
 48.1269 +Calculus
 48.1270 +& nicht der Norm entsprechende Analysis\\
 48.1271 +Diff
 48.1272 +& Differenzierung\\
 48.1273 +DiffApp
 48.1274 +& Anwendungen beim Differenzieren (Maximum-Minimum-Probleme)\\
 48.1275 +Test
 48.1276 +& (alte) Daten f\"ur Testfolgen\\
 48.1277 +Isac
 48.1278 +& enth\"alt alle Theorien von\isac{}\\
 48.1279 +\end{tabular}\end{center}\end{table}}
 48.1280 +
 48.1281 +
 48.1282 +\section{Daten in {\tt *.thy} und {\tt *.ML}}
 48.1283 +Wie schon zuvor angesprochen, haben die Arbeiten die theories von *.thy und *.ML zusammen und haben deswegen den selben Dateiname. Wie diese Daten zwischen den zwei Dateien verteilt werden wird in der
 48.1284 +Tab.\ref{thy-ML} auf Seite \pageref{thy-ML} gezeigt. Die Ordnung von den Datenteilchen in den theories sollte an der Ordnung von der Liste festhalten.
 48.1285 +
 48.1286 +{\begin{table}[h]
 48.1287 +\caption{Daten in {\tt *.thy}- und {\tt *.ML}-files} \label{thy-ML}
 48.1288 +\tabcolsep=2.0mm
 48.1289 +\begin{center}
 48.1290 +\def\arraystretch{1.0}
 48.1291 +\begin{tabular}{llp{7.7cm}}
 48.1292 +Datei & Daten & Beschreibung \\
 48.1293 +\hline
 48.1294 +& &\\
 48.1295 +{\tt *.thy}
 48.1296 +& consts
 48.1297 +& Operatoren, Eigenschaften, Funktionen und Skriptnamen ('{\tt Skript} Name \dots{\tt Argumente}')
 48.1298 +\\
 48.1299 +& rules
 48.1300 +& theorems: \isac{} verwendet theorems von Isabelle, wenn m\"oglich; zus\"atzliche theorems, die jenen von Isabelle entsprechen, bekommen ein {\it I} angeh\"angt
 48.1301 +\\& &\\
 48.1302 +{\tt *.ML}
 48.1303 +& {\tt theory' :=}
 48.1304 +& Die theory, die 
 48.1305 +abgegrenzt ist von der {\tt *.thy}-Datei, wird durch \isac{} zug\"anglich gemacht
 48.1306 +\\
 48.1307 +& {\tt eval\_fn}
 48.1308 +& die Auswertungsfunktion f\"ur die Operatoren und Eigenschaften, kodiert im meta-Level (SML); die Bezeichnugn von so einer Funktion ist eine Kombination von Schl\"usselw\"ortern {\tt eval\_} und einer Bezeichnung von der Funktion, die in in {\tt *.thy} erkl\"art ist
 48.1309 +\\
 48.1310 +& {\tt *\_simplify}
 48.1311 +& der automatisierte Vereinfacher f\"ur die tats\"achliche Theorie, z.B. die Bezeichnung von diesem Regelwerk ist eine Kombination aus den Theorienbezeichnungen und dem Schl\"usselwort {\tt *\_simplify}
 48.1312 +\\
 48.1313 +& {\tt norm\_rls :=}
 48.1314 +& der automatisierte Vereinfacher {\tt *\_simplify} wird so aufgehoben, dass er \"uber \isac{}  zug\"anglich ist
 48.1315 +\\
 48.1316 +& {\tt rew\_ord' :=}
 48.1317 +& das Gleiche f\"ur die Anordnung des Rewriting, wenn es ausserhalb eines speziellen Regelwerks gebraucht wird
 48.1318 +\\
 48.1319 +& {\tt ruleset' :=}
 48.1320 +& dasselbe wie f\"ur Regels\"atze (gew\"ohnliche Regels\"atze, umgekehrte Regels\"atze, und {\tt eval\_rls})
 48.1321 +\\
 48.1322 +& {\tt calc\_list :=}
 48.1323 +& dasselbe f\"ur {\tt eval\_fn}s, wenn es ausserhalb eines bestimmten Regelwerks gebraucht wird (wenn es ausserhalb eines bestimmten Regelwerks ben\"otigt wird) (z.B. f\"ur eine tactic {\tt Calculate} in einem Skript)
 48.1324 +\\
 48.1325 +& {\tt store\_pbl}
 48.1326 +& Problems, die in {\tt *.ML}-Dateien definiert sind, werden zug\"anglich f\"ur \isac{}
 48.1327 +\\
 48.1328 +& {\tt methods :=}
 48.1329 +& methods, die in {\tt *.ML}-Dateien definiert sind werden zug\"anglich f\"ur \isac{}
 48.1330 +\\
 48.1331 +\end{tabular}\end{center}\end{table}}
 48.1332 +
 48.1333 +\section{Formale Beschreibung der Hierarchie von Problemen}
 48.1334 +
 48.1335 +\section{Skripttaktiken}
 48.1336 +Tats\"achlich sind es die tactics, die die Berechnungen vorantreiben: im Hintergrund bauen sie den proof tree und sie \"ubernehmen die wichtigsten Aufgaben w\"ahrend der Auswertung bei der der ''script-interpreter`` zur Steuerung des Benutzers transferiert wird. Hier beschreiben wir nur den Syntax von tactics; die Semantik ist beschrieben etwas weiter unten im Kontext mit tactics, die die Benutzer/Innen dieses Programmes verwenden: Es gibt einen Schriftverkehr zwischen den user-tactics und den script tactics.
 48.1337 +
 48.1338 +
 48.1339 +
 48.1340 +\part{Authoring on the knowledge}
 48.1341 +
 48.1342 +
 48.1343 +\section{Add a theorem}
 48.1344 +\section{Define and add a problem}
 48.1345 +\section{Define and add a predicate}
 48.1346 +\section{Define and add a method}
 48.1347 +\section{}
 48.1348 +\section{}
 48.1349 +\section{}
 48.1350 +\section{}
 48.1351 +
 48.1352 +
 48.1353 +
 48.1354 +\newpage
 48.1355 +\bibliography{bib/isac,bib/from-theses}
 48.1356 +
 48.1357 +\end{document}
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/doc-isac/mat-eng-en.tex	Tue Sep 17 09:50:52 2013 +0200
    49.3 @@ -0,0 +1,1771 @@
    49.4 +%WN051006 dropped in code, but interesting for case study 'order a list'
    49.5 +%EqSystem.thy
    49.6 +%---------------------------------------------------------------------------
    49.7 +%
    49.8 +% order'_system      :: "bool list => bool list " ("order'_system _")
    49.9 +%
   49.10 +%EqSystem.ML
   49.11 +%---------------------------------------------------------------------------
   49.12 +%(*("order_system", ("EqSystem.order'_system", 
   49.13 +%                   eval_order_system "#eval_order_system_"))*)
   49.14 +%fun eval_order_system _ "EqSystem.order'_system"
   49.15 +%                         (p as (Const ("EqSystem.order'_system",_) $ ts)) _ =
   49.16 +%    let val ts' = sort (ord_simplify_Integral_ false (assoc_thy"Isac.thy") [])
   49.17 +%                (isalist2list ts)
   49.18 +%       val ts'' = list2isalist HOLogic.boolT ts'
   49.19 +%    in if ts <> ts''
   49.20 +%       then Some (term2str p ^ " = " ^ term2str ts'',
   49.21 +%              Trueprop $ (mk_equality (p,ts'')))
   49.22 +%       else None
   49.23 +%    end
   49.24 +%  | eval_order_system _ _ _ _ = None;
   49.25 +%
   49.26 +%
   49.27 +%"Script Norm2SystemScript (es_::bool list) (vs_::real list) = \
   49.28 +%\  (let es__ = Try (Rewrite_Set simplify_Integral_parenthesized False) es_; \
   49.29 +%\       es__ = (Try (Calculate order_system_) (order_system es__))\
   49.30 +%\in (SubProblem (Biegelinie_,[linear,system],[no_met])\
   49.31 +%\                  [bool_list_ es__, real_list_ vs_]))"
   49.32 +%              ));
   49.33 +%
   49.34 +%eqsystem.sml
   49.35 +%---------------------------------------------------------------------------
   49.36 +%"----------- eval_sort -------------------------------------------";
   49.37 +%"----------- eval_sort -------------------------------------------";
   49.38 +%"----------- eval_sort -------------------------------------------";
   49.39 +%val ts = str2term "[c_2 = 0, -1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0]";
   49.40 +%val ts' = sort (ord_simplify_Integral_ false (assoc_thy"Isac.thy") [])
   49.41 +%              (isalist2list ts);
   49.42 +%terms2str ts';
   49.43 +%val ts'' = list2isalist HOLogic.boolT ts';
   49.44 +%if term2str ts'' = "[-1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0, c_2 = 0]"
   49.45 +%then () else raise error "eqsystem.sml eval_sort 1";
   49.46 +%
   49.47 +%val t = str2term "order_system [c_2 = 0,\
   49.48 +%                \-1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0]";
   49.49 +%val Some (str,_) = eval_order_system "" "EqSystem.order'_system" t "";
   49.50 +%if str = "order_system [c_2 = 0, -1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0] = [-1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0, c_2 = 0]" then ()
   49.51 +%else raise error "eqsystem.sml eval_sort 2";
   49.52 +%
   49.53 +%
   49.54 +%
   49.55 +%  calculate_ thy ("EqSystem.order'_system", 
   49.56 +%                 eval_order_system "#eval_order_system_") t;
   49.57 +%
   49.58 +%---------------------------------------------------------------------------
   49.59 +%---------------------------------------------------------------------------
   49.60 +%---------------------------------------------------------------------------
   49.61 +
   49.62 +
   49.63 +%In the following this text is not compatible with isac-code:
   49.64 +%* move termorder to knowledge: FIXXXmat0201a
   49.65 +%
   49.66 +%
   49.67 +
   49.68 +\documentclass[11pt,a4paper,headline,headcount,towside,nocenter]{report}
   49.69 +\usepackage{latexsym}           % recommended by Ch.Schinagl 10.98
   49.70 +\bibliographystyle{alpha}
   49.71 +
   49.72 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   49.73 +
   49.74 +\title{\isac --- Interface for\\
   49.75 +  Developers of Math Knowledge\\[1.0ex]
   49.76 +  and\\[1.0ex]
   49.77 +  Tools for Experiments in\\
   49.78 +  Symbolic Computation\\[1.0ex]}
   49.79 +\author{The \isac-Team\\
   49.80 +  \tt isac-users@ist.tugraz.at\\[1.0ex]}
   49.81 +\date{\today}
   49.82 +
   49.83 +\begin{document}
   49.84 +\maketitle
   49.85 +\newpage
   49.86 +\tableofcontents
   49.87 +\newpage
   49.88 +\listoftables
   49.89 +\newpage
   49.90 +
   49.91 +\chapter{Introduction}
   49.92 +\section{The scope of this document}
   49.93 +\paragraph{As a manual:} This document describes the interface to \isac's kernel (KE), the interface to the mathematics engine (ME) included in the KE, and to the various tools like rewriting, matching etc.
   49.94 +
   49.95 +\isac's KE is written in SML, the language developed in conjunction with predecessors of the theorem prover Isabelle. Thus, in this document we use the plain ASCII representation of SML code. The reader may note that the \isac-user is presented a completely different view on a graphical user interface.
   49.96 +
   49.97 +The document is selfcontained; basic knowledge about SML (as an introduction \cite{Paulson:91} is recommended), terms and rewriting is assumed.
   49.98 +
   49.99 +%The interfaces will be moderately exended during the first phase of development of the mathematics knowledge. The work on the subprojects defined should {\em not} create interfaces of any interest to a user or another author of knowledge except identifiers (of type string) for theorems, rulesets etc.
  49.100 +
  49.101 +Notation: SML code, directories, file names are {\tt written in 'tt'}; in particular {\tt ML>} is the KE prompt.
  49.102 +
  49.103 +\paragraph{Give it a try !} Another aim of this text is to give the reader hints for experiments with the tools introduced.
  49.104 +
  49.105 +\section{Related documents}\label{related-docs}
  49.106 +Isabelle reference manual \cite{Isa-ref}, also contained in the Isabelle distribution under $\sim${\tt /doc/}.
  49.107 +
  49.108 +{\bf The actual locations of files is being recorded in \\{\tt /software/services/isac/README}
  49.109 +\footnote{The KEs current version is {\tt isac.020120-math/} which is based on the version Isabelle99 at {\tt http://isabelle.in.tum.de}.\\
  49.110 +The current locations at IST are\\
  49.111 +{\tt [isabelle]\hspace{3em}      /software/sol26/Isabelle99/}\\
  49.112 +{\tt [isac-src]\hspace{3em}      /software/services/isac/src/ke/}\\ 
  49.113 +{\tt [isac-bin]\hspace{3em}      /software/services/isac/bin/ke/}
  49.114 +} 
  49.115 +and rigorously updated.} In this document we refer to the following directories
  49.116 +\begin{tabbing}
  49.117 +xxx\=Isabelle sources1234 \=\kill
  49.118 +\>Isabelle sources \> {\tt [isabelle]/}\\
  49.119 +\>KE sources       \> {\tt [isac-src]/\dots{version}\dots/}\\
  49.120 +\>KE binary        \> {\tt [isac-bin]/\dots{version}\dots/}
  49.121 +\end{tabbing}
  49.122 +where {\tt\dots version\dots} stands for a directory-name containing information on the version.
  49.123 +
  49.124 +\section{Getting started}
  49.125 +Change to the directory {\tt [isac-bin]} where \isac's binary is located and type to the unix-prompt '$>$' (ask your system administrator where the directory {\tt [isac-bin]} is on your system):
  49.126 +\begin{verbatim}
  49.127 +   > [isac-bin]/sml @SMLload=isac.020120-math
  49.128 +   val it = false : bool
  49.129 +   ML>
  49.130 +\end{verbatim}
  49.131 +yielding the message {\tt val it = false : bool} followed by the prompt of the KE. Having been successful so far, just type in the input presented below -- all of it belongs to {\em one} session~!
  49.132 +
  49.133 +\part{Experimental approach}
  49.134 +
  49.135 +\chapter{Basics, terms and parsing}
  49.136 +Isabelle implements terms of the {\it simply typed lambda calculus} \cite{typed-lambda} defined in $\sim${\tt/src/Pure.ML}. 
  49.137 +\section{The definition of terms}
  49.138 +There are two kinds of terms in Isabelle, 'raw terms' and 'certified terms'. \isac{} works on raw terms, which are efficient but hard to comprehend. 
  49.139 +{\footnotesize\begin{verbatim}
  49.140 +   datatype term = 
  49.141 +       Const of string * typ
  49.142 +     | Free  of string * typ 
  49.143 +     | Var   of indexname * typ
  49.144 +     | Bound of int
  49.145 +     | Abs   of string * typ * term
  49.146 +     | op $  of term * term;
  49.147 +
  49.148 +   datatype typ = Type  of string * typ list
  49.149 +                | TFree of string * sort
  49.150 +                | TVar  of indexname * sort;
  49.151 +\end{verbatim}}%size % $
  49.152 +where the definitions of sort and indexname is not relevant in this context. The {\tt typ}e is being inferred during parsing. Parsing creates the other kind of terms, {\tt cterm}. These {\tt cterm}s are encapsulated records, which cannot be composed without the respective Isabelle functions (checking for type correctness), but which then are conveniently displayed as strings (using SML compiler internals -- see below).
  49.153 +
  49.154 +\section{Theories and parsing}
  49.155 +Parsing uses information contained in Isabelles theories $\sim${\tt /src/HOL}. The currently active theory is held in a global variable {\tt thy}; theories can be accessed individually;
  49.156 +{\footnotesize\begin{verbatim}
  49.157 +   ML> thy;
  49.158 +   val it =
  49.159 +     {ProtoPure, CPure, HOL, Ord, Set, subset, equalities, mono, Vimage, Fun,
  49.160 +       Prod, Lfp, Relation, Trancl, WF, NatDef, Gfp, Sum, Inductive, Nat, Arith,
  49.161 +       Divides, Power, Finite, Equiv, IntDef, Int, Univ, Datatype, Numeral, Bin,
  49.162 +       IntArith, WF_Rel, Recdef, IntDiv, NatBin, List, Option, Map, Record,
  49.163 +       RelPow, Sexp, String, Calculation, SVC_Oracle, Main, Zorn, Filter, PNat,
  49.164 +       PRat, PReal, RealDef, RealOrd, RealInt, RealBin, HyperDef, Descript, ListG,
  49.165 +       Tools, Script, Typefix, Atools, RatArith, SqRoot, Differentiate, DiffAppl,
  49.166 +       InsSort, Isac} : theory                                                    ML>
  49.167 +   ML> HOL.thy;
  49.168 +   val it = {ProtoPure, CPure, HOL} : theory 
  49.169 +   ML>
  49.170 +   ML> parse;
  49.171 +   val it = fn : theory -> string -> cterm option
  49.172 +   ML> parse thy "a + b * #3";
  49.173 +   val it = Some "a + b * #3" : cterm option
  49.174 +   ML>
  49.175 +   ML> val t = (term_of o the) it;
  49.176 +   val t = Const (#,#) $ Free (#,#) $ (Const # $ Free # $ Free (#,#)) : term
  49.177 +\end{verbatim}}%size
  49.178 +where {\tt term\_of} and {\tt the} are explained below. The syntax of the list of characters can be read out of Isabelles theories \cite{Isa-obj} {\tt [isabelle]/src/HOL/}\footnote{Or you may use your internetbrowser to look at the files in {\tt [isabelle]/browser\_info}.} 
  49.179 +and from theories developed with in \isac{} at {\tt [isac-src]/knowledge/}. Note that the syntax of the terms is different from those displayed at \isac's frontend after conversion to MathML.
  49.180 +
  49.181 +
  49.182 +\section{Displaying terms}
  49.183 +The print depth on the SML top-level can be set in order to produce output in the amount of detail desired:
  49.184 +{\footnotesize\begin{verbatim}
  49.185 +   ML> Compiler.Control.Print.printDepth;
  49.186 +   val it = ref 4 : int ref
  49.187 +   ML>
  49.188 +   ML> Compiler.Control.Print.printDepth:= 2;
  49.189 +   val it = () : unit
  49.190 +   ML> t;
  49.191 +   val it = # $ # $ (# $ #) : term
  49.192 +   ML>
  49.193 +   ML> Compiler.Control.Print.printDepth:= 6;
  49.194 +   val it = () : unit
  49.195 +   ML> t;
  49.196 +   val it =
  49.197 +     Const ("op +","[RealDef.real, RealDef.real] => RealDef.real") $
  49.198 +     Free ("a","RealDef.real") $
  49.199 +     (Const ("op *","[RealDef.real, RealDef.real] => RealDef.real") $
  49.200 +      Free ("b","RealDef.real") $ Free ("#3","RealDef.real")) : term
  49.201 +\end{verbatim}}%size % $
  49.202 +A closer look to the latter output shows that {\tt typ} is output as a string like {\tt cterm}. Other useful settings for the output are:
  49.203 +{\footnotesize\begin{verbatim}
  49.204 +   ML> Compiler.Control.Print.printLength;
  49.205 +   val it = ref 8 : int ref
  49.206 +   ML> Compiler.Control.Print.stringDepth;
  49.207 +   val it = ref 250 : int ref
  49.208 +\end{verbatim}}%size
  49.209 +Anyway, the SML output of terms is not very readable; there are functions in the KE to display them:
  49.210 +{\footnotesize\begin{verbatim}
  49.211 +   ML> atomt;
  49.212 +   val it = fn : term -> unit
  49.213 +   ML> atomt t; 
  49.214 +   *** -------------
  49.215 +   *** Const ( op +)
  49.216 +   *** . Free ( a, )
  49.217 +   *** . Const ( op *)
  49.218 +   *** . . Free ( b, )
  49.219 +   *** . . Free ( #3, )
  49.220 +   val it = () : unit
  49.221 +   ML>
  49.222 +   ML> atomty;
  49.223 +   val it = fn : theory -> term -> unit
  49.224 +   ML> atomty thy t;
  49.225 +   *** -------------
  49.226 +   *** Const ( op +, [real, real] => real)
  49.227 +   *** . Free ( a, real)
  49.228 +   *** . Const ( op *, [real, real] => real)
  49.229 +   *** . . Free ( b, real)
  49.230 +   *** . . Free ( #3, real)
  49.231 +   val it = () : unit
  49.232 +\end{verbatim}}%size
  49.233 +where again the {\tt typ}s are rendered as strings, but more elegantly by use of the information contained in {\tt thy}..
  49.234 +
  49.235 +\paragraph{Give it a try !} {\bf The mathematics knowledge grows} as it is defined in Isabelle theory by theory. Have a look by your internet browser to the hierarchy of those theories at {\tt [isabelle]/src/HOL/HOL.thy} and its children available on your system. Or you may use your internetbrowser to look at the files in {\tt [isabelle]/browser\_info}.
  49.236 +{\footnotesize\begin{verbatim}
  49.237 +   ML> (*-1-*) parse HOL.thy "#2^^^#3";
  49.238 +   *** Inner lexical error at: "^^^#3"
  49.239 +   val it = None : cterm option
  49.240 +   ML>
  49.241 +   ML> (*-2-*) parse HOL.thy "d_d x (a + x)";
  49.242 +   val it = None : cterm option
  49.243 +   ML>
  49.244 +   ML>
  49.245 +   ML> (*-3-*) parse RatArith.thy "#2^^^#3";
  49.246 +   val it = Some "#2 ^^^ #3" : cterm option
  49.247 +   ML>
  49.248 +   ML> (*-4-*) parse RatArith.thy "d_d x (a + x)";
  49.249 +   val it = Some "d_d x (a + x)" : cterm option
  49.250 +   ML>
  49.251 +   ML>
  49.252 +   ML> (*-5-*) parse Differentiate.thy "d_d x (a + x)";
  49.253 +   val it = Some "d_d x (a + x)" : cterm option
  49.254 +   ML>
  49.255 +   ML> (*-6-*) parse Differentiate.thy "#2^^^#3";
  49.256 +   val it = Some "#2 ^^^ #3" : cterm option
  49.257 +\end{verbatim}}%size
  49.258 +Don't trust the string representation: if we convert {\tt(*-4-*)} and {\tt(*-6-*)} to terms \dots
  49.259 +{\footnotesize\begin{verbatim}
  49.260 +   ML> (*-4-*) val thy = RatArith.thy;
  49.261 +   ML> ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
  49.262 +   *** -------------
  49.263 +   *** Free ( d_d, [real, real] => real)
  49.264 +   *** . Free ( x, real)
  49.265 +   *** . Const ( op +, [real, real] => real)
  49.266 +   *** . . Free ( a, real)
  49.267 +   *** . . Free ( x, real)
  49.268 +   val it = () : unit
  49.269 +   ML>
  49.270 +   ML> (*-6-*) val thy = Differentiate.thy;
  49.271 +   ML> ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
  49.272 +   *** -------------
  49.273 +   *** Const ( Differentiate.d_d, [real, real] => real)
  49.274 +   *** . Free ( x, real)
  49.275 +   *** . Const ( op +, [real, real] => real)
  49.276 +   *** . . Free ( a, real)
  49.277 +   *** . . Free ( x, real)
  49.278 +   val it = () : unit
  49.279 +\end{verbatim}}%size
  49.280 +\dots we see: in {\tt(*-4-*)} we have an arbitrary function {\tt Free ( d\_d, \_)} and in {\tt(*-6-*)} we have the special function constant {\tt Const ( Differentiate.d\_d, \_)} for differentiation, which is defined in {\tt Differentiate.thy} and presumerably is meant.
  49.281 +
  49.282 +
  49.283 +\section{Converting terms}
  49.284 +The conversion from {\tt cterm} to {\tt term} has been shown above:
  49.285 +{\footnotesize\begin{verbatim}
  49.286 +   ML> term_of;
  49.287 +   val it = fn : cterm -> term
  49.288 +   ML>
  49.289 +   ML> the;
  49.290 +   val it = fn : 'a option -> 'a
  49.291 +   ML>
  49.292 +   ML> val t = (term_of o the o (parse thy)) "a + b * #3";
  49.293 +   val t = Const (#,#) $ Free (#,#) $ (Const # $ Free # $ Free (#,#)) : term
  49.294 +\end{verbatim}}%size
  49.295 +where {\tt the} unwraps the {\tt term option} --- an auxiliary function from Larry Paulsons basic library at {\tt [isabelle]/src/Pure/library.ML}, which is really worthwile to study for any SML programmer.
  49.296 +
  49.297 +The other conversions are the following, some of which use the {\it signature} {\tt sign} of a theory:
  49.298 +{\footnotesize\begin{verbatim}
  49.299 +   ML> sign_of;
  49.300 +   val it = fn : theory -> Sign.sg
  49.301 +   ML>
  49.302 +   ML> cterm_of;
  49.303 +   val it = fn : Sign.sg -> term -> cterm
  49.304 +   ML> val ct = cterm_of (sign_of thy) t;
  49.305 +   val ct = "a + b * #3" : cterm
  49.306 +   ML>
  49.307 +   ML> Sign.string_of_term;
  49.308 +   val it = fn : Sign.sg -> term -> string
  49.309 +   ML> Sign.string_of_term (sign_of thy) t;
  49.310 +   val it = "a + b * #3" : ctem'
  49.311 +   ML>
  49.312 +   ML> string_of_cterm;
  49.313 +   val it = fn : cterm -> string
  49.314 +   ML> string_of_cterm ct;
  49.315 +   val it = "a + b * #3" : ctem'
  49.316 +\end{verbatim}}%size
  49.317 +
  49.318 +\section{Theorems}
  49.319 +Theorems are a type, {\tt thm}, even more protected than {\tt cterms}: they are defined as axioms or proven in Isabelle. These definitions and proofs are contained in theories in the directory {\tt[isac-src]/knowledge/}, e.g. the theorem {\tt diff\_sum} in the theory {\tt[isac-src]/knowledge/Differentiate.thy}. Additionally, each theorem has to be recorded for \isac{} in the respective {\tt *.ML}, e.g. {\tt diff\_sum} in {\tt[isac-src]/knowledge/Differentiate.ML} as follows:
  49.320 +{\footnotesize\begin{verbatim}
  49.321 +   ML> theorem' := overwritel (!theorem',
  49.322 +   [("diff_const",num_str diff_const)
  49.323 +   ]);
  49.324 +\end{verbatim}}%size
  49.325 +The additional recording of theorems and other values will disappear in later versions of \isac.
  49.326 +
  49.327 +\chapter{Rewriting}
  49.328 +\section{The arguments for rewriting}
  49.329 +The type identifiers of the arguments and values of the rewrite-functions in \ref{rewrite} differ only in an apostroph: the apostrohped types are re-named strings in order to maintain readability.
  49.330 +{\footnotesize\begin{verbatim}
  49.331 +   ML> HOL.thy;
  49.332 +   val it = {ProtoPure, CPure, HOL} : theory
  49.333 +   ML> "HOL.thy" : theory';
  49.334 +   val it = "HOL.thy" : theory'
  49.335 +   ML>
  49.336 +   ML> sqrt_right;
  49.337 +   val it = fn : rew_ord (* term * term -> bool *)
  49.338 +   ML> "sqrt_right" : rew_ord';
  49.339 +   val it = "sqrt_right" : rew_ord'
  49.340 +   ML>
  49.341 +   ML> eval_rls;
  49.342 +   val it =
  49.343 +     Rls
  49.344 +       {preconds=[],rew_ord=("sqrt_right",fn),
  49.345 +        rules=[Thm #,Thm #,Thm #,Thm #,Thm #,Thm #,Thm #,Thm #,
  49.346 +               Thm #,Thm #,Thm #,Thm #,Thm #,Calc #,Calc #,...],
  49.347 +        scr=Script (Free #)} : rls
  49.348 +   ML> "eval_rls" : rls';
  49.349 +   val it = "eval_rls" : rls'
  49.350 +   ML>
  49.351 +   ML> diff_sum;
  49.352 +   val it = "d_d ?bdv (?u + ?v) = d_d ?bdv ?u + d_d ?bdv ?v" : thm
  49.353 +   ML> ("diff_sum", "") : thm';
  49.354 +   val it = ("diff_sum","") : thm'
  49.355 +\end{verbatim}}%size
  49.356 +where a {\tt thm'} is a pair, eventually with the string-representation of the respective theorem.
  49.357 + 
  49.358 +\section{The functions for rewriting}\label{rewrite}
  49.359 +Rewriting comes along with two equivalent functions, where the first is being actually used within the KE, and the second one is useful for tests: 
  49.360 +{\footnotesize\begin{verbatim}
  49.361 +   ML> rewrite_;
  49.362 +   val it = fn
  49.363 +     : theory
  49.364 +       -> rew_ord
  49.365 +          -> rls -> bool -> thm -> term -> (term * term list) option
  49.366 +   ML>
  49.367 +   ML> rewrite;
  49.368 +   val it = fn
  49.369 +     : theory'
  49.370 +       -> rew_ord'
  49.371 +          -> rls' -> bool -> thm' -> cterm' -> (cterm' * cterm' list) option
  49.372 +\end{verbatim}}%size
  49.373 +The arguments are the following:\\
  49.374 +\tabcolsep=4mm
  49.375 +\def\arraystretch{1.5}
  49.376 +\begin{tabular}{lp{11.0cm}}
  49.377 +  {\tt theory}  & the Isabelle theory containing the definitions necessary for parsing the {\tt term} \\
  49.378 +  {\tt rew\_ord}& the rewrite order \cite{nipk:rew-all-that} for ordered rewriting -- see the section \ref{term-order} below. For {\em no} ordered rewriting take {\tt tless\_true}, a dummy order yielding true for all arguments \\
  49.379 +  {\tt rls}     & the rule set for evaluating the condition within {\tt thm} in case {\tt thm} is a conditional rule \\
  49.380 +  {\tt bool}    & a flag which triggers the evaluation of the eventual condition in {\tt thm}: if {\tt false} then evaluate the condition and according to the result of the evaluation apply {\tt thm} or not (conditional rewriting \cite{nipk:rew-all-that}), if {\tt true} then don't evaluate the condition, but put it into the set of assumptions \\
  49.381 +  {\tt thm}     & the theorem used to try to rewrite {\tt term} \\
  49.382 +  {\tt term}    & the term eventually rewritten by {\tt thm} \\
  49.383 +\end{tabular}\\
  49.384 +
  49.385 +\noindent The respective values of {\tt rewrite\_} and {\tt rewrite} are an {\tt option} of a pair, i.e. {\tt Some(\_,\_)} in case the {\tt term} can be rewritten by {\tt thm} w.r.t. {\tt rew\_ord} and/or {\tt rls}, or {\tt None} if no rewrite is found:\\
  49.386 +\begin{tabular}{lp{10.4cm}}
  49.387 +  {\tt term}     & the term rewritten \\
  49.388 +  {\tt term list}& the assumptions eventually generated if the {\tt bool} flag is set to {\tt true} and {\tt thm} is applicable. \\
  49.389 +\end{tabular}\\
  49.390 +
  49.391 +\paragraph{Give it a try !} {\bf\dots rewriting is fun~!} many examples can be found in {\tt [isac-src]/tests/\dots}. In {\tt [isac-src]/tests/differentiate.sml} the following can be found:
  49.392 +{\footnotesize\begin{verbatim}
  49.393 +   ML> val thy' = "Differentiate.thy";
  49.394 +   val thy' = "Differentiate.thy" : string
  49.395 +   ML> val ct = "d_d x (x ^^^ #2 + #3 * x + #4)";
  49.396 +   val ct = "d_d x (x ^^^ #2 + #3 * x + #4)" : cterm'
  49.397 +   ML>
  49.398 +   ML> val thm = ("diff_sum","");
  49.399 +   val thm = ("diff_sum","") : thm'
  49.400 +   ML> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
  49.401 +                     [("bdv","x::real")] thm ct;
  49.402 +   val ct = "d_d x (x ^^^ #2 + #3 * x) + d_d x #4" : cterm'
  49.403 +   ML>
  49.404 +   ML> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
  49.405 +                     [("bdv","x::real")] thm ct;
  49.406 +   val ct = "d_d x (x ^^^ #2) + d_d x (#3 * x) + d_d x #4" : cterm'
  49.407 +   ML>
  49.408 +   ML> val thm = ("diff_prod_const","");
  49.409 +   val thm = ("diff_prod_const","") : thm'
  49.410 +   ML> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
  49.411 +                     [("bdv","x::real")] thm ct;
  49.412 +   val ct = "d_d x (x ^^^ #2) + #3 * d_d x x + d_d x #4" : cterm'
  49.413 +\end{verbatim}}%size
  49.414 +You can look up the theorems in {\tt [isac-src]/knowledge/Differentiate.thy} and try to apply them until you get the result you would expect if calculating by hand.
  49.415 +\footnote{Hint: At the end you will need {\tt val (ct,\_) = the (rewrite\_set thy' "eval\_rls" false "SqRoot\_simplify" ct);}}
  49.416 +
  49.417 +\paragraph{Give it a try !}\label{cond-rew} {\bf Conditional rewriting} is a more powerful technique then ordinary rewriting, and is closer to the power of programming languages (see the subsequent 'try it out'~!). The following example expands a term to poynomial form:
  49.418 +{\footnotesize\begin{verbatim}
  49.419 +   ML> val thy' = "Isac.thy";
  49.420 +   val thy' = "Isac.thy" : string
  49.421 +   ML> val ct' = "#3 * a + #2 * (a + #1)";
  49.422 +   val ct' = "#3 * a + #2 * (a + #1)" : cterm'
  49.423 +   ML>
  49.424 +   ML> val thm' = ("radd_mult_distrib2","?k * (?m + ?n) = ?k * ?m + ?k * ?n");
  49.425 +   val thm' = ("radd_mult_distrib2","?k * (?m + ?n) = ?k * ?m + ?k * ?n")
  49.426 +     : thm'
  49.427 +   ML> (*1*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.428 +   val ct' = "#3 * a + (#2 * a + #2 * #1)" : cterm'
  49.429 +   ML>
  49.430 +   ML> val thm' = ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1");
  49.431 +   val thm' = ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1")
  49.432 +     : thm'
  49.433 +   ML> (*2*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.434 +   val ct' = "#3 * a + #2 * a + #2 * #1" : cterm'
  49.435 +   ML>
  49.436 +   ML> val thm' = ("rcollect_right",
  49.437 +     "[| ?l is_const; ?m is_const |] ==> ?l * ?n + ?m * ?n = (?l + ?m) * ?n");
  49.438 +   val thm' =
  49.439 +     ("rcollect_right",
  49.440 +      "[| ?l is_const; ?m is_const |] ==> ?l * ?n + ?m * ?n = (?l + ?m) * ?n")
  49.441 +     : thm'
  49.442 +   ML> (*3*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.443 +   val ct' = "(#3 + #2) * a + #2 * #1" : cterm'
  49.444 +   ML>
  49.445 +   ML> (*4*) val Some (ct',_) = calculate' thy' "plus" ct';
  49.446 +   val ct' = "#5 * a + #2 * #1" : cterm'
  49.447 +   ML>
  49.448 +   ML> (*5*) val Some (ct',_) = calculate' thy' "times" ct';
  49.449 +   val ct' = "#5 * a + #2" : cterm'
  49.450 +\end{verbatim}}%size
  49.451 +Note, that the two rules, {\tt radd\_mult\_distrib2} in {\tt(*1*)} and {\tt rcollect\_right} in {\tt(*3*)} would neutralize each other (i.e. a rule set would not terminate), if there would not be the condition {\tt is\_const}.
  49.452 +
  49.453 +\paragraph{Give it a try !} {\bf Functional programming} can, within a certain range, modeled by rewriting. In {\tt [isac-src]/\dots/tests/InsSort.thy} the following rules can be found, which are able to sort a list ('insertion sort'):
  49.454 +{\footnotesize\begin{verbatim}
  49.455 +   sort_def   "sort ls = foldr ins ls []"
  49.456 +
  49.457 +   ins_base   "ins [] a = [a]"
  49.458 +   ins_rec    "ins (x#xs) a = (if x < a then x#(ins xs a) else a#(x#xs))"  
  49.459 +
  49.460 +   foldr_base "foldr f [] a = a"
  49.461 +   foldr_rec  "foldr f (x#xs) a = foldr f xs (f a x)"
  49.462 +
  49.463 +   if_True    "(if True then ?x else ?y) = ?x"
  49.464 +   if_False   "(if False then ?x else ?y) = ?y"
  49.465 +\end{verbatim}}%size
  49.466 +where {\tt\#} is the list-constructor, {\tt foldr} is the well-known standard function of functional programming, and {\tt if\_True, if\_False} are auxiliary rules. Then the sort may be done by the following rewrites:
  49.467 +{\footnotesize\begin{verbatim}
  49.468 +   ML>  val thy' = "InsSort.thy";
  49.469 +   val thy' = "InsSort.thy" : theory'
  49.470 +   ML>  val ct = "sort [#1,#3,#2]" : cterm';
  49.471 +   val ct = "sort [#1,#3,#2]" : cterm'
  49.472 +   ML>
  49.473 +   ML>  val thm = ("sort_def","");
  49.474 +   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  49.475 +   val ct = "foldr ins [#1, #3, #2] []" : cterm'
  49.476 +   ML>
  49.477 +   ML>  val thm = ("foldr_rec","");
  49.478 +   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  49.479 +   val ct = "foldr ins [#3, #2] (ins [] #1)" : cterm'
  49.480 +   ML>
  49.481 +   ML>  val thm = ("ins_base","");
  49.482 +   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  49.483 +   val ct = "foldr ins [#3, #2] [#1]" : cterm'
  49.484 +   ML>
  49.485 +   ML>  val thm = ("foldr_rec","");
  49.486 +   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  49.487 +   val ct = "foldr ins [#2] (ins [#1] #3)" : cterm'
  49.488 +   ML>
  49.489 +   ML>  val thm = ("ins_rec","");
  49.490 +   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  49.491 +   val ct = "foldr ins [#2] (if #1 < #3 then #1 # ins [] #3 else [#3, #1])"
  49.492 +     : cterm'
  49.493 +   ML>
  49.494 +   ML>  val (ct,_) = the (calculate' thy' "le" ct);
  49.495 +   val ct = "foldr ins [#2] (if True then #1 # ins [] #3 else [#3, #1])" : cterm'
  49.496 +   ML>
  49.497 +   ML>  val thm = ("if_True","(if True then ?x else ?y) = ?x");
  49.498 +   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  49.499 +   val ct = "foldr ins [#2] (#1 # ins [] #3)" : cterm'
  49.500 +   ML> 
  49.501 +   ...
  49.502 +   val ct = "sort [#1,#3,#2]" : cterm'
  49.503 +\end{verbatim}}%size
  49.504 +
  49.505 +
  49.506 +\section{Variants of rewriting}
  49.507 +Some of the above examples already used variants of {\tt rewrite} all of which have the same value, and very similar arguments:
  49.508 +{\footnotesize\begin{verbatim}
  49.509 +   ML> rewrite_inst_;
  49.510 +   val it = fn
  49.511 +     : theory
  49.512 +       -> rew_ord
  49.513 +          -> rls
  49.514 +             -> bool
  49.515 +             -> (cterm' * cterm') list
  49.516 +                   -> thm -> term -> (term * term list) option
  49.517 +   ML> rewrite_inst;
  49.518 +   val it = fn
  49.519 +     : theory'
  49.520 +       -> rew_ord'
  49.521 +          -> rls'
  49.522 +             -> bool
  49.523 +                -> (cterm' * cterm') list
  49.524 +                   -> thm' -> cterm' -> (cterm' * cterm' list) option
  49.525 +   ML>
  49.526 +   ML> rewrite_set_;
  49.527 +   val it = fn 
  49.528 +     : theory -> rls -> bool -> rls -> term -> (term * term list) option
  49.529 +   ML> rewrite_set;
  49.530 +   val it = fn
  49.531 +     : theory' -> rls' -> bool -> rls' -> cterm' -> (cterm' * cterm' list) option
  49.532 +   ML>
  49.533 +   ML> rewrite_set_inst_;
  49.534 +   val it = fn
  49.535 +     : theory
  49.536 +       -> rls
  49.537 +          -> bool
  49.538 +             -> (cterm' * cterm') list
  49.539 +                -> rls -> term -> (term * term list) option
  49.540 +   ML> rewrite_set_inst;
  49.541 +   val it = fn
  49.542 +     : theory'
  49.543 +       -> rls'
  49.544 +          -> bool
  49.545 +             -> (cterm' * cterm') list
  49.546 +                -> rls' -> cterm' -> (cterm' * cterm' list) option
  49.547 +\end{verbatim}}%size
  49.548 +
  49.549 +\noindent The variant {\tt rewrite\_inst} substitutes {\tt (term * term) list} in {\tt thm} before rewriting,\\
  49.550 +the variant {\tt rewrite\_set} rewrites with a whole rule set {\tt rls} (instead with a {\tt thm} only),\\
  49.551 +the variant {\tt rewrite\_set\_inst} is a combination of the latter two variants. In order to watch how a term is rewritten theorem by theorem, there is a switch {\tt trace\_rewrite}:
  49.552 +{\footnotesize\begin{verbatim}
  49.553 +   ML> toggle;
  49.554 +   val it = fn : bool ref -> bool
  49.555 +   ML>
  49.556 +   ML> toggle trace_rewrite;
  49.557 +   val it = true : bool
  49.558 +   ML> toggle trace_rewrite;
  49.559 +   val it = false : bool
  49.560 +\end{verbatim}}%size
  49.561 +
  49.562 +\section{Rule sets}
  49.563 +Some of the variants of {\tt rewrite} above do not only apply one theorem, but a whole set of theorems, called a 'rule set'. Such a rule set is applied as long one of its elements can be used for a rewrite (which can go forever, i.e. the rule set eventually does not 'terminate').
  49.564 +
  49.565 +A simple example of a rule set is {\tt rearrange\_assoc} which is defined in {\tt knowledge/RatArith.ML} as:
  49.566 +{\footnotesize\begin{verbatim}
  49.567 +   val rearrange_assoc = 
  49.568 +     Rls{preconds = [], rew_ord = ("tless_true",tless_true), 
  49.569 +         rules = 
  49.570 +         [Thm ("radd_assoc_RS_sym",num_str (radd_assoc RS sym)),
  49.571 +          Thm ("rmult_assoc_RS_sym",num_str (rmult_assoc RS sym))],
  49.572 +         scr = Script ((term_of o the o (parse thy)) 
  49.573 +         "empty_script")
  49.574 +         }:rls;
  49.575 +\end{verbatim}}%size
  49.576 +where 
  49.577 +\begin{description}
  49.578 +\item [\tt preconds] are conditions which must be true in order to make the rule set applicable (the empty list evaluates to {\tt true})
  49.579 +\item [\tt rew\_ord] concerns term orders introduced below in \ref{term-order}
  49.580 +\item [\tt rules] are the theorems to be applied -- in priciple applied in arbitrary order, because all these rule sets should be 'complete' \cite{nipk:rew-all-that} (and actually the theorems are applied in the sequence they appear in this list). The function {\tt num\_str} must be applied to theorems containing numeral constants (and thus is obsolete in this example). {\tt RS} is an infix function applying the theorem {\tt sym} to {\tt radd\_assoc} before storage (the effect see below)
  49.581 +\item [\tt scr] is the script applying the ruleset; it will disappear in later versions of \isac.
  49.582 +\end{description}
  49.583 +These variables evaluate to
  49.584 +{\footnotesize\begin{verbatim}
  49.585 +   ML> sym;
  49.586 +   val it = "?s = ?t ==> ?t = ?s" : thm 
  49.587 +   ML> rearrange_assoc;
  49.588 +   val it =
  49.589 +     Rls
  49.590 +       {preconds=[],rew_ord=("tless_true",fn),
  49.591 +        rules=[Thm ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1"),
  49.592 +               Thm ("rmult_assoc_RS_sym","?m1 * (?n1 * ?k1) = ?m1 * ?n1 * ?k1")],
  49.593 +        scr=Script (Free ("empty_script","RealDef.real"))} : rls 
  49.594 +\end{verbatim}}%size
  49.595 +
  49.596 +\paragraph{Give it a try !} The above rule set makes an arbitrary number of parentheses disappear which are not necessary due to associativity of {\tt +} and 
  49.597 +{\footnotesize\begin{verbatim}
  49.598 +   ML> val ct = (string_of_cterm o the o (parse RatArith.thy))
  49.599 +                "a + (b * (c * d) + e)";
  49.600 +   val ct = "a + ((b * (c * d) + e) + f)" : cterm'
  49.601 +   ML> rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
  49.602 +   val it = Some ("a + b * c * d + e + f",[]) : (string * string list) option
  49.603 +\end{verbatim}}%size
  49.604 +For acchieving this result the rule set has to be surprisingly busy:
  49.605 +{\footnotesize\begin{verbatim}
  49.606 +   ML> toggle trace_rewrite;
  49.607 +   val it = true : bool
  49.608 +   ML> rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
  49.609 +   ### trying thm 'radd_assoc_RS_sym'
  49.610 +   ### rewrite_set_: a + b * (c * d) + e
  49.611 +   ### trying thm 'radd_assoc_RS_sym'
  49.612 +   ### trying thm 'rmult_assoc_RS_sym'
  49.613 +   ### rewrite_set_: a + b * c * d + e
  49.614 +   ### trying thm 'rmult_assoc_RS_sym'
  49.615 +   ### trying thm 'radd_assoc_RS_sym'
  49.616 +   ### trying thm 'rmult_assoc_RS_sym'
  49.617 +   val it = Some ("a + b * c * d + e",[]) : (string * string list) option
  49.618 +\end{verbatim}}%size
  49.619 + 
  49.620 +
  49.621 +\section{Calculate numeric constants}
  49.622 +As soon as numeric constants are in adjacent subterms (see the example on p.\pageref{cond-rew}), they can be calculated by the function
  49.623 +{\footnotesize\begin{verbatim}
  49.624 +   ML> calculate;
  49.625 +   val it = fn : theory' -> string -> cterm' -> (cterm' * thm') option
  49.626 +   ML> calculate_;
  49.627 +   val it = fn : theory -> string -> term -> (term * (string * thm)) option
  49.628 +\end{verbatim}}%size
  49.629 +where the {\tt string} in the arguments defines the algebraic operation to be calculated. The function returns the result of the calculation, and as second element in the pair the theorem applied. The following algebraic operations are available:
  49.630 +{\footnotesize\begin{verbatim}
  49.631 +   ML> calc_list;
  49.632 +   val it =
  49.633 +     ref
  49.634 +       [("plus",("op +",fn)),
  49.635 +        ("times",("op *",fn)),
  49.636 +        ("cancel_",("cancel",fn)),
  49.637 +        ("power",("pow",fn)),
  49.638 +        ("sqrt",("sqrt",fn)),
  49.639 +        ("Var",("Var",fn)),
  49.640 +        ("Length",("Length",fn)),
  49.641 +        ("Nth",("Nth",fn)),
  49.642 +        ("power",("pow",fn)),
  49.643 +        ("le",("op <",fn)),
  49.644 +        ("leq",("op <=",fn)),
  49.645 +        ("is_const",("is'_const",fn)),
  49.646 +        ("is_root_free",("is'_root'_free",fn)),
  49.647 +        ("contains_root",("contains'_root",fn)),
  49.648 +        ("ident",("ident",fn))]
  49.649 +     : (string * (string * (string -> term -> theory -> 
  49.650 +        (string * term) option))) list ref
  49.651 +\end{verbatim}}%size
  49.652 +These operations can be used in the following way.
  49.653 +{\footnotesize\begin{verbatim}
  49.654 +   ML> calculate' "Isac.thy" "plus" "#1 + #2";
  49.655 +   val it = Some ("#3",("#add_#1_#2","\"#1 + #2 = #3\"")) : (string * thm') option
  49.656 +   ML>
  49.657 +   ML> calculate' "Isac.thy" "times" "#2 * #3";
  49.658 +   val it = Some ("#6",("#mult_#2_#3","\"#2 * #3 = #6\""))
  49.659 +     : (string * thm') option
  49.660 +   ML>
  49.661 +   ML> calculate' "Isac.thy" "power" "#2 ^^^ #3";
  49.662 +   val it = Some ("#8",("#power_#2_#3","\"#2 ^^^ #3 = #8\""))
  49.663 +     : (string * thm') option
  49.664 +   ML>
  49.665 +   ML> calculate' "Isac.thy" "cancel_" "#9 // #12";
  49.666 +   val it = Some ("#3 // #4",("#cancel_#9_#12","\"#9 // #12 = #3 // #4\""))
  49.667 +     : (string * thm') option
  49.668 +   ML>
  49.669 +   ML> ...
  49.670 +\end{verbatim}}%size
  49.671 +          
  49.672 +
  49.673 +
  49.674 +\chapter{Term orders}\label{term-order}
  49.675 +Orders on terms are indispensable for the purpose of rewriting to normal forms in associative - commutative domains \cite{nipk:rew-all-that}, and for rewriting to normal forms necessary for matching models to problems, see sect.\ref{pbt}.
  49.676 +\section{Examples for term orders}
  49.677 +It is not trivial to construct a relation $<$ on terms such that it is really an order, i.e. a transitive and antisymmetric relation. These orders are 'recursive path orders' \cite{nipk:rew-all-that}. Some orders implemented in the knowledgebase at {\tt [isac-src]/knowledge/\dots}, %FIXXXmat0201a
  49.678 +e.g.
  49.679 +{\footnotesize\begin{verbatim}
  49.680 +   ML> sqrt_right;
  49.681 +   val it = fn : bool -> theory -> term * term -> bool
  49.682 +   ML> tless_true;
  49.683 +   val it = fn : 'a -> bool 
  49.684 +\end{verbatim}}%size
  49.685 +where the bool argument is a switch for tracing the checks on the respective subterms (and theory is necessary for displyinging the (sub-)terms as strings in the case of 'true'). The order {\tt tless\_true} is a dummy always yielding {\tt true}, and {\tt sqrt\_right} prefers a square root shifted to the right within a term:
  49.686 +{\footnotesize\begin{verbatim}
  49.687 +   ML> val t1 = (term_of o the o (parse thy)) "(sqrt a) + b";
  49.688 +   val t1 = Const # $ (# $ #) $ Free (#,#) : term
  49.689 +   ML>
  49.690 +   ML> val t2 = (term_of o the o (parse thy)) "b + (sqrt a)";
  49.691 +   val t2 = Const # $ Free # $ (Const # $ Free #) : term
  49.692 +   ML>
  49.693 +   ML> sqrt_right false SqRoot.thy (t1, t2);
  49.694 +   val it = false : bool
  49.695 +   ML> sqrt_right false SqRoot.thy (t2, t1);
  49.696 +   val it = true : bool
  49.697 +\end{verbatim}}%size
  49.698 +The many checks performed recursively through all subterms can be traced throughout the algorithm in {\tt [isac-src]/knowledge/SqRoot.ML} by setting the flag to true:
  49.699 +{\footnotesize\begin{verbatim}
  49.700 +   ML> val t1 = (term_of o the o (parse thy)) "a + b*(sqrt c) + d";
  49.701 +   val t1 = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("d","RealDef.real") : term
  49.702 +   ML>
  49.703 +   ML> val t2 = (term_of o the o (parse thy)) "a + (sqrt b)*c + d";
  49.704 +   val t2 = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("d","RealDef.real") : term
  49.705 +   ML>
  49.706 +   ML> sqrt_right true SqRoot.thy (t1, t2);
  49.707 +   t= f@ts= "op +" @ "[a + b * sqrt c,d]"
  49.708 +   u= g@us= "op +" @ "[a + sqrt b * c,d]"
  49.709 +   size_of_term(t,u)= (8, 8)
  49.710 +   hd_ord(f,g)      = EQUAL
  49.711 +   terms_ord(ts,us) = LESS
  49.712 +   -------
  49.713 +   t= f@ts= "op +" @ "[a,b * sqrt c]"
  49.714 +   u= g@us= "op +" @ "[a,sqrt b * c]"
  49.715 +   size_of_term(t,u)= (6, 6)
  49.716 +   hd_ord(f,g)      = EQUAL
  49.717 +   terms_ord(ts,us) = LESS
  49.718 +   -------
  49.719 +   t= f@ts= "a" @ "[]"
  49.720 +   u= g@us= "a" @ "[]"
  49.721 +   size_of_term(t,u)= (1, 1)
  49.722 +   hd_ord(f,g)      = EQUAL
  49.723 +   terms_ord(ts,us) = EQUAL
  49.724 +   -------
  49.725 +   t= f@ts= "op *" @ "[b,sqrt c]"
  49.726 +   u= g@us= "op *" @ "[sqrt b,c]"
  49.727 +   size_of_term(t,u)= (4, 4)
  49.728 +   hd_ord(f,g)      = EQUAL
  49.729 +   terms_ord(ts,us) = LESS
  49.730 +   -------
  49.731 +   t= f@ts= "b" @ "[]"
  49.732 +   u= g@us= "sqrt" @ "[b]"
  49.733 +   size_of_term(t,u)= (1, 2)
  49.734 +   hd_ord(f,g)      = LESS
  49.735 +   terms_ord(ts,us) = LESS
  49.736 +   -------
  49.737 +   val it = true : bool 
  49.738 +\end{verbatim}}%size
  49.739 +
  49.740 +
  49.741 +
  49.742 +\section{Ordered rewriting}
  49.743 +Rewriting faces problems in just the most elementary domains, which are all associative and commutative w.r.t. {\tt +} and {\tt *} --- the law of commutativity applied within a rule set causes this set not to terminate~! One method to cope with this difficulty is ordered rewriting, where a rewrite is only done if the resulting term is smaller w.r.t. a term order (with some additional properties called 'rewrite orders' \cite{nipk:rew-all-that}).
  49.744 +
  49.745 +Such a rule set {\tt ac\_plus\_times}, called an AC-rewrite system, can be found in {\tt[isac-src]/knowledge/RathArith.ML}:
  49.746 +{\footnotesize\begin{verbatim}
  49.747 +   val ac_plus_times =
  49.748 +     Rls{preconds = [], rew_ord = ("term_order",term_order),
  49.749 +         rules =
  49.750 +         [Thm ("radd_commute",radd_commute),
  49.751 +          Thm ("radd_left_commute",radd_left_commute),
  49.752 +          Thm ("radd_assoc",radd_assoc),
  49.753 +          Thm ("rmult_commute",rmult_commute),
  49.754 +          Thm ("rmult_left_commute",rmult_left_commute),
  49.755 +          Thm ("rmult_assoc",rmult_assoc)],
  49.756 +         scr = Script ((term_of o the o (parse thy))
  49.757 +         "empty_script")
  49.758 +         }:rls;
  49.759 +   val ac_plus_times =
  49.760 +     Rls
  49.761 +       {preconds=[],rew_ord=("term_order",fn),
  49.762 +        rules=[Thm ("radd_commute","?m + ?n = ?n + ?m"),
  49.763 +               Thm ("radd_left_commute","?x + (?y + ?z) = ?y + (?x + ?z)"),
  49.764 +               Thm ("radd_assoc","?m + ?n + ?k = ?m + (?n + ?k)"),
  49.765 +               Thm ("rmult_commute","?m * ?n = ?n * ?m"),
  49.766 +               Thm ("rmult_left_commute","?x * (?y * ?z) = ?y * (?x * ?z)"),
  49.767 +               Thm ("rmult_assoc","?m * ?n * ?k = ?m * (?n * ?k)")],
  49.768 +        scr=Script (Free ("empty_script","RealDef.real"))} : rls 
  49.769 +\end{verbatim}}%size
  49.770 +Note that the theorems {\tt radd\_left\_commute} and {\tt rmult\_left\_commute} are really necessary in order to make the rule set 'confluent'~!
  49.771 +
  49.772 +
  49.773 +\paragraph{Give it a try !} Ordered rewriting is one technique to produce polynomial normal from from arbitrary integer terms:
  49.774 +{\footnotesize\begin{verbatim}
  49.775 +   ML> val ct' = "#3 * a + b + #2 * a";
  49.776 +   val ct' = "#3 * a + b + #2 * a" : cterm'
  49.777 +   ML>
  49.778 +   ML> (*-1-*) radd_commute; val thm' = ("radd_commute","") : thm';
  49.779 +   val it = "?m + ?n = ?n + ?m" : thm
  49.780 +   val thm' = ("radd_commute","") : thm'
  49.781 +   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.782 +   val ct' = "#2 * a + (#3 * a + b)" : cterm'
  49.783 +   ML>
  49.784 +   ML> (*-2-*) rdistr_right_assoc_p; val thm' = ("rdistr_right_assoc_p","") : thm';
  49.785 +   val it = "?l * ?n + (?m * ?n + ?k) = (?l + ?m) * ?n + ?k" : thm
  49.786 +   val thm' = ("rdistr_right_assoc_p","") : thm'
  49.787 +   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.788 +   val ct' = "(#2 + #3) * a + b" : cterm'
  49.789 +   ML>
  49.790 +   ML> (*-3-*)
  49.791 +   ML> val Some (ct',_) = calculate thy' "plus" ct';
  49.792 +   val ct' = "#5 * a + b" : cterm'
  49.793 +\end{verbatim}}%size %FIXXXmat0201b ... calculate !
  49.794 +This looks nice, but if {\tt radd\_commute} is applied automatically in {\tt (*-1-*)} without checking the resulting term to be 'smaller' w.r.t. a term order, then rewritin goes on forever (i.e. it does not 'terminate') \dots
  49.795 +{\footnotesize\begin{verbatim}
  49.796 +   ML> val ct' = "#3 * a + b + #2 * a" : cterm';
  49.797 +   val ct' = "#3 * a + b + #2 * a" : cterm'
  49.798 +   ML> val thm' = ("radd_commute","") : thm';
  49.799 +   val thm' = ("radd_commute","") : thm'
  49.800 +   ML>
  49.801 +   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.802 +   val ct' = "#2 * a + (#3 * a + b)" : cterm'
  49.803 +   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.804 +   val ct' = "#3 * a + b + #2 * a" : cterm'
  49.805 +   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  49.806 +   val ct' = "#2 * a + (#3 * a + b)" : cterm'
  49.807 +              ..........
  49.808 +\end{verbatim}}%size
  49.809 +
  49.810 +Ordered rewriting with the above AC-rewrite system {\tt ac\_plus\_times} performs a kind of bubble sort which can be traced:
  49.811 +{\footnotesize\begin{verbatim}
  49.812 +   ML> toggle trace_rewrite;
  49.813 +   val it = true : bool
  49.814 +   ML>
  49.815 +   ML> rewrite_set "RatArith.thy" "eval_rls" false "ac_plus_times" ct;
  49.816 +   ### trying thm 'radd_commute'
  49.817 +   ### not: "a + (b * (c * d) + e)" > "b * (c * d) + e + a"
  49.818 +   ### rewrite_set_: a + (e + b * (c * d))
  49.819 +   ### trying thm 'radd_commute'
  49.820 +   ### not: "a + (e + b * (c * d))" > "e + b * (c * d) + a"
  49.821 +   ### not: "e + b * (c * d)" > "b * (c * d) + e"
  49.822 +   ### trying thm 'radd_left_commute'
  49.823 +   ### not: "a + (e + b * (c * d))" > "e + (a + b * (c * d))"
  49.824 +   ### trying thm 'radd_assoc'
  49.825 +   ### trying thm 'rmult_commute'
  49.826 +   ### not: "b * (c * d)" > "c * d * b"
  49.827 +   ### not: "c * d" > "d * c"
  49.828 +   ### trying thm 'rmult_left_commute'
  49.829 +   ### not: "b * (c * d)" > "c * (b * d)"
  49.830 +   ### trying thm 'rmult_assoc'
  49.831 +   ### trying thm 'radd_commute'
  49.832 +   ### not: "a + (e + b * (c * d))" > "e + b * (c * d) + a"
  49.833 +   ### not: "e + b * (c * d)" > "b * (c * d) + e"
  49.834 +   ### trying thm 'radd_left_commute'
  49.835 +   ### not: "a + (e + b * (c * d))" > "e + (a + b * (c * d))"
  49.836 +   ### trying thm 'radd_assoc'
  49.837 +   ### trying thm 'rmult_commute'
  49.838 +   ### not: "b * (c * d)" > "c * d * b"
  49.839 +   ### not: "c * d" > "d * c"
  49.840 +   ### trying thm 'rmult_left_commute'
  49.841 +   ### not: "b * (c * d)" > "c * (b * d)"
  49.842 +   ### trying thm 'rmult_assoc'
  49.843 +   val it = Some ("a + (e + b * (c * d))",[]) : (string * string list) option     \end{verbatim}}%size
  49.844 +Notice that {\tt +} is left-associative where the parentheses are omitted for {\tt (a + b) + c = a + b + c}, but not for {\tt a + (b + c)}. Ordered rewriting necessarily terminates with parentheses which could be omitted due to associativity.
  49.845 +
  49.846 +
  49.847 +\chapter{The hierarchy of problem types}\label{pbt}
  49.848 +\section{The standard-function for 'matching'}
  49.849 +Matching \cite{nipk:rew-all-that} is a technique used within rewriting, and used by \isac{} also for (a generalized) 'matching' a problem with a problem type. The function which tests for matching has the following signature:
  49.850 +{\footnotesize\begin{verbatim}
  49.851 +   ML> matches;
  49.852 +   val it = fn : theory -> term -> term -> bool
  49.853 +\end{verbatim}}%size
  49.854 +where the first of the two {\tt term} arguments is the particular term to be tested, and the second one is the pattern:
  49.855 +{\footnotesize\begin{verbatim}
  49.856 +   ML> val t = (term_of o the o (parse thy)) "#3 * x^^^#2 = #1";
  49.857 +   val t = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("#1","RealDef.real") : term
  49.858 +   ML>
  49.859 +   ML> val p = (term_of o the o (parse thy)) "a * b^^^#2 = c";
  49.860 +   val p = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("c","RealDef.real") : term
  49.861 +   ML> atomt p;
  49.862 +   *** -------------
  49.863 +   *** Const ( op =)
  49.864 +   *** . Const ( op *)
  49.865 +   *** . . Free ( a, )
  49.866 +   *** . . Const ( RatArith.pow)
  49.867 +   *** . . . Free ( b, )
  49.868 +   *** . . . Free ( #2, )
  49.869 +   *** . Free ( c, )
  49.870 +   val it = () : unit
  49.871 +   ML>
  49.872 +   ML> free2var;
  49.873 +   val it = fn : term -> term
  49.874 +   ML>
  49.875 +   ML> val pat = free2var p;
  49.876 +   val pat = Const (#,#) $ (# $ # $ (# $ #)) $ Var ((#,#),"RealDef.real") : term
  49.877 +   ML> Sign.string_of_term (sign_of thy) pat;
  49.878 +   val it = "?a * ?b ^^^ #2 = ?c" : cterm' 
  49.879 +   ML> atomt pat;
  49.880 +   *** -------------
  49.881 +   *** Const ( op =)
  49.882 +   *** . Const ( op *)
  49.883 +   *** . . Var ((a, 0), )
  49.884 +   *** . . Const ( RatArith.pow)
  49.885 +   *** . . . Var ((b, 0), )
  49.886 +   *** . . . Free ( #2, )
  49.887 +   *** . Var ((c, 0), )
  49.888 +   val it = () : unit
  49.889 +\end{verbatim}}%size % $ 
  49.890 +Note that the pattern {\tt pat} contains so-called {\it scheme variables} decorated with a {\tt ?} (analoguous to theorems). The pattern is generated by the function {\tt free2var}. This format of the pattern is necessary in order to obtain results like these:
  49.891 +{\footnotesize\begin{verbatim}
  49.892 +   ML> matches thy t pat;
  49.893 +   val it = true : bool
  49.894 +   ML>
  49.895 +   ML> val t2 = (term_of o the o (parse thy)) "x^^^#2 = #1";
  49.896 +   val t2 = Const (#,#) $ (# $ # $ Free #) $ Free ("#1","RealDef.real") : term
  49.897 +   ML> matches thy t2 pat;
  49.898 +   val it = false : bool    
  49.899 +   ML>
  49.900 +   ML> val pat2 = (term_of o the o (parse thy)) "?u^^^#2 = ?v";
  49.901 +   val pat2 = Const (#,#) $ (# $ # $ Free #) $ Var ((#,#),"RealDef.real") : term
  49.902 +   ML> matches thy t2 pat2;
  49.903 +   val it = true : bool 
  49.904 +\end{verbatim}}%size % $
  49.905 +
  49.906 +\section{Accessing the hierarchy}
  49.907 +The hierarchy of problem types is encapsulated; it can be accessed by the following functions. {\tt show\_ptyps} retrieves all leaves of the hierarchy (here in an early version for testing):
  49.908 +{\footnotesize\begin{verbatim}
  49.909 +   ML> show_ptyps;
  49.910 +   val it = fn : unit -> unit
  49.911 +   ML> show_ptyps();
  49.912 +   [
  49.913 +    ["e_pblID"],
  49.914 +    ["equation", "univariate", "linear"],
  49.915 +    ["equation", "univariate", "plain_square"],
  49.916 +    ["equation", "univariate", "polynomial", "degree_two", "pq_formula"],
  49.917 +    ["equation", "univariate", "polynomial", "degree_two", "abc_formula"],
  49.918 +    ["equation", "univariate", "squareroot"],
  49.919 +    ["equation", "univariate", "normalize"],
  49.920 +    ["equation", "univariate", "sqroot-test"],
  49.921 +    ["function", "derivative_of"],
  49.922 +    ["function", "maximum_of", "on_interval"],
  49.923 +    ["function", "make"],
  49.924 +    ["tool", "find_values"],
  49.925 +    ["functional", "inssort"]
  49.926 +   ]
  49.927 +   val it = () : unit
  49.928 +\end{verbatim}}%size
  49.929 +The retrieve function for individual problem types is {\tt get\_pbt}
  49.930 +\footnote{A function providing better readable output is in preparation}. Note that its argument, the 'problem identifier' {\tt pblID}, has the strings listed in reverse order w.r.t. the hierarchy, i.e. from the leave to the root. This order makes the {\tt pblID} closer to a natural description:
  49.931 +{\footnotesize\begin{verbatim}
  49.932 +   ML> get_pbt;
  49.933 +   val it = fn : pblID -> pbt
  49.934 +   ML> get_pbt ["squareroot", "univariate", "equation"];
  49.935 +   val it =
  49.936 +     {met=[("SqRoot.thy","square_equation")],
  49.937 +      ppc=[("#Given",(Const (#,#),Free (#,#))),
  49.938 +           ("#Given",(Const (#,#),Free (#,#))),
  49.939 +           ("#Given",(Const (#,#),Free (#,#))),
  49.940 +           ("#Find",(Const (#,#),Free (#,#)))],
  49.941 +      thy={ProtoPure, CPure, HOL, Ord, Set, subset, equalities, mono, Vimage, Fun,
  49.942 +            Prod, Lfp, Relation, Trancl, WF, NatDef, Gfp, Sum, Inductive, Nat,
  49.943 +            Arith, Divides, Power, Finite, Equiv, IntDef, Int, Univ, Datatype,
  49.944 +            Numeral, Bin, IntArith, WF_Rel, Recdef, IntDiv, NatBin, List, Option,
  49.945 +            Map, Record, RelPow, Sexp, String, Calculation, SVC_Oracle, Main,
  49.946 +            Zorn, Filter, PNat, PRat, PReal, RealDef, RealOrd, RealInt, RealBin,
  49.947 +            HyperDef, Descript, ListG, Tools, Script, Typefix, Atools, RatArith,
  49.948 +            SqRoot},
  49.949 +      where_=[Const ("SqRoot.contains'_root","bool => bool") $
  49.950 +              Free ("e_","bool")]} : pbt
  49.951 +\end{verbatim}}%size %$
  49.952 +where the records fields hold the following data:
  49.953 +\begin{description}
  49.954 +\item [\tt thy]: the theory necessary for parsing the formulas
  49.955 +\item [\tt ppc]: the items of the problem type, divided into those {\tt Given}, the precondition {\tt Where} and the output item(s) {\tt Find}. The items of {\tt Given} and {\tt Find} are all headed by so-called descriptions, which determine the type. These descriptions are defined in {\tt [isac-src]/Isa99/Descript.thy}.
  49.956 +\item [\tt met]: the list of methods solving this problem type.\\
  49.957 +\end{description}
  49.958 +
  49.959 +The following function adds or replaces a problem type (after having it prepared using {\tt prep\_pbt})
  49.960 +{\footnotesize\begin{verbatim}
  49.961 +   ML> store_pbt;
  49.962 +   val it = fn : pbt * pblID -> unit
  49.963 +   ML> store_pbt
  49.964 +    (prep_pbt SqRoot.thy
  49.965 +    (["newtype","univariate","equation"],
  49.966 +     [("#Given" ,["equality e_","solveFor v_","errorBound err_"]),
  49.967 +      ("#Where" ,["contains_root (e_::bool)"]),
  49.968 +      ("#Find"  ,["solutions v_i_"])
  49.969 +     ],
  49.970 +     [("SqRoot.thy","square_equation")]));
  49.971 +   val it = () : unit
  49.972 +\end{verbatim}}%size
  49.973 +When adding a new type with argument {\tt pblID}, an immediate parent must already exist in the hierarchy (this is the one with the tail of {\tt pblID}).
  49.974 +
  49.975 +\section{Internals of the datastructure}
  49.976 +This subsection only serves for the implementation of the hierarchy browser and can be skipped by the authors of math knowledge.
  49.977 +
  49.978 +A problem type is described by the following record type (in the file {\tt [isac-src]/globals.sml}, the respective functions are in {\tt [isac-src]/ME/ptyps.sml}), and held in a global reference variable:
  49.979 +{\footnotesize\begin{verbatim}
  49.980 +   type pbt = 
  49.981 +        {thy   : theory,       (* the nearest to the root,
  49.982 +                                  which allows to compile that pbt  *)
  49.983 +         where_: term list,    (* where - predicates                *)
  49.984 +         ppc   : ((string *    (* fields "#Given","#Find"           *)
  49.985 +                   (term *     (* description                       *)
  49.986 +                    term))     (* id                                *)
  49.987 +                      list),                                        
  49.988 +         met   : metID list};  (* methods solving the pbt           *)
  49.989 +   datatype ptyp = 
  49.990 +            Ptyp of string *   (* key within pblID                  *)
  49.991 +                    pbt list * (* several pbts with different domIDs*)
  49.992 +                    ptyp list;
  49.993 +   val e_Ptyp = Ptyp ("empty",[],[]);
  49.994 +   
  49.995 +   type ptyps = ptyp list;
  49.996 +   val ptyps = ref ([e_Ptyp]:ptyps);
  49.997 +\end{verbatim}}%size
  49.998 +The predicates in {\tt where\_} (i.e. the preconditions) usually are defined in the respective theory in {\tt[isac-src]/knowledge}. Most of the predicates are not defined by rewriting, but by SML-code contained in the respective {\tt *.ML} file.
  49.999 +
 49.1000 +Each item is headed by a so-called description which provides some guidance for interactive input. The descriptions are defined in {\tt[isac-src]/Isa99/Descript.thy}.
 49.1001 +
 49.1002 +
 49.1003 +
 49.1004 +\section{Match a formalization with a problem type}\label{pbl}
 49.1005 +A formalization is {\it match}ed with a problem type which yields a problem. A formal description of this kind of {\it match}ing can be found in \\{\tt ftp://ft.ist.tugraz.at/projects/isac/publ/calculemus01.ps.gz}. A formalization of an equation is e.g.
 49.1006 +{\footnotesize\begin{verbatim}
 49.1007 +   ML> val fmz = ["equality (#1 + #2 * x = #0)",
 49.1008 +                  "solveFor x",
 49.1009 +                  "solutions L"] : fmz;
 49.1010 +   val fmz = ["equality (#1 + #2 * x = #0)","solveFor x","solutions L"] : fmz
 49.1011 +\end{verbatim}}%size
 49.1012 +Given a formalization (and a specification of the problem, i.e. a theory, a problemtype, and a method) \isac{} can solve the respective problem automatically. The formalization must match the problem type for this purpose:
 49.1013 +{\footnotesize\begin{verbatim}
 49.1014 +   ML> match_pbl;
 49.1015 +   val it = fn : fmz -> pbt -> match'
 49.1016 +   ML>
 49.1017 +   ML> match_pbl fmz (get_pbt ["univariate","equation"]);
 49.1018 +   val it =
 49.1019 +     Matches'
 49.1020 +       {Find=[Correct "solutions L"],
 49.1021 +        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
 49.1022 +        Relate=[],Where=[Correct "matches (?a = ?b) (#1 + #2 * x = #0)"],With=[]}
 49.1023 +     : match'
 49.1024 +   ML>
 49.1025 +   ML> match_pbl fmz (get_pbt ["linear","univariate","equation"]);
 49.1026 +   val it =
 49.1027 +     Matches'
 49.1028 +       {Find=[Correct "solutions L"],
 49.1029 +        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
 49.1030 +        Relate=[],
 49.1031 +        Where=[Correct
 49.1032 +                 "matches (          x = #0) (#1 + #2 * x = #0) |
 49.1033 +                  matches (     ?b * x = #0) (#1 + #2 * x = #0) |
 49.1034 +                  matches (?a      + x = #0) (#1 + #2 * x = #0) |
 49.1035 +                  matches (?a + ?b * x = #0) (#1 + #2 * x = #0)"],
 49.1036 +        With=[]} : match'
 49.1037 +   ML>
 49.1038 +   ML> match_pbl fmz (get_pbt ["squareroot","univariate","equation"]);
 49.1039 +   val it =
 49.1040 +     NoMatch'
 49.1041 +       {Find=[Correct "solutions L"],
 49.1042 +        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x",
 49.1043 +               Missing "errorBound err_"],Relate=[],
 49.1044 +        Where=[False "contains_root #1 + #2 * x = #0 "],With=[]} : match'
 49.1045 +\end{verbatim}}%size
 49.1046 +The above formalization does not match the problem type \\{\tt["squareroot","univariate","equation"]} which is explained by the tags:
 49.1047 +\begin{tabbing}
 49.1048 +123\=\kill
 49.1049 +\> {\tt Missing:} the item is missing in the formalization as required by the problem type\\
 49.1050 +\> {\tt Superfl:} the item is not required by the problem type\\
 49.1051 +\> {\tt Correct:} the item is correct, or the precondition ({\tt Where}) is true\\
 49.1052 +\> {\tt False:} the precondition ({\tt Where}) is false\\
 49.1053 +\> {\tt Incompl:} the item is incomlete, or not yet input.\\
 49.1054 +\end{tabbing}
 49.1055 +
 49.1056 +
 49.1057 +
 49.1058 +\section{Refine a problem specification}
 49.1059 +The challenge in constructing the problem hierarchy is, to design the branches in such a way, that problem refinement can be done automatically (as it is done in algebra system e.g. by a internal hierarchy of equations).
 49.1060 +
 49.1061 +For this purpose the hierarchy must be built using the following rules: Let $F$ be a formalization and $P$ and $P_i,\:i=1\cdots n$ problem types, where the $P_i$ are specialized problem types w.r.t. $P$ (i.e. $P$ is a parent node of $P_i$), then
 49.1062 +{\small
 49.1063 +\begin{enumerate}
 49.1064 +\item for all $F$ matching some $P_i$ must follow, that $F$ matches $P$
 49.1065 +\item an $F$ matching $P$ should not have more than {\em one} $P_i,\:i=1\cdots n-1$ with $F$ matching $P_i$ (if there are more than one $P_i$, the first one will be taken)
 49.1066 +\item for all $F$ matching some $P$ must follow, that $F$ matches $P_n$\\
 49.1067 +\end{enumerate}}%small
 49.1068 +\noindent Let us give an example for the point (1.) and (2.) first:
 49.1069 +{\footnotesize\begin{verbatim}
 49.1070 +   ML> refine;
 49.1071 +   val it = fn : fmz -> pblID -> match list
 49.1072 +   ML>
 49.1073 +   ML> val fmz = ["equality (sqrt(#9+#4*x)=sqrt x + sqrt(#5+x))",
 49.1074 +              "solveFor x","errorBound (eps=#0)",
 49.1075 +              "solutions L"];
 49.1076 +   ML>
 49.1077 +   ML> refine fmz ["univariate","equation"];
 49.1078 +   *** pass ["equation","univariate"]
 49.1079 +   *** pass ["equation","univariate","linear"]
 49.1080 +   *** pass ["equation","univariate","plain_square"]
 49.1081 +   *** pass ["equation","univariate","polynomial"]
 49.1082 +   *** pass ["equation","univariate","squareroot"]
 49.1083 +   val it =
 49.1084 +     [Matches
 49.1085 +        (["univariate","equation"],
 49.1086 +         {Find=[Correct "solutions L"],
 49.1087 +          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
 49.1088 +                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
 49.1089 +          Where=[Correct
 49.1090 +                   "matches (?a = ?b) (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))"],
 49.1091 +          With=[]}),
 49.1092 +      NoMatch
 49.1093 +        (["linear","univariate","equation"],
 49.1094 +         {Find=[Correct "solutions L"],
 49.1095 +          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
 49.1096 +                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
 49.1097 +          Where=[False "(?a + ?b * x = #0) (sqrt (#9 + #4 * x#"],
 49.1098 +          With=[]}),
 49.1099 +      NoMatch
 49.1100 +        (["plain_square","univariate","equation"],
 49.1101 +         {Find=[Correct "solutions L"],
 49.1102 +          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
 49.1103 +                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
 49.1104 +          Where=[False
 49.1105 +                   "matches (?a + ?b * x ^^^ #2 = #0)"],
 49.1106 +          With=[]}),
 49.1107 +      NoMatch
 49.1108 +        (["polynomial","univariate","equation"],
 49.1109 +         {Find=[Correct "solutions L"],
 49.1110 +          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
 49.1111 +                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
 49.1112 +          Where=[False 
 49.1113 +                 "is_polynomial_in sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) x"],
 49.1114 +          With=[]}),
 49.1115 +      Matches
 49.1116 +        (["squareroot","univariate","equation"],
 49.1117 +         {Find=[Correct "solutions L"],
 49.1118 +          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
 49.1119 +                 Correct "solveFor x",Correct "errorBound (eps = #0)"],Relate=[],
 49.1120 +          Where=[Correct
 49.1121 +                   "contains_root sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) "],
 49.1122 +          With=[]})] : match list
 49.1123 +\end{verbatim}}%size}%footnotesize\label{refine}
 49.1124 +This example shows, that in order to refine an {\tt["univariate","equation"]}, the formalization must match respective respective problem type (rule (1.)) and one of the descendants which should match selectively (rule (2.)).
 49.1125 +
 49.1126 +If no one of the descendants of {\tt["univariate","equation"]} match, rule (3.) comes into play: The {\em last} problem type on this level ($P_n$) provides for a special 'problem type' {\tt["normalize"]}. This node calls a method transforming the equation to a (or another) normal form, which then may match. Look at this example:
 49.1127 +{\footnotesize\begin{verbatim}
 49.1128 +   ML>  val fmz = ["equality (x+#1=#2)",
 49.1129 +               "solveFor x","errorBound (eps=#0)",
 49.1130 +               "solutions L"];
 49.1131 +   [...]
 49.1132 +   ML>
 49.1133 +   ML>  refine fmz ["univariate","equation"];
 49.1134 +   *** pass ["equation","univariate"]
 49.1135 +   *** pass ["equation","univariate","linear"]
 49.1136 +   *** pass ["equation","univariate","plain_square"]
 49.1137 +   *** pass ["equation","univariate","polynomial"]
 49.1138 +   *** pass ["equation","univariate","squareroot"]
 49.1139 +   *** pass ["equation","univariate","normalize"]
 49.1140 +   val it =
 49.1141 +     [Matches
 49.1142 +        (["univariate","equation"],
 49.1143 +         {Find=[Correct "solutions L"],
 49.1144 +          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
 49.1145 +                 Superfl "errorBound (eps = #0)"],Relate=[],
 49.1146 +          Where=[Correct "matches (?a = ?b) (x + #1 = #2)"],With=[]}),
 49.1147 +      NoMatch
 49.1148 +        (["linear","univariate","equation"],
 49.1149 +   [...]
 49.1150 +          With=[]}),
 49.1151 +      NoMatch
 49.1152 +        (["squareroot","univariate","equation"],
 49.1153 +         {Find=[Correct "solutions L"],
 49.1154 +          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
 49.1155 +                 Correct "errorBound (eps = #0)"],Relate=[],
 49.1156 +          Where=[False "contains_root x + #1 = #2 "],With=[]}),
 49.1157 +      Matches
 49.1158 +        (["normalize","univariate","equation"],
 49.1159 +         {Find=[Correct "solutions L"],
 49.1160 +          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
 49.1161 +                 Superfl "errorBound (eps = #0)"],Relate=[],Where=[],With=[]})]
 49.1162 +     : match list
 49.1163 +\end{verbatim}}%size
 49.1164 +The problem type $P_n$, {\tt["normalize","univariate","equation"]}, will transform the equation {\tt x + \#1 = \#2} to the normal form {\tt \#-1 + x = \#0}, which then will match {\tt["linear","univariate","equation"]}.
 49.1165 +
 49.1166 +This recursive search on the problem hierarchy can be  done within a proof state. This leads to the next section.
 49.1167 +
 49.1168 +
 49.1169 +\chapter{Methods}
 49.1170 +A problem type can have one ore more methods solving a respective problem. A method is described by means of another new program language. The language itself looks like a simple functional language, but constructs an imperative proof-state behind the scenes (thus liberating the programer from dealing with technical details and also prohibiting incorrect construction of the proof tree). The interpreter of 'scripts' written in this language evaluates the scriptexpressions, and also delivers certain parts of the script itself for discussion with the user.
 49.1171 +
 49.1172 +\section{The scripts' syntax}
 49.1173 +The syntax of scripts follows the definition given in Backus-normal-form:
 49.1174 +{\it
 49.1175 +\begin{tabbing}
 49.1176 +123\=123\=expr ::=\=$|\;\;$\=\kill
 49.1177 +\>script ::= {\tt Script} id arg$\,^*$ = body\\
 49.1178 +\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
 49.1179 +\>\>body ::= expr\\
 49.1180 +\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
 49.1181 +\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
 49.1182 +\>\>\>$|\;$\>listexpr\\
 49.1183 +\>\>\>$|\;$\>id\\
 49.1184 +\>\>\>$|\;$\>seqex id\\
 49.1185 +\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
 49.1186 +\>\>\>$|\;$\>{\tt Repeat} seqex\\
 49.1187 +\>\>\>$|\;$\>{\tt Try} seqex\\
 49.1188 +\>\>\>$|\;$\>seqex {\tt Or} seqex\\
 49.1189 +\>\>\>$|\;$\>seqex {\tt @@} seqex\\
 49.1190 +\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
 49.1191 +\>\>type ::= id\\
 49.1192 +\>\>tac ::= id
 49.1193 +\end{tabbing}}
 49.1194 +where {\it id} is an identifier with the usual syntax, {\it prop} is a proposition constructed by Isabelles logical operators (see \cite{Isa-obj} {\tt [isabelle]/src/HOL/HOL.thy}), {\it listexpr} (called {\bf list-expression}) is constructed by Isabelles list functions like {\tt hd, tl, nth} described in {\tt [isabelle]/src/HOL/List.thy}, and {\it type} are (virtually) all types declared in Isabelles version 99.
 49.1195 +
 49.1196 +Expressions containing some of the keywords {\tt let}, {\tt if} etc. are called {\bf script-expressions}.
 49.1197 +
 49.1198 +Tactics {\it tac} are (curried) functions. For clarity and simplicity reasons, {\it listexpr} must not contain a {\it tac}, and {\it tac}s must not be nested,
 49.1199 +
 49.1200 +
 49.1201 +\section{Control the flow of evaluation}
 49.1202 +The flow of control is managed by the following script-expressions called {\it tacticals}.
 49.1203 +\begin{description}
 49.1204 +\item{{\tt while} prop {\tt Do} expr id} 
 49.1205 +\item{{\tt if} prop {\tt then} expr {\tt else} expr}
 49.1206 +\end{description}
 49.1207 +While the the above script-expressions trigger the flow of control by evaluating the current formula, the other expressions depend on the applicability of the tactics within their respective subexpressions (which in turn depends on the proofstate)
 49.1208 +\begin{description}
 49.1209 +\item{{\tt Repeat} expr id}
 49.1210 +\item{{\tt Try} expr id}
 49.1211 +\item{expr {\tt Or} expr id}
 49.1212 +\item{expr {\tt @@} expr id}
 49.1213 +\end{description}
 49.1214 +
 49.1215 +\begin{description}
 49.1216 +\item xxx
 49.1217 +
 49.1218 +\end{description}
 49.1219 +
 49.1220 +\chapter{Do a calculational proof}
 49.1221 +First we list all the tactics available so far (this list may be extended during further development of \isac).
 49.1222 +
 49.1223 +\section{Tactics for doing steps in calculations}
 49.1224 +\input{tactics}
 49.1225 +
 49.1226 +\section{The functionality of the math engine}
 49.1227 +A proof is being started in the math engine {\tt me} by the tactic
 49.1228 +\footnote{In the present version a tactic is of type {\tt mstep}.}
 49.1229 + {\tt Init\_Proof}, and interactively promoted by other tactics. On input of each tactic the {\tt me} returns the resulting formula and the next tactic applicable. The proof is finished, when the {\tt me} proposes {\tt End\_Proof} as the next tactic.
 49.1230 +
 49.1231 +We show a calculation (calculational proof) concerning equation solving, where the type of equation is refined automatically: The equation is given by the respective formalization ...
 49.1232 +{\footnotesize\begin{verbatim}
 49.1233 +   ML> val fmz = ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x",
 49.1234 +                  "errorBound (eps=#0)","solutions L"];
 49.1235 +   val fmz =
 49.1236 +     ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
 49.1237 +      "solutions L"] : string list
 49.1238 +   ML>
 49.1239 +   ML> val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
 49.1240 +                                 ("SqRoot.thy","no_met"));
 49.1241 +   val dom = "SqRoot.thy" : string
 49.1242 +   val pbt = ["univariate","equation"] : string list
 49.1243 +   val met = ("SqRoot.thy","no_met") : string * string
 49.1244 +\end{verbatim}}%size
 49.1245 +... and the specification {\tt spec} of a domain {\tt dom}, a problem type {\tt pbt} and a method {\tt met}. Note that the equation is such, that it is not immediatly clear, what type it is in particular (it could be a polynomial of degree 2; but, for sure, the type is some specialized type of a univariate equation). Thus, no method ({\tt no\_met}) can be specified for solving the problem.
 49.1246 +
 49.1247 +Nevertheless this specification is sufficient for automatically solving the equation --- the appropriate method will be found by refinement within the hierarchy of problem types.
 49.1248 +
 49.1249 +
 49.1250 +\section{Initialize the calculation}
 49.1251 +The start of a new proof requires the following initializations: The proof state is given by a proof tree {\tt ptree} and a position {\tt pos'}; both are empty at the beginning. The tactic {\tt Init\_Proof} is, like all other tactics, paired with an identifier of type {\tt string} for technical reasons.
 49.1252 +{\footnotesize\begin{verbatim}
 49.1253 +   ML>  val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
 49.1254 +   val mID = "Init_Proof" : string
 49.1255 +   val m =
 49.1256 +     Init_Proof
 49.1257 +       (["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
 49.1258 +         "solutions L"],("SqRoot.thy",[#,#],(#,#))) : mstep
 49.1259 +   ML>
 49.1260 +   ML>  val (p,_,f,nxt,_,pt) = me (mID,m) e_pos' c EmptyPtree;
 49.1261 +   val p = ([],Pbl) : pos'
 49.1262 +   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
 49.1263 +   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
 49.1264 +     : string * mstep
 49.1265 +   val pt =
 49.1266 +     Nd
 49.1267 +       (PblObj
 49.1268 +          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
 49.1269 +           result=#,spec=#},[]) : ptree
 49.1270 +   \end{verbatim}}%size
 49.1271 +The mathematics engine {\tt me} returns the resulting formula {\tt f} of type {\tt mout} (which in this case is a problem), the next tactic {\tt nxt}, and a new proof state ({\tt ptree}, {\tt pos'}).
 49.1272 +
 49.1273 +We can convince ourselves, that the problem is still empty, by increasing {\tt Compiler.Control.Print.printDepth}:
 49.1274 +{\footnotesize\begin{verbatim}
 49.1275 +   ML> Compiler.Control.Print.printDepth:=8; (*4 default*)
 49.1276 +   val it = () : unit
 49.1277 +   ML>
 49.1278 +   ML> f;
 49.1279 +   val it =
 49.1280 +     Form'
 49.1281 +       (PpcKF
 49.1282 +          (0,EdUndef,0,Nundef,
 49.1283 +           (Problem [],
 49.1284 +            {Find=[Incompl "solutions []"],
 49.1285 +             Given=[Incompl "equality",Incompl "solveFor"],Relate=[],
 49.1286 +             Where=[False "matches (?a = ?b) e_"],With=[]}))) : mout
 49.1287 +\end{verbatim}}%size
 49.1288 +Recall, please, the format of a problem as presented in sect.\ref{pbl} on p.\pageref{pbl}; such an 'empty' problem can be found above encapsulated by several constructors containing additional data (necessary for the dialog guide, not relevant here).\\
 49.1289 +
 49.1290 +{\it In the sequel we will omit output of the {\tt me} if it is not important for the respective context}.\\
 49.1291 +
 49.1292 +In general, the dialog guide will hide the following two tactics {\tt Refine\_Tacitly} and {\tt Model\_Problem} from the user.
 49.1293 +{\footnotesize\begin{verbatim}
 49.1294 +   ML>  nxt;
 49.1295 +   val it = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
 49.1296 +     : string * mstep
 49.1297 +   ML>
 49.1298 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1299 +   val nxt = ("Model_Problem",Model_Problem ["normalize","univariate","equation"])
 49.1300 +     : string * mstep
 49.1301 +   ML>
 49.1302 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1303 +\end{verbatim}}%size
 49.1304 +
 49.1305 +
 49.1306 +\section{The phase of modeling} 
 49.1307 +comprises the input of the items of the problem; the {\tt me} can help by use of the formalization tacitly transferred by {\tt Init\_Proof}. In particular, the {\tt me} in general 'knows' the next promising tactic; the first one has been returned by the (hidden) tactic {\tt Model\_Problem}.
 49.1308 +
 49.1309 +{\footnotesize\begin{verbatim}
 49.1310 +   ML>  nxt;
 49.1311 +   val it =
 49.1312 +     ("Add_Given",Add_Given "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)")
 49.1313 +     : string * mstep
 49.1314 +   ML>
 49.1315 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1316 +   val nxt = ("Add_Given",Add_Given "solveFor x") : string * mstep
 49.1317 +   ML>
 49.1318 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1319 +   val nxt = ("Add_Find",Add_Find "solutions L") : string * mstep
 49.1320 +   ML>
 49.1321 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt; 
 49.1322 +   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
 49.1323 +\end{verbatim}}%size
 49.1324 +\noindent Now the problem is 'modeled', all items are input. We convince ourselves by increasing {\tt Compiler.Control.Print.printDepth} once more.
 49.1325 +{\footnotesize\begin{verbatim}
 49.1326 +   ML>  Compiler.Control.Print.printDepth:=8;
 49.1327 +   ML>  f;
 49.1328 +   val it =
 49.1329 +     Form'
 49.1330 +       (PpcKF
 49.1331 +          (0,EdUndef,0,Nundef,
 49.1332 +           (Problem [],
 49.1333 +            {Find=[Correct "solutions L"],
 49.1334 +             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 49.1335 +                    Correct "solveFor x"],Relate=[],Where=[],With=[]}))) : mout
 49.1336 +\end{verbatim}}%size
 49.1337 +%One of the input items is considered {\tt Superfluous} by the {\tt me} consulting the problem type {\tt ["univariate","equation"]}. The {\tt ErrorBound}, however, could become important in case the equation only could be solved by some iteration method.
 49.1338 +
 49.1339 +\section{The phase of specification} 
 49.1340 +This phase provides for explicit determination of the domain, the problem type, and the method to be used. In particular, the search for the appropriate problem type is being supported. There are two tactics for this purpose: {\tt Specify\_Problem} generates feedback on how a candidate of a problem type matches the current problem, and {\tt Refine\_Problem} provides help by the system, if the user gets lost.
 49.1341 +{\footnotesize\begin{verbatim}
 49.1342 +ML> nxt;
 49.1343 +   val it = ("Specify_Domain",Specify_Domain "SqRoot.thy") : string * mstep
 49.1344 +   ML>
 49.1345 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1346 +   val nxt =
 49.1347 +     ("Specify_Problem",Specify_Problem ["normalize","univariate","equation"])
 49.1348 +     : string * mstep
 49.1349 +   val pt =
 49.1350 +     Nd
 49.1351 +       (PblObj
 49.1352 +          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
 49.1353 +              result=#,spec=#},[]) : ptree
 49.1354 +\end{verbatim}}%size
 49.1355 +The {\tt me} is smart enough to know the appropriate problem type (transferred tacitly with {\tt Init\_Proof}). In order to challenge the student, the dialog guide may hide this information; then the {\tt me} works as follows.
 49.1356 +{\footnotesize\begin{verbatim}
 49.1357 +   ML> val nxt = ("Specify_Problem",
 49.1358 +               Specify_Problem ["polynomial","univariate","equation"]);
 49.1359 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1360 +   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
 49.1361 +   val nxt =
 49.1362 +     ("Refine_Problem",Refine_Problem ["normalize","univariate","equation"])
 49.1363 +     : string * mstep
 49.1364 +   ML>
 49.1365 +   ML> val nxt = ("Specify_Problem",
 49.1366 +               Specify_Problem ["linear","univariate","equation"]);
 49.1367 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1368 +   val f =
 49.1369 +     Form'
 49.1370 +       (PpcKF
 49.1371 +          (0,EdUndef,0,Nundef,
 49.1372 +           (Problem ["linear","univariate","equation"],
 49.1373 +            {Find=[Correct "solutions L"],
 49.1374 +             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 49.1375 +                    Correct "solveFor x"],Relate=[],
 49.1376 +             Where=[False
 49.1377 +                    "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
 49.1378 +             With=[]}))) : mout 
 49.1379 +\end{verbatim}}%size
 49.1380 +Again assuming that the dialog guide hide the next tactic proposed by the {\tt me}, and the student gets lost, {\tt Refine\_Problem} always 'knows' the way out, if applied to the problem type {\tt["univariate","equation"]}.
 49.1381 +{\footnotesize\begin{verbatim}
 49.1382 +   ML> val nxt = ("Refine_Problem",
 49.1383 +                  Refine_Problem ["linear","univariate","equation
 49.1384 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1385 +   val f = Problems (RefinedKF [NoMatch #]) : mout
 49.1386 +   ML>
 49.1387 +   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
 49.1388 +   val f =
 49.1389 +     Problems
 49.1390 +       (RefinedKF
 49.1391 +          [NoMatch
 49.1392 +             (["linear","univariate","equation"],
 49.1393 +              {Find=[Correct "solutions L"],
 49.1394 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 49.1395 +                      Correct "solveFor x"],Relate=[],
 49.1396 +               Where=[False
 49.1397 +                     "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
 49.1398 +               With=[]})]) : mout
 49.1399 +   ML>
 49.1400 +   ML> val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
 49.1401 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1402 +   val f =
 49.1403 +     Problems
 49.1404 +       (RefinedKF [Matches #,NoMatch #,NoMatch #,NoMatch #,NoMatch #,Matches #])
 49.1405 +     : mout
 49.1406 +   ML>
 49.1407 +   ML>
 49.1408 +   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
 49.1409 +   val f =
 49.1410 +     Problems
 49.1411 +       (RefinedKF
 49.1412 +          [Matches
 49.1413 +             (["univariate","equation"],
 49.1414 +              {Find=[Correct "solutions L"],
 49.1415 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 49.1416 +                      Correct "solveFor x"],Relate=[],
 49.1417 +               Where=[Correct
 49.1418 +               With=[]}),
 49.1419 +           NoMatch
 49.1420 +             (["linear","univariate","equation"],
 49.1421 +              {Find=[Correct "solutions L"],
 49.1422 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 49.1423 +                      Correct "solveFor x"],Relate=[],
 49.1424 +               Where=[False
 49.1425 +                      "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
 49.1426 +                  With=[]}),
 49.1427 +           NoMatch
 49.1428 +             ...
 49.1429 +             ...   
 49.1430 +           Matches
 49.1431 +             (["normalize","univariate","equation"],
 49.1432 +              {Find=[Correct "solutions L"],
 49.1433 +               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 49.1434 +                      Correct "solveFor x"],Relate=[],Where=[],With=[]})]) : mout
 49.1435 +\end{verbatim}}%size
 49.1436 +The tactic {\tt Refine\_Problem} returns all matches to problem types along the path traced in the problem hierarchy (anlogously to the authoring tool for refinement in sect.\ref{refine} on p.\pageref{refine}) --- a lot of information to be displayed appropriately in the hiearchy browser~!
 49.1437 +
 49.1438 +\section{The phase of solving} 
 49.1439 +This phase starts by invoking a method, which acchieves the normal form within two tactics, {\tt Rewrite rnorm\_equation\_add} and {\tt Rewrite\_Set SqRoot\_simplify}:
 49.1440 +{\footnotesize\begin{verbatim} 
 49.1441 +   ML> nxt;
 49.1442 +   val it = ("Apply_Method",Apply_Method ("SqRoot.thy","norm_univar_equation"))
 49.1443 +     : string * mstep
 49.1444 +   ML>
 49.1445 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1446 +   val f =
 49.1447 +     Form' (FormKF (~1,EdUndef,1,Nundef,"(x + #1) * (x + #2) = x ^^^ #2 + #8"))
 49.1448 +   val nxt =
 49.1449 +     ("Rewrite", Rewrite
 49.1450 +        ("rnorm_equation_add","~ ?b =!= #0 ==> (?a = ?b) = (?a + #-1 * ?b = #0)"))
 49.1451 +   ML>
 49.1452 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1453 +   val f =
 49.1454 +     Form' (FormKF (~1,EdUndef,1,Nundef,
 49.1455 +           "(x + #1) * (x + #2) + #-1 * (x ^^^ #2 + #8) = #0")) : mout
 49.1456 +   val nxt = ("Rewrite_Set",Rewrite_Set "SqRoot_simplify") : string * mstep
 49.1457 +   ML>
 49.1458 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1459 +   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"#-6 + #3 * x = #0")) : mout
 49.1460 +   val nxt = ("Subproblem",Subproblem ("SqRoot.thy",[#,#])) : string * mstep
 49.1461 +\end{verbatim}}%size
 49.1462 +Now the normal form {\tt \#-6 + \#3 * x = \#0} is the input to a subproblem, which again allows for specification of the type of equation, and the respective method:
 49.1463 +{\footnotesize\begin{verbatim}
 49.1464 +   ML> nxt;
 49.1465 +   val it = ("Subproblem",Subproblem ("SqRoot.thy",["univariate","equation"]))
 49.1466 +   ML>   
 49.1467 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1468 +   val f =
 49.1469 +     Form' (FormKF
 49.1470 +          (~1,EdUndef,1,Nundef,"Subproblem (SqRoot.thy, [univariate, equation])"))
 49.1471 +     : mout
 49.1472 +   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
 49.1473 +   ML>
 49.1474 +   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1475 +   val nxt = ("Model_Problem",Model_Problem ["linear","univariate","equation"])
 49.1476 +\end{verbatim}}%size
 49.1477 +As required, the tactic {\tt Refine ["univariate","equation"]} selects the appropriate type of equation from the problem hierarchy, which can be seen by the tactic {\tt Model\_Problem ["linear","univariate","equation"]} prosed by the system.
 49.1478 +
 49.1479 +Again the whole phase of modeling and specification follows; we skip it here, and \isac's dialog guide may decide to do so as well.
 49.1480 +
 49.1481 +
 49.1482 +\section{The final phase: check the post-condition}
 49.1483 +The type of problems solved by \isac{} are so-called 'example construction problems' as shown above. The most characteristic point of such a problem is the post-condition. The handling of the post-condition in the given context is an open research question.
 49.1484 +
 49.1485 +Thus the post-condition is just mentioned, in our example for both, the problem and the subproblem:
 49.1486 +{\footnotesize\begin{verbatim}
 49.1487 +   ML> nxt;
 49.1488 +   val it = ("Check_Postcond",Check_Postcond ["linear","univariate","equation"])
 49.1489 +   ML>
 49.1490 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1491 +   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"[x = #2]")) : mout
 49.1492 +   val nxt =
 49.1493 +     ("Check_Postcond",Check_Postcond ["normalize","univariate","equation"])
 49.1494 +   ML>
 49.1495 +   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 49.1496 +   val f = Form' (FormKF (~1,EdUndef,0,Nundef,"[x = #2]")) : mout
 49.1497 +   val nxt = ("End_Proof'",End_Proof') : string * mstep
 49.1498 +\end{verbatim}}%size
 49.1499 +The next tactic proposed by the system, {\tt End\_Proof'} indicates that the proof has finished successfully.\\
 49.1500 +
 49.1501 +{\it The tactics proposed by the system need {\em not} be followed by the user; the user is free to choose other tactics, and the system will report, if this is applicable at the respective proof state, or not~! The reader may try out~!}
 49.1502 +
 49.1503 +
 49.1504 +
 49.1505 +\part{Systematic description}
 49.1506 +
 49.1507 +
 49.1508 +\chapter{The structure of the knowledge base}
 49.1509 +
 49.1510 +\section{Tactics and data}
 49.1511 +First we view the ME from outside, i.e. we regard tactics and relate them to the knowledge base (KB). W.r.t. the KB we address the atomic items which have to be implemented in detail by the authors of the KB
 49.1512 +\footnote{Some of these items are fetched by the tactics from intermediate storage within the ME, and not directly from the KB.}
 49.1513 +. The items are listed in alphabetical order in Tab.\ref{kb-items} on p.\pageref{kb-items}.
 49.1514 +{\begin{table}[h]
 49.1515 +\caption{Atomic items of the KB} \label{kb-items}
 49.1516 +%\tabcolsep=0.3mm
 49.1517 +\begin{center}
 49.1518 +\def\arraystretch{1.0}
 49.1519 +\begin{tabular}{lp{9.0cm}}
 49.1520 +abbrevation & description \\
 49.1521 +\hline
 49.1522 +&\\
 49.1523 +{\it calc\_list}
 49.1524 +& associationlist of the evaluation-functions {\it eval\_fn}\\
 49.1525 +{\it eval\_fn}
 49.1526 +& evaluation-function for numerals and for predicates coded in SML\\
 49.1527 +{\it eval\_rls   }
 49.1528 +& ruleset {\it rls} for simplifying expressions with {\it eval\_fn}s\\
 49.1529 +{\it fmz}
 49.1530 +& formalization, i.e. a minimal formula representation of an example \\
 49.1531 +{\it met}
 49.1532 +& a method, i.e. a datastructure holding all informations for the solving phase ({\it rew\_ord}, {\it scr}, etc.)\\
 49.1533 +{\it metID}
 49.1534 +& reference to a {\it met}\\
 49.1535 +{\it op}
 49.1536 +& operator as key to an {\it eval\_fn} in a {\it calc\_list}\\
 49.1537 +{\it pbl}
 49.1538 +& problem, i.e. a node in the problem-hierarchy\\
 49.1539 +{\it pblID}
 49.1540 +& reference to a {\it pbl}\\
 49.1541 +{\it rew\_ord}
 49.1542 +& rewrite-order\\
 49.1543 +{\it rls}
 49.1544 +& ruleset, i.e. a datastructure holding theorems {\it thm} and operators {\it op} for simplification (with a {\it rew\_ord})\\
 49.1545 +{\it Rrls}
 49.1546 +& ruleset for 'reverse rewriting' (an \isac-technique generating stepwise rewriting, e.g. for cancelling fractions)\\
 49.1547 +{\it scr}
 49.1548 +& script describing algorithms by tactics, part of a {\it met} \\
 49.1549 +{\it norm\_rls}
 49.1550 +& special ruleset calculating a normalform, associated with a {\it thy}\\
 49.1551 +{\it spec}
 49.1552 +& specification, i.e. a tripel ({\it thyID, pblID, metID})\\
 49.1553 +{\it subs}
 49.1554 +& substitution, i.e. a list of variable-value-pairs\\
 49.1555 +{\it term}
 49.1556 +& Isabelle term, i.e. a formula\\
 49.1557 +{\it thm}
 49.1558 +& theorem\\     
 49.1559 +{\it thy}
 49.1560 +& theory\\
 49.1561 +{\it thyID}
 49.1562 +& reference to a {\it thy} \\
 49.1563 +\end{tabular}\end{center}\end{table}
 49.1564 +}
 49.1565 +The relations between tactics and data items are shown in Tab.\ref{tac-kb}on p.\pageref{tac-kb}.
 49.1566 +{\def\arraystretch{1.2}
 49.1567 +\begin{table}[h]
 49.1568 +\caption{Which tactic uses which KB's item~?} \label{tac-kb}
 49.1569 +\tabcolsep=0.3mm
 49.1570 +\begin{center}
 49.1571 +\begin{tabular}{|ll||cccc|ccc|cccc|} \hline
 49.1572 +tactic  &input &    &    &    &norm\_&   &rew\_&rls &eval\_&eval\_&calc\_&   \\
 49.1573 +        &      &thy &scr &Rrls&rls  &thm &ord  &Rrls&fn    &rls   &list  &dsc\\
 49.1574 +\hline\hline
 49.1575 +Init\_Proof
 49.1576 +        &fmz   & x  &    &    & x   &    &     &    &      &      &      & x \\
 49.1577 +        &spec  &    &    &    &     &    &     &    &      &      &      &   \\
 49.1578 +\hline
 49.1579 +\multicolumn{13}{|l|}{model phase}\\
 49.1580 +\hline
 49.1581 +Add\_*  &term  & x  &    &    & x   &    &     &    &      &      &      & x \\
 49.1582 +FormFK  &model & x  &    &    & x   &    &     &    &      &      &      & x \\
 49.1583 +\hline
 49.1584 +\multicolumn{13}{|l|}{specify phase}\\
 49.1585 +\hline
 49.1586 +Specify\_Theory 
 49.1587 +        &thyID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
 49.1588 +Specify\_Problem 
 49.1589 +        &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
 49.1590 +Refine\_Problem 
 49.1591 +           &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
 49.1592 +Specify\_Method 
 49.1593 +        &metID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
 49.1594 +Apply\_Method 
 49.1595 +        &metID & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
 49.1596 +\hline
 49.1597 +\multicolumn{13}{|l|}{solve phase}\\
 49.1598 +\hline
 49.1599 +Rewrite,\_Inst 
 49.1600 +        &thm   & x  & x  &    &     & x  &met  &    & x    &met   &      &   \\
 49.1601 +Rewrite, Detail
 49.1602 +        &thm   & x  & x  &    &     & x  &rls  &    & x    &rls   &      &   \\
 49.1603 +Rewrite, Detail
 49.1604 +        &thm   & x  & x  &    &     & x  &Rrls &    & x    &Rrls  &      &   \\
 49.1605 +Rewrite\_Set,\_Inst
 49.1606 +        &rls   & x  & x  &    &     &    &     & x  & x    & x    &      &   \\
 49.1607 +Calculate  
 49.1608 +        &op    & x  & x  &    &     &    &     &    &      &      & x    &   \\
 49.1609 +Substitute 
 49.1610 +        &subs  & x  &    &    & x   &    &     &    &      &      &      &   \\
 49.1611 +        &      &    &    &    &     &    &     &    &      &      &      &   \\
 49.1612 +SubProblem 
 49.1613 +        &spec  & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
 49.1614 +        &fmz   &    &    &    &     &    &     &    &      &      &      &   \\
 49.1615 +\hline
 49.1616 +\end{tabular}\end{center}\end{table}
 49.1617 +}
 49.1618 +
 49.1619 +\section{\isac's theories}
 49.1620 +\isac's theories build upon Isabelles theories for high-order-logic (HOL) up to the respective development of real numbers ({\tt HOL/Real}). Theories have a special format defined in \cite{Isa-ref} and the suffix {\tt *.thy}; usually theories are paired with SML-files having the same filename and the suffix {\tt *.ML}.
 49.1621 +
 49.1622 +\isac's theories represent the deductive part of \isac's knowledge base, the hierarchy of theories is structured accordingly. The {\tt *.ML}-files, however, contain {\em all} data of the other two axes of the knowledge base, the problems and the methods (without presenting their respective structure, which is done by the problem browser and the method browser, see \ref{pbt}).
 49.1623 +
 49.1624 +Tab.\ref{theories} on p.\pageref{theories} lists the basic theories planned to be implemented in version \isac.1. We expext the list to be expanded in the near future, actually, have a look to the theory browser~!
 49.1625 +
 49.1626 +The first three theories in the list do {\em not} belong to \isac's knowledge base; they are concerned with \isac's script-language for methods and listed here for completeness.
 49.1627 +{\begin{table}[h]
 49.1628 +\caption{Theories in \isac-version I} \label{theories}
 49.1629 +%\tabcolsep=0.3mm
 49.1630 +\begin{center}
 49.1631 +\def\arraystretch{1.0}
 49.1632 +\begin{tabular}{lp{9.0cm}}
 49.1633 +theory & description \\
 49.1634 +\hline
 49.1635 +&\\
 49.1636 +ListI.thy
 49.1637 +& assigns identifiers to the functions defined in {\tt Isabelle2002/src/HOL/List.thy} and (intermediatly~?) defines some more list functions\\
 49.1638 +ListI.ML
 49.1639 +& {\tt eval\_fn} for the additional list functions\\
 49.1640 +Tools.thy
 49.1641 +& functions required for the evaluation of scripts\\
 49.1642 +Tools.ML
 49.1643 +& the respective {\tt eval\_fn}s\\
 49.1644 +Script.thy
 49.1645 +& prerequisites for scripts: types, tactics, tacticals,\\
 49.1646 +Script.ML
 49.1647 +& sets of tactics and functions for internal use\\
 49.1648 +& \\
 49.1649 +\hline
 49.1650 +& \\
 49.1651 +Typefix.thy
 49.1652 +& an intermediate hack for escaping type errors\\
 49.1653 +Descript.thy
 49.1654 +& {\it description}s for the formulas in {\it model}s and {\it problem}s\\
 49.1655 +Atools
 49.1656 +& (re-)definition of operators; general predicates and functions for preconditions; theorems for the {\tt eval\_rls}\\
 49.1657 +Float
 49.1658 +& floating point numerals\\
 49.1659 +Equation
 49.1660 +& basic notions for equations and equational systems\\
 49.1661 +Poly
 49.1662 +& polynomials\\
 49.1663 +PolyEq
 49.1664 +& polynomial equations and equational systems \\
 49.1665 +Rational.thy
 49.1666 +& additional theorems for rationals\\
 49.1667 +Rational.ML
 49.1668 +& cancel, add and simplify rationals using (a generalization of) Euclids algorithm; respective reverse rulesets\\
 49.1669 +RatEq
 49.1670 +& equations on rationals\\
 49.1671 +Root
 49.1672 +& radicals; calculate normalform; respective reverse rulesets\\
 49.1673 +RootEq
 49.1674 +& equations on roots\\
 49.1675 +RatRootEq
 49.1676 +& equations on rationals and roots (i.e. on terms containing both operations)\\
 49.1677 +Vect
 49.1678 +& vector analysis\\
 49.1679 +Trig
 49.1680 +& trigonometriy\\
 49.1681 +LogExp
 49.1682 +& logarithms and exponential functions\\
 49.1683 +Calculus
 49.1684 +& nonstandard analysis\\
 49.1685 +Diff
 49.1686 +& differentiation\\
 49.1687 +DiffApp
 49.1688 +& applications of differentiaten (maxima-minima-problems)\\
 49.1689 +Test
 49.1690 +& (old) data for the test suite\\
 49.1691 +Isac
 49.1692 +& collects all \isac-theoris.\\
 49.1693 +\end{tabular}\end{center}\end{table}
 49.1694 +}
 49.1695 +
 49.1696 +
 49.1697 +\section{Data in {\tt *.thy}- and {\tt *.ML}-files}
 49.1698 +As already mentioned, theories come in pairs of {\tt *.thy}- and {\tt *.ML}-files with the same respective filename. How data are distributed between the two files is shown in Tab.\ref{thy-ML} on p.\pageref{thy-ML}.
 49.1699 +{\begin{table}[h]
 49.1700 +\caption{Data in {\tt *.thy}- and {\tt *.ML}-files} \label{thy-ML}
 49.1701 +\tabcolsep=2.0mm
 49.1702 +\begin{center}
 49.1703 +\def\arraystretch{1.0}
 49.1704 +\begin{tabular}{llp{7.7cm}}
 49.1705 +file & data & description \\
 49.1706 +\hline
 49.1707 +& &\\
 49.1708 +{\tt *.thy}
 49.1709 +& consts 
 49.1710 +& operators, predicates, functions, script-names ('{\tt Script} name \dots{\tt arguments}')
 49.1711 +\\
 49.1712 +& rules  
 49.1713 +& theorems: \isac{} uses Isabelles theorems if possible; additional theorems analoguous to such existing in Isabelle get the Isabelle-identifier attached an {\it I}
 49.1714 +\\& &\\
 49.1715 +{\tt *.ML}
 49.1716 +& {\tt theory' :=} 
 49.1717 +& the theory defined by the actual {\tt *.thy}-file is made accessible to \isac
 49.1718 +\\
 49.1719 +& {\tt eval\_fn}
 49.1720 +& evaluation function for operators and predicates, coded on the meta-level (SML); the identifier of such a function is a combination of the keyword {\tt eval\_} with the identifier of the function as defined in {\tt *.thy}
 49.1721 +\\
 49.1722 +& {\tt *\_simplify} 
 49.1723 +& the canonical simplifier for the actual theory, i.e. the identifier for this ruleset is a combination of the theories identifier and the keyword {\tt *\_simplify}
 49.1724 +\\
 49.1725 +& {\tt norm\_rls :=}
 49.1726 +& the canonical simplifier {\tt *\_simplify} is stored such that it is accessible for \isac
 49.1727 +\\
 49.1728 +& {\tt rew\_ord' :=}
 49.1729 +& the same for rewrite orders, if needed outside of one particular ruleset
 49.1730 +\\
 49.1731 +& {\tt ruleset' :=}
 49.1732 +& the same for rulesets (ordinary rulesets, reverse rulesets and {\tt eval\_rls})
 49.1733 +\\
 49.1734 +& {\tt calc\_list :=}
 49.1735 +& the same for {\tt eval\_fn}s, if needed outside of one particular ruleset (e.g. for a tactic {\tt Calculate} in a script)
 49.1736 +\\
 49.1737 +& {\tt store\_pbl}
 49.1738 +& problems defined within this {\tt *.ML}-file are made accessible for \isac
 49.1739 +\\
 49.1740 +& {\tt methods :=}
 49.1741 +& methods defined within this {\tt *.ML}-file are made accessible for \isac
 49.1742 +\\
 49.1743 +\end{tabular}\end{center}\end{table}
 49.1744 +}
 49.1745 +The order of the data-items within the theories should adhere to the order given in this list.
 49.1746 +
 49.1747 +\section{Formal description of the problem-hierarchy}
 49.1748 +%for Richard Lang
 49.1749 +
 49.1750 +\section{Script tactics}
 49.1751 +The tactics actually promote the calculation: they construct the prooftree behind the scenes, and they are the points during evaluation where the script-interpreter transfers control to the user. Here we only describe the sytax of the tactics; the semantics is described on p.\pageref{user-tactics} below in context with the tactics the student uses ('user-tactics'): there is a 1-to-1 correspondence between user-tactics and script-tactics.
 49.1752 +
 49.1753 +
 49.1754 +
 49.1755 +
 49.1756 +
 49.1757 +\part{Authoring on the knowledge}
 49.1758 +
 49.1759 +
 49.1760 +\section{Add a theorem}
 49.1761 +\section{Define and add a problem}
 49.1762 +\section{Define and add a predicate}
 49.1763 +\section{Define and add a method}
 49.1764 +\section{}
 49.1765 +\section{}
 49.1766 +\section{}
 49.1767 +\section{}
 49.1768 +
 49.1769 +
 49.1770 +
 49.1771 +\newpage
 49.1772 +\bibliography{bib/isac,bib/from-theses}
 49.1773 +
 49.1774 +\end{document}
 49.1775 \ No newline at end of file
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/doc-isac/mat-eng.sml	Tue Sep 17 09:50:52 2013 +0200
    50.3 @@ -0,0 +1,519 @@
    50.4 +(* cut and paste for math.tex
    50.5 +*)
    50.6 +
    50.7 +(*2.2. *)
    50.8 +"a + b * 3";
    50.9 +str2term "a + b * 3";
   50.10 +val term = str2term "a + b * 3";
   50.11 +atomt term;
   50.12 +atomty term;
   50.13 +
   50.14 +(*2.3. Theories and parsing*)
   50.15 +
   50.16 + > Isac.thy;
   50.17 +val it =
   50.18 +   {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
   50.19 +     Sum_Type, Relation, Record, Inductive, Transitive_Closure,
   50.20 +     Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
   50.21 +     SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
   50.22 +     Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
   50.23 +     IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
   50.24 +     Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
   50.25 +     RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
   50.26 +     Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
   50.27 +     Float, ComplexI, Descript, Atools, Simplify, Poly, Rational, PolyMinus,
   50.28 +     Equation, LinEq, Root, RootEq, RatEq, RootRat, RootRatEq, PolyEq, Vect,
   50.29 +     Calculus, Trig, LogExp, Diff, DiffApp, Integrate, EqSystem, Biegelinie,
   50.30 +     AlgEin, Test, Isac} : Theory.theory
   50.31 +
   50.32 +Group.thy
   50.33 +suche nach '*' Link: http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/HOL/Groups.html
   50.34 +locale semigroup =
   50.35 +  fixes f :: "'a => 'a => 'a" (infixl "*" 70)
   50.36 +  assumes assoc [ac_simps]: "a * b * c = a * (b * c)"
   50.37 +
   50.38 +> parse;
   50.39 +val it = fn : Theory.theory -> string -> Thm.cterm Library.option
   50.40 +
   50.41 +
   50.42 +
   50.43 +> (*-1-*);
   50.44 +> parse HOL.thy "2^^^3";
   50.45 +*** Inner lexical error at: "^^^3"
   50.46 +val it = None : Thm.cterm Library.option
   50.47 +> (*-2-*);
   50.48 +> parse HOL.thy "d_d x (a + x)";
   50.49 +val it = None : Thm.cterm Library.option
   50.50 +> (*-3-*);
   50.51 +> parse Rational.thy "2^^^3";
   50.52 +val it = Some "2 ^^^ 3" : Thm.cterm Library.option
   50.53 +> (*-4-*);
   50.54 +val Some t4 = parse Rational.thy "d_d x (a + x)";
   50.55 +val t4 = "d_d x (a + x)" : Thm.cterm
   50.56 +> (*-5-*);
   50.57 +val Some t5 = parse Diff.thy  "d_d x (a + x)";
   50.58 +val t5 = "d_d x (a + x)" : Thm.cterm
   50.59 +
   50.60 +
   50.61 +> term_of;
   50.62 +val it = fn : Thm.cterm -> Term.term
   50.63 +> term_of t4;
   50.64 +val it =
   50.65 +   Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
   50.66 +         Free ("x", "RealDef.real") $
   50.67 +      (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
   50.68 +            Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
   50.69 +: Term.term
   50.70 +> term_of t5;
   50.71 +val it =
   50.72 +   Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
   50.73 +         Free ("x", "RealDef.real") $
   50.74 +      (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
   50.75 +            Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
   50.76 +: Term.term
   50.77 +
   50.78 +> print_depth;
   50.79 +val it = fn : int -> unit
   50.80 +
   50.81 +
   50.82 +
   50.83 +
   50.84 +
   50.85 +> (*-4-*) val thy = Rational.thy;
   50.86 +val thy =
   50.87 +   {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
   50.88 +     Sum_Type, Relation, Record, Inductive, Transitive_Closure,
   50.89 +     Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
   50.90 +     SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
   50.91 +     Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
   50.92 +     IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
   50.93 +     Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
   50.94 +     RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
   50.95 +     Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
   50.96 +     Float, ComplexI, Descript, Atools, Simplify, Poly, Rational}
   50.97 +: Theory.theory
   50.98 +> ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
   50.99 +
  50.100 +***
  50.101 +*** Free (d_d, [real, real] => real)
  50.102 +*** . Free (x, real)
  50.103 +*** . Const (op +, [real, real] => real)
  50.104 +*** . . Free (a, real)
  50.105 +*** . . Free (x, real)
  50.106 +***
  50.107 +
  50.108 +val it = () : unit
  50.109 +> (*-5-*) val thy = Diff.thy;
  50.110 +val thy =
  50.111 +   {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
  50.112 +     Sum_Type, Relation, Record, Inductive, Transitive_Closure,
  50.113 +     Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
  50.114 +     SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
  50.115 +     Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
  50.116 +     IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
  50.117 +     Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
  50.118 +     RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
  50.119 +     Ring_and_Field, Complex_Numbers, Real, Calculus, Trig, ListG, Tools,
  50.120 +     Script, Typefix, Float, ComplexI, Descript, Atools, Simplify, Poly,
  50.121 +     Equation, LinEq, Root, RootEq, Rational, RatEq, RootRat, RootRatEq,
  50.122 +     PolyEq, LogExp, Diff} : Theory.theory
  50.123 +
  50.124 +> ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
  50.125 +
  50.126 +***
  50.127 +*** Const (Diff.d_d, [real, real] => real)
  50.128 +*** . Free (x, real)
  50.129 +*** . Const (op +, [real, real] => real)
  50.130 +*** . . Free (a, real)
  50.131 +*** . . Free (x, real)
  50.132 +***
  50.133 +
  50.134 +val it = () : unit
  50.135 +
  50.136 +
  50.137 +
  50.138 +> print_depth 1;
  50.139 +val it = () : unit
  50.140 +> term_of t4;
  50.141 +val it =
  50.142 +   Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $ ...
  50.143 +: Term.term
  50.144 +
  50.145 +
  50.146 +> print_depth 1;
  50.147 +val it = () : unit
  50.148 +> term_of t5;
  50.149 +val it =
  50.150 +   Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
  50.151 +      ... : Term.term
  50.152 +
  50.153 +
  50.154 +
  50.155 +-------------------------------------------ALT...
  50.156 +explode it;
  50.157 +	  \footnote{
  50.158 +	  print_depth 9;
  50.159 +	  explode "a + b * 3";
  50.160 +	  }
  50.161 +
  50.162 +(*unschoen*)
  50.163 +
  50.164 +-------------------------------------------ALT...
  50.165 + HOL.thy;
  50.166 + parse;
  50.167 + parse thy "a + b * 3";
  50.168 + val t = (term_of o the) it;
  50.169 + term_of;
  50.170 +
  50.171 +(*2.3. Displaying terms*)
  50.172 + print_depth;
  50.173 + ////Compiler.Control.Print.printDepth;
  50.174 +? Compiler.Control.Print.printDepth:= 2;
  50.175 + t;
  50.176 + ?Compiler.Control.Print.printDepth:= 6;
  50.177 + t;
  50.178 + ?Compiler.Control.Print.printLength;
  50.179 + ?Compiler.Control.Print.stringDepth;
  50.180 + atomt;
  50.181 + atomt t; 
  50.182 + atomty;
  50.183 + atomty thy t;
  50.184 +(*Give it a try: the mathematics knowledge grows*)
  50.185 + parse HOL.thy "2^^^3";
  50.186 + parse HOL.thy "d_d x (a + x)";
  50.187 + ?parse RatArith.thy "#2^^^#3";
  50.188 + ?parse RatArith.thy "d_d x (a + x)";
  50.189 + parse Differentiate.thy "d_d x (a + x)";
  50.190 + ?parse Differentiate.thy "#2^^^#3";
  50.191 +(*don't trust the string representation*)
  50.192 + ?val thy = RatArith.thy;
  50.193 + ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
  50.194 + ?val thy = Differentiate.thy;
  50.195 + ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
  50.196 +
  50.197 +(*2.4. Converting terms*)
  50.198 + term_of;
  50.199 + the;
  50.200 + val t = (term_of o the o (parse thy)) "a + b * 3";
  50.201 +
  50.202 + sign_of;
  50.203 + cterm_of;
  50.204 + val ct = cterm_of (sign_of thy) t;
  50.205 +
  50.206 + Sign.string_of_term;
  50.207 + Sign.string_of_term (sign_of thy) t;
  50.208 +
  50.209 + string_of_cterm;
  50.210 + string_of_cterm ct;
  50.211 +
  50.212 +(*2.5. Theorems *)
  50.213 + ?theorem' := overwritel (!theorem',
  50.214 +  [("diff_const",num_str diff_const)
  50.215 +   ]);
  50.216 +
  50.217 +(** 3. Rewriting **)
  50.218 +(*3.1. The arguments for rewriting*)
  50.219 + HOL.thy;
  50.220 + "HOL.thy" : theory';
  50.221 + sqrt_right;
  50.222 + "sqrt_right" : rew_ord';
  50.223 + eval_rls;
  50.224 + "eval_rls" : rls';
  50.225 + diff_sum;
  50.226 + ("diff_sum", "") : thm';
  50.227 +
  50.228 +(*3.2. The functions for rewriting*)
  50.229 + rewrite_;
  50.230 + rewrite;
  50.231 +
  50.232 +> val thy' = "Diff.thy";
  50.233 +val thy' = "Diff.thy" : string
  50.234 +> val ct = "d_d x (a * 3 + b)";
  50.235 +val ct = "d_d x (a * 3 + b)" : string
  50.236 +> val thm = ("diff_sum","");
  50.237 +val thm = ("diff_sum", "") : string * string
  50.238 +> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
  50.239 +                     [("bdv","x::real")] thm ct;
  50.240 +val ct = "d_d x (a * 3) + d_d x b" : cterm'
  50.241 +> val thm = ("diff_prod_const","");
  50.242 +val thm = ("diff_prod_const", "") : string * string
  50.243 +> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
  50.244 +                     [("bdv","x::real")] thm ct;
  50.245 +val ct = "a * d_d x 3 + d_d x b" : cterm'
  50.246 +
  50.247 +
  50.248 +
  50.249 +> val thy' = "Diff.thy";
  50.250 +val thy' = "Diff.thy" : string
  50.251 +> val ct = "d_d x (a + a * (2 + b))";
  50.252 +val ct = "d_d x (a + a * (2 + b))" : string
  50.253 +> val thm = ("diff_sum","");
  50.254 +val thm = ("diff_sum", "") : string * string
  50.255 +> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
  50.256 +                     [("bdv","x::real")] thm ct;
  50.257 +val ct = "d_d x a + d_d x (a * (2 + b))" : cterm'
  50.258 +
  50.259 +> val thm = ("diff_prod_const","");
  50.260 +val thm = ("diff_prod_const", "") : string * string
  50.261 +> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
  50.262 +                     [("bdv","x::real")] thm ct;
  50.263 +val ct = "d_d x a + a * d_d x (2 + b)" : cterm'
  50.264 +
  50.265 +
  50.266 +
  50.267 +(*Give it a try: rewriting*)
  50.268 + val thy' = "Diff.thy";
  50.269 + val ct = "d_d x (x ^^^ 2 + 3 * x + 4)";
  50.270 + val thm = ("diff_sum","");
  50.271 + val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true [("bdv","x::real")] thm ct;
  50.272 + val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true  [("bdv","x::real")] thm ct;
  50.273 + val thm = ("diff_prod_const","");
  50.274 + val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true [("bdv","x::real")] thm ct;
  50.275 +(*Give it a try: conditional rewriting*)
  50.276 + val thy' = "Isac.thy";
  50.277 + val ct' = "3 * a + 2 * (a + 1)";
  50.278 + val thm' = ("radd_mult_distrib2","?k * (?m + ?n) = ?k * ?m + ?k * ?n");
  50.279 + (*1*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.280 + val thm' = ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1");
  50.281 + ?(*2*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.282 + ?val thm' = ("rcollect_right",
  50.283 +     "[| ?l is_const; ?m is_const |] ==> ?l * ?n + ?m * ?n = (?l + ?m) * ?n");
  50.284 + ?(*3*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.285 + ?(*4*) val Some (ct',_) = calculate thy' "plus" ct';
  50.286 + ?(*5*) val Some (ct',_) = calculate thy' "times" ct';
  50.287 +
  50.288 +(*Give it a try: functional programming*)
  50.289 + val thy' = "InsSort.thy";
  50.290 + val ct = "sort [#1,#3,#2]" : cterm';
  50.291 +
  50.292 + val thm = ("sort_def","");
  50.293 + ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  50.294 +
  50.295 + val thm = ("foldr_rec","");
  50.296 + ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  50.297 +
  50.298 + val thm = ("ins_base","");
  50.299 + ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  50.300 +
  50.301 + val thm = ("foldr_rec","");
  50.302 + ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  50.303 +
  50.304 + val thm = ("ins_rec","");
  50.305 + ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  50.306 +
  50.307 + ?val (ct,_) = the (calculate thy' "le" ct);
  50.308 +
  50.309 + val thm = ("if_True","(if True then ?x else ?y) = ?x");
  50.310 + ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
  50.311 +
  50.312 +(*3.3. Variants of rewriting*)
  50.313 + rewrite_inst_;
  50.314 + rewrite_inst;
  50.315 +
  50.316 + rewrite_set_;
  50.317 + rewrite_set;
  50.318 +
  50.319 + rewrite_set_inst_;
  50.320 + rewrite_set_inst;
  50.321 +
  50.322 + toggle;
  50.323 + toggle trace_rewrite;
  50.324 +
  50.325 +(*3.4. Rule sets*)
  50.326 + sym;
  50.327 + rearrange_assoc;
  50.328 +
  50.329 +(*Give it a try: remove parentheses*)
  50.330 + ?val ct = (string_of_cterm o the o (parse RatArith.thy))
  50.331 +           "a + (b * (c * d) + e)";
  50.332 + ?rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
  50.333 +
  50.334 + toggle trace_rewrite;
  50.335 + ?rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
  50.336 +
  50.337 +(*3.5. Calculate numeric constants*)
  50.338 + calculate;
  50.339 + calculate_;
  50.340 +
  50.341 + ?calc_list;
  50.342 + ?calculate "Isac.thy" "plus" "#1 + #2";
  50.343 + ?calculate "Isac.thy" "times" "#2 * #3";
  50.344 + ?calculate "Isac.thy" "power" "#2 ^^^ #3";
  50.345 + ?calculate "Isac.thy" "cancel_" "#9 // #12";
  50.346 +   
  50.347 +
  50.348 +(** 4. Term orders **)
  50.349 +(*4.1. Exmpales for term orders*)
  50.350 + sqrt_right;
  50.351 + tless_true;
  50.352 +
  50.353 + val t1 = (term_of o the o (parse thy)) "(sqrt a) + b";
  50.354 + val t2 = (term_of o the o (parse thy)) "b + (sqrt a)";
  50.355 + ?sqrt_right false SqRoot.thy (t1, t2);
  50.356 + ?sqrt_right false SqRoot.thy (t2, t1);
  50.357 +
  50.358 + val t1 = (term_of o the o (parse thy)) "a + b*(sqrt c) + d";
  50.359 + val t2 = (term_of o the o (parse thy)) "a + (sqrt b)*c + d";
  50.360 + ?sqrt_right true SqRoot.thy (t1, t2);
  50.361 +
  50.362 +(*4.2. Ordered rewriting*)   
  50.363 + ac_plus_times;
  50.364 +
  50.365 +(*Give it a try: polynomial (normal) form*)
  50.366 + val ct' = "#3 * a + b + #2 * a";
  50.367 + val thm' = ("radd_commute","") : thm';
  50.368 + ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.369 + val thm' = ("rdistr_right_assoc_p","") : thm';
  50.370 + ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.371 + ?val Some (ct',_) = calculate thy' "plus" ct';
  50.372 +
  50.373 + val ct' = "3 * a + b + 2 * a" : cterm';
  50.374 + val thm' = ("radd_commute","") : thm';
  50.375 + ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.376 + ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.377 + ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
  50.378 +
  50.379 + toggle trace_rewrite;
  50.380 + ?rewrite_set "RatArith.thy" "eval_rls" false "ac_plus_times" ct;
  50.381 +
  50.382 +
  50.383 +(** 5. The hierarchy of problem types **)
  50.384 +(*5.1. The standard-function for 'matching'*)
  50.385 + matches;
  50.386 +
  50.387 + val t = (term_of o the o (parse thy)) "3 * x^^^2 = 1";
  50.388 + val p = (term_of o the o (parse thy)) "a * b^^^2 = c";
  50.389 + atomt p;
  50.390 + free2var;
  50.391 + val pat = free2var p;
  50.392 + matches thy t pat;
  50.393 +
  50.394 + val t2 = (term_of o the o (parse thy)) "x^^^2 = 1";
  50.395 + matches thy t2 pat;
  50.396 +
  50.397 + val pat2 = (term_of o the o (parse thy)) "?u^^^2 = ?v";
  50.398 + matches thy t2 pat2;
  50.399 +
  50.400 +(*5.2. Accessing the hierarchy*)
  50.401 + show_ptyps;
  50.402 + show_ptyps();
  50.403 + get_pbt;
  50.404 + ?get_pbt ["squareroot", "univariate", "equation"];
  50.405 +
  50.406 + store_pbt;
  50.407 + ?store_pbt
  50.408 +    (prep_pbt SqRoot.thy
  50.409 +    (["newtype","univariate","equation"],
  50.410 +     [("#Given" ,["equality e_","solveFor v_","errorBound err_"]),
  50.411 +      ("#Where" ,["contains_root (e_::bool)"]),
  50.412 +      ("#Find"  ,["solutions v_i_"])
  50.413 +     ],
  50.414 +     [("SqRoot.thy","square_equation")]));
  50.415 + show_ptyps();
  50.416 +
  50.417 +(*5.3. Internals of the datastructure*)
  50.418 +(*5.4. Match a problem with a problem type*)
  50.419 + ?val fmz = ["equality (#1 + #2 * x = #0)",
  50.420 + 	    "solveFor x",
  50.421 + 	    "solutions L"] : fmz;
  50.422 + match_pbl;
  50.423 + ?match_pbl fmz (get_pbt ["univariate","equation"]);
  50.424 + ?match_pbl fmz (get_pbt ["linear","univariate","equation"]);
  50.425 + ?match_pbl fmz (get_pbt ["squareroot","univariate","equation"]);
  50.426 +
  50.427 +(*5.5. Refine a problem specification *)
  50.428 + refine;
  50.429 + ?val fmz = ["equality (sqrt(#9+#4*x)=sqrt x + sqrt(#5+x))",
  50.430 + 	    "solveFor x","errorBound (eps=#0)",
  50.431 + 	    "solutions L"];
  50.432 + ?refine fmz ["univariate","equation"];
  50.433 +
  50.434 + ?val fmz = ["equality (x+#1=#2)",
  50.435 + 	    "solveFor x","errorBound (eps=#0)",
  50.436 + 	    "solutions L"];
  50.437 + ?refine fmz ["univariate","equation"];
  50.438 + 
  50.439 +
  50.440 +(* 6. Do a calculational proof *)
  50.441 + ?val fmz = ["equality ((x+#1) * (x+#2) = x^^^#2+#8)","solveFor x",
  50.442 + 	    "errorBound (eps=#0)","solutions L"];
  50.443 + val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
  50.444 + 				("SqRoot.thy","no_met"));
  50.445 + 
  50.446 +(*6.1. Initialize the calculation*)
  50.447 + val p = e_pos'; val c = [];
  50.448 + ?val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
  50.449 + ?val (p,_,f,nxt,_,pt) = me (mID,m) p c EmptyPtree;
  50.450 +
  50.451 + ?Compiler.Control.Print.printDepth:=8;
  50.452 + ?f;
  50.453 + ?Compiler.Control.Print.printDepth:=4;
  50.454 +
  50.455 + ?nxt;
  50.456 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.457 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.458 +
  50.459 +(*6.2. The phase of modeling*)
  50.460 + ?nxt;
  50.461 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.462 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.463 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.464 +
  50.465 + ?Compiler.Control.Print.printDepth:=8;
  50.466 + ?f;
  50.467 + ?Compiler.Control.Print.printDepth:=4;
  50.468 +
  50.469 +(*6.3. The phase of specification*)
  50.470 + ?nxt;
  50.471 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.472 +
  50.473 +
  50.474 + val nxt = ("Specify_Problem",
  50.475 +	    Specify_Problem ["polynomial","univariate","equation"]);
  50.476 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.477 +
  50.478 + val nxt = ("Specify_Problem",
  50.479 +	    Specify_Problem ["linear","univariate","equation"]);
  50.480 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.481 + ?Compiler.Control.Print.printDepth:=8;f;Compiler.Control.Print.printDepth:=4;
  50.482 +
  50.483 + val nxt = ("Refine_Problem",
  50.484 +	    Refine_Problem ["linear","univariate","equation"]);
  50.485 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.486 + ?Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
  50.487 +
  50.488 + val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
  50.489 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.490 + ?Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
  50.491 +
  50.492 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.493 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.494 +
  50.495 +(*6.4. The phase of solving*)
  50.496 + nxt;
  50.497 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.498 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.499 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.500 +
  50.501 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.502 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.503 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.504 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.505 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.506 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.507 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.508 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.509 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.510 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.511 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.512 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.513 +
  50.514 +(*6.5. The final phase: check the postcondition*)
  50.515 + ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.516 + val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
  50.517 +
  50.518 +
  50.519 +
  50.520 +
  50.521 +
  50.522 +
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/doc-isac/mlehnfeld/bib.bib	Tue Sep 17 09:50:52 2013 +0200
    51.3 @@ -0,0 +1,26 @@
    51.4 +@Book{Nipkow-Paulson-Wenzel:2002,
    51.5 +  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
    51.6 +  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
    51.7 +  publisher	= {Springer},
    51.8 +  series	= {LNCS},
    51.9 +  volume	= 2283,
   51.10 +  year		= 2002}
   51.11 +
   51.12 +@Article{plmms10,
   51.13 +  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
   51.14 +  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
   51.15 +  journal = 	 {ACM Communications in Computer Algebra},
   51.16 +  year = 	 {2010},
   51.17 +  volume = 	 {44},
   51.18 +  number = 	 {1/2},
   51.19 +  pages = 	 {27-41},
   51.20 +  doi =          {10.1145/1838599.1838621}
   51.21 +}
   51.22 +
   51.23 +@Manual{isar-impl,
   51.24 +  title = 	 {The {Isabelle/Isar} Implementation},
   51.25 +  author = 	 {Makarius Wenzel},
   51.26 +  month = 	 {30 January},
   51.27 +  year = 	 {2011},
   51.28 +  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
   51.29 +}
    52.1 Binary file doc-isac/mlehnfeld/overview.odg has changed
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/doc-isac/mlehnfeld/presentation.tex	Tue Sep 17 09:50:52 2013 +0200
    53.3 @@ -0,0 +1,469 @@
    53.4 +% $Header: /cvsroot/latex-beamer/latex-beamer/solutions/conference-talks/conference-ornate-20min.en.tex,v 1.7 2007/01/28 20:48:23 tantau Exp $
    53.5 +
    53.6 +\documentclass{beamer}
    53.7 +
    53.8 +% This file is a solution template for:
    53.9 +
   53.10 +% - Talk at a conference/colloquium.
   53.11 +% - Talk length is about 20min.
   53.12 +% - Style is ornate.
   53.13 +
   53.14 +
   53.15 +
   53.16 +% Copyright 2004 by Till Tantau <tantau@users.sourceforge.net>.
   53.17 +%
   53.18 +% In principle, this file can be redistributed and/or modified under
   53.19 +% the terms of the GNU Public License, version 2.
   53.20 +%
   53.21 +% However, this file is supposed to be a template to be modified
   53.22 +% for your own needs. For this reason, if you use this file as a
   53.23 +% template and not specifically distribute it as part of a another
   53.24 +% package/program, I grant the extra permission to freely copy and
   53.25 +% modify this file as you see fit and even to delete this copyright
   53.26 +% notice.
   53.27 +
   53.28 +
   53.29 +\mode<presentation>
   53.30 +{
   53.31 +  \usetheme{Hannover}
   53.32 +  % or ...
   53.33 +
   53.34 +  \setbeamercovered{transparent}
   53.35 +  % or whatever (possibly just delete it)
   53.36 +}
   53.37 +
   53.38 +%\usepackage{setspace} %for "\begin{onehalfspace}"
   53.39 +\usepackage[english]{babel}
   53.40 +% or whatever
   53.41 +
   53.42 +\usepackage[utf8]{inputenc}
   53.43 +% or whatever
   53.44 +
   53.45 +\usepackage{times}
   53.46 +\usepackage[T1]{fontenc}
   53.47 +% Or whatever. Note that the encoding and the font should match. If T1
   53.48 +% does not look nice, try deleting the line with the fontenc.
   53.49 +
   53.50 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   53.51 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   53.52 +
   53.53 +\title[\isac: Computation \& Deduction] % (optional, use only with long paper titles)
   53.54 +{Integrating Computation and Deduction\\
   53.55 +  in the \isac-System}
   53.56 +
   53.57 +\subtitle{Projektpraktikum: Introducing Isabelle's Contexts}
   53.58 +
   53.59 +\author[Lehnfeld] % (optional, use only with lots of authors)
   53.60 +{Mathias~Lehnfeld}
   53.61 +% - Give the names in the same order as the appear in the paper.
   53.62 +% - Use the \inst{?} command only if the authors have different
   53.63 +%   affiliation.
   53.64 +
   53.65 +\institute % (optional, but mostly needed)
   53.66 +{
   53.67 +  Vienna University of Technology\\
   53.68 +  Institute of Computer Languages
   53.69 +}
   53.70 +% - Use the \inst command only if there are several affiliations.
   53.71 +% - Keep it simple, no one is interested in your street address.
   53.72 +
   53.73 +% \date[CFP 2003] % (optional, should be abbreviation of conference name)
   53.74 +% {Conference on Fabulous Presentations, 2003}
   53.75 +% - Either use conference name or its abbreviation.
   53.76 +% - Not really informative to the audience, more for people (including
   53.77 +%   yourself) who are reading the slides online
   53.78 +
   53.79 +% \subject{Theoretical Computer Science}
   53.80 +% This is only inserted into the PDF information catalog. Can be left
   53.81 +% out.
   53.82 +
   53.83 +
   53.84 +
   53.85 +% If you have a file called "university-logo-filename.xxx", where xxx
   53.86 +% is a graphic format that can be processed by latex or pdflatex,
   53.87 +% resp., then you can add a logo as follows:
   53.88 +
   53.89 +% \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename}
   53.90 +% \logo{\pgfuseimage{university-logo}}
   53.91 +
   53.92 +
   53.93 +
   53.94 +% Delete this, if you do not want the table of contents to pop up at
   53.95 +% the beginning of each subsection:
   53.96 +\AtBeginSubsection[]
   53.97 +{
   53.98 +  \begin{frame}<beamer>{Outline}
   53.99 +    \tableofcontents[currentsection,currentsubsection]
  53.100 +  \end{frame}
  53.101 +}
  53.102 +
  53.103 +
  53.104 +% If you wish to uncover everything in a step-wise fashion, uncomment
  53.105 +% the following command:
  53.106 +
  53.107 +%\beamerdefaultoverlayspecification{<+->}
  53.108 +
  53.109 +
  53.110 +\begin{document}
  53.111 +
  53.112 +\begin{frame}
  53.113 +  \titlepage
  53.114 +\end{frame}
  53.115 +
  53.116 +\begin{frame}{Outline}
  53.117 +  \tableofcontents
  53.118 +  % You might wish to add the option [pausesections]
  53.119 +\end{frame}
  53.120 +
  53.121 +
  53.122 +% Structuring a talk is a difficult task and the following structure
  53.123 +% may not be suitable. Here are some rules that apply for this
  53.124 +% solution:
  53.125 +
  53.126 +% - Exactly two or three sections (other than the summary).
  53.127 +% - At *most* three subsections per section.
  53.128 +% - Talk about 30s to 2min per frame. So there should be between about
  53.129 +%   15 and 30 frames, all told.
  53.130 +
  53.131 +% - A conference audience is likely to know very little of what you
  53.132 +%   are going to talk about. So *simplify*!
  53.133 +% - In a 20min talk, getting the main ideas across is hard
  53.134 +%   enough. Leave out details, even if it means being less precise than
  53.135 +%   you think necessary.
  53.136 +% - If you omit details that are vital to the proof/implementation,
  53.137 +%   just say so once. Everybody will be happy with that.
  53.138 +
  53.139 +\section[Introduction]{Introduction: Isabelle and \isac}
  53.140 +%\subsection[Isabelle \& \isac]{Isabelle and \isac}
  53.141 +\begin{frame}
  53.142 +  \frametitle{Isabelle and \isac}
  53.143 +The task of this ``Projektpraktikum'' (6 ECTS) was to
  53.144 +\begin{itemize}
  53.145 +\item study the concept of ``context'' in the theorem prover \textbf{Isabelle} from TU Munich
  53.146 +\item study basic concepts of the math assistant \sisac{} from TU Graz
  53.147 +\pause
  53.148 +\item redesign \sisac{} with respect to contexts
  53.149 +  \begin{itemize}
  53.150 +  \item use contexts for type inference of user input
  53.151 +  \item handle preconditions of specifications
  53.152 +  \item clarify the transfer of context data from sub-programs to the calling program
  53.153 +  \end{itemize}
  53.154 +\pause
  53.155 +\item introduce contexts to \sisac{} according to the new design
  53.156 +\item use the coding standards of Isabelle2011 for new code.
  53.157 +\end{itemize}
  53.158 +\end{frame}
  53.159 +
  53.160 +%\subsection[Computation \& Deduction]{Computation and Deduction in a Lucas-Interpreter}
  53.161 +\begin{frame}
  53.162 +  \frametitle{Computation and Deduction in a Lucas-Interpreter}
  53.163 +    \includegraphics[width=100mm]{overview.pdf}
  53.164 +\end{frame}
  53.165 +
  53.166 +\section[Contributions]{Contributions of the project to \isac}
  53.167 +\subsection[Contexts]{Isabelle's Contexts, advantages and use}
  53.168 +\begin{frame}
  53.169 +  \frametitle{Advantages of Isabelle's Contexts}
  53.170 +Isabelle's context replaced theories because \dots:
  53.171 +\begin{itemize}
  53.172 +\item theories are static containers of \textit{all} logical data
  53.173 +\item contexts are \textit{dynamic} containers of logical data:
  53.174 +  \begin{itemize}
  53.175 +  \item functions for storing and retrieving various logical data
  53.176 +  \item functions for type inference
  53.177 +  \item provide data for Isabelle's automated provers
  53.178 +  \end{itemize}
  53.179 +%\item e.g. theories have no direct functions for type inference
  53.180 +%\item replace function \texttt{parseNEW}
  53.181 +%\item assumptions \& environment $\rightarrow$ context
  53.182 +\item allow to conform with scopes for subprograms.
  53.183 +\end{itemize}
  53.184 +\end{frame}
  53.185 +
  53.186 +\begin{frame}
  53.187 +  \frametitle{Isabelle's context mechanism}
  53.188 +    \texttt{\small{
  53.189 +      \begin{tabbing}
  53.190 +xx\=xx\=in\=\kill
  53.191 +%xx\=xx\=xx\=xx\=\kill
  53.192 +%datatype Isac\_Ctxt =\\
  53.193 +%\>\>Env of term * term\\
  53.194 +%\>| Asm of term;\\
  53.195 +%\\
  53.196 +structure ContextData =  \alert{Proof\_Data}\\
  53.197 +\>~(\alert{type T} = term list\\
  53.198 +\>\>\alert{fun init \_} = []);\\
  53.199 +\\
  53.200 +%local\\
  53.201 +%\>fun insert\_ctxt data = ContextData\alert{.map} (fn xs => distinct (data@xs));\\
  53.202 +%in\\
  53.203 +%\>fun insert\_assumptions asms = map (fn t => Asm t) asms |> insert\_ctxt;\\
  53.204 +%\>fun insert\_environments envs = map (fn t => Env t) envs |> insert\_ctxt;\\
  53.205 +%end\\
  53.206 +fun insert\_assumptions asms = \\
  53.207 +\>\>\>ContextData\alert{.map} (fn xs => distinct (asms@xs));\\
  53.208 +\\
  53.209 +%local\\
  53.210 +%\>fun unpack\_asms (Asm t::ts) = t::(unpack\_asms ts)\\
  53.211 +%\>\>| unpack\_asms (Env \_::ts) = unpack\_asms ts\\
  53.212 +%\>\>| unpack\_asms [] = [];\\
  53.213 +%\>fun unpack\_envs (Env t::ts) = t::(unpack\_envs ts)\\
  53.214 +%\>\>| unpack\_envs (Asm \_::ts) = unpack\_envs ts\\
  53.215 +%\>\>| unpack\_envs [] = [];\\
  53.216 +%in\\
  53.217 +%\>fun get\_assumptions ctxt = ContextData.get ctxt |> unpack\_asms;\\
  53.218 +%\>fun get\_environments ctxt = ContextData.get ctxt |> unpack\_envs;\\
  53.219 +%end
  53.220 +fun get\_assumptions ctxt = ContextData\alert{.get} ctxt;\\
  53.221 +\\
  53.222 +\\
  53.223 +val declare\_constraints : \\
  53.224 +\>\>\>term -> Proof.context -> Proof.context
  53.225 +      \end{tabbing}
  53.226 +    }}
  53.227 +\end{frame}
  53.228 +
  53.229 +\begin{frame}
  53.230 +  \frametitle{Usage of Contexts}
  53.231 +    \texttt{\footnotesize{
  53.232 +      \begin{tabbing}
  53.233 +xx\=xx\=xx\=xx\=xx\=\kill
  53.234 +fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
  53.235 +\>  let\\
  53.236 +\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
  53.237 +\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
  53.238 +\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
  53.239 +\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
  53.240 +\>\>\>\>\>         then transfer fas to\_ctxt\\
  53.241 +\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
  53.242 +\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
  53.243 +\\
  53.244 +fun parse thy str =\\
  53.245 +\>(let val t = (\alert{typ\_a2real} o numbers\_to\_string)\\
  53.246 +\>\>\>\>(\alert{Syntax.read\_term\_global thy} str)\\
  53.247 +\>\>in SOME (cterm\_of thy t) end)\\
  53.248 +\>\>\>handle \_ => NONE;\\
  53.249 +\\
  53.250 +fun parseNEW ctxt str = \\
  53.251 +\>\>\>SOME (\alert{Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
  53.252 +\>\>\>handle \_ => NONE;
  53.253 +      \end{tabbing}
  53.254 +    }}
  53.255 +
  53.256 +
  53.257 +\end{frame}
  53.258 +
  53.259 +\subsection[Redesign]{Redesign of \isac{} using contexts}
  53.260 +\begin{frame}
  53.261 +  \frametitle{Redesign of \isac{} using contexts}
  53.262 +\begin{center} DEMO \end{center}
  53.263 +\end{frame}
  53.264 +
  53.265 +\begin{frame}
  53.266 +  \frametitle{Deduction simplifies computation}
  53.267 +\small{
  53.268 +%\begin{onehalfspace}
  53.269 +\begin{tabbing}
  53.270 +xxx\=xxx\=\kill
  53.271 +     \`$\mathit{(some)}\;\mathit{assumptions}$\\
  53.272 +$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
  53.273 +%     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
  53.274 +%\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
  53.275 +%\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
  53.276 +\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
  53.277 +     \`$x\not=3\land x\not=0$\\
  53.278 +\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  53.279 +\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
  53.280 +%\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  53.281 +%\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  53.282 +\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  53.283 +\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
  53.284 +\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
  53.285 +\>\>$[x = 0, x = \frac{6}{5}]$ \\
  53.286 +     \`$x = 0\land x = \frac{6}{5}$\\
  53.287 +\>$[\alert{x = 0}, x = \frac{6}{5}]$ \\
  53.288 +     \`\alert{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
  53.289 +\>$[x = \frac{6}{5}]$ \\
  53.290 +$[x = \frac{6}{5}]$
  53.291 +\end{tabbing}
  53.292 +}
  53.293 +%\end{onehalfspace}
  53.294 +\end{frame}
  53.295 +
  53.296 +\begin{frame}
  53.297 +  \frametitle{More ``deduction'', \\less ``computation''}
  53.298 +\footnotesize{\tt
  53.299 +\begin{tabbing}
  53.300 +xx\=xx\=xx\=xx\=xx\=xx\=\kill
  53.301 +Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
  53.302 +\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
  53.303 +\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
  53.304 +\>\>     (L\_L::bool list) =                                   \\
  53.305 +\>\>\>            (SubProblem (Test',                           \\
  53.306 +\>\>\>\>                         [linear,univariate,equation,test]\\
  53.307 +\>\>\>\>                         [Test,solve\_linear])             \\
  53.308 +\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
  53.309 +\>  in \alert{Check\_elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
  53.310 +\end{tabbing}
  53.311 +}
  53.312 +\small{
  53.313 +``Deductive'' part of Lucas-Interpretation relives the ``computational'' part: \alert{one statement becomes obsolete~!}
  53.314 +}
  53.315 +\end{frame}
  53.316 +
  53.317 +
  53.318 +\begin{frame}
  53.319 +  \frametitle{Redesign of \isac{} using contexts}
  53.320 +Advantages of the redesign:
  53.321 +\begin{itemize}
  53.322 +\item type inference by \textit{local} contexts\\
  53.323 +\pause
  53.324 +     \alert{now user-input without type constraints~!}
  53.325 +\pause
  53.326 +\item consistent handling of logical data
  53.327 +  \begin{itemize}
  53.328 +  \item preconditions and partiality conditions in contexts
  53.329 +  \item transfer of context data into subprograms clarified
  53.330 +  \item transfer of context data from subprograms clarified
  53.331 +  \end{itemize}
  53.332 +\pause
  53.333 +     \alert{now some statements become obsolete.}\\
  53.334 +\end{itemize}
  53.335 +\pause
  53.336 +Now Lucas-interpretation shifts efforts from ``computation'' further to ``deduction''.
  53.337 +\end{frame}
  53.338 +
  53.339 +
  53.340 +
  53.341 +\subsection[Code Improvement]{Improvement of functional code}
  53.342 +\begin{frame}
  53.343 +  \frametitle{Improvement of functional code}
  53.344 +  \begin{itemize}
  53.345 +  \item \textbf{code conventions}: Isabelle2011 published coding standards first time
  53.346 +  \item \textbf{combinators}: Isabelle2011 introduced a library containing the following combinators:
  53.347 +\\\vspace{0.2cm}
  53.348 +\tiny{\tt%
  53.349 +  val |$>$ : 'a * ('a -$>$ 'b) -$>$ 'b\\
  53.350 +  val |-$>$ : ('c * 'a) * ('c -$>$ 'a -$>$ 'b) -$>$ 'b\\
  53.351 +  val |$>>$ : ('a * 'c) * ('a -$>$ 'b) -$>$ 'b * 'c\\
  53.352 +  val ||$>$ : ('c * 'a) * ('a -$>$ 'b) -$>$ 'c * 'b\\
  53.353 +  val ||$>>$ : ('c * 'a) * ('a -$>$ 'd * 'b) -$>$ ('c * 'd) * 'b\\
  53.354 +  val \#$>$ : ('a -$>$ 'b) * ('b -$>$ 'c) -$>$ 'a -$>$ 'c\\
  53.355 +  val \#-$>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'b -$>$ 'd) -$>$ 'a -$>$ 'd\\
  53.356 +  val \#$>>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'd) -$>$ 'a -$>$ 'd * 'b\\
  53.357 +  val \#\#$>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'd) -$>$ 'a -$>$ 'c * 'd\\
  53.358 +  val \#\#$>>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'e * 'd) -$>$ 'a -$>$ ('c * 'e) * 'd\\
  53.359 +}
  53.360 +  \end{itemize}
  53.361 +\end{frame}
  53.362 +
  53.363 +\begin{frame}
  53.364 +  \frametitle{Example with combinators}
  53.365 +    \texttt{\footnotesize{
  53.366 +      \begin{tabbing}
  53.367 +xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
  53.368 +fun prep\_ori [] \_ \_ = ([], e\_ctxt)\\
  53.369 +\>| prep\_ori fmz thy pbt =\\
  53.370 +\>\>\>let\\
  53.371 +\>\>\>\>val ctxt = ProofContext.init\_global thy \\
  53.372 +\>\>\>\>\> |> fold declare\_constraints fmz\\
  53.373 +\>\>\>\>val ori = \\
  53.374 +\>\>\>\>\> map (add\_field thy pbt o split\_dts o the o parseNEW ctxt) fmz\\
  53.375 +\>\>\>\>\>\> |> add\_variants\\
  53.376 +\>\>\>\>val maxv = map fst ori |> max\\
  53.377 +\>\>\>\>val maxv = if maxv = 0 then 1 else maxv\\
  53.378 +\>\>\>\>val oris = coll\_variants ori\\
  53.379 +\>\>\>\>\> |> map (replace\_0 maxv |> apfst)\\
  53.380 +\>\>\>\>\> |> add\_id\\
  53.381 +\>\>\>\>\> |> map flattup\\
  53.382 +\>\>\>in (oris, ctxt) end;
  53.383 +      \end{tabbing}
  53.384 +    }}
  53.385 +\dots which probably can be further polished.
  53.386 +\end{frame}
  53.387 +
  53.388 +%\subsection[Future Development]{Preparation of Future Development}
  53.389 +%\begin{frame}
  53.390 +%  \frametitle{Preparation of Future Development}
  53.391 +%
  53.392 +%%  "Script Solve_root_equation (e_e::bool) (v_v::real) =       " ^
  53.393 +%%  " (let e_e = ((Try (Rewrite_Set norm_equation False)) @@    " ^
  53.394 +%%  "            (Try (Rewrite_Set Test_simplify False))) e_e;  " ^
  53.395 +%%  "     (L_L::bool list) =                                    " ^
  53.396 +%%  "            (SubProblem (Test',                            " ^
  53.397 +%%  "                         [linear,univariate,equation,test]," ^
  53.398 +%%  "                         [Test,solve_linear])              " ^
  53.399 +%%  "                        [BOOL e_e, REAL v_v])              " ^
  53.400 +%%  "  in Check_elementwise L_L {(v_v::real). Assumptions})     "
  53.401 +%\end{frame}
  53.402 +%
  53.403 +%\begin{frame}
  53.404 +%  \frametitle{Preparation of Future Development}
  53.405 +%    \begin{itemize}
  53.406 +%    \item logical data for Isabelle provers in contexts
  53.407 +%    \item \isac{} programming language more compact\\
  53.408 +%      $\rightarrow$ context built automatically
  53.409 +%    \end{itemize}
  53.410 +%\end{frame}
  53.411 +
  53.412 +
  53.413 +\section[Problems]{Problems encountered in the project}
  53.414 +\begin{frame}
  53.415 +  \frametitle{Problems encountered in the project}
  53.416 +    \begin{itemize}
  53.417 +    \item new Isabelle release in February 2011: update \sisac{} first
  53.418 +\pause
  53.419 +    \item lines of code (LOC) in Isabelle and \sisac{}\\ \vspace{0.2cm}
  53.420 +\textit{
  53.421 +    \begin{tabular}{lrl}
  53.422 +      src/ & 1700 & $\,$k LOC\\
  53.423 +      src/Pure/ & 70 & k LOC\\
  53.424 +      src/Provers/ & 8 & k LOC\\
  53.425 +      src/Tools/ & 800 & k LOC\\
  53.426 +      src/Tools/isac/ & 37 & k LOC\\
  53.427 +      src/Tools/isac/Knowledge & 16 & k LOC
  53.428 +    \end{tabular}
  53.429 +}
  53.430 +\pause
  53.431 +    \item changes scattered throughout the code ($\rightarrow$ grep)
  53.432 +\pause
  53.433 +    \item documentation of Isabelle very ``technical'' (no API)
  53.434 +\pause
  53.435 +   \item documentation of \sisac{} not up to date
  53.436 +    \end{itemize}
  53.437 +\end{frame}
  53.438 +
  53.439 +%\begin{frame}
  53.440 +%  \frametitle{Lines of Code}
  53.441 +%    \begin{tabular}{lr}
  53.442 +%      src/ & 1700 k \\
  53.443 +%      src/Pure/ & 70 k \\
  53.444 +%      src/Provers/ & 8 k \\
  53.445 +%      src/Tools/ & 800 k \\
  53.446 +%      src/Tools/isac/ & 37 k \\
  53.447 +%      src/Tools/isac/Knowledge & 16 k \\
  53.448 +%    \end{tabular}
  53.449 +%\end{frame}
  53.450 +
  53.451 +\section{Summary}
  53.452 +\begin{frame}
  53.453 +  \frametitle{Summary}
  53.454 +The project succeeded in all goals:
  53.455 +\begin{itemize}
  53.456 +\item implemented Isabelle's contexts in \sisac{} such that
  53.457 +\item user input requires no type constraints anymore
  53.458 +\item consistent logical data is prepared for Isabelle's provers
  53.459 +\end{itemize}
  53.460 +\pause
  53.461 +The course of the project was close to the plan:
  53.462 +\begin{itemize}
  53.463 +\item faster in writing new code
  53.464 +\item slower in integrating the code into \sisac
  53.465 +\end{itemize}
  53.466 +\pause
  53.467 +The project provided essential prerequisites for further development of the Lucas-interpreter.
  53.468 +\end{frame}
  53.469 +
  53.470 +\end{document}
  53.471 +
  53.472 +
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/doc-isac/mlehnfeld/projektbericht.tex	Tue Sep 17 09:50:52 2013 +0200
    54.3 @@ -0,0 +1,575 @@
    54.4 +\documentclass[a4paper,12pt]{article}
    54.5 +%
    54.6 +\usepackage[ngerman]{babel}
    54.7 +\usepackage[utf8]{inputenc}
    54.8 +\usepackage{ngerman}
    54.9 +\usepackage{graphicx}
   54.10 +\bibliographystyle{alpha}
   54.11 +
   54.12 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   54.13 +\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   54.14 +
   54.15 +\begin{document}
   54.16 +
   54.17 +\title{\Large {\bf Verbindung von 'Computation' und 'Deduction' im \isac{}-System}\\~\\
   54.18 +	Projektpraktikum am Institut für Computersprachen,\\Technische Universit\"at Wien\\
   54.19 +\vspace{0.7cm}
   54.20 +\large{Betreuer: Univ.-Prof. Dr. Jens Knoop}}
   54.21 +\author{Mathias Lehnfeld\\
   54.22 +	{\tt mathias.lehnfeld@gmx.at}}
   54.23 +%pdflatex creates an empty page 1 and the titlepage on page 2 ?!?...
   54.24 +%\thanks{Betreuer: Univ.-Prof. Dr. Jens Knoop, Technische Universit\"at Wien\\
   54.25 +%        Dr. Walther Neuper, Technische Universit\"at Graz}
   54.26 +\date{30. Mai 2011}
   54.27 +\maketitle
   54.28 +\clearpage
   54.29 +\tableofcontents
   54.30 +\clearpage
   54.31 +
   54.32 +
   54.33 +\section{Zur Aufgabenstellung}
   54.34 +Das \sisac{}-Projekt entwickelt einen {\it math assistant} aufbauend auf den
   54.35 +{\it theorem prover} Isabelle. Der Kern des \sisac{}-Systems ist ein
   54.36 +{\it Lucas-Interpreter}, der automatisch Benutzerführung für schrittweises
   54.37 +Problemlösen erzeugt: Der nächste Schritt wird von einem Programm
   54.38 +berechnet ({\it computation}); {\it deduction} wird gefordert, wenn der Benutzer
   54.39 +eine Formel eingibt (die Ableitbarkeit der Formel aus dem {\it context} ist
   54.40 +zu beweisen).\\
   54.41 +\\
   54.42 +Die Aufgabenstellung im Rahmen des Projektpraktikums besteht darin, das
   54.43 +in Isabelle verfügbare Konzept {\it context} in den Lucas-Interpreter
   54.44 +einzubauen. Dies schließt grundlegende Design-Überlegungen ein, verlangt
   54.45 +tiefes Eindringen in den umfangreichen Code von zwei Softwareprodukten,
   54.46 +{\it Isabelle} und \sisac{} und bedeutet daher Zusammenarbeit mit den jeweiligen
   54.47 +Entwicklerteams.\\
   54.48 +\\
   54.49 +Ein erfolgreicher Einbau der Isabelle-{\it context}s in den
   54.50 +Lucas-Interpreter wird \sisac{}s Fähigkeit, Benutzereingaben zu
   54.51 +interpretieren, wesentlich erweitern: {\it context}s stellen Isabelles
   54.52 +automatischen Beweisern die notwendigen Daten bereit.
   54.53 +
   54.54 +
   54.55 +\section{Planung des Projektes}
   54.56 +\subsection{Ist-Zustand vor dem Projekt}
   54.57 +Das Isabelle Konzept der {\it context}s findet derzeit in \sisac{} noch keine Verwendung. Dadurch entstehen gewisse Einschränkungen bezüglich der Interpretation durch den Lucas-Interpreter, weil Rechenschritte nicht unter Berücksichtigung aller Faktoren ihres Kontexts betrachtet werden können. Derzeit werden Zusicherungen und Umgebungsdaten in einer \sisac{}-spezifischen Datenstruktur verwaltet, die Zugriffe auf Isabelles Prover nicht direkt unterstützen.
   54.58 +
   54.59 +\subsection{Geplanter Soll-Zustand nach dem Projekt}
   54.60 +\sisac{}s Lucas-Interpreter ist nun schlanker und nimmt Isabelles {\it context}s bei der Interpretation von Benutzereingaben in Anspruch. Spezifikationen werden mit Isabelles eigenen Datenstrukturen verwaltet. Zusicherungen und Typen von Variablen werden im Lucas-Interpreter in {\it context}s behandelt.
   54.61 +
   54.62 +\subsection{Zeitplanung f\"ur das Projekt}
   54.63 +Die Planung f\"ur das Projekt sah folgende Meilensteine vor (Details siehe \ref{ms-desc}):
   54.64 +\begin{enumerate}
   54.65 +\item \textbf{Voraussetzungen zum Arbeitsbeginn schaffen} (10.02. -- 18.02.)
   54.66 +  %Beschreibung siehe \ref{ms1_desc}
   54.67 +\item \textbf{\isac{} auf die letzte Isabelle-Release updaten} (21.02. -- 25.02.)
   54.68 +  %Beschreibung siehe \ref{ms2_desc}
   54.69 +\item \textbf{Parsen aus \textit{contexts}} (28.02. -- 04.03.)
   54.70 +  %Beschreibung siehe \ref{ms3_desc}
   54.71 +\item \textbf{Spezifikationsphase mit \textit{context}s} (07.03. -- 11.03.)
   54.72 +  %Beschreibung siehe \ref{ms4_desc}
   54.73 +\item \textbf{L\"osungsphase mit \textit{context}s} (14.03. -- 18.03.)
   54.74 +  %Beschreibung siehe \ref{ms5_desc}
   54.75 +\end{enumerate}
   54.76 +
   54.77 +\section{Konzepte und L\"osungen}
   54.78 +\subsection{Architektur von \isac}
   54.79 +Die Grafik auf Seite \pageref{architektur} gibt einen \"Uberblick \"uber die Architektur von \sisac:
   54.80 +
   54.81 +\begin{figure} [htb]
   54.82 +\begin{center}
   54.83 +    \includegraphics[width=120mm]{overview.pdf}
   54.84 +\end{center}
   54.85 +\caption{Lucas-interpreter und Isabelle}
   54.86 +\label{architektur}
   54.87 +\end{figure}
   54.88 +Die Mathematik-Engine von \sisac{} ist nach dem Konzept eines ``Lucas-Interpreters'' (LI) gebaut. Ein LI interpretiert drei Arten von Daten:
   54.89 +\begin{enumerate}
   54.90 +\item\label{spec}\textbf{Spezifikationen}: diese beschreiben ein Problem der angewandten Mathematik durch die Ein- und Ausgabedaten, die ``precondition'' (Pr\"adikate auf den Eingabedaten) und eine ``postcondition'' (eine Relation zwischen Ein- und Ausgabedaten). Spezifikationen stellen den \textit{applikations-orientierten} Aspekt der Mathematik dar.
   54.91 +\item \textbf{Programme}: beschreiben den Algorithmus zur L\"osung des spezifizierten Problems. \sisac's Programmsprache ist funktional und hat keine Ein- oder Ausgabe-Statements \cite{plmms10}. Sie kann aber auf Funktionalit\"aten des Computer Theorem Provers (CTP) Isabelle \cite{Nipkow-Paulson-Wenzel:2002} zugreifen. Programme  stellen den \textit{algorithmischen} Aspekt der Mathematik dar.
   54.92 +\item \textbf{Theorien}: beinhalten die Definitionen, Axiome und Theoreme, die einer bestimmten Rechnung der angewandten Mathematik zugrundeliegen. \sisac{} verwendet die ``theories'' von Isabelle in vollem Umfang. Theorien  stellen den \textit{deduktiven} Aspekt der Mathematik dar.
   54.93 +\end{enumerate}
   54.94 +
   54.95 +Die Funktionalit\"at eines LI kann in kurzer Form durch die folgenden drei Anspr\"uche erkl\"art werden\footnote{siehe http://www.ist.tugraz.at/isac/index.php/Description}:
   54.96 +
   54.97 +\begin{enumerate}
   54.98 +\item \textbf{Benutzereingaben pr\"ufen}: Benutzereingaben sollen so gro\3z\"ugig wie m\"oglich verarbeitet werden. Bei einem gegebenen Problem aus der angewandten Mathematik als formale Spezifikation, wird mit den jeweiligen ``preconditions'' ein ``context'' erzeugt. Nun kann ein Isabelle ``prover'' die Ableitbarkeit einer Benutzereingabe aus dem ``context'' \"uberpr\"ufen. Der ``context'' wird Schritt f\"ur Schritt durch Benutzereingaben erweitert, bis ein Ergebnis vorliegt, das beweisbar die ``postcondition'' aus der Spezifikation erf\"ullt.
   54.99 +\item \textbf{Den Benutzer anleiten}: Wei\3 der Lernende nicht mehr weiter, so kann das System den n\"achsten Schritt vorschlagen und den Benutzer so Schritt f\"ur Schritt zum Ergebnis f\"uhren. Ein \sisac{}-Programm wird so interpretiert, wie es bei einem Debugger passiert; die Breakpoints (i.e. Schritte) sind als bestimmte Statements im Programm definiert, die notwendigerweise zum Verlauf der Rechnung bzw. deren Aufbau geh\"oren. An den Breakpoints kann der Benutzer frei entscheiden, ob er den n\"achsten Schritt generieren lassen m\"ochte oder ob er versucht, selbst weiter zu rechnen. Die Herausforderung f\"ur den \textit{Lucas-Interpreter} ist, mit beliebigen Benutzereingaben umgehen zu k\"onnen.
  54.100 +\item \textbf{Schritte erkl\"aren}: Bei Interesse hat der Lernende Zugang zu dem Wissen, das f\"ur einen mechanisierten \textit{math assistant} zur L\"osung mathematischer Probleme von N\"oten ist: Definitionen, Axiome und Theoreme (erfasst in ``theories''\footnote{siehe http://www.ist.tugraz.at/projects/isac/www/kbase/thy/index\_thy.html}), Spezifikationen von Problemklassen\footnote{siehe z.B. http://www.ist.tugraz.at/projects/isac/www/kbase/pbl/index\_pbl.html} und Programme, um die Probleme zu l\"osen\footnote{siehe http://www.ist.tugraz.at/projects/isac/www/kbase/met/index\_met.html}. Theoretisch ist dieses Wissen ausreichend, automatisch Erkl\"arungen f\"ur die einzelnen Schritte zu generieren. Das Hintergrundwissen liegt zwar in mathematischer Formulierung vor, es ist jedoch fraglich, wie dies in eine Form gebracht werden kann, die den Lernenden nicht \"uberfordert.
  54.101 +\end{enumerate}
  54.102 +
  54.103 +\subsection{Isabelles Konzept von ``contexts''}
  54.104 +Die Beschreibung dieses bew\"ahrten Konzeptes findet sich in einem internen Papier zur Implementierung von Isabelles Beweissprache Isar \cite{isar-impl}. Isabelle stellt einen sehr generellen Funktor zur Verf\"ugung:
  54.105 +
  54.106 +{\tt
  54.107 +\begin{tabbing}
  54.108 +xx\=xx\=in\=\kill
  54.109 +structure ContextData =  {Proof\_Data}\\
  54.110 +\>~({type T} = term list\\
  54.111 +\>\>{fun init \_} = []);\\
  54.112 +\\
  54.113 +fun insert\_assumptions asms = \\
  54.114 +\>\>\>ContextData{.map} (fn xs => distinct (asms@xs));\\
  54.115 +\\
  54.116 +fun get\_assumptions ctxt = ContextData{.get} ctxt;\\
  54.117 +\\
  54.118 +\\
  54.119 +val declare\_constraints : \\
  54.120 +\>\>\>term -> Proof.context -> Proof.context
  54.121 +\end{tabbing}
  54.122 +}
  54.123 +Das Einzige, was die Definition eines''contexts'' braucht, ist die Spezifikation eines Typs \textit{type T} und einer Funktion \textit{fun init \_} f\"ur den Funktor \textit{Proof\_Data}. Dieser stellt dann die Zugriffsfunktionen \textit{ContextData.map} und \textit{ContextData.get} zur Verf\"ugung.
  54.124 +
  54.125 +Die Funktion \textit{declare\_constraints} liefert eine wichtige Funktionalit\"at: Ein \textit{term} angewandt auf einen \textit{Proof.context} ergibt einen neuen \textit{Proof.context}, der f\"ur das Parsen von Strings verwendet werden kann:
  54.126 +{\tt
  54.127 +\begin{tabbing}
  54.128 +xx\=xx\=xx\=xx\=xx\=\kill
  54.129 +fun parseNEW ctxt str = \\
  54.130 +\>\>\>SOME ({Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
  54.131 +\>\>\>handle \_ => NONE;
  54.132 +      \end{tabbing}
  54.133 +}
  54.134 +\textit{Syntax.read\_term ctxt} entnimmt dem ``context'' die Typinformation, die vorher durch \textit{declare\_constraints} zugef\"uhrt wurde. Da die \textit{fun parse} vor Beginn dieses Projektes keine ``contexts'' zur Verf\"ugung hatte, setzte sie mittels \textit{typ\_a2real} einfach alle unbestimmten Typen auf \textit{real}:
  54.135 +{\tt
  54.136 +\begin{tabbing}
  54.137 +xx\=xx\=xx\=xx\=xx\=\kill
  54.138 +fun parse thy str =\\
  54.139 +\>(let val t = ({typ\_a2real} o numbers\_to\_string)\\
  54.140 +\>\>\>\>({Syntax.read\_term\_global thy} str)\\
  54.141 +\>\>in SOME (cterm\_of thy t) end)\\
  54.142 +\>\>\>handle \_ => NONE;\\
  54.143 +      \end{tabbing}
  54.144 +}
  54.145 +
  54.146 +\subsection{Die Initialisierung von ``contexts''}\label{init-ctxt}
  54.147 +``Contexts'' werden an zwei Stellen von Lucas-Interpretation initialisiert: am Beginn der Spezifikationsphase und zu Beginn der L\"osungsphase.
  54.148 +
  54.149 +\begin{enumerate}
  54.150 +\item\label{init-ctxt-spec}{Die Spezifikations-Phase} dient der Erstellung einer formalen Spezifikation (siehe \ref{spec})\footnote{Da bekannterma\3en formales Spezifizieren schwierig ist, kann es durch entsprechende Dialog-Einstellung dem LI \"uberlassen werden.}. Der ``context'' wird mittels \textit{declare\_constraints} mit den Typdeklarationen aller vorkommenden Variablen initialisiert.
  54.151 +
  54.152 +Im Falle eines Rootproblems kommen die Variablen von einer ``formalization'', einer Kurzbeschreibung der Eingabedaten durch einen Autor. Im Falle eines Subproblems kommen die Variablen von den ``actual arguments'' des Subprogrammes.
  54.153 +
  54.154 +\item\label{init-ctxt-solve}{Die L\"osungsphase} erzeugt die Rechenschritte aus dem spezifizierten Programm. Zu Beginn der Interpretation des Programmes wird der ``context'' initialisiert mit
  54.155 +  \begin{enumerate}
  54.156 +  \item den Typdeklarationen aller in der Spezifikation vorkommenden Variablen mittels \textit{declare\_constraints}
  54.157 +  \item den ``preconditions'' des (interaktiv oder automatisch) spezifizierten Programmes, genauer: mit den ``preconditions'' des zugeh\"origen Guards, der meist gleich der Spezifikation ist
  54.158 +  \end{enumerate}
  54.159 +\end{enumerate}
  54.160 +
  54.161 +
  54.162 +\subsection{Aufbau von ``contexts'' in der Interpretation}\label{partiality}
  54.163 +W\"ahrend der Interpretation eines Programmes baut der Lucas-Interpreter einen ``context'' auf, indem er alle relevanten ``preconditions'', andere Pr\"adikate -- insbesondere ``partiality conditions'' -- einsammelt. Eine ``partiality condition'' ist zum Beispiel $x\not=0$, die eine Division durch $0$ verhindert.
  54.164 +
  54.165 +Am Ende eines Programmes soll der ``context'' hinreichend logische Information enthalten, sodass Isabelles automatische Beweiser die ``postcondition'' automatisch beweisen k\"onnen (das ist eine k\"unftige Entwicklungsaufgabe!).
  54.166 +
  54.167 +\subsection{Transfer von ``contexts'' aus Subprogrammen}\label{transfer}
  54.168 +``contexts'' folgen den \"ublichen Scope-Regeln von Programmsprachen mit Blockstruktur, wie schon die Initialisierung von ``contexts'' gezeigt hat. Die Behandlung von ``contexts'' bei der R\"uckkehr aus Subprogrammen erfolgt durch folgende Funktionen:
  54.169 +{\tt
  54.170 +\begin{tabbing}
  54.171 +xx\=xx\=xx\=xx\=xx\=\kill
  54.172 +fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
  54.173 +\>  let\\
  54.174 +\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
  54.175 +\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
  54.176 +\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
  54.177 +\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
  54.178 +\>\>\>\>\>         then transfer fas to\_ctxt\\
  54.179 +\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
  54.180 +\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
  54.181 +      \end{tabbing}
  54.182 +}
  54.183 +Folgende Daten werden aus dem Sub-``context'' in den ``context'' des aufrufenden Programmes zur\"uckgegeben:
  54.184 +\begin{enumerate}
  54.185 +\item die R\"uckgabewerte des Subprogrammes, sofern sie vom Typ \textit{bool} sind
  54.186 +\item alle \textit{assumptions}, die eine Variable enthalten, die auch einer der R\"uckgabewerte enth\"alt
  54.187 +\item alle \textit{assumptions}, die eine Variable enthalten, die in einem Term des aufrufenden Programmes enthalten sind\footnote{in diesem Punkt sind die Scope-Regeln schw\"acher als sonst bei Subprogrammen}. Der Unterschied begr\"undet sich darin, dass Rechnungen vorzugsweise mit Variablennamen vorgehen, die block\"ubergreifend g\"ultig sind.
  54.188 +\item\label{conflict} \textbf{nicht zur\"uckgegeben} werden R\"uckgabewerte des Subprogrammes dann, wenn sie im Widerspruch zum ``context'' des aufrunfenden Programmes stehen \footnote{Dieser Punkt wurde erst zu Ende der vorliegenden Arbeit gekl\"art und ist zur Zeit ihrer Fertigstellung nicht implementiert~!}. Hier ist ein Beispiel:
  54.189 +\end{enumerate}
  54.190 +
  54.191 +\begin{tabbing}
  54.192 +xxx\=xxx\=\kill
  54.193 +     \`$\mathit{(some)}\;\mathit{assumptions}$\\
  54.194 +$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
  54.195 +     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
  54.196 +\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
  54.197 +\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
  54.198 +\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
  54.199 +     \`$x\not=3\land x\not=0$\\
  54.200 +\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  54.201 +\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
  54.202 +\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  54.203 +\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  54.204 +\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  54.205 +\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
  54.206 +\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
  54.207 +\>\>$[x = 0, x = \frac{6}{5}]$ \\
  54.208 +     \`$x = 0\land x = \frac{6}{5}$\\
  54.209 +\>$[{x = 0}, x = \frac{6}{5}]$ \\
  54.210 +     \`{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
  54.211 +\>$[x = \frac{6}{5}]$ \\
  54.212 +$[x = \frac{6}{5}]$
  54.213 +\end{tabbing}
  54.214 +Aufgrund von Punkt \ref{conflict}. oben wird es m\"oglich, aus dem Programm, das obige Rechnung erzeugt, das Statement \textit{Check\_Elementwise Assumptions} zu streichen:
  54.215 +{\tt
  54.216 +\begin{tabbing}
  54.217 +xx\=xx\=xx\=xx\=xx\=xx\=\kill
  54.218 +Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
  54.219 +\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
  54.220 +\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
  54.221 +\>\>     (L\_L::bool list) =                                   \\
  54.222 +\>\>\>            (SubProblem (Test',                           \\
  54.223 +\>\>\>\>                         [linear,univariate,equation,test]\\
  54.224 +\>\>\>\>                         [Test,solve\_linear])             \\
  54.225 +\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
  54.226 +\>  in {Check\_Elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
  54.227 +\end{tabbing}
  54.228 +}
  54.229 +Hiermit geht die Entwicklung des Konzeptes von Lucas-Interpretation einen Schritt in die begonnene Richtung weiter, die Verschiebung des Programmieraufwandes von ``computation'' (im herk\"ommlichen Programmieren) auf ``deduction'' (im Spezifizieren von Programmeigenschaften) zu unterst\"utzen.
  54.230 +
  54.231 +\subsection{\"Uberblick: ``contexts'' bei Lucas-Interpretation}
  54.232 +
  54.233 +Im Folgenden betrachten wir ein Bespiel für die Lösung einer Aufgabe durch \sisac. Die gegebenen Codeausschnitte sind nur Teile des gesamten Programmes. Der vollständige Code befindet sich in Anhang \ref{demo-code}.
  54.234 +
  54.235 +\paragraph{Formulierung der Aufgabenstellung und Spezifikation}~\\
  54.236 +
  54.237 +Erklärung siehe \ref{init-ctxt-spec}.
  54.238 +\begin{verbatim}
  54.239 +val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
  54.240 +val (dI',pI',mI') =
  54.241 +  ("Test", ["sqroot-test","univariate","equation","test"],
  54.242 +   ["Test","squ-equ-test-subpbl1"]);
  54.243 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
  54.244 +\end{verbatim}
  54.245 +\textit{fmz} enthält also die zwei Eingabegrößen und die gesuchte Ausgabegröße, also die Liste aller Lösungen für \textit{x} in der Gleichung $x + 1 = 2$. Die zweite Zeile definiert den Namen der ``theory'' mit dem deduktiven Hintergrundwissen, die Spezifikation in Form einer Liste und das zu verwendende Programm.\\
  54.246 +\textit{CalcTreeTEST} erzeugt schlie\3lich die grundlegenden Datenstrukturen für die folgenden Berechnungen. Beispielsweise wird ein ``context'' erzeugt, der nun im Baum \textit{pt} an der Position \textit{p} steht.
  54.247 +\begin{verbatim}
  54.248 +val ctxt = get_ctxt pt p;
  54.249 +val SOME known_x = parseNEW ctxt "x + y + z";
  54.250 +val SOME unknown = parseNEW ctxt "a + b + c";
  54.251 +\end{verbatim}
  54.252 +Dies erzeugt folgenden Output:
  54.253 +\begin{verbatim}
  54.254 +val ctxt = <context>: Proof.context
  54.255 +val known_x =
  54.256 +   Const ("Groups.plus_class.plus",
  54.257 +       "RealDef.real => RealDef.real => RealDef.real") $
  54.258 +     (Const ("Groups.plus_class.plus",
  54.259 +         "RealDef.real => RealDef.real => RealDef.real") $
  54.260 +       Free ("x", "RealDef.real") $ Free ("y", "RealDef.real")) $
  54.261 +     Free ("z", "RealDef.real"):
  54.262 +   term
  54.263 +val unknown =
  54.264 +   Const ("Groups.plus_class.plus", "'a => 'a => 'a") $
  54.265 +     (Const ("Groups.plus_class.plus", "'a => 'a => 'a")
  54.266 +       $ Free ("a", "'a") $ Free ("b", "'a")) $
  54.267 +     Free ("c", "'a"):
  54.268 +   term
  54.269 +\end{verbatim}
  54.270 +Der Output dieser Zeilen zeigt die neue Funktionalität anhand der Erkennung des Typs \textit{real} für die Variablen \textit{x}, \textit{y} und \textit{z} mittels Typinferenz, im Gegensatz zu den Unbekannten \textit{a}, \textit{b} und \textit{c} (unbekannter Typ \textit{'a}.
  54.271 +
  54.272 +\paragraph{Beginn der Interpretation}~\\
  54.273 +
  54.274 +Nach einigen Schritten der Mathematik-Engine ist die Spezifikationsphase beendet und die Interpretation des Programmes kann beginnen. Die ``precondition'' ist in den Assumptions enthalten:
  54.275 +\begin{verbatim}
  54.276 +get_assumptions_ pt p |> terms2strs
  54.277 +\end{verbatim}
  54.278 +Output:
  54.279 +\begin{verbatim}
  54.280 +val it = ["precond_rootmet x"]: string list
  54.281 +\end{verbatim}
  54.282 +
  54.283 +\paragraph{Bearbeitung eines Subproblems}~\\
  54.284 +
  54.285 +Einige Ausführungsschritte später startet der Interpreter mit der Gleichung $-1 + x = 0$ ein Subproblem, beginnt dort wiederum mit Spezifikationsphase und setzt mit der Lösungsphase fort.\\
  54.286 +In einem Zwischenschritt bestehen die lokalen Assumptions aus der Annahme, dass die Gleichung mit der Gleichheitsregel zu matchen ist:
  54.287 +\begin{verbatim}
  54.288 +["matches (?a = ?b) (-1 + x = 0)"]: string list
  54.289 +\end{verbatim}
  54.290 +Nach künstlichem Einfügen zweier Assumptions und Beendigung des Subproblems steht eine Lösung für \textit{x} in den Assumptions:\\
  54.291 +\texttt{[\dq{}matches (?a = ?b) (-1 + x = 0)\dq{}, \dq{}x < sub\_asm\_out\dq{}, \dq{}{\bf x = 1}\dq{}, \dq{}precond\_rootmet x\dq{}]: string list}\\
  54.292 +\\
  54.293 +Bei der Rückkehr aus dem Subproblem könnte eine erzeugte Lösung aufgrund einer Bedingungsverletzung wieder wegfallen, hier ist das nicht der Fall. Die Überprüfung dieser Bedingungen (siehe \ref{partiality}) geschieht beim Transfer des lokalen ``contexts'' in den übergeordneten (hier der des Rootproblems, siehe \ref{transfer}).
  54.294 +
  54.295 +\paragraph{Abschluss der Berechnung}~\\
  54.296 +
  54.297 +Nach den letzten Aufrufen der Mathematik-Engine stehen alle Schritte fest:
  54.298 +\begin{verbatim}[
  54.299 +(([], Frm), solve (x + 1 = 2, x)),
  54.300 +(([1], Frm), x + 1 = 2),
  54.301 +(([1], Res), x + 1 + -1 * 2 = 0),
  54.302 +(([2], Res), -1 + x = 0),
  54.303 +(([3], Pbl), solve (-1 + x = 0, x)),
  54.304 +(([3,1], Frm), -1 + x = 0),
  54.305 +(([3,1], Res), x = 0 + -1 * -1),
  54.306 +(([3,2], Res), x = 1),
  54.307 +(([3], Res), [x = 1]),
  54.308 +(([4], Res), [x = 1]),
  54.309 +(([], Res), [x = 1])] 
  54.310 +\end{verbatim}
  54.311 +
  54.312 +\section{Beschreibung der Meilensteine}\label{ms-desc}
  54.313 +\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}\label{ms1_desc}
  54.314 +Die Komplexit\"at \sisac{}s, welches auf Konzepten von Isabelle aufbaut und die tief ins System eingreifenden Ver\"anderungen in den bevorstehenden Meilensteinen machen eine intensive Auseinandersetzung mit Isabelle, insbesondere mit dem Konzept der ``contexts'', und dem \sisac-Code notwendig. Darunter fallen neben dem Lesen von Dokumentationen auch die gezielte Suche von Anwendungsf\"allen im bestehenden Code, sowie das Studieren von Coding Standards und ein Vertrautmachen mit den im \sisac-Team \"ublichen Workflows.
  54.315 +
  54.316 +\subsection{\isac{} auf die letzte Isabelle-Release updaten}\label{ms2_desc}
  54.317 +Die Arbeit mit den Isabelle {\it context}s wird Anfragen in isabelle-dev@
  54.318 +erfordern. isabelle-dev@ beantwortet Fragen i.A. nur f\"ur die aktuelle
  54.319 +Release. Überraschenderweise wurde zwei Wochen vor Beginn des Projektpraktikums eine neue Release
  54.320 +veröffentlicht. Daher muss auf diese vor Arbeitsbeginn upgedatet werden.
  54.321 +
  54.322 +\subsection{Parsen aus {\it context}s}\label{ms3_desc}
  54.323 +Bisher nahm \sisac{} für jede Variable den Typ {\it real} an. Variablen, Terme und Pr\"adikate sollen nun beim ersten Auftreten im {\it context} eingetragen werden. User-Input wird mithilfe des {\it context}s mittels Typinferenz typgerecht geparst. Die Verwendungen der bestehenden \textit{parse}-Funktion m\"ussen im ganzen System ersetzt und angepasst werden.
  54.324 +
  54.325 +\subsection{Spezifikationsphase mit {\it context}s}\label{ms4_desc}
  54.326 +\sisac{} sah für die Spezifikation eine Datenstruktur vor, die interaktives Spezifizieren effizient unterstützt. Diese Datenstruktur soll nun durch {\it context}s ersetzt werden. Dadurch ist die bisherige Fixierung auf {\it real} aufgehoben und beliebige Typen werden fehlerfrei behandelt. Dieser Schritt macht weitere Eingriffe in grundlegende Funktionen und Datenstrukturen des Systems notwendig.
  54.327 +
  54.328 +\subsection{L\"osungsphase mit {\it context}s}\label{ms5_desc}
  54.329 +Der Lucas-Interpreter speicherte Assumptions (precondition, partiality conditions, etc.) in einer eigenen Datenstruktur im Rechenbaum. Nun sollen Assumptions im {\it context} verwaltet werden. Dazu sind Schreib- und Lesefunktionen zu implementieren und alle Verwendungen von Assumptions entsprechend anzupassen.
  54.330 +
  54.331 +\section{Bericht zum Projektverlauf}
  54.332 +
  54.333 +\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}
  54.334 +Die Größe der Projekte {\it Isabelle} und \sisac{} sowie deren Abgrenzung haben den Weg zu meinem schließlichen Verständnis der Aufgabenstellung etwas langwierig gestaltet. Dazu kamen nicht geplante, organisatorische Vorbereitungen, wie die Erstellung einer Projektbeschreibung und des -planes. Die lange Vorbereitung hat sich aber positiv auf den weiteren Verlauf des Projektes ausgewirkt.
  54.335 +
  54.336 +\subsection{\isac{} auf die letzte Isabelle-Release updaten}
  54.337 +Da die Veröffentlichung der {\it Isabelle}-Version 2009-2 noch nicht lange zurück lag, kam {\it Isabelle2011} mit vielen grundlegenden Änderungen im System kurz vor Projektbeginn sehr überraschend. Die Mailingliste der Entwickler beantwortet nur Fragen zur aktuellen Release, weshalb ein entsprechendes Update von \sisac{} vor Arbeitsbeginn notwendig war.\\
  54.338 +Dieser Arbeitsschritt beanspruchte wesentlich mehr Zeit als ursprünglich geplant. Als \sisac{} schließlich erfolgreich kompilierte funktionierte eine große Zahl der Tests nicht mehr. Dies machte die selbstständige Arbeit für mich vorerst unmöglich. Ich konnte jedoch in persönlicher Zusammenarbeit mit Walther Neuper meine Fähigkeiten einbringen. Die Notwendigkeit dieser persönlichen Zusammenarbeit verzögerte den Projektverlauf.
  54.339 +
  54.340 +\subsection{Parsen aus {\it context}s}
  54.341 +In diesem Schritt konnte ich besonders Syntax und Funktionsweise von StandardML, die praktischen, {\it Isabelle}-eigenen Operatoren und die Arbeitsweise mit der Entwicklungsumgebung kennen lernen. Dieser Meilenstein konnte in recht kurzer Zeit abgeschlossen werden.
  54.342 +
  54.343 +\subsection{Spezifikationsphase mit {\it context}s}
  54.344 +Hier konnte ich sehr viel selbstständig arbeiten. Zu Beginn verlief alles völlig problemlos, die Suche nach einem bestimmten Fehler beanspruchte dann aber mit Abstand die meiste Zeit, hatte jedoch zur Folge, dass ich mich sehr intensiv mit dem System auseinandersetzen musste und damit einige Kernfunktionen kennen und verstehen lernte und teilweise sogar etwas optimieren konnte.
  54.345 +Insgesamt verlief diese Phase trotz der langwierigen Fehlersuche nicht viel langsamer als geplant.
  54.346 +
  54.347 +\subsection{L\"osungsphase mit {\it context}s}
  54.348 +Die Integration von {\it context}s in die Lösungsphase zur Ersetzung der ursprünglichen behandlung von Assertions konnte in enger Zusammenarbeit mit Herrn Neuper fertiggestellt werden, persönliche Termine auf beiden Seiten verlängerten aber den zeitlichen Verlauf. Der Code des Lucas-Interpreters ist jetzt sauberer und die Logik vereinfacht.
  54.349 +
  54.350 +
  54.351 +\section{Abschließende Bemerkungen}
  54.352 +Rückblickend betrachte ich das Projektpraktikum als sehr positive Erfahrung, da ich das Gefühl habe, etwas nicht Unwesentliches  zur Erweiterung von \sisac{} beigetragen zu haben. Die persönliche Zusammenarbeit mit Akademikern und auch die Verrichtung einer Arbeit, die nach Abschluss gebraucht und verwendet wird, ist eine Erfahrung, die in meinem Studium nicht selbstverständlich ist und um die ich mich sehr bemüht habe.
  54.353 +
  54.354 +Der %nicht zuletzt 
  54.355 +durch das überraschend notwendig gewordene Update 
  54.356 +von Isabelle2009-2 auf Isabelle2011
  54.357 +bedingte zähe Verlauf bis ich endlich wirklich an der eigentlichen Aufgabenstellung arbeiten konnte, %war etwas ernüchternd, 
  54.358 +verlange einies Umdisponieren,
  54.359 +da ich gehofft hatte, das Praktikum bis spätestens Ende März abschließen zu können. Die zeitliche Verzögerung des Projektes wurde jedoch durch gro\3es Entgegenkommen des Institutes in der Terminsetzung am Ende des Projektes ausgeglichen; daf\"ur bin ich Herrn Professor Knoop sehr zu Dank verpflichtet. Lehrreich war f\"ur mich auch die Einbindung der Abschlusspr\"asentation in die Vortragsreihe des Institutes f\"ur Computersprachen und dem Feedback von dort; auch daf\"ur herzlichen Dank.
  54.360 +
  54.361 +Die Zusammenarbeit mit \sisac-Entwicklung an der Technischen Universit\"at Graz \"uber Herrn Neuper hat %jedenfalls 
  54.362 +sehr gut funktioniert und aus meiner Sicht haben wir uns sehr gut verstanden. Das hat ein produktives %entspanntes 
  54.363 +Arbeitsklima ermöglicht.
  54.364 +
  54.365 +%Abgesehen von der zeitlichen Verzögerung des Projektes freue ich mich über den erfolgreichen Abschluss der geplanten Aufgaben und deren interessanten Charakter.
  54.366 +
  54.367 +\clearpage
  54.368 +
  54.369 +\bibliography{bib}
  54.370 +
  54.371 +\clearpage
  54.372 +
  54.373 +\appendix
  54.374 +%\section*{Anhang}
  54.375 +\section{Demobeispiel}\label{demo-code}
  54.376 +\begin{verbatim}
  54.377 +
  54.378 +theory All_Ctxt imports Isac begin
  54.379 +
  54.380 +text {* all changes of context are demonstrated in a mini example.
  54.381 +  see test/../mstools.sml --- all ctxt changes in minimsubpbl x+1=2 --- *}
  54.382 +
  54.383 +section {* start of the mini example *}
  54.384 +
  54.385 +ML {*
  54.386 +  val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
  54.387 +  val (dI',pI',mI') =
  54.388 +    ("Test", ["sqroot-test","univariate","equation","test"],
  54.389 +     ["Test","squ-equ-test-subpbl1"]);
  54.390 +  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
  54.391 +*}
  54.392 +
  54.393 +section {* start of specify phase *}
  54.394 +
  54.395 +text {* variables known from formalisation provide type-inference 
  54.396 +  for further input *}
  54.397 +
  54.398 +ML {*
  54.399 +  val ctxt = get_ctxt pt p;
  54.400 +  val SOME known_x = parseNEW ctxt "x + y + z";
  54.401 +  val SOME unknown = parseNEW ctxt "a + b + c";
  54.402 +*}
  54.403 +
  54.404 +ML {*
  54.405 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.406 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.407 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.408 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.409 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.410 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.411 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.412 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.413 +*}
  54.414 +
  54.415 +section {* start interpretation of method *}
  54.416 +
  54.417 +text {* preconditions are known at start of
  54.418 +        interpretation of (root-)method *}
  54.419 +
  54.420 +ML {*
  54.421 +  get_assumptions_ pt p |> terms2strs;
  54.422 +*}
  54.423 +
  54.424 +ML {*
  54.425 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.426 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.427 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.428 +*}
  54.429 +
  54.430 +section {* start a subproblem: specification *}
  54.431 +
  54.432 +text {* variables known from arguments of (sub-)method
  54.433 +        provide type-inference for further input *}
  54.434 +
  54.435 +ML {*
  54.436 +  val ctxt = get_ctxt pt p;
  54.437 +  val SOME known_x = parseNEW ctxt "x+y+z";
  54.438 +  val SOME unknown = parseNEW ctxt "a+b+c";
  54.439 +*}
  54.440 +
  54.441 +ML {*
  54.442 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.443 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.444 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.445 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.446 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.447 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.448 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.449 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
  54.450 +*}
  54.451 +
  54.452 +section {* interpretation of subproblem's method *}
  54.453 +
  54.454 +text {* preconds are known at start of interpretation of (sub-)method *}
  54.455 +
  54.456 +ML {*
  54.457 + get_assumptions_ pt p |> terms2strs
  54.458 +*}
  54.459 +
  54.460 +ML {*
  54.461 + val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
  54.462 +*}
  54.463 +
  54.464 +ML {*
  54.465 +  "artifically inject assumptions";
  54.466 +  val (SOME (iform, cform), SOME (ires, cres)) = get_obj g_loc pt (fst p);
  54.467 +  val ctxt = insert_assumptions [str2term "x < sub_asm_out",
  54.468 +                                 str2term "a < sub_asm_local"] cres;
  54.469 +  val pt = update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
  54.470 +*}
  54.471 +
  54.472 +ML {* 
  54.473 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.474 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.475 +*}
  54.476 +
  54.477 +section {* finish subproblem, return to calling method*}
  54.478 +
  54.479 +text {* transfer non-local assumptions and result from sub-method
  54.480 +        to root-method.
  54.481 +        non-local assumptions are those contaning a variable known
  54.482 +        in root-method.
  54.483 +*}
  54.484 +
  54.485 +ML {*
  54.486 +  terms2strs (get_assumptions_ pt p);
  54.487 +*}
  54.488 +
  54.489 +ML {*
  54.490 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.491 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  54.492 +*}
  54.493 +
  54.494 +section {* finish Lucas interpretation *}
  54.495 +
  54.496 +text {* assumptions collected during lucas-interpretation
  54.497 +        for proof of postcondition *}
  54.498 +
  54.499 +ML {*
  54.500 +  terms2strs (get_assumptions_ pt p);
  54.501 +*}
  54.502 +
  54.503 +ML {*
  54.504 +  show_pt pt;
  54.505 +*}
  54.506 +
  54.507 +end
  54.508 +\end{verbatim}
  54.509 +
  54.510 +\section{Stundenliste}
  54.511 +
  54.512 +\subsection*{Voraussetzungen zum Arbeitsbeginn schaffen}
  54.513 +\begin{tabular}[t]{lll}
  54.514 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  54.515 +    10.02.2011 & 2:00 & Besprechung der Problemstellung \\
  54.516 +    11.02.2011 & 1:30 & {\it context}s studieren, Isabelle/Mercurial Installation \\
  54.517 +    18.02.2011 & 0:15 & meld/tortoisehg installieren \\
  54.518 +    20.02.2011 & 1:00 & Projektbeschreibung, jedit Probleme \\
  54.519 +    25.02.2011 & 1:00 & Ausarbeitung Meilensteine \\
  54.520 +    26.02.2011 & 1:00 & Ausarbeitung Ist-/Soll-Zustand, {\it context}s studieren\\
  54.521 +    28.02.2011 & 1:15 & Einführungsbeispiel {\it context}s \\
  54.522 +    28.02.2011 & 1:15 & Projektplan erstellen, formatieren \\
  54.523 +    01.03.2011 & 1:00 & Projektplan überarbeiten, Stundenlisten \\
  54.524 +\end{tabular}
  54.525 +
  54.526 +\subsection*{\isac{} auf die letzte Isabelle-Release updaten}
  54.527 +\begin{tabular}[t]{lll}
  54.528 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  54.529 +    18.02.2011 & 2:45 & Anpassungen an Isabelle2011 \\
  54.530 +    20.02.2011 & 2:45 & Update auf Isabelle2011, Fehlersuche \\
  54.531 +    21.02.2011 & 6:30 & ... \\
  54.532 +    25.02.2011 & 5:30 & ... \\
  54.533 +    26.02.2011 & 4:30 & ... \\
  54.534 +    03.03.2011 & 5:00 & ... \\
  54.535 +    04.03.2011 & 6:00 & Tests reparieren \\
  54.536 +\end{tabular}
  54.537 +
  54.538 +\subsection*{Parsen aus \textit{contexts}}
  54.539 +\begin{tabular}[t]{lll}
  54.540 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  54.541 +    02.03.2011 & 1:30 & vorbereitendes Übungsbeispiel \\
  54.542 +    03.03.2011 & 1:00 & ... \\
  54.543 +    04.03.2011 & 5:00 & Funktion {\tt parseNEW} schreiben \\
  54.544 +    05.03.2011 & 3:00 & Funktion {\tt vars} anpassen, {\tt declare\_constraints} neu \\
  54.545 +    07.03.2011 & 8:45 & {\tt parseNEW}, Spezifikationen studieren \\
  54.546 +    08.03.2011 & 6:00 & {\it context} in zentrale Datenstrukturen einbauen \\
  54.547 +    09.03.2011 & 2:00 & Fehlersuche {\it context}-Integration \\
  54.548 +\end{tabular}
  54.549 +
  54.550 +\subsection*{Spezifikationsphase mit \textit{context}s}
  54.551 +\begin{tabular}[t]{lll}
  54.552 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  54.553 +    10.03.2011 & 2:30 & {\it context} in {\tt prep\_ori} und {\tt appl\_add} einbauen\\
  54.554 +    11.03.2011 & 5:45 & {\tt appl\_add} überarbeiten \\
  54.555 +    12.03.2011 & 5:15 & Fehlersuche \\
  54.556 +    14.03.2011 & 2:00 & ... \\
  54.557 +    16.03.2011 & 2:30 & ... \\
  54.558 +    17.03.2011 & 1:45 & ... \\
  54.559 +    18.03.2011 & 4:45 & ..., Optimierung \\
  54.560 +    19.03.2011 & 5:30 & ... \\
  54.561 +    21.03.2011 & 3:00 & Abschluss Spezifikationsphase \\
  54.562 +\end{tabular}
  54.563 +
  54.564 +\subsection*{L\"osungsphase mit \textit{context}s}
  54.565 +\begin{tabular}[t]{lll}
  54.566 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  54.567 +    22.03.2011 & 4:30 & {\it context} in Funktion {\tt solve} einbauen\\
  54.568 +    23.03.2011 & 4:45 & Tests reparieren \\
  54.569 +    24.03.2011 & 3:30 & ... \\
  54.570 +    25.03.2011 & 2:00 & ... \\
  54.571 +    03.04.2011 & 4:00 & ... \\
  54.572 +    05.04.2011 & 8:00 & Optimierung \\
  54.573 +    06.04.2011 & 7:15 & L\"osung Exponentenoperator \\
  54.574 +    07.04.2011 & 7:00 & ... \\
  54.575 +    12.04.2011 & 3:30 & Projektbericht \\
  54.576 +\end{tabular}
  54.577 +
  54.578 +\end{document}
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/doc-isac/msteger/README	Tue Sep 17 09:50:52 2013 +0200
    55.3 @@ -0,0 +1,2 @@
    55.4 +bakk-arbeit/ contains stylefiles required for Bernhard Aichernig's format.
    55.5 +These probably go to a shared directory.
    55.6 \ No newline at end of file
    56.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2 +++ b/doc-isac/msteger/bakk-arbeit/CLEANUP	Tue Sep 17 09:50:52 2013 +0200
    56.3 @@ -0,0 +1,10 @@
    56.4 +rm *.dvi
    56.5 +rm *.bbl
    56.6 +rm *.blg
    56.7 +rm *.aux
    56.8 +rm *.log
    56.9 +rm *.nav
   56.10 +rm *.out
   56.11 +rm *.snm
   56.12 +rm *.toc
   56.13 +rm *~
    57.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2 +++ b/doc-isac/msteger/bakk-arbeit/content.tex	Tue Sep 17 09:50:52 2013 +0200
    57.3 @@ -0,0 +1,607 @@
    57.4 +\chapter{Definition der Aufgabenstellung}
    57.5 +\section{Detaillierte Beschreibung der Aufgabenstellung}
    57.6 +Zu Beginn des Projekts wurden einige Vorgaben und Ziele des Projektes erarbeitet und im Laufe des Projekts angepasst wo notwendig. Es wurde bewusst auf eine zu einschr\"ankende Aufgabenstellung verzichtet, da Entwicklungen und Erarbeitungen von verschiedenen Umsetzungsstrategien erw\"unscht war.
    57.7 +
    57.8 +Hauptaugenmerk war dabei auf die Erstellung eines jEdit-Plugins gelegt worden, das als Vorarbeit zu Back's Structured Derivations dienen soll. Mit anderen Worten, es sollte so viel Plugin-Code, wie im begrenzten Projektzeitraum m\"oglich, implementiert werden.
    57.9 +
   57.10 +Weiters sollte eine Projektstruktur aufgebaut werden, die die Initialisierungsarbeiten von weiterf\"uhrende bzw. nachfolgende Projekten erleichtert und somit verk\"urzt. Dabei sollte darauf geachtet werden, dass die vom Isabelleteam bereits verwendete Projekthierarchie soweit wie m\"oglich \"ubernommen bzw. erweitert wird.
   57.11 +Die nachfolgende Auflistung soll die wichtigsten Tasks nochmals zusammenfassen:
   57.12 +\begin{enumerate}
   57.13 +\item Relevante Isabelle Komponenten identifizieren und studieren
   57.14 +\item Installation der Standard-Komponenten
   57.15 +\item Entwicklungsumgebung vom Isabelle-Team kopieren
   57.16 +\item Relevante Komponenten implementieren
   57.17 +\begin{itemize}
   57.18 +\item jEdit Plugin f\"ur SD
   57.19 +\item zugeh\"origen Parser
   57.20 +\item nicht vorgesehen: SD-Interpreter in Isar (SML)
   57.21 +\end{itemize}
   57.22 +\end{enumerate}
   57.23 +In Abs.\ref{zusammenfassung} wird r\"uckblickend zusammengefasst, welche dieser Punkte in welchem Ausma\ss{} in dieser Bachelor-Arbeit erledigt wurden.
   57.24 +
   57.25 +\chapter{Beleuchtung der Projekt-relevanten Technologien}
   57.26 +Dieses Kapitel soll die vielen unterschiedlichen Technologien, die im Rahmen dieser Arbeit verwendet oder zumindest ber\"uhrt wurden, beleuchten und dem Leser helfen, nachfolgende Zusammenh\"ange zu verstehen. Nat\"urlich kann in keines der folgenden Themen sehr tief eingestiegen werden. Viel mehr sollen die nachfolgenden Ausf\"uhrungen einen groben \"Uberblick \"uber die einzelnen Technologien geben.
   57.27 +\section{Back's Structured Derivations}
   57.28 +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.
   57.29 +
   57.30 +Das nachfolgende Beispiel zeigt ein einfaches Beispiel, wie eine Formel mittels SD dargestellt bzw. umgeformt werden kann:
   57.31 +
   57.32 +%{\footnotesize
   57.33 +\begin{tabbing}
   57.34 +123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
   57.35 +\>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
   57.36 +\> \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
   57.37 +\>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
   57.38 +\> \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
   57.39 +\>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
   57.40 +\> \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
   57.41 +\> \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
   57.42 +\> \> \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
   57.43 +\> \>$\equiv$\>\vdots\\
   57.44 +\> \> \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
   57.45 +\> \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$ \\
   57.46 +\> \> \>$1 + -1 * x$\\
   57.47 +\>\dots\>$1 + -1 * x$\\
   57.48 +\>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
   57.49 +\> \>$1-x$
   57.50 +\end{tabbing}
   57.51 +%}
   57.52 +
   57.53 +Dieses Beispiel kann wie folgt interpretiert werden:
   57.54 +\begin{enumerate}
   57.55 +\item Die erste Zeile ist als Angabe bzw. Ausgangspunkt der Berechnung zu verstehen.
   57.56 +\item Nun folgt der eigentliche Ablauf einer Umformung mittels SD: Mit der Formel in der zweiten Zeile beginnt die Berechnung.
   57.57 +\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 schlie{\ss}en zu k\"onnen.
   57.58 +\item Aus dieser Rechenvorschrift ergibt sich die Formel in der n\"achsten Zeile.
   57.59 +\item Dieser Ablauf wiederholt sich und zieht sich \"uber die weiteren Berechnungen.
   57.60 +\end{enumerate}
   57.61 +
   57.62 +Back liefert mit SD eine sehr gute Darstellungs- und Verbarbeitungs-Richtlinie, die einerseits dem Leser/Anwender hilft, da durch die Regel- bzw. Beschreibungs-Zeile klar gestellt wird, wie der letzte Berechnungsschritt durchgef\"uhrt wurde. Andererseits 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\"oglich ist.
   57.63 +
   57.64 +\section{Der Texteditor jEdit}\label{jEdit}
   57.65 +% http://www.jedit.org/
   57.66 +% http://de.wikipedia.org/wiki/JEdit
   57.67 +% http://www.chip.de/downloads/jEdit_19235021.html
   57.68 +%
   57.69 +jEdit ist ein in Java geschriebener und als Open-Source-Projekt erh\"altlicher Texteditor, der vor allem durch sein sehr gut entwickeltes und ebenso einfaches Plugin-Management-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.
   57.70 +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.
   57.71 +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.
   57.72 +
   57.73 +\subsection{Das Plugin-System}
   57.74 +% http://jedit.org/users-guide/writing-plugins-part.html
   57.75 +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} verwendet. Dabei ist es m\"oglich, dass Java-Plugins mit Scala-Plugins kombiniert werden, da diese auch problemlos miteinander kommunizieren k\"{o}nnen.
   57.76 +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.
   57.77 +Weiters bietet sich die M\"oglichkeit, 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.
   57.78 +
   57.79 +
   57.80 +\subsection{Pluginstruktur}
   57.81 +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.
   57.82 +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.
   57.83 +
   57.84 +\section{Isabelle}
   57.85 +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(mit funktionalen sowie imperativen Sprachanteilen). 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.
   57.86 +
   57.87 +\subsection{Isabelle-Pure}
   57.88 +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.
   57.89 +Eine Auflistung der f\"ur das Isabelle-Pure-Packet ben\"otigten Scala-Source-Filles kann Anhang B.2 entnommen werden.
   57.90 +
   57.91 +\subsection{Isabelle-jEdit}
   57.92 +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.
   57.93 +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.
   57.94 +
   57.95 +\subsection{Paketstruktur von Isabelle}
   57.96 +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.
   57.97 +Die nachfolgende Auflistung zeigt alle Pakete, die f\"{u}r SD bzw. {\sisac} von Bedeutung sind und und wo diese zu finden sind.
   57.98 +
   57.99 +
  57.100 +\begin{itemize}
  57.101 +\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.
  57.102 +\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.
  57.103 +\item \textit{src/Tools/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...}
  57.104 +\item \textit{src/Tools/jEditC/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.
  57.105 +\item \textit{src/Tools/jEditC/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 bzw. sollte dies nur f\"ur schwer nachvollziebare Abl\"aufe ohne Isabelle-Beteiligung angewendet werden.
  57.106 +\end{itemize}
  57.107 +
  57.108 +Siehe dazu auch Anhang B. Dort sind alle relevanten jar-Pakete noch einmal aufgelistet und entsprechend gruppiert.
  57.109 +
  57.110 +\section{Die Programmiersprache Scala}
  57.111 +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.
  57.112 +
  57.113 +\subsection{Grundlage der Sprache}
  57.114 +Scala \cite{odersky:scala06} 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 \cite{pl:milner97} ab. Dies, und vorallem auch das von Erlang \cite{armstrong:erlang96} \"ubernommene und sehr gut umgesetzte Actorprinzip \cite{Haller:2009:SAU:1496391.1496422,scala:jmlc06}, sind wohl die Hauptgr\"unde, warum sich das Isabelle-Entwicklungsteam f\"{u}r diese Sprache entschieden hat. Wie bereits 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.
  57.115 +
  57.116 +Dieser direkte Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing gezeigt bzw. die Vorteile, die daraus resultieren, beleuchtet werden.
  57.117 +
  57.118 +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.
  57.119 +
  57.120 +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.
  57.121 +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.
  57.122 +
  57.123 +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.
  57.124 +
  57.125 +\subsection{Scala, Java und jEdit}
  57.126 +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!
  57.127 +
  57.128 +\subsection{Der Isabelle-Scala-Layer}
  57.129 +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.
  57.130 +
  57.131 +In diesem Absatz sollen nun die Eigenschaften des Scala-Layers und die damit verbundenen Chancen f\"ur das Isac- bzw. SD-Projektes
  57.132 +erarbeitet werden.
  57.133 +
  57.134 +\begin{figure}
  57.135 +\begin{center}
  57.136 +\includegraphics[width=100mm]{../fig-reuse-ml-scala-SD.png}
  57.137 +\end{center}
  57.138 +\label{fig-reuse-ml-scala}
  57.139 +\caption{Der Scala-Layer zwischen Java und SML}
  57.140 +\end{figure}
  57.141 +
  57.142 +Wie %Fig.\ref{fig-reuse-ml-scala} WARUM GEHT DAS NICHT ???
  57.143 +Fig.3.1
  57.144 +zeigt, verbindet der Scala-Layer 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 sollte hier also nicht angreifen sonder die Isabelle-Theorien entsprechend erweitern.
  57.145 +
  57.146 +\chapter{Konfiguration und Implementation der Komponenten}
  57.147 +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 \ref{files-SD-plugin} entnommen werden.
  57.148 +
  57.149 +\section{Konfiguration des Netbeans- (NB-) Projektes}
  57.150 +Um in k\"unftigen Entwicklungsvorhaben effizient kooperieren zu k\"onnen, wurde das NB-Projekt genau nach den Vorgaben des Isabelle-Teams konfiguriert. Voraussetzung f\"ur die Konfiguration sind die Files aus dem Repository laut Anhang \ref{files-SD-plugin}. Die Konfiguration des NB-Projektes ``testSD-jedit'' erfolgt in folgenden Schritten:
  57.151 +
  57.152 +\begin{enumerate}
  57.153 +\item Softwarekomponenten aus dem Isabelle\_bundle checken; diese sind alle im Verzeichnis {\tt contrib}:
  57.154 +  \begin{enumerate}
  57.155 +  \item {\tt contrib/scala-\dots} Scala-Compiler und Runtime-System
  57.156 +  \item {\tt contrib/scala-\dots} jEdit
  57.157 +  \item {\tt src/Tools/jEditC} der Code f\"ur das Test-Plugin
  57.158 +  \end{enumerate}
  57.159 +\item Konfigurations-Files von Netbeans im ``Files''-View checken; Achtung: die Files beeinflussen sich gegenseitig, direkte Eingriffe sind problematisch:
  57.160 +\begin{enumerate}
  57.161 +\item {\tt build.xml} wurde direkt aus dem Template in {\tt src/Tools/jEdit/} erzeugt; von hier nimmt NB die Daten um Daten in (Teilen von den) anderen Konfigurations-Files zu \"andern; NB nimmt hier keine automatischen Ver\"anderungen vor.
  57.162 +\item {\tt nbproject/build-impl.xml} z.T. automatisch erzeugt aus {\tt build.xml} und z.T. untenstehenden Files
  57.163 +\item {\tt nbproject/genfiles.properties}
  57.164 +\item {\tt nbproject/project.properties}, z.B. Projekt-Name
  57.165 +\item {\tt nbproject/project.xml}
  57.166 +\end{enumerate}
  57.167 +\item Sacla-plugin installieren laut {\tt http://wiki.netbeans.org/Scala69},
  57.168 +\begin{enumerate}
  57.169 +\item insbesonders siehe ``Install with NetBeans 6.9''
  57.170 +\item nach {\tt /usr/local/netbeans.../plugins/scala/} kopieren
  57.171 +\end{enumerate}
  57.172 +\item Scala-plugin in NB installieren
  57.173 +\begin{enumerate}
  57.174 +\item Men\"u $>$ Tools $>$ Plugins $>$ Downloaded $>$ Add Plugins
  57.175 +\item alle Files von {\tt /usr/local/netbeans\dots/plugins/scala/} ausw\"ahlen
  57.176 +\item Fenster in ``Add Plugins'' zeigt alle ausgew\"alten Files
  57.177 +\item $<$Install$>$ ruft den Wizzard auf, $<$Next$>$ erzeugt i.A. ein ``Warning'' das zu \"ubergehen ist
  57.178 +\item Funktionstest: Men\"ue $>$ Files $>$ New Project: zeigt Scala als ``Categories''
  57.179 +\end{enumerate}
  57.180 +\item Neues Projekt ``testSD-jedit'' konfigurieren
  57.181 +\begin{enumerate}
  57.182 +\item Men\"u $>$ Open Project (weil schon aus dem Repository die notwendigen Files vorhanden sind)
  57.183 +\item /src/Tools/jeditC: Reference Problems, weil jEdit die Plugins von \ref{plugins} braucht
  57.184 +\item Funktionskontrolle: ``Projects''-View zeigt das neue Projekt.\\
  57.185 +  Die Konfigurations-Files sind v\"ollig getrennt von denen anderer Projekte~!
  57.186 +\item\label{reference-pbl} Referenz-Probleme beheben; das zeigt auch eventuell fehlende Files:
  57.187 +\begin{enumerate}
  57.188 +\item ``Projects''-View $>$ rightMouse $>$ Resolve Reference Problems: Fenster zeigt dieListe der fehlenden Dateien; $<$Next$>$
  57.189 +\item Files holen aus ``Tools'' $>$ Libraries: \"uber Filebrowser aus dem Isabelle\_bundle holen {\tt contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars}
  57.190 +\item\label{plugins} ``New Library''
  57.191 +\begin{enumerate}
  57.192 +\item Cobra-renderer: cobra.jar
  57.193 +\item Console: Console.jar
  57.194 +\item ErrorList: ErrorList.jar
  57.195 +\item Hyperlinks: Hyperlinks.jar
  57.196 +\item Isabelle-Pure: Pure.jar
  57.197 +\item Rhino-JavaScript: js.jar
  57.198 +\item Scala-compiler: scala-compiler.jar
  57.199 +\item SideKick: SideKick.jar
  57.200 +\end{enumerate}
  57.201 +\item Funktions-Kontrollen
  57.202 +\begin{enumerate}
  57.203 +\item das kleine gelbe Warndreieck im ``Projects''-View ist verschwunden
  57.204 +\item im ``Projects''-View sind nun 2 Ordner: {\tt src} und {\tt Libraries}
  57.205 +\end{enumerate}
  57.206 +\end{enumerate}
  57.207 +\item jEdit-Paket zum ``testSD-jedit''-Projekt hinzuf\"ugen
  57.208 +\begin{enumerate}
  57.209 +\item ``Project''-View $>$ rightMouse $>$ Add Jar/Folder: Filebrowser
  57.210 +\item /contrib/jedit.../jedit.jar
  57.211 +\item Funktions-Kontrolle: ist in ``Projects''/Libraries/jedit.jar
  57.212 +\end{enumerate}
  57.213 +\item Das neue Projekt ``testSD-jedit'' zum Hauptprojekt machen: ``Project''-View $>$ rightMouse $>$ Set as Main Project; Funktions-Kontrolle: der Projektname ist boldface.
  57.214 +\end{enumerate}
  57.215 +\item den neuen Isabelle/Scala-Layer ({\tt Pure.jar}) erzeugen mit {\tt bin/testSD}; siehe Pkt.\ref{build-isa-scala} unten.
  57.216 +\end{enumerate}
  57.217 +
  57.218 +\noindent Ab nun wird die Konfiguration \"uber ``trial and error'' zu Ende gef\"uhrt; die unten angef\"uhrten Fehler entstanden durch Umbenennung des Projektes von ``isac-jedit'' auf ``testSD-jedit'' w\"ahrend der oben beschriebenen Installation.
  57.219 +\begin{enumerate}
  57.220 +\item Build des Plugins schl\"agt fehl: Men\"u $>$ Build Main
  57.221 +  \begin{enumerate}
  57.222 +  \item Fehler: {\it Target ``Isac-impl.jar'' does not exist in the project ``testSD-jedit''. It is used from target ``debug''}
  57.223 +    \begin{enumerate}
  57.224 +    \item\label{restart-NB} Versuch
  57.225 +      \begin{itemize}
  57.226 +      \item {\tt build-impl.xml} l\"oschen
  57.227 +      \item NetBeans neu starten, stellt build-impl.xml automatisch aus build.xml wieder her
  57.228 +      \item \dots hat in diesem Fall nicht geholfen
  57.229 +      \end{itemize}
  57.230 +    \item Versuch zur Vermutung: Projekt wurde umbenannt von ``Isac'' in ``testSD-jedit'', entsprechende Eintr\"age in den Konfigurations-Dateien wurden automatisch richtig ersetzt, aber nicht in {\tt build.xml}
  57.231 +      \begin{itemize}
  57.232 +      \item in {\tt build.xml} query-replace ``isac-jedit'' in ``testSD-jedit''
  57.233 +      \end{itemize}
  57.234 +    \end{enumerate}
  57.235 +  \item Fehler: {\it Problem: failed to create task or type scalac}
  57.236 +    \begin{enumerate}
  57.237 +    \item Versuch: Pfad zum Scala bekanntgeben
  57.238 +      \begin{itemize}
  57.239 +      \item {\tt /usr/local/netbeans-6.9.1/etc/netbeans.conf}: netbeans\_default\_options= \dots richtigen Scala-Pfad setzen
  57.240 +      \item build-impl.xml l\"oschen
  57.241 +      \item NetBeans neu starten (siehe \ref{restart-NB}).
  57.242 +      \end{itemize}
  57.243 +    \end{enumerate}
  57.244 +  \item Wenn Fehler: {\it /usr/local/isabisac/src/Tools/jEditC/\${project.jEdit}/modes does not exist}
  57.245 +    \begin{enumerate}
  57.246 +    \item grep -r "project.jEdit" *
  57.247 +    \item {\tt nbproject/project.properties}: project.jEdit=contrib/jEdit
  57.248 +  \end{enumerate}
  57.249 +  \end{enumerate}%??indent
  57.250 +\item Fehlersuche in den Project Files, nicht in {\tt build.xml}:\\
  57.251 +{\it src/Tools/jEditC/src/testSD.scala:225: error: value Isac is not a member of package isabelle}
  57.252 +  \begin{enumerate}
  57.253 +  \item den Link zu {\tt testSD.scala:22} folgen
  57.254 +  \item\label{build-intermed} als Zwischenschritt eine noch nicht erzeugte Class ``Isac'' auskommentieren; siehe Pkt.\ref{build-intermed-end} unten\\
  57.255 +val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')\\
  57.256 +    val str1: String = ``TEST'' //isabelle.Isac.parse(``Testdaten aus dem Parser!'')
  57.257 +  \item nochmals Men\"u $>$ Build (Hammer) \dots successful (wegen auskommentierter Zeile)
  57.258 +  \item in der Konsole beobachten, welche Files kopiert werden und vergleichen mit {\tt build.xml}, z.B. 
  57.259 +     $<$target name=''-pre-jar''$>$
  57.260 +     $<$target name=''-post-jar''$>$
  57.261 +  \item {\tt bin/testSD} ausf\"uhren \dots
  57.262 +  \item =dots stellt den entscheidender Schritt dar: ein neues {\tt Pure.jar} wurde erzeugt; dieses ist nun erweitert mit einer class {\tt Isac}; diese Klasse wurde erzeugt durch Code in \\{\tt scr/Pure/Isac/isac.scala}
  57.263 +  \item\label{build-intermed-end} den Zwischenschritt Pkt.\ref{build-intermed} oben r\"uckg\"angig machen:\\
  57.264 +    ``val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')".\\
  57.265 +    Dieser Befehl braucht das {\em neue} {\tt Pure.jar} am richtigen Platz \dots
  57.266 +  \item \dots das Shellscript {\tt bin/testSD\_jedit} erzeugt dieses {\tt Pure.jar}
  57.267 +  \end{enumerate}
  57.268 +\item\label{build-isa-scala} Fehler beim Exekutieren von {\tt bin/testSD}
  57.269 +  \begin{enumerate}
  57.270 +  \item einfach auf die ``error messages'' schauen, eg. {\it src/Pure/: no such file or directory} \dots
  57.271 +  \item \dots hei\ss t, dass das Skript nicht vom richtigen Pfad {\tt \~{\,}\~{\,}} gestartet wurde --- dieses Skript sollte also verbessert werden.
  57.272 +  \item Funktionstest: \\
  57.273 +    \#\#\#\\
  57.274 +    \#\#\# Building Isabelle/Scala layer\\
  57.275 +    \#\#\#
  57.276 +  \end{enumerate}
  57.277 +\item Fehlermeldung beim Starten des Plugins aus NB, die \"ubergehen sind:
  57.278 +\begin{verbatim}
  57.279 +/home/neuper/.jedit/jars/Console.jar:
  57.280 +Two copies installed. Please remove one of the two copies.
  57.281 +/home/neuper/.jedit/jars/Hyperlinks.jar:
  57.282 +Two copies installed. Please remove one of the two copies.
  57.283 +/home/neuper/.jedit/jars/SideKick.jar:
  57.284 +Two copies installed. Please remove one of the two copies.
  57.285 +/home/neuper/.jedit/jars/ErrorList.jar:
  57.286 +Two copies installed. Please remove one of the two copies.
  57.287 +\end{verbatim}
  57.288 +Fehler zu beseitigen mit {\tt rm -r \~/jedit/jars}
  57.289 +\item \textit{Referenzproblem} auf {\tt Pure.jar}: siehe Pkt.\ref{reference-pbl} auf S.\pageref{reference-pbl}.
  57.290 +
  57.291 +%$<$ $>$
  57.292 +%Men\"u $>$ $>$ $>$ $>$ $>$ $>$
  57.293 +%``Project''-View $>$ rightMouse $>$ $>$ $>$ $>$ $>$
  57.294 +%\item
  57.295 +%  \begin{enumerate}
  57.296 +%  \item
  57.297 +%    \begin{enumerate}
  57.298 +%    \item
  57.299 +%      \begin{itemize}
  57.300 +%      \item
  57.301 +%        \begin{itemize}
  57.302 +%        \item
  57.303 +%        \item
  57.304 +%        \item
  57.305 +%        \end{itemize}
  57.306 +%      \item
  57.307 +%      \item
  57.308 +%      \end{itemize}
  57.309 +%    \item
  57.310 +%    \item
  57.311 +%  \end{enumerate}
  57.312 +%\item
  57.313 +%\item
  57.314 +%\end{enumerate}
  57.315 +%\item
  57.316 +%\begin{enumerate}
  57.317 +%\item
  57.318 +%\begin{enumerate}
  57.319 +%\item
  57.320 +%\begin{itemize}
  57.321 +%\item
  57.322 +%\begin{itemize}
  57.323 +%\item
  57.324 +%\item
  57.325 +%\item
  57.326 +%\end{itemize}
  57.327 +%\item
  57.328 +%\item
  57.329 +%\end{itemize}
  57.330 +%\item
  57.331 +%\item
  57.332 +%\end{enumerate}
  57.333 +%\item
  57.334 +%\item
  57.335 +%\end{enumerate}
  57.336 +\end{enumerate}
  57.337 +
  57.338 +
  57.339 +\section{Implementation der jEdit Komponenten}
  57.340 +
  57.341 +\subsection{Erstellen des Plugin-Ger\"{u}sts}
  57.342 +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.
  57.343 +
  57.344 +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 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.
  57.345 +
  57.346 +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.
  57.347 +
  57.348 +\subsection{Erzeugung des Plugins}
  57.349 +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, Anhang C):
  57.350 +\begin{enumerate}
  57.351 +\item Das Plugin kann mittels Kommandline folgenderma{\ss}en erstellt werden: \\ \textit{cd ISABELLE\_HOME/src/Tools/isac/jEdit} $\rightarrow$ \textit{ant jar}
  57.352 +\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/}
  57.353 +\item jEdit ausf\"{u}hren und testen
  57.354 +\end{enumerate}
  57.355 +
  57.356 +\subsection{Verbindung zum Isabelle-Pure Plugin herstellen}
  57.357 +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, {\tt Pure.jar}, weitergegeben werden. Dort k\"{o}nnen die Daten verwertet und aufbereitet zur\"{u}ck an das Frontend gereicht werden.
  57.358 +
  57.359 +\begin{figure}
  57.360 +\begin{center}
  57.361 +\includegraphics[width=100mm]{../fig-jedit-plugins-SD.png}
  57.362 +\end{center}
  57.363 +\label{fig-jedit-plugins-SD}
  57.364 +\caption{jEdit Plugins und die Verbindung zu Isabelle}
  57.365 +\end{figure}
  57.366 +
  57.367 +%Fig.\ref{fig-jedit-plugins-SD} WARUM GEHT DAS NICHT ???
  57.368 +Fig.4.1 zeigt die involvierten Komponenten und ihren Zusammenhang.
  57.369 +
  57.370 +Der Zusammenhang zwischen dem Kern von Isabelle, Isabelle-Pure und dem Plugin wird folgenderma\ss en hergestellt: Zun\"{a}chst wird {\tt Pure.jar} leicht modifiziert, danach neu erstellt und zuletzt zu den restlichen jEdit-Plugins hinzugef\"{u}gt. 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.
  57.371 +
  57.372 +
  57.373 +\begin{enumerate}
  57.374 +\item Um den \sisac-Teil im Isabelle-Pure genau abzugrenzen, wurde ein Ordner \textit{Isac} angelegt und ein Testfile \textit{isac.scala} erstellt.
  57.375 +\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.
  57.376 +\item Nun kann Pure.jar mittels Kommandline erstellt werden: \textit{cd /src/Pure} $\rightarrow$ \textit{../../bin/isabelle env ./build-jars}
  57.377 +\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/}
  57.378 +\item jEdit ausf\"{u}hren und testen
  57.379 +\end{enumerate}
  57.380 +Alle die oben angef\"{u}hrten Punkte, sowie das Erzeugen und Kopieren des Plugins selbst, werden vom Script isac\_jedit erledigt.
  57.381 +Das Skript kann dem Anhang C entnommen werden.
  57.382 +
  57.383 +\section{``Run Configurations''}
  57.384 +Zwischen Isabelle2009-2 und Isabelle2011 hat sich viel ge\"andert. Jetzt mit Isabelle2011 sieht es folgenderma\ss en aus:
  57.385 +
  57.386 +Am Anfang der Plugin-Entwicklung wird man versuchen, ohne eine Verbindung zu Isabelle auszukommen; in sp\"ateren Phase wird man genau diese Verbindung brauchen. Starten eines Plugins in NB mit gleichzeitigem Hochfahren von Isabelle ist schwierig.
  57.387 +
  57.388 +Folgende M\"oglichkeiten gibt es beim Debuggen:
  57.389 +
  57.390 +\begin{enumerate}
  57.391 +\item Man macht alles in Netbeans.  Mit dem -Disabelle.home=... sollte man
  57.392 +      die Applikation direkt aus der IDE starten und profilen/debuggen
  57.393 +      k\"onnen.  Das war der urspr\"ungliche Plan des ganzen Setups, d.h. der
  57.394 +      Grund warum er so kompliziert ist.
  57.395 +
  57.396 +\item Man startet aus der Shell \"uber "isabelle jedit -d" und verbindet
  57.397 +      dann den Netbeans debugger (oder jeden anderen JVM debugger) \"uber
  57.398 +      den hier ausgegebenen Port.
  57.399 +
  57.400 +\item Man startet "isabelle jedit", geht dann in das "Console" Plugin und
  57.401 +      w\"ahlt dort das "Scala" Sub-Plugin aus.  Nach ca. 5s Bedenkzeit steht
  57.402 +      der interaktive Scala toplevel innerhalb von Isabelle/jEdit zur
  57.403 +      Verf\"ugung.  Nun kann man direkt Dinge auswerten etc. und schauen was
  57.404 +      passiert.
  57.405 +
  57.406 +      Auf dem Cambridge Workshop 2010, {\tt T06\_System.thy} sind Beispiele zu finden.
  57.407 +      Siehe subsection Isabelle/Scala.  Man aktuviert dazu Isabelle/jEdit
  57.408 +      mit obigem thy File und kopiert die Scala snippets aus dem Text
  57.409 +      zeilenweise in das Console/Scala Fenster.
  57.410 +
  57.411 +\item Man streut einfach {\tt System.err.println} in seinen Code ein.
  57.412 +\end{enumerate}
  57.413 +Die M\"oglichkeiten (3) oder (4) sind zu bevorzugen.
  57.414 +
  57.415 +Ferner gibt es einige externe JVM Diagnose-Tools.  Zu nennen sind {\tt jvisualvm} oder {\tt jconsole} um threads, heaps, profiles etc. anzuschauen, da sich das alles gerne verheddert.
  57.416 +
  57.417 +Richtig koordiniertes Hochfahren aller Komponenten braucht ein Shellscript wie {\tt isabelle jedit}.
  57.418 +
  57.419 +\section{Umsetzung des SD-Parsers}
  57.420 +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.
  57.421 +
  57.422 +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.
  57.423 +
  57.424 +
  57.425 +\chapter{Ausblick: Von SD- zum \isac-Plugin}
  57.426 +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.
  57.427 +
  57.428 +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.
  57.429 +
  57.430 +\chapter{Zusammenfassung und R\"{u}ckblick}
  57.431 +Zusammenfassend wird nun ein \"Uberblick gegeben, welche Milestones erledigt wurden und welche nicht; Details dazu finden sich in Anhang A. %TODO
  57.432 +Abschlie{\ss}end gebe ich einen R\"uckblick auf meine pers\"onlichen Erfahrungen aus dieser Bakkalaureats-Arbeit.
  57.433 +
  57.434 +\section{Zusammenfassung}\label{zusammenfassung}
  57.435 +Folgende Milestones wurden erfolgreich abgeschlossen:
  57.436 +\begin{enumerate}
  57.437 +\item Relevante Isabelle Komponenten dokumentiert
  57.438 +
  57.439 +\item Installation der Standard-Komponenten:
  57.440 +\begin{itemize}
  57.441 +\item Mercurial Versioncontrol
  57.442 +\item NetBeans IDE
  57.443 +\item Standard Isabelle Bundle
  57.444 +\end{itemize}
  57.445 +
  57.446 +\item Entwicklungsumgebung vom Isabelle-Team kopieren
  57.447 +\begin{itemize}
  57.448 +\item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
  57.449 +\item jEdit als NetBeans Projekt definiert
  57.450 +\end{itemize}
  57.451 +
  57.452 +\item Relevante Komponenten implementieren
  57.453 +\begin{itemize}
  57.454 +\item jEdit Plugin f\"ur SD
  57.455 +\item Verbindung des Plugins zu Isabelle
  57.456 +\item zugeh\"origen Parser: nur ein Test in SML
  57.457 +\end{itemize}
  57.458 +\end{enumerate}
  57.459 +
  57.460 +\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.
  57.461 +
  57.462 +\paragraph{Voraussetzungen f\"ur k\"unftige Entwicklung} geschaffen:
  57.463 +\begin{enumerate}
  57.464 +\item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
  57.465 +\item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
  57.466 +\item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
  57.467 +\end{enumerate}
  57.468 +
  57.469 +\section{R\"uckblick}
  57.470 +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.
  57.471 +
  57.472 +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\"onnen.
  57.473 +
  57.474 +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.
  57.475 +
  57.476 +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.
  57.477 +
  57.478 +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.
  57.479 +
  57.480 +%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!
  57.481 +
  57.482 +%\chapter{Milestones und Arbeitsprotokolle}
  57.483 +%\section{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010}
  57.484 +%\begin{itemize}
  57.485 +%\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010
  57.486 +%\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
  57.487 +%\item Scala Actors: beendet am 12.08.2010
  57.488 +%\end{itemize}
  57.489 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  57.490 +%\hline
  57.491 +%Datum & T\"atigkeit & Einheiten \\ \hline
  57.492 +%12.07.2010 & Meeting: erste Besprechung und Erkl\"{a}rungen zu Isabelle, Isac und CTPs & 2 \\ \hline
  57.493 +%15.07.2010 & Recherche \"{u}ber Isabelle und CTPs & 3 \\ \hline
  57.494 +%20.07.2010 & Meeting: Besprechen der grunds\"{a}tzlichen Vorgangsweise und Ziele & 1 \\ \hline
  57.495 +%23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenh\"{a}nge mit Isac abkl\"{a}ren & 1 \\ \hline
  57.496 +%30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise \"{u}ber Backs 'structured derivations'; Begriffserkl\"{a}rung & 3 \\ \hline
  57.497 +%01.08.2010 & Recherche: Buch f\"{u}r Scala & 2 \\ \hline
  57.498 +%03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
  57.499 +%05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1 \\ \hline
  57.500 +%06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
  57.501 +%08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
  57.502 +%09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
  57.503 +%12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
  57.504 +%24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
  57.505 +%25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
  57.506 +%27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline \hline
  57.507 +% & Anzahl der Einheiten & 44 \\
  57.508 +%\hline
  57.509 +%\end{tabular}
  57.510 +%
  57.511 +%
  57.512 +%\section{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
  57.513 +%\begin{itemize}
  57.514 +%\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
  57.515 +%\item Scala in NetBeans eingebunden: beendet am 22.07.2010
  57.516 +%\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010
  57.517 +%\end{itemize}
  57.518 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  57.519 +%\hline
  57.520 +%Datum & T\"atigkeit & Einheiten \\ \hline
  57.521 +%19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
  57.522 +%20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
  57.523 +%21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
  57.524 +%22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
  57.525 +%23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausf\"{u}hren: testen & 5 \\ \hline
  57.526 +%27.07.2010 & Isabelle-jEdit-Plugin: \"{a}nderungen an der Projektstruktur & 7 \\ \hline
  57.527 +%28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
  57.528 +%29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
  57.529 +%30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung \"{u}ber Erfahrungen mit Filestruktur & 4 \\ \hline
  57.530 +%02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
  57.531 +% & Anzahl der Einheiten & 60 \\
  57.532 +%\hline
  57.533 +%\end{tabular}
  57.534 +%
  57.535 +%\section{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010}
  57.536 +%\begin{itemize}
  57.537 +%\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
  57.538 +%\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
  57.539 +%\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010
  57.540 +%\end{itemize}
  57.541 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  57.542 +%\hline
  57.543 +%Datum & T\"atigkeit & Einheiten \\ \hline
  57.544 +%10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
  57.545 +%11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
  57.546 +%21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
  57.547 +%22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten f\"{u}r ISAC & 3 \\ \hline
  57.548 +%24.08.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 6 \\ \hline
  57.549 +%26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach L\"{o}sungen & 3 \\ \hline
  57.550 +%28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
  57.551 +%29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
  57.552 +%30.08.2010 & Isabelle-jEdit-Plugin endlich vollst\"{a}ndig lauff\"{a}hig gebracht & 4 \\ \hline
  57.553 +%01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
  57.554 +%04.09.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 5 \\ \hline
  57.555 +%20.09.2010 & Einrichten des Laptops f\"{u}r Isabelle-Isac & 4 \\ \hline
  57.556 +%22.09.2010 & Meeting: Fortschrittsbericht, kurze Einf\"{u}hrung f\"{u}r Mitstreiter & 3 \\ \hline
  57.557 +%
  57.558 +%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
  57.559 +%30.09.2010 & QN: Start mit \"{u}bersetzten der Sourcefiles & 5 \\ \hline
  57.560 +%02.10.2010 & QN: \"{U}bersetzten der Sourcefiles & 6 \\ \hline
  57.561 +%04.10.2010 & QN: \"{U}bersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
  57.562 +%05.10.2010 & QN: QN vollst\"andig in Scala \"{u}bersetzt, testen & 2 \\ \hline \hline
  57.563 +% & Anzahl der Einheiten & 71 \\
  57.564 +%\hline
  57.565 +%\end{tabular}
  57.566 +%
  57.567 +%\section{Experimentelle Parser implementiert: beendet am 04.03.2011}
  57.568 +%\begin{itemize}
  57.569 +%\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
  57.570 +%\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
  57.571 +%\item Implementierung des Scala-Parsers: aufgeschoben
  57.572 +%\end{itemize}
  57.573 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  57.574 +%\hline
  57.575 +%Datum & T\"atigkeit & Einheiten \\ \hline
  57.576 +%28.01.2011 & Testen des SideKick-Parsers im Isabelle-Plugin & 2 \\ \hline
  57.577 +%29.01.2011 & Leichte Modifikationen des SideKick-Parsers im Isabelle-Plugin & 1 \\ \hline
  57.578 +%08.02.2011 & Besprechung zum Abschluss der praktischen Arbeiten & 1 \\ \hline
  57.579 +%16.02.2011 & Erstellen des Isabelle-Pur jar-Files & 1 \\ \hline
  57.580 +%19.02.2011 & Behebung des Problems mit den Umgebungsvariablen & 1 \\ \hline
  57.581 +%03.03.2011 & Erzeugung des Pure.jar Package m\"{o}glich & 2 \\ \hline
  57.582 +%04.04.2011 & Verbindung zwischen Plugin und Isabelle-Pure hergestellt und getestet & 3 \\ \hline
  57.583 +%08.04.2011 & Besprechung: Implementierung des experimentellen Parsers wird nicht mehr durchgef\"{u}hrt & 1 \\ \hline \hline
  57.584 +% & Anzahl der Einheiten & 12 \\
  57.585 +%\hline
  57.586 +%\end{tabular}
  57.587 +%
  57.588 +%\section{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am TO.DO.2011}
  57.589 +%\begin{itemize}
  57.590 +%\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
  57.591 +%\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
  57.592 +%\item Dokumentation abgeschlossen: beendet am TO.DO.2011
  57.593 +%\end{itemize}
  57.594 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  57.595 +%\hline
  57.596 +%Datum & T\"atigkeit & Einheiten \\ \hline
  57.597 +%01.03.2011 & Besprechung zum Ablauf der Dokumentationsarbeiten: Protokoll und Dokumentation & 1 \\ \hline
  57.598 +%01.03.2011 & Erstellen des Protokolls & 2 \\ \hline
  57.599 +%08.03.2011 & Besprechung zur Doku und zur Schnittstelle zu Isabelle-Pure & 1 \\ \hline
  57.600 +%17.03.2011 & Dokumentation schreiben & 2 \\ \hline
  57.601 +%19.03.2011 & Dokumentation schreiben & 3 \\ \hline
  57.602 +%24.04.2011 & Dokumentation schreiben & 2 \\ \hline
  57.603 +%25.04.2011 & Dokumentation schreiben & 4 \\ \hline
  57.604 +%27.04.2011 & Dokumentation schreiben & 2 \\ \hline
  57.605 +%28.04.2011 & Dokumentation: Fertigstellen der ersten Version & 3 \\ \hline \hline
  57.606 +% & Anzahl der Einheiten & 20 \\
  57.607 +%\hline
  57.608 +%\end{tabular}
  57.609 +%
  57.610 +%\section{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}
    58.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2 +++ b/doc-isac/msteger/bakk-arbeit/master_thesis.bib	Tue Sep 17 09:50:52 2013 +0200
    58.3 @@ -0,0 +1,187 @@
    58.4 +% Add your bibtex entries
    58.5 +
    58.6 +@Book{aichernig:uni-iist-02,
    58.7 +  editor = 	 {Aichernig, Bernhard K. and Maibaum, Tom},
    58.8 +  title = 	 {Formal Methods at the Crossroads. From Panacea to Foundational Support.
    58.9 +{10th Anniversary Colloquium of UNU/IIST, the International Institute for Software Technology of The United Nations University}},
   58.10 +  publisher = 	 {Springer-Verlag},
   58.11 +  year = 	 {2003},
   58.12 +  volume = 	 {2757},
   58.13 +  series = 	 {Lecture Notes in Computer Science},
   58.14 +  address = 	 {Lisbon, Portugal},
   58.15 +  month = 	 {March 18-20, 2002}
   58.16 +}
   58.17 +
   58.18 +@InCollection{aichernig:mut-test,
   58.19 +  author = 	 {Aichernig, Bernhard},
   58.20 +  title = 	 {A systematic introduction to mutation testing in unifying theories of programming},
   58.21 +  booktitle = 	 {Testing Techniques in Software Engineering},
   58.22 +  pages = 	 {243--287},
   58.23 +  publisher = {Springer Berlin / Heidelberg},
   58.24 +  year = 	 {2010},
   58.25 +  editor = 	 {Borba, Paulo and Cavalcanti, Ana and Sampaio, Augusto and Woodcook, Jim},
   58.26 +  volume = 	 {6153},
   58.27 +  series = 	 {Lecture Notes in Computer Science}
   58.28 +}
   58.29 +
   58.30 +@inproceedings{Aspinall:2007:FIP:1420412.1420429,
   58.31 + author = {Aspinall, David and L\"{u}th, Christoph and Winterstein, Daniel},
   58.32 + title = {A Framework for Interactive Proof},
   58.33 + booktitle = {Proceedings of the 14th symposium on Towards Mechanized Mathematical Assistants: 6th International Conference},
   58.34 + series = {Calculemus '07 / MKM '07},
   58.35 + year = {2007},
   58.36 + isbn = {978-3-540-73083-5},
   58.37 + location = {Hagenberg, Austria},
   58.38 + pages = {161--175},
   58.39 + numpages = {15},
   58.40 + url = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
   58.41 + doi = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
   58.42 + acmid = {1420429},
   58.43 + publisher = {Springer-Verlag},
   58.44 + address = {Berlin, Heidelberg},
   58.45 +}
   58.46 +
   58.47 +@Book{armstrong:erlang96,
   58.48 +  author = 	 {Armstrong, Joe and others},
   58.49 +  title = 	 {Concurrent Programming in Erlang},
   58.50 +  publisher = {Prentice Hall},
   58.51 +  year = 	 {1996}
   58.52 +}
   58.53 +
   58.54 +@TechReport{odersky:scala06,
   58.55 +  author = 	 {Odersky, Martin and others},
   58.56 +  title = 	 {An Overview of the Scala Programming Language},
   58.57 +  institution =  {\'Ecole Polytechnique F\'ed\'erale de Lausanne (EPFL)},
   58.58 +  year = 	 {2006},
   58.59 +  type = 	 {Technical Report LAMP-REPORT-2006-001},
   58.60 +  address = 	 {1015 Lausanne, Switzerland},
   58.61 +  note = 	 {Second Edition},
   58.62 +  annote = 	 {http://www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf}
   58.63 +}
   58.64 +
   58.65 +@article{Haller:2009:SAU:1496391.1496422,
   58.66 + author = {Haller, Philipp and Odersky, Martin},
   58.67 + title = {Scala Actors: Unifying thread-based and event-based programming},
   58.68 + journal = {Theor. Comput. Sci.},
   58.69 + volume = {410},
   58.70 + issue = {2-3},
   58.71 + month = {February},
   58.72 + year = {2009},
   58.73 + issn = {0304-3975},
   58.74 + pages = {202--220},
   58.75 + numpages = {19},
   58.76 + url = {http://portal.acm.org/citation.cfm?id=1496391.1496422},
   58.77 + doi = {10.1016/j.tcs.2008.09.019},
   58.78 + acmid = {1496422},
   58.79 + publisher = {Elsevier Science Publishers Ltd.},
   58.80 + address = {Essex, UK},
   58.81 + keywords = {Actors, Concurrent programming, Events, Threads},
   58.82 +} 
   58.83 +
   58.84 +@InProceedings{scala:jmlc06,
   58.85 +  author =       {Philipp Haller and Martin Odersky},
   58.86 +  title =        {Event-Based Programming without Inversion of Control},
   58.87 +  booktitle =    {Proc. Joint Modular Languages Conference},
   58.88 +  year =         2006,
   58.89 +  series =       {Springer LNCS}
   58.90 +}
   58.91 +
   58.92 +
   58.93 +@InProceedings{makarius:isa-scala-jedit,
   58.94 +  author = 	 {Makarius Wenzel},
   58.95 +  title = 	 {Asyncronous Proof Processing with {Isabelle/Scala} and {Isabelle/jEdit}},
   58.96 +  booktitle = {User Interfaces for Theorem Provers (UITP 2010)},
   58.97 +  year = 	 {2010},
   58.98 +  editor = 	 {C. Sacerdoti Coen and D. Aspinall},
   58.99 +  address = 	 {Edinburgh, Scotland},
  58.100 +  month = 	 {July},
  58.101 +  organization = {FLOC 2010 Satellite Workshop},
  58.102 +  note = 	 {http://www4.in.tum.de/~wenzelm/papers/async-isabelle-scala.pdf}
  58.103 +}
  58.104 +
  58.105 +@Book{db:dom-eng,
  58.106 +  author = 	 {Bj{\o}rner, Dines},
  58.107 +  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
  58.108 +  publisher = 	 {JAIST Press},
  58.109 +  year = 	 {2009},
  58.110 +  month = 	 {Feb},
  58.111 +  series = 	 {COE Research Monograph Series},
  58.112 +  volume = 	 {4},
  58.113 +  address = 	 {Nomi, Japan}
  58.114 +}
  58.115 +
  58.116 +@inproceedings{Haftmann-Nipkow:2010:code,
  58.117 +  author =      {Florian Haftmann and Tobias Nipkow},
  58.118 +  title =       {Code Generation via Higher-Order Rewrite Systems},
  58.119 +  booktitle =   {Functional and Logic Programming, 10th International
  58.120 +Symposium: {FLOPS} 2010},
  58.121 +  year =        {2010},
  58.122 +  publisher =   {Springer},
  58.123 +  series =      {Lecture Notes in Computer Science},
  58.124 +  volume =      {6009}
  58.125 +}
  58.126 +
  58.127 +@Manual{coq1999,
  58.128 +  title = 	 {The Coq Proof Assistant},
  58.129 +  author = 	 {Barras, B. and others},
  58.130 +  organization = {INRIA-Rocquencourt - CNRS-ENS Lyon},
  58.131 +  month = 	 {July},
  58.132 +  year = 	 {1999},
  58.133 +  pnote={},status={cited},source={mkm01.caprotti},location={}  
  58.134 +}
  58.135 +
  58.136 +@Book{meta-ML,
  58.137 +  author = 	 {Gordon,M. and Milner,R.  and Wadsworth,C. P.},
  58.138 +  title = 	 {Edinburgh LCF: A Mechanised Logic of Computation},
  58.139 +  publisher = 	 { Springer-Verlag},
  58.140 +  year = 	 {1979},
  58.141 +  volume = 	 {78},
  58.142 +  series = 	 {Lecture Notes in Computer Science}
  58.143 +}
  58.144 + 
  58.145 +@book{Paulson:Isa94,
  58.146 +        title={Isabelle: a generic theorem prover}, 
  58.147 +        author={Paulson, Lawrence C. }, publisher={Springer-Verlag},year={1994}, 
  58.148 +	volume={828},series={Lecture Notes in Computer Science},address={},edition={},month={}, 
  58.149 +	note={With contributions by Topias Nipkow},
  58.150 +        status={},source={},location={-} 
  58.151 +        }  
  58.152 +
  58.153 +@Book{pl:milner97,
  58.154 +  author = 	 {Robin Milner and Mads Tofte and Robert Harper and David MacQueen},
  58.155 +  title = 	 {The Definition of Standard ML (Revised)},
  58.156 +  publisher = 	 {The MIT Press},
  58.157 +  year = 	 1997,
  58.158 +  address =	 {Cambridge, London},
  58.159 +  annote =	 {97bok375}
  58.160 +}
  58.161 +
  58.162 +@Article{back-grundy-wright-98,
  58.163 +  author = 	 {Back, Ralph and Grundy, Jim and von Wright, Joakim},
  58.164 +  title = 	 {Structured Calculational Proof},
  58.165 +  journal = 	 {Formal Aspects of Computing},
  58.166 +  year = 	 {1998},
  58.167 +  number = 	 {9},
  58.168 +  pages = 	 {469-483}
  58.169 +}
  58.170 +
  58.171 +@Manual{isar-impl,
  58.172 +  title = 	 {The {Isabelle/Isar} Implementation},
  58.173 +  author = 	 {Makarius Wenzel},
  58.174 +  month = 	 {April 19},
  58.175 +  year = 	 {2009},
  58.176 +  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
  58.177 +}
  58.178 +
  58.179 +@InProceedings{wenzel:isar,
  58.180 +  author = 	 {Wenzel, Markus},
  58.181 +  title = 	 {Isar - a Generic Interpretative Approach to Readable Formal Proof Documents},
  58.182 +  booktitle = 	 {Theorem Proving in Higher Order Logics},
  58.183 +  year = 	 {1999},
  58.184 +  editor = 	 {G. Dowek, A. Hirschowitz, C. Paulin, L. Thery},
  58.185 +  series = 	 {LNCS 1690},
  58.186 +  organization = {12th International Conference TPHOLs'99},
  58.187 +  publisher = {Springer}
  58.188 +}
  58.189 +
  58.190 +
    59.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-acknowl.tex	Tue Sep 17 09:50:52 2013 +0200
    59.3 @@ -0,0 +1,55 @@
    59.4 +%\begin{changemargin}{1.5cm}{1.5cm}
    59.5 +
    59.6 +%\chapter*{Acknowledgements}
    59.7 +%\addcontentsline{toc}{chapter}{Acknowledgements}
    59.8 +
    59.9 +
   59.10 +
   59.11 +\begin{center}
   59.12 +{\Large\bfseries Acknowledgements}
   59.13 +\end{center}
   59.14 +%\vspace*{3mm}
   59.15 +
   59.16 +\begin{changemargin}{1.5cm}{1.5cm}
   59.17 +I would like to thank Professor Berhard Aichernig for having prepared the grounds for this thesis by his work on test case generation and in particular in his interest in the computer theorem prover Isabelle.
   59.18 +
   59.19 +His general surveys on computer theorem proving, on programming languages in general, on functional programming in particular and on respective advantages in upcoming multi-core computing were inspiring and they motivate the directions for my future studies.
   59.20 +
   59.21 +Many thanks also to Walther Neuper, who was always available for the many intricacies of Isabelle/Isar and the technicalities involved when doing a bachelor project and writing a thesis.
   59.22 +
   59.23 +\begin{flushright}
   59.24 +Marco Steger \\ {\small Graz, June 30, 2011}
   59.25 +\end{flushright}
   59.26 +\end{changemargin}
   59.27 +
   59.28 +\selectlanguage{austrian}
   59.29 +
   59.30 +\vspace*{5mm}
   59.31 +
   59.32 +\begin{center}
   59.33 +{\Large\bfseries Danksagung}
   59.34 +\end{center}
   59.35 +%\vspace*{0mm}
   59.36 +
   59.37 +\begin{changemargin}{1.5cm}{1.5cm}
   59.38 +Ich mchte mich herzlich bei allen bedanken, die diese Bakkalaureats-Arbeit unterst\"utzt haben.
   59.39 +
   59.40 +Herr Professor Bernhard Aichernig hat die Voraussetzungen f\"ur die Themenstellung der Arbeit durch seine F\&E in Test-Case-Generation geschaffen; Isabelle geh\"ort auch zu seinem Tool-Set.
   59.41 +
   59.42 +Besonder inspirierend waren seine \"Uberblicks-Informationen zu Computer Theorem Proving, zu Programm-Sprachen im Allgemeinen und zu funktionalen Sprachen im Besonderen, die ihre Vorteile bei den kommenden Multi-Core-Prozessoren zum Tragen bringen werden; diese Informationen werden auch meine Entscheidung f\"ur Wahlf\"acher in den kommenden Semestern motivieren.
   59.43 +
   59.44 +Walther Neuper war immer hilfreich in allen technischen Fragen zu Isabelle/Isar und in organisatorischen Fragen zu Bachelor-Projekt und -Thesis.
   59.45 +
   59.46 +\begin{flushright}
   59.47 +Marco Steger \\ {\small Graz, am 30 Juni 2011}
   59.48 +\end{flushright}
   59.49 +\end{changemargin}
   59.50 +
   59.51 +\selectlanguage{english}
   59.52 +
   59.53 +
   59.54 +
   59.55 +
   59.56 +
   59.57 +
   59.58 +
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-appendix.tex	Tue Sep 17 09:50:52 2013 +0200
    60.3 @@ -0,0 +1,339 @@
    60.4 +\chapter{Milestones und Arbeitsprotokolle}\label{milestones} %\ref doesnt work outside this file ?!?
    60.5 +\section{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010} 
    60.6 +\begin{itemize}
    60.7 +\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010 
    60.8 +\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
    60.9 +\item Scala Actors: beendet am 12.08.2010
   60.10 +\end{itemize}
   60.11 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   60.12 +\hline
   60.13 +Datum & T\"atigkeit & Einheiten \\ \hline
   60.14 +12.07.2010 & Meeting: erste Besprechung und Erkl\"{a}rungen zu Isabelle, Isac und CTPs & 2 \\ \hline
   60.15 +15.07.2010 & Recherche \"{u}ber Isabelle und CTPs & 3 \\ \hline
   60.16 +20.07.2010 & Meeting: Besprechen der grunds\"{a}tzlichen Vorgangsweise und Ziele & 1 \\ \hline
   60.17 +23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenh\"{a}nge mit Isac abkl\"{a}ren & 1 \\ \hline 
   60.18 +30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise \"{u}ber Backs 'structured derivations'; Begriffserkl\"{a}rung & 3 \\ \hline
   60.19 +01.08.2010 & Recherche: Buch f\"{u}r Scala & 2 \\ \hline
   60.20 +03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
   60.21 +05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1  \\ \hline
   60.22 +06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
   60.23 +08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
   60.24 +09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
   60.25 +12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
   60.26 +24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
   60.27 +25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
   60.28 +27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline \hline
   60.29 + & Anzahl der Einheiten & 44 \\
   60.30 +\hline
   60.31 +\end{tabular}
   60.32 +
   60.33 +
   60.34 +\section{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
   60.35 +\begin{itemize}
   60.36 +\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
   60.37 +\item Scala in NetBeans eingebunden: beendet am 22.07.2010
   60.38 +\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010 
   60.39 +\end{itemize}
   60.40 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   60.41 +\hline
   60.42 +Datum & T\"atigkeit & Einheiten \\ \hline
   60.43 +19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
   60.44 +20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
   60.45 +21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
   60.46 +22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
   60.47 +23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausf\"{u}hren: testen & 5 \\ \hline 
   60.48 +27.07.2010 & Isabelle-jEdit-Plugin: \"{a}nderungen an der Projektstruktur & 7 \\ \hline
   60.49 +28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
   60.50 +29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
   60.51 +30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung \"{u}ber Erfahrungen mit Filestruktur & 4 \\ \hline
   60.52 +02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
   60.53 + & Anzahl der Einheiten & 60 \\
   60.54 +\hline
   60.55 +\end{tabular}
   60.56 +
   60.57 +\section{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010} 
   60.58 +\begin{itemize}
   60.59 +\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
   60.60 +\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
   60.61 +\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010 
   60.62 +\end{itemize}
   60.63 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   60.64 +\hline
   60.65 +Datum & T\"atigkeit & Einheiten \\ \hline
   60.66 +10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
   60.67 +11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
   60.68 +21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
   60.69 +22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten f\"{u}r ISAC & 3 \\ \hline
   60.70 +24.08.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 6 \\ \hline 
   60.71 +26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach L\"{o}sungen & 3 \\ \hline
   60.72 +28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
   60.73 +29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
   60.74 +30.08.2010 & Isabelle-jEdit-Plugin endlich vollst\"{a}ndig lauff\"{a}hig gebracht & 4 \\ \hline
   60.75 +01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
   60.76 +04.09.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 5 \\ \hline 
   60.77 +20.09.2010 & Einrichten des Laptops f\"{u}r Isabelle-Isac & 4 \\ \hline 
   60.78 +22.09.2010 & Meeting: Fortschrittsbericht, kurze Einf\"{u}hrung f\"{u}r Mitstreiter & 3 \\ \hline
   60.79 +
   60.80 +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 
   60.81 +30.09.2010 & QN: Start mit \"{u}bersetzten der Sourcefiles & 5 \\ \hline
   60.82 +02.10.2010 & QN: \"{U}bersetzten der Sourcefiles & 6 \\ \hline
   60.83 +04.10.2010 & QN: \"{U}bersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
   60.84 +05.10.2010 & QN: QN vollst\"andig in Scala \"{u}bersetzt, testen & 2 \\ \hline \hline
   60.85 + & Anzahl der Einheiten & 71 \\
   60.86 +\hline
   60.87 +\end{tabular}
   60.88 +
   60.89 +\section{Experimentelle Parser implementiert: beendet am 04.03.2011} 
   60.90 +\begin{itemize}
   60.91 +\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
   60.92 +\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
   60.93 +\item Implementierung des Scala-Parsers: aufgeschoben
   60.94 +\end{itemize}
   60.95 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   60.96 +\hline
   60.97 +Datum & T\"atigkeit & Einheiten \\ \hline
   60.98 +28.01.2011 & Testen des SideKick-Parsers im Isabelle-Plugin & 2 \\ \hline
   60.99 +29.01.2011 & Leichte Modifikationen des SideKick-Parsers im Isabelle-Plugin & 1 \\ \hline
  60.100 +08.02.2011 & Besprechung zum Abschluss der praktischen Arbeiten & 1 \\ \hline
  60.101 +16.02.2011 & Erstellen des Isabelle-Pur jar-Files & 1 \\ \hline
  60.102 +19.02.2011 & Behebung des Problems mit den Umgebungsvariablen & 1 \\ \hline
  60.103 +03.03.2011 & Erzeugung des Pure.jar Package m\"{o}glich & 2 \\ \hline
  60.104 +04.04.2011 & Verbindung zwischen Plugin und Isabelle-Pure hergestellt und getestet  & 3 \\ \hline
  60.105 +08.04.2011 & Besprechung: Implementierung des experimentellen Parsers wird nicht mehr durchgef\"{u}hrt & 1 \\ \hline \hline
  60.106 + & Anzahl der Einheiten & 12 \\
  60.107 +\hline
  60.108 +\end{tabular}
  60.109 +
  60.110 +\section{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am 30.Juni 2011}
  60.111 +\begin{itemize}
  60.112 +\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
  60.113 +\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
  60.114 +\item Dokumentation abgeschlossen: beendet am 30.Juni 2011 
  60.115 +\end{itemize}
  60.116 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  60.117 +\hline
  60.118 +Datum & T\"atigkeit & Einheiten \\ \hline
  60.119 +01.03.2011 & Besprechung zum Ablauf der Dokumentationsarbeiten: Protokoll und Dokumentation & 1 \\ \hline
  60.120 +01.03.2011 & Erstellen des Protokolls & 2 \\ \hline
  60.121 +08.03.2011 & Besprechung zur Doku und zur Schnittstelle zu Isabelle-Pure & 1 \\ \hline
  60.122 +17.03.2011 & Dokumentation schreiben & 2 \\ \hline
  60.123 +19.03.2011 & Dokumentation schreiben & 3 \\ \hline
  60.124 +24.04.2011 & Dokumentation schreiben & 2 \\ \hline
  60.125 +25.04.2011 & Dokumentation schreiben & 4 \\ \hline
  60.126 +27.04.2011 & Dokumentation schreiben & 2 \\ \hline
  60.127 +28.04.2011 & Dokumentation: Fertigstellen der ersten Version & 3 \\ \hline \hline
  60.128 + & Anzahl der Einheiten & 20 \\
  60.129 +\hline
  60.130 +\end{tabular}
  60.131 +
  60.132 +\section{Pr\"asentation der Arbeit im IST-Seminar: beendet am 21.06.2011}
  60.133 +\begin{itemize}
  60.134 +\item Pr\"asentation fertiggestellt: beendet am 19.06.2011
  60.135 +\item Pr\"asentation: abgehalten am 21.06.2011
  60.136 +\end{itemize}
  60.137 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  60.138 +\hline
  60.139 +Datum & T\"atigkeit & Einheiten \\ \hline
  60.140 +06.06.2011 & Planung der Pr\"asentation & 2 \\ \hline
  60.141 +16.06.2011 & Verfassen der Pr\"asentation & 2 \\ \hline
  60.142 +18.06.2011 & Verfassen der Pr\"asentation & 3 \\ \hline
  60.143 +19.06.2011 & Pr\"asentation: Feinschliff & 2 \\ \hline
  60.144 +20.06.2011 & Vorbereiten der Pr\"asentation& 3 \\ \hline
  60.145 +21.06.2011 & Abhaltung und nachfolgende Diskussion & 1 \\ \hline \hline
  60.146 + & Anzahl der Einheiten & 13 \\
  60.147 + \hline
  60.148 +\end{tabular}
  60.149 +
  60.150 +\chapter{Filestruktur Isabelle}
  60.151 +\section{jar-Packete}
  60.152 +\textbf{----- for "isabelle jedit \&"; contained in Isabelle\_bundle} \\
  60.153 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jedit.jar \\
  60.154 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/LatestVersion.jar \\
  60.155 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/SideKick.jar \\
  60.156 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Console.jar  \\
  60.157 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Pure.jar  \\
  60.158 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Isac.jar \\
  60.159 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-compiler.jar \\
  60.160 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Isabelle-jEdit.jar \\
  60.161 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/cobra.jar \\
  60.162 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/js.jar \\
  60.163 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Hyperlinks.jar \\
  60.164 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-swing.jar \\
  60.165 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-library.jar \\
  60.166 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/QuickNotepad.jar \\
  60.167 +./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/ErrorList.jar \\
  60.168 +\textbf{----- scala system; contained in Isabelle\_bundle} \\
  60.169 +./contrib/scala-2.8.1.final/misc/sbaz/scala-bazaars.jar \\
  60.170 +./contrib/scala-2.8.1.final/misc/sbaz/sbaz-tests.jar \\
  60.171 +./contrib/scala-2.8.1.final/misc/scala-devel/plugins/continuations.jar \\
  60.172 +./contrib/scala-2.8.1.final/lib/scala-compiler.jar \\
  60.173 +./contrib/scala-2.8.1.final/lib/scalap.jar \\
  60.174 +./contrib/scala-2.8.1.final/lib/scala-swing.jar \\
  60.175 +./contrib/scala-2.8.1.final/lib/scala-library.jar \\
  60.176 +./contrib/scala-2.8.1.final/lib/jline.jar \\
  60.177 +./contrib/scala-2.8.1.final/lib/scala-dbc.jar \\
  60.178 +./contrib/scala-2.8.1.final/src/scala-library-src.jar \\
  60.179 +./contrib/scala-2.8.1.final/src/scala-swing-src.jar \\
  60.180 +./contrib/scala-2.8.1.final/src/scala-compiler-src.jar \\
  60.181 +./contrib/scala-2.8.1.final/src/scala-dbc-src.jar \\
  60.182 +./contrib/scala-2.8.1.final/src/sbaz-src.jar \\
  60.183 +\textbf{----- Isars entry to SML from Scala-layer; } \\
  60.184 +\textit{created according to 4.3.\#3 }\\
  60.185 +./lib/classes/isabelle-scala.jar  \\
  60.186 +./lib/classes/Pure.jar \\\\
  60.187 +\textit{\textbf{===== all below for NetBeans}} \\\\
  60.188 +\textbf{----- standard Isabelle, started by $<RUN>$ in NetBeans} \\
  60.189 +      \textit{description in 2.2.2} \\
  60.190 +./src/Tools/jEdit/dist/jars/jedit.jar \\
  60.191 +./src/Tools/jEdit/dist/jars/SideKick.jar \\
  60.192 +./src/Tools/jEdit/dist/jars/Console.jar \\
  60.193 +./src/Tools/jEdit/dist/jars/Pure.jar \\
  60.194 +./src/Tools/jEdit/dist/jars/scala-compiler.jar \\
  60.195 +./src/Tools/jEdit/dist/jars/Isabelle-jEdit.jar \\
  60.196 +./src/Tools/jEdit/dist/jars/cobra.jar \\
  60.197 +./src/Tools/jEdit/dist/jars/js.jar \\
  60.198 +./src/Tools/jEdit/dist/jars/Hyperlinks.jar \\
  60.199 +./src/Tools/jEdit/dist/jars/scala-swing.jar \\
  60.200 +./src/Tools/jEdit/dist/jars/scala-library.jar \\
  60.201 +./src/Tools/jEdit/dist/jars/ErrorList.jar \\
  60.202 +\textbf{----- source of jEdit, required for $<DEBUG>$ in NetBeans; \\}
  60.203 +      adapted from NetBeans' webpages, \\
  60.204 +      \textit{description in 2.2.3.\#5} \\
  60.205 +./src/Tools/jEditC/contrib/jEdit/build/jars/SideKick.jar \\
  60.206 +./src/Tools/jEditC/contrib/jEdit/build/jars/Console.jar \\
  60.207 +./src/Tools/jEditC/contrib/jEdit/build/jars/Pure.jar \\
  60.208 +./src/Tools/jEditC/contrib/jEdit/build/jars/Isac.jar \\
  60.209 +./src/Tools/jEditC/contrib/jEdit/build/jars/QuickNPScala.jar \\
  60.210 +./src/Tools/jEditC/contrib/jEdit/build/jars/scala-compiler.jar \\
  60.211 +./src/Tools/jEditC/contrib/jEdit/build/jars/Isabelle-jEdit.jar \\
  60.212 +./src/Tools/jEditC/contrib/jEdit/build/jars/cobra.jar \\
  60.213 +./src/Tools/jEditC/contrib/jEdit/build/jars/js.jar \\
  60.214 +./src/Tools/jEditC/contrib/jEdit/build/jars/Hyperlinks.jar \\
  60.215 +./src/Tools/jEditC/contrib/jEdit/build/jars/scala-swing.jar \\
  60.216 +./src/Tools/jEditC/contrib/jEdit/build/jars/scala-library.jar \\
  60.217 +./src/Tools/jEditC/contrib/jEdit/build/jars/ErrorList.jar \\
  60.218 +./src/Tools/jEditC/contrib/jEdit/build/jEdit.jar \\
  60.219 +\textbf{----- demo plugin, started by $<RUN>$ in NetBeans \\}
  60.220 +      \textit{description in 2.2.3.\#4} \\
  60.221 +./src/Tools/jEditC/dist/jars/SideKick.jar \\
  60.222 +./src/Tools/jEditC/dist/jars/Console.jar \\
  60.223 +./src/Tools/jEditC/dist/jars/Pure.jar \\
  60.224 +./src/Tools/jEditC/dist/jars/Isac.jar \\
  60.225 +./src/Tools/jEditC/dist/jars/scala-compiler.jar \\
  60.226 +./src/Tools/jEditC/dist/jars/cobra.jar \\
  60.227 +./src/Tools/jEditC/dist/jars/js.jar \\
  60.228 +./src/Tools/jEditC/dist/jars/Hyperlinks.jar \\
  60.229 +./src/Tools/jEditC/dist/jars/scala-swing.jar \\
  60.230 +./src/Tools/jEditC/dist/jars/scala-library.jar \\
  60.231 +./src/Tools/jEditC/dist/jars/ErrorList.jar \\
  60.232 +
  60.233 +\section{Scala-Files: Isabelle-Pure}
  60.234 +\textbf{General:}\\
  60.235 +./src/Pure/General/xml.scala\\
  60.236 +./src/Pure/General/linear\_set.scala\\
  60.237 +./src/Pure/General/symbol.scala\\
  60.238 +./src/Pure/General/exn.scala\\
  60.239 +./src/Pure/General/position.scala\\
  60.240 +./src/Pure/General/scan.scala\\
  60.241 +./src/Pure/General/xml\_data.scala\\
  60.242 +./src/Pure/General/yxml.scala\\
  60.243 +./src/Pure/General/markup.scala\\
  60.244 +./src/Pure/General/sha1.scala\\
  60.245 +./src/Pure/General/timing.scala\\
  60.246 +./src/Pure/General/pretty.scala\\
  60.247 +\textbf{Concurent:}\\
  60.248 +./src/Pure/Concurrent/volatile.scala\\
  60.249 +./src/Pure/Concurrent/future.scala\\
  60.250 +./src/Pure/Concurrent/simple\_thread.scala\\
  60.251 +\textbf{Thy:}\\
  60.252 +./src/Pure/Thy/html.scala\\
  60.253 +./src/Pure/Thy/completion.scala\\
  60.254 +./src/Pure/Thy/thy\_header.scala\\
  60.255 +./src/Pure/Thy/thy\_syntax.scala\\
  60.256 +./src/Pure/Isac/isac.scala\\
  60.257 +./src/Pure/library.scala\\
  60.258 +\textbf{Isar:}\\
  60.259 +./src/Pure/Isar/keyword.scala\\
  60.260 +./src/Pure/Isar/outer\_syntax.scala\\
  60.261 +./src/Pure/Isar/token.scala\\
  60.262 +./src/Pure/Isar/parse.scala\\
  60.263 +\textbf{Isac:}\\
  60.264 +\textit{./src/Pure/Isac/isac.scala}\\
  60.265 +\textbf{System:}\\
  60.266 +./src/Pure/System/gui\_setup.scala\\
  60.267 +./src/Pure/System/isabelle\_system.scala\\
  60.268 +./src/Pure/System/swing\_thread.scala\\
  60.269 +./src/Pure/System/download.scala\\
  60.270 +./src/Pure/System/session\_manager.scala\\
  60.271 +./src/Pure/System/standard\_system.scala\\
  60.272 +./src/Pure/System/isabelle\_syntax.scala\\
  60.273 +./src/Pure/System/session.scala\\
  60.274 +./src/Pure/System/platform.scala\\
  60.275 +./src/Pure/System/cygwin.scala\\
  60.276 +./src/Pure/System/event\_bus.scala\\
  60.277 +./src/Pure/System/isabelle\_process.scala\\
  60.278 +\textbf{PIDE}\\
  60.279 +./src/Pure/PIDE/document.scala\\
  60.280 +./src/Pure/PIDE/markup\_tree.scala\\
  60.281 +./src/Pure/PIDE/text.scala\\
  60.282 +./src/Pure/PIDE/command.scala\\
  60.283 +./src/Pure/PIDE/isar\_document.scala \\
  60.284 +
  60.285 +
  60.286 +\chapter{Das Skript \textit{isac\_jedit}}
  60.287 +
  60.288 +\textit{
  60.289 +\#$!$/usr/bin/env bash
  60.290 +cd src/Pure/ \\
  60.291 +echo "Building Pure.jar" \\
  60.292 +../../bin/isabelle env ./build-jars \\
  60.293 +echo "copying Pure.jar to contrib/jedit" \\
  60.294 +cp ../../lib/classes/Pure.jar ../../contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/ \\
  60.295 +echo "Building Isac.jar" \\
  60.296 +cd /home/gadei/isac/isa/src/Tools/jEditC \\
  60.297 +ant jar \\
  60.298 +cd /home/gadei/isac/isa/src/Pure/ \\
  60.299 +echo "copying Isac.jar to contrib/jedit" \\
  60.300 +cp ../Tools/jEditC/contrib/jEdit/build/jars/Isac.jar ../../contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/ \\
  60.301 +echo "Done!" \\
  60.302 +}
  60.303 +
  60.304 +\chapter{Filestruktur f\"ur die Entwicklung des SD-Plugins}\label{files-SD-plugin}
  60.305 +
  60.306 +\textbf{src/Tools/jEditC/}build.xml\\
  60.307 +\textbf{src/Tools/jEditC/}makedist\\
  60.308 +\textbf{src/Tools/jEditC/}manifest.mf\\
  60.309 +\textbf{src/Tools/jEditC/}README\_BUILD\\
  60.310 +\textbf{src/Tools/jEditC/build/*}\\
  60.311 +\textbf{src/Tools/jEditC/contrib/*}\\
  60.312 +\textbf{src/Tools/jEditC/dist/*}\\
  60.313 +\textbf{src/Tools/jEditC/plugin/}build.xml\\
  60.314 +\textbf{src/Tools/jEditC/plugin/}changes40.txt\\
  60.315 +\textbf{src/Tools/jEditC/plugin/}changes42.txt\\
  60.316 +\textbf{src/Tools/jEditC/plugin/}description.html\\
  60.317 +\textbf{src/Tools/jEditC/plugin/}testSDActions.java\\
  60.318 +\textbf{src/Tools/jEditC/plugin/}testSD.iml\\
  60.319 +\textbf{src/Tools/jEditC/plugin/}testSD.java\\
  60.320 +\textbf{src/Tools/jEditC/plugin/}testSDOptionPane.java\\
  60.321 +\textbf{src/Tools/jEditC/plugin/}testSDPlugin.java\\
  60.322 +\textbf{src/Tools/jEditC/plugin/}testSDTextArea.java\\
  60.323 +\textbf{src/Tools/jEditC/plugin/}testSDToolPanel.java\\
  60.324 +\textbf{src/Tools/jEditC/plugin/}plugin\\
  60.325 +\textbf{src/Tools/jEditC/plugin/}README.txt\\
  60.326 +\textbf{src/Tools/jEditC/nbproject/*}\\
  60.327 +\textbf{src/Tools/jEditC/src/}actions.xml\\
  60.328 +\textbf{src/Tools/jEditC/src/}changes40.txt\\
  60.329 +\textbf{src/Tools/jEditC/src/}changes42.txt\\
  60.330 +\textbf{src/Tools/jEditC/src/}description.html\\
  60.331 +\textbf{src/Tools/jEditC/src/}dockables.xml\\
  60.332 +\textbf{src/Tools/jEditC/src/}testSDActions.scala\\
  60.333 +\textbf{src/Tools/jEditC/src/}testSD.iml\\
  60.334 +\textbf{src/Tools/jEditC/src/}testSDOptionPane.scala\\
  60.335 +\textbf{src/Tools/jEditC/src/}testSDPlugin.scala\\
  60.336 +\textbf{src/Tools/jEditC/src/}testSD.props\\
  60.337 +\textbf{src/Tools/jEditC/src/}testSD.scala\\
  60.338 +\textbf{src/Tools/jEditC/src/}testSDTextArea.scala\\
  60.339 +\textbf{src/Tools/jEditC/src/}testSDToolPanel.scala\\
  60.340 +\textbf{src/Tools/jEditC/src/}manifest.mf\\
  60.341 +\textbf{src/Tools/jEditC/src/}README.txt\\
  60.342 +\textbf{src/Tools/jEditC/src/}users-guide.xml \\
  60.343 \ No newline at end of file
    61.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-biblio.tex	Tue Sep 17 09:50:52 2013 +0200
    61.3 @@ -0,0 +1,15 @@
    61.4 +{
    61.5 +
    61.6 +%\bibliographystyle{plain}
    61.7 +\bibliographystyle{alpha}
    61.8 +
    61.9 +
   61.10 +% the names of the bib files used
   61.11 +
   61.12 +\phantomsection
   61.13 +\addcontentsline{toc}{chapter}{Bibliography}
   61.14 +\bibliography{master_thesis.bib} 
   61.15 +
   61.16 +}
   61.17 +
   61.18 +
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-conclusion.tex	Tue Sep 17 09:50:52 2013 +0200
    62.3 @@ -0,0 +1,2 @@
    62.4 +\chapter{Concluding Remarks}
    62.5 +...
    62.6 \ No newline at end of file
    63.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-contents.tex	Tue Sep 17 09:50:52 2013 +0200
    63.3 @@ -0,0 +1,25 @@
    63.4 +{
    63.5 +\setlength{\parskip}{3pt plus 3pt minus 3pt} % compact table of contents
    63.6 +
    63.7 +\tableofcontents
    63.8 +
    63.9 +\listoffigures
   63.10 +%\addcontentsline{toc}{chapter}{List of Figures}
   63.11 +
   63.12 +{
   63.13 +% format sections to chapters for this scope
   63.14 +\titleformat{\section}{\bf\huge}{\thesection\quad}{0em}{}
   63.15 +\titlespacing*{\section}{0em}{-2em}{1.5em}
   63.16 +\def\chapter*#1{\section*{#1}}
   63.17 +
   63.18 +%\vspace*{20mm}
   63.19 +%\listoftables
   63.20 +%%\addcontentsline{toc}{chapter}{List of Tables}
   63.21 +%
   63.22 +%\vspace*{20mm}
   63.23 +%\lstlistoflistings
   63.24 +%%\addcontentsline{toc}{chapter}{List of Listings}
   63.25 +
   63.26 +}
   63.27 +}
   63.28 +
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-intro.tex	Tue Sep 17 09:50:52 2013 +0200
    64.3 @@ -0,0 +1,9 @@
    64.4 +\chapter{Einf\"{u}hrung}
    64.5 +Europa ist bei Computer Theorem Provern (CTP) weltweit f\"uhrend, die zwei prominenten Prover sind Coq \cite{coq1999} und Isabelle \cite{Paulson:Isa94}.
    64.6 +Im Zuge der Weiterentwicklung der Informatik als Ingenieurs-Disziplin werden auch Anwendungsgebiete zunehmend mathematisiert \cite{db:dom-eng}, was wiederum CTP vermehrt auf den Plan ruft.
    64.7 +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.
    64.8 +
    64.9 +Nachdem CTP nun unaufhaltsam in Entwicklungs-Umgebungen von Software- Ingenieuren vorzudringen beginnen (siehe zum Beispiel \cite{aichernig:uni-iist-02,aichernig:mut-test}),% \cite{wolff10-boogie}, 
   64.10 +stellt sich die Herausforderung neu, Frontends f\"ur die t\"agliche Entwicklungsarbeit mit integrierten CTP zu entwerfen. Einer der Vorschl\"age, wie Theorem Prover mit Front-ends zu verbinden w\"are, findet sich in \cite{Aspinall:2007:FIP:1420412.1420429}. Isabelle geht einen anderen Weg, indem es sich aktuellen technischen Herausforderungen stellt \cite{makarius:isa-scala-jedit}: 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.
   64.11 +
   64.12 +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) \cite{back-grundy-wright-98} sollen auf jEdit und Isabelle aufgesetzt werden. Die Bachelorarbeit liefert die Machbarkeits-Studie f\"ur diesen Schritt.
    65.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-macros.tex	Tue Sep 17 09:50:52 2013 +0200
    65.3 @@ -0,0 +1,67 @@
    65.4 +% macros and definitions
    65.5 +
    65.6 +\newcommand\fname{\begingroup \smaller\urlstyle{tt}\Url}
    65.7 +
    65.8 +\newcommand\vname{\begingroup \smaller\urlstyle{tt}\Url}
    65.9 +
   65.10 +
   65.11 +% for class names, define our own url style
   65.12 +
   65.13 +\makeatletter  % protect @ names
   65.14 +
   65.15 +% \url@letstyle: New URL sty to premit break at any letters.
   65.16 +% Based on \url@ttstyle
   65.17 +
   65.18 +\def\Url@letdo{% style assignments for tt fonts or T1 encoding
   65.19 +\def\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l%
   65.20 +               \do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x%
   65.21 +               \do\y\do\z%
   65.22 +               \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L%
   65.23 +               \do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
   65.24 +               \do\Y\do\Z%
   65.25 +}%
   65.26 +\def\UrlBigBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\%\do\;\do\>\do\]%
   65.27 + \do\)\do\,\do\?\do\'\do\+\do\=\do\#\do\:\do@url@hyp}%
   65.28 +\def\UrlNoBreaks{\do\(\do\[\do\{\do\<}% (unnecessary)
   65.29 +\def\UrlSpecials{\do\ {\ }}%
   65.30 +\def\UrlOrds{\do\*\do\-\do\~}% any ordinary characters that aren't usually
   65.31 +\Urlmuskip = 0mu plus 1mu%
   65.32 +}
   65.33 +
   65.34 +\def\url@letstyle{%
   65.35 +\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\sffamily}}\Url@letdo
   65.36 +}
   65.37 +
   65.38 +\makeatother  % unprotect @ names
   65.39 +
   65.40 +
   65.41 +\newcommand\cname{\begingroup \smaller\urlstyle{let}\Url}
   65.42 +
   65.43 +
   65.44 +\newcommand{\imgcredit}[1]
   65.45 +{%
   65.46 +\small
   65.47 +[#1]
   65.48 +}
   65.49 +
   65.50 +
   65.51 +\newcommand{\chapquote}[2]
   65.52 +{%
   65.53 +\begin{quote}
   65.54 +\emph{%
   65.55 +``#1''%
   65.56 +}%
   65.57 +\begin{flushright}
   65.58 +{\scriptsize \sffamily [#2]}%
   65.59 +\end{flushright}
   65.60 +\end{quote}
   65.61 +}
   65.62 +
   65.63 +
   65.64 +% \urlfootnote{url}{day}{month}{year}
   65.65 +\newcommand{\murlfootnote}[4]{\footnote{\url{{#1}} (last visit {#4}-{#3}-{#2})}}
   65.66 +\newcommand{\murlfootnotebreak}[4]{\footnote{\url{{#1}}\\ \hspace*{6mm}(last visit {#4}-{#3}-{#2})}}
   65.67 +
   65.68 +% change margin command
   65.69 +\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
   65.70 +\let\endchangemargin=\endlist
   65.71 \ No newline at end of file
    66.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-preamble.tex	Tue Sep 17 09:50:52 2013 +0200
    66.3 @@ -0,0 +1,183 @@
    66.4 +\usepackage[          % set page and margin sizes
    66.5 +  a4paper,
    66.6 +  twoside=false,
    66.7 +  top=10mm,
    66.8 +  bottom=10mm,
    66.9 +  left=20mm,
   66.10 +  right=20mm,
   66.11 +  bindingoffset=10mm,
   66.12 +  head=10mm,
   66.13 +  foot=10mm,
   66.14 +  headsep=10mm,
   66.15 +  footskip=10mm,
   66.16 +  includeheadfoot,
   66.17 +]{geometry}
   66.18 +
   66.19 +\usepackage{times}                   % use PostScript fonts
   66.20 +%\usepackage{ngerman}                % causes ! Illegal parameter number in definition of \grmn@originalTeX. <to be read again> \penalty l.53 \selectlanguage{austrian}
   66.21 +\usepackage{relsize}                 % relative font sizes \smaller \larger
   66.22 +
   66.23 +\usepackage[iso-8859-1]{inputenx}    % so can use Umlaut chars  �, �
   66.24 +
   66.25 +\usepackage{textcomp}                % symbols such as \texttimes and \texteuro
   66.26 +
   66.27 +\usepackage[bf]{titlesec}
   66.28 +% format chapter captions (vorher \Huge)
   66.29 +\titleformat{\chapter}{\bf\huge}{\thechapter\quad}{0em}{}
   66.30 +\titlespacing*{\chapter}{0em}{-2em}{1.5em}
   66.31 +
   66.32 +% use caption and subfig (caption2 and subfigure are now obsolete)
   66.33 +\usepackage[
   66.34 +  position=bottom,
   66.35 +  margin=1cm,
   66.36 +  font=small,
   66.37 +  labelfont={bf,sf},
   66.38 +  format=hang,
   66.39 +  indention=0mm,
   66.40 +]{caption,subfig}
   66.41 +
   66.42 +\captionsetup[subfigure]{
   66.43 +  margin=0pt,
   66.44 +  parskip=0pt,
   66.45 +  hangindent=0pt,
   66.46 +  indention=0pt,
   66.47 +  singlelinecheck=true,
   66.48 +}
   66.49 +
   66.50 +
   66.51 +
   66.52 +% fancyhdr to make nice headers and footers
   66.53 +% and deal with long chapter names
   66.54 +
   66.55 +\usepackage{fancyhdr}         % headers and footers
   66.56 +\pagestyle{fancy}             % must call to set defaults before redefining
   66.57 +
   66.58 +\renewcommand{\headrulewidth}{0mm}
   66.59 +\renewcommand{\footrulewidth}{0mm}
   66.60 +\fancyhf{}
   66.61 +
   66.62 +\fancyhead[R]{\thepage}
   66.63 +
   66.64 +\fancyhead[L]{
   66.65 +  \parbox[t]{0.8\textwidth}{\nouppercase{\leftmark}}
   66.66 +}
   66.67 +
   66.68 +
   66.69 +% \usepackage{tabularx}                 % for better tables
   66.70 +\usepackage{multirow}
   66.71 +\usepackage{listings}                 % for listings of source code
   66.72 +\usepackage{amsmath}
   66.73 +
   66.74 +
   66.75 +\usepackage[austrian,english]{babel}  % load babel *before* natbib or jurabib
   66.76 +
   66.77 +
   66.78 +\usepackage[square]{natbib}         % natbib but with my own knat.bst
   66.79 +                                    % made with the custom-bib package
   66.80 +
   66.81 +\usepackage{url}
   66.82 +\def\UrlFont{\small\ttfamily}
   66.83 +
   66.84 +\usepackage{latexsym}
   66.85 +
   66.86 +\usepackage{color}
   66.87 +\definecolor{lightgrey}{gray}{0.8}
   66.88 +% \definecolor{darkgreen}{rgb}{0,0.2,0}
   66.89 +% \definecolor{darkblue}{rgb}{0,0,0.2}
   66.90 +% \definecolor{darkred}{rgb}{0.2,0,0}
   66.91 +
   66.92 +
   66.93 +
   66.94 +\usepackage{ifpdf}
   66.95 +
   66.96 +%begin{latexonly}
   66.97 +\ifpdf
   66.98 +  % pdflatex
   66.99 +  \usepackage[pdftex]{graphicx}
  66.100 +  \DeclareGraphicsExtensions{.pdf,.jpg,.png}
  66.101 +  \pdfcompresslevel=9
  66.102 +  \pdfpageheight=297mm
  66.103 +  \pdfpagewidth=210mm
  66.104 +  \usepackage{rotating}				% sidewaystable
  66.105 +  \usepackage[         % hyperref should be last package loaded
  66.106 +    pdftex,
  66.107 +    pdftitle={Automating Test Case Generation from Transition Systems via Symbolic Execution and SAT Solving},
  66.108 +    pdfsubject={Master's Thesis},
  66.109 +    pdfauthor={Elisabeth Joebstl},
  66.110 +    pdfkeywords={Model-Based Testing, Conformance Testing, Automated Test Case Generation, Input Output Symbolic Transition Systems, Symbolic Execution, SMT Solving},
  66.111 +    bookmarks,
  66.112 +    bookmarksnumbered,
  66.113 +    linktocpage,
  66.114 +    pagebackref,
  66.115 +    colorlinks,
  66.116 +    linkcolor=black,
  66.117 +    anchorcolor=black,
  66.118 +    citecolor=black,
  66.119 +    urlcolor=black,
  66.120 +    pdfview={FitH},
  66.121 +    pdfstartview={Fit},
  66.122 +    pdfpagemode=UseOutlines,       % open bookmarks in Acrobat
  66.123 +    plainpages=false,              % avoids duplicate page number problem
  66.124 +    pdfpagelabels,                 % avoids duplicate page number problem
  66.125 +  ]{hyperref}
  66.126 +
  66.127 +  \renewcommand*{\backref}[1]{}
  66.128 +  \renewcommand*{\backrefalt}[4]{
  66.129 +  \ifcase #1
  66.130 +  (Not cited.)
  66.131 +  \or
  66.132 +  (Cited on page~#2.)
  66.133 +  \else
  66.134 +  (Cited on pages~#2.)
  66.135 +  \fi
  66.136 +  }
  66.137 +
  66.138 +  \renewcommand*{\backrefsep}{, }
  66.139 +  \renewcommand*{\backreftwosep}{ and~}
  66.140 +  \renewcommand*{\backreflastsep}{ and~}
  66.141 +
  66.142 +\else
  66.143 +  % latex
  66.144 +  \usepackage{rotating}				% sidewaystable
  66.145 +  \usepackage{graphicx}
  66.146 +  \DeclareGraphicsExtensions{.eps}
  66.147 +\fi
  66.148 +%end{latexonly}
  66.149 +
  66.150 +
  66.151 +% \includeonly{intro,biblio}   % selective inclusion
  66.152 +
  66.153 +
  66.154 +
  66.155 +\newcommand{\halfh}{9.5cm}        % height of figures for 2 per page
  66.156 +\newcommand{\thirdh}{6cm}         % height of figures for 3 per page
  66.157 +
  66.158 +
  66.159 +\setlength{\parskip}{3pt plus 1pt minus 0pt}  % vert. space before a paragraph
  66.160 +
  66.161 +
  66.162 +\setcounter{tocdepth}{2}        % lowest section level entered in ToC % TODO FIXXME: wieder auf 1 zurcksetzen?
  66.163 +\setcounter{secnumdepth}{2}     % lowest section level still numbered
  66.164 +
  66.165 +
  66.166 +\input{thesis-macros}
  66.167 +
  66.168 +
  66.169 +% Reduce vertical distance between items
  66.170 +% itemize
  66.171 +\let\origitemize\itemize
  66.172 +\def\itemize{\origitemize\itemsep0pt}
  66.173 +%enumerate
  66.174 +\let\origenumerate\enumerate
  66.175 +\def\enumerate{\origenumerate\itemsep0pt}
  66.176 +
  66.177 +
  66.178 +% FIXXME: bessere Positionierung der Graphiken
  66.179 +%\setcounter{totalnumber}{8}
  66.180 +%\setcounter{topnumber}{5}
  66.181 +%\setcounter{bottomnumber}{5}
  66.182 +
  66.183 +%\renewcommand{\topfraction}{0.999}
  66.184 +%\renewcommand{\bottomfraction}{0.999}
  66.185 +%\renewcommand{\textfraction}{0.0005}
  66.186 +
    67.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    67.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis-title.tex	Tue Sep 17 09:50:52 2013 +0200
    67.3 @@ -0,0 +1,205 @@
    67.4 +% --- English Title Page ------------------------------------------------
    67.5 +\begin{titlepage}
    67.6 +\begin{center}
    67.7 +\vspace*{8mm}
    67.8 +{\LARGE Bachelor's Thesis}\\
    67.9 +
   67.10 +\vspace{16mm}
   67.11 +
   67.12 +{\huge \bf Userinterfaces for Computer Theorem Provers\\
   67.13 +	Feasibility Study in the \isac-Projekt\\}
   67.14 +
   67.15 +\vspace{16mm}
   67.16 +
   67.17 +{\LARGE Marco Steger\textsuperscript{1}}\\
   67.18 +
   67.19 +\vspace{16mm}
   67.20 +
   67.21 +{\Large
   67.22 +Institute for Software Technology (IST)\\
   67.23 +Graz University of Technology\\
   67.24 +A-8010 Graz, Austria\\}
   67.25 +
   67.26 +\vspace{16mm}
   67.27 +
   67.28 +%TODO TU - figure; Line 26, 76
   67.29 +%\begin{figure}[!ht]
   67.30 +%\centerline{\includegraphics[width=4cm,keepaspectratio=true]{fig/tug}}
   67.31 +%\end{figure}
   67.32 +
   67.33 +\vspace{16mm}
   67.34 +
   67.35 +{\large
   67.36 +\begin{tabular}{ll}
   67.37 +Advisor:    & Ass.Prof. Dipl.-Ing. Dr.techn.\ Bernhard Aichernig\\[0.5ex]
   67.38 +%TODO Aichernig????
   67.39 +Co-Advisor: & Dr.techn.\ Walther Neuper
   67.40 +\end{tabular}}
   67.41 +
   67.42 +\vfill
   67.43 +{\large Graz, 30.06.2011}
   67.44 +\vspace{15mm}
   67.45 +\end{center}
   67.46 +
   67.47 +\noindent
   67.48 +\underline{\hspace*{3cm}}\\
   67.49 +{\footnotesize
   67.50 +\textsuperscript{1} E-mail: m.steger@student.tugraz.at\\
   67.51 +\copyright ~ Copyright 2011 by the author}
   67.52 +
   67.53 +
   67.54 +
   67.55 +% --- German Title Page -------------------------------------------------
   67.56 +\selectlanguage{austrian}
   67.57 +
   67.58 +\newpage
   67.59 +\begin{center}
   67.60 +\vspace*{8mm}
   67.61 +{\LARGE Bachelorarbeit}\\
   67.62 +
   67.63 +\vspace{16mm}
   67.64 +
   67.65 +{\huge \bf Userinterfaces f\"ur Computer Theorem Prover\\
   67.66 +	Machbarkeits-Studie im \isac-Projekt\\}
   67.67 +
   67.68 +\vspace{16mm}
   67.69 +
   67.70 +{\LARGE Marco Steger\textsuperscript{1}}\\
   67.71 +
   67.72 +\vspace{16mm}
   67.73 +
   67.74 +{\Large
   67.75 +Institut f\"ur Softwaretechnologie (IST)\\
   67.76 +Technische Universit\"at Graz\\
   67.77 +A-8010 Graz\\}
   67.78 +
   67.79 +\vspace{16mm}
   67.80 +
   67.81 +%\begin{figure}[!ht]
   67.82 +%\centerline{\includegraphics[width=4cm,keepaspectratio=true]{fig/tug}}
   67.83 +%\end{figure}
   67.84 +
   67.85 +\vspace{16mm}
   67.86 +
   67.87 +%TODO Aichernig????
   67.88 +{\large
   67.89 +\begin{tabular}{ll}
   67.90 +Gutachter:	& Ass.Prof. Dipl.-Ing. Dr.techn.\ Bernhard Aichernig\\[0.5ex]
   67.91 +Mitbetreuer:	& Dr.techn.\ Walther Neuper
   67.92 +\end{tabular}}
   67.93 +
   67.94 +\vspace{16mm}
   67.95 +{\large Graz, 30.05.2011}
   67.96 +
   67.97 +\vfill
   67.98 +Diese Arbeit ist in deutscher Sprache verfasst.
   67.99 +\end{center}
  67.100 +
  67.101 +\noindent
  67.102 +\underline{\hspace*{3cm}}\\
  67.103 +{\footnotesize
  67.104 +\textsuperscript{1} E-Mail: m.steger@student.tugraz.at\\
  67.105 +\copyright ~ Copyright 2011, Marco Steger}
  67.106 +\end{titlepage}
  67.107 +
  67.108 +\selectlanguage{english}
  67.109 +
  67.110 +
  67.111 +% --- English Abstract --------------------------------------------------
  67.112 +\pagestyle{plain}
  67.113 +\pagenumbering{roman}
  67.114 +\newpage
  67.115 +
  67.116 +\vspace*{25mm}
  67.117 +
  67.118 +\begin{changemargin}{15mm}{15mm}
  67.119 +\begin{center}
  67.120 +{\Large\bfseries Abstract}
  67.121 +\end{center}
  67.122 +\vspace*{7mm}
  67.123 +
  67.124 +The computer theorem prover Isabelle switches from a user interface for expert users to a user interface which is more powerful and which serves integration of Isabelle into other tools for software engineers.
  67.125 +
  67.126 +This bachelor thesis in ``Telematik'' introduces the specific components underlying Isabelle's new user interface, the scala-layer for asyncronous editing of proof documents, the Java-based editor jEdit together with the respective plugin mechanisms; and the thesis documents the current organization of these components in Isabelle and sets up the whole system, Isabelle, Scala and jEdit in the IDE NetBeans copying the configuration of the Isabelle developer team. This setup is explored in the implementation of a test-plugin, and the experiences are documented in detail.
  67.127 +
  67.128 +Thus the prerequisites are given for cooperation in the further development of Isabelle's future front-end and respective integration into development tools like test case generators for software engineers.
  67.129 +
  67.130 +\vspace{5mm}
  67.131 +\noindent
  67.132 +{\large\bfseries Keywords:}
  67.133 +computer theorem prover, Isabelle, user-interface, jEdit, plugin, Scala, actors, asynconous communication, proof document, structured derivations
  67.134 +
  67.135 +
  67.136 +
  67.137 +% --- German Abstract ---------------------------------------------------
  67.138 +\selectlanguage{austrian}
  67.139 +\newpage
  67.140 +
  67.141 +\vspace*{10mm}
  67.142 +
  67.143 +\begin{center}
  67.144 +{\Large\bfseries Kurzfassung}
  67.145 +\end{center}
  67.146 +\vspace*{2mm}
  67.147 +
  67.148 +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.
  67.149 +
  67.150 +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 setzt das gesamte System in einer integrierten Entwicklungsungebung auf. Dieses Setup wird in der Implementation eines Test-Plugins erprobt. Die Erfahrungen mit diesem Test werden ausf\"uhrlich dokumentiert.
  67.151 +
  67.152 +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.
  67.153 +
  67.154 +\vspace{5mm}
  67.155 +\noindent
  67.156 +{\large\bfseries Schlagworte:}
  67.157 +Computer Theorem Proving, Isabelle, User-Interface, jEdit, Plugin, Scala, Actors, Asyncrone Kommunikation, Beweis-Dokument, Structured Derivations
  67.158 +
  67.159 +\selectlanguage{english}
  67.160 +\end{changemargin}
  67.161 +
  67.162 +
  67.163 +% --- Pledge ------------------------------------------------------------
  67.164 +\newpage
  67.165 +\vspace*{20mm}
  67.166 +
  67.167 +\begin{center}
  67.168 +{\Large\bfseries Statutory Declaration}
  67.169 +\end{center}
  67.170 +\vspace{5mm}
  67.171 +\noindent
  67.172 +I declare that I have authored this thesis independently, that I have not used other than the declared
  67.173 +sources/resources, and that I have explicitly marked all material which has been quoted either
  67.174 +literally or by content from the used sources.
  67.175 +
  67.176 +\vspace{2cm}
  67.177 +
  67.178 +\noindent
  67.179 +\begin{tabular}{ccc}
  67.180 +\hspace*{6cm}     & \hspace*{2cm}   & \hspace*{6.7cm}\\
  67.181 +\dotfill          &                 & \dotfill\\
  67.182 +place, date       &                 & (signature)\\
  67.183 +\end{tabular}
  67.184 +
  67.185 +\vspace{35mm}
  67.186 +
  67.187 +
  67.188 +\selectlanguage{austrian}
  67.189 +
  67.190 +\begin{center}
  67.191 +{\Large\bfseries Eidesstattliche Erkl\"arung}
  67.192 +\end{center}
  67.193 +\vspace{5mm}
  67.194 +\noindent
  67.195 +Ich erkl\"are an Eides statt, dass ich die vorliegende Arbeit selbstst\"andig verfasst, andere als die
  67.196 +angegebenen Quellen/Hilfsmittel nicht benutzt, und die den benutzten Quellen w\"ortlich und inhaltlich
  67.197 +entnommenen Stellen als solche kenntlich gemacht habe.
  67.198 +
  67.199 +\vspace{2cm}
  67.200 +
  67.201 +\noindent
  67.202 +\begin{tabular}{ccc}
  67.203 +\hspace*{6cm}     & \hspace*{2cm}   & \hspace*{6.7cm}\\
  67.204 +\dotfill          &                 & \dotfill\\
  67.205 +Ort, Datum        &                 & (Unterschrift)\\
  67.206 +\end{tabular}
  67.207 +
  67.208 +\selectlanguage{english}
    68.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    68.2 +++ b/doc-isac/msteger/bakk-arbeit/thesis.tex	Tue Sep 17 09:50:52 2013 +0200
    68.3 @@ -0,0 +1,72 @@
    68.4 +\documentclass[11pt]{report}
    68.5 +%\usepackage{ngerman}
    68.6 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    68.7 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
    68.8 +
    68.9 +\include{thesis-preamble}
   68.10 +
   68.11 +\begin{document}
   68.12 +
   68.13 +\lstset{               % set parameters for listings
   68.14 +  language=,
   68.15 +  basicstyle=\small,
   68.16 +  tabsize=2,
   68.17 +  xleftmargin=2mm,
   68.18 +  xrightmargin=2mm,
   68.19 +  float=htb,
   68.20 +  frame=shadowbox,
   68.21 +  framexleftmargin=2mm,
   68.22 +  rulesepcolor=\color{lightgrey},
   68.23 +  numbers=left,
   68.24 +  numberstyle=\scriptsize,
   68.25 +  extendedchars,
   68.26 +  breaklines,
   68.27 +  showtabs=false,
   68.28 +  showspaces=false,
   68.29 +  showstringspaces=false,
   68.30 +  keywordstyle=\bfseries,
   68.31 +  identifierstyle=\ttfamily,
   68.32 +  stringstyle=,
   68.33 +  captionpos=b,
   68.34 +  abovecaptionskip=\abovecaptionskip,
   68.35 +  belowcaptionskip=\belowcaptionskip,
   68.36 +  aboveskip=\floatsep,
   68.37 +}
   68.38 +
   68.39 +
   68.40 +%\frontmatter
   68.41 +\normalsize
   68.42 +\pagestyle{empty}            % for title pages
   68.43 +
   68.44 +\pagenumbering{alph}
   68.45 +\include{thesis-title}       % Title Pages, Abstracts, Pledge
   68.46 +\include{thesis-acknowl}     % Acknowledgements
   68.47 +\include{thesis-contents}    % Table of Contents, List of Figures, List of Tables
   68.48 +
   68.49 +
   68.50 +%\mainmatter
   68.51 +\pagestyle{fancy}               % for main pages
   68.52 +\pagenumbering{arabic}          % for main pages
   68.53 +
   68.54 +\include{thesis-intro}          % Introduction
   68.55 +\include{content}
   68.56 +% \include{your main files}
   68.57 +
   68.58 +%\include{thesis-conclusion}     % Conclusion and Future Work
   68.59 +
   68.60 +
   68.61 +\appendix
   68.62 +% \noappendicestocpagenum
   68.63 +% \addappheadtotoc
   68.64 +
   68.65 +\include{thesis-appendix}      % Appendix A
   68.66 +
   68.67 +
   68.68 +%\backmatter
   68.69 +\include{thesis-biblio}      % Bibliography
   68.70 +%%%\bibliographystyle{plain}
   68.71 +%%%\bibliography{master_thesis}
   68.72 +% \include{glossary}      % Glossary
   68.73 +% \include{index}         % Index
   68.74 +
   68.75 +\end{document}
   68.76 \ No newline at end of file
    69.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    69.2 +++ b/doc-isac/msteger/bakk-plan.tex	Tue Sep 17 09:50:52 2013 +0200
    69.3 @@ -0,0 +1,141 @@
    69.4 +\documentclass{article}
    69.5 +\usepackage{a4}
    69.6 +\usepackage{times}
    69.7 +\usepackage{latexsym}
    69.8 +
    69.9 +\bibliographystyle{alpha}
   69.10 +\usepackage{graphicx}
   69.11 +
   69.12 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   69.13 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   69.14 +\def\Problem{ {\tt Problem }}
   69.15 +
   69.16 +
   69.17 +\title{Userinterfaces f\"ur Computer Theorem Prover\\
   69.18 +	Machbarkeits-Studie im Isac-Projekt
   69.19 +}
   69.20 +
   69.21 +\author{Marco Steger\\
   69.22 +Bachelorarbeit Telematik\\
   69.23 +am Institut f\"ur Softwaretechnologie\\
   69.24 +TU Graz}
   69.25 +
   69.26 +\begin{document}
   69.27 +\maketitle
   69.28 +%\newpage
   69.29 +\section{Zur Aufgabenstellung der Bachelorarbeit}\label{intro}
   69.30 +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.
   69.31 +
   69.32 +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.
   69.33 +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.
   69.34 +
   69.35 +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' sollen auf jEdit und Isabelle aufgesetzt werden. Die Bachelorarbeit liefert die Machbarkeits-Studie f\"ur diesen Schritt.
   69.36 +
   69.37 +%\newpage
   69.38 +
   69.39 +\section{Ist-Zustand zu Projektbeginn}
   69.40 +ISAC wird als Eclipse-Projekt entwickelt, das das JavaSwing-Frontend und auch die SML-Mathematik-Engine (samt einer alten Isabelle-Version) umfasst. Isabelles kommende jEdit/Scala-Technologie ist schwer in Eclipse zu integrieren. Zwei Frontends, das alte JavaSwing und das neue jEdit, st\"oren sich gegenseitig in einer einzigen Entwicklungs-Umgebung.
   69.41 +
   69.42 +Sowohl zu jEdit als auch zu Scala und NetBeans bestehen keine Erfahrungen im ISAC-Projekt. 
   69.43 +
   69.44 +\section{Planung: Soll-Zustand am Projektende}
   69.45 +ISAC ist in die Isabelle-Entwicklung integriert, die ISAC-Entwicklung l\"auft in einem updatebaren Repository von Isabelle. F\"ur das in Entwicklung befindliche jEdit-Frontend von Isabelle ist ein NetBeans-Projekt aufgesetzt.
   69.46 +Wesentliche Vorarbeiten haben die Herausforderungen gekl\"art, die sich aus der Zielsetzung ergeben: Backs 'structured derivations' \"uber das neue jEdit-GUI eingeben und von Isabelle checken lassen. 
   69.47 +
   69.48 +%\newpage
   69.49 +
   69.50 +\section{Milestones und Arbeitsprotokolle}
   69.51 +\subsection{Inhaltliche Voraussetzungen erarbeitet: am 27.09.2010} 
   69.52 +\begin{itemize}
   69.53 +\item Kenntnis der Grundlagen und Anwendung von CTP: am 03.08.2010 
   69.54 +\item Charakteristika der Programmsprache Scala: 27.09.2010
   69.55 +\item Scala Actors: am 12.08.2010
   69.56 +\end{itemize}
   69.57 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   69.58 +\hline
   69.59 +Datum & T\"atigkeit & Einheiten \\ \hline
   69.60 +12.07.2010 & Meeting: erste Besprechung und Erklärungen zu Isabelle, Isac und CTPs & 2 \\ \hline
   69.61 +15.07.2010 & Recherche über Isabelle und CTPs & 3 \\ \hline
   69.62 +20.07.2010 & Meeting: Besprechen der grundsätzlichen Vorgangsweise und Ziele & 1 \\ \hline
   69.63 +23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenhänge mit Isac abklären & 1 \\ \hline 
   69.64 +30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise über Backs 'structured derivations'; Begriffserklärung & 3 \\ \hline
   69.65 +01.08.2010 & Recherche: Buch für Scala & 2 \\ \hline
   69.66 +03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
   69.67 +05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1  \\ \hline
   69.68 +06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
   69.69 +08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
   69.70 +09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
   69.71 +12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
   69.72 +24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
   69.73 +25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
   69.74 +27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline
   69.75 + & Anzahl der Einheiten & 44 \\
   69.76 +\hline
   69.77 +\end{tabular}
   69.78 +
   69.79 +
   69.80 +\subsection{Technische Voraussetzungen hergestellt: am 02.08.2010}
   69.81 +\begin{itemize}
   69.82 +\item Isabelle installiert, Filestruktur bekannt: am 02.08.2010
   69.83 +\item Scala in NetBeans eingebunden: am 22.07.2010
   69.84 +\item Mercurial installiert und einrichten des Repositories: 19.07.2010 
   69.85 +\end{itemize}
   69.86 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
   69.87 +\hline
   69.88 +Datum & T\"atigkeit & Einheiten \\ \hline
   69.89 +19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
   69.90 +20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
   69.91 +21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
   69.92 +22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
   69.93 +23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausführen: testen & 5 \\ \hline 
   69.94 +27.07.2010 & Isabelle-jEdit-Plugin: Änderungen an der Projektstruktur & 7 \\ \hline
   69.95 +28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
   69.96 +29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
   69.97 +30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung über Erfahrungen mit Filestruktur & 4 \\ \hline
   69.98 +02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
   69.99 + & Anzahl der Einheiten & 60 \\
  69.100 +\hline
  69.101 +\end{tabular}
  69.102 +
  69.103 +\subsection{NetBeans-Projekt aufgesetzt }% am ..(*)...} 
  69.104 +\begin{itemize}
  69.105 +\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: am 02.08.2010
  69.106 +\item jEdit-Plugin: XML-Files für ISAC vorbereitet: am 22.07.2010
  69.107 +\item jEdit-Plugin: Source files geschrieben: 19.07.2010 
  69.108 +\end{itemize}
  69.109 +\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  69.110 +\hline
  69.111 +Datum & T\"atigkeit & Einheiten \\ \hline
  69.112 +10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
  69.113 +11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
  69.114 +21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
  69.115 +22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten für ISAC & 3 \\ \hline
  69.116 +24.08.2010 & Umarbeiten des Isabelle-Plugins für ISAC & 6 \\ \hline 
  69.117 +26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach Lösungen & 3 \\ \hline
  69.118 +28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
  69.119 +29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
  69.120 +30.08.2010 & Isabelle-jEdit-Plugin endlich vollständig lauffähig gebracht & 4 \\ \hline
  69.121 +01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
  69.122 +04.09.2010 & Umarbeiten des Isabelle-Plugins für ISAC & 5 \\ \hline 
  69.123 +20.09.2010 & Einrichten des Laptops für Isabelle-Isac & 4 \\ \hline 
  69.124 +22.09.2010 & Meeting: Fortschrittsbericht, kurze Einführung für Mitstreiter & 3 \\ \hline
  69.125 +
  69.126 +29.09.2010 & Neue Vorgehensweise: QuickNotepad-Plugin(QN) wird in Scala übersetzt und für ISAC entsprechend angepasst: Arbeit an den XML-Files & 4 \\ \hline 
  69.127 +30.09.2010 & QN: Start mit übersetzten der Sourcefiles & 5 \\ \hline
  69.128 +02.10.2010 & QN: Übersetzten der Sourcefiles & 6 \\ \hline
  69.129 +04.10.2010 & QN: Übersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
  69.130 +05.10.2010 & QN: QN vollständig in Scala übersetzt, testen & 2 \\ \hline \hline
  69.131 + & Anzahl der Einheiten & 71 \\
  69.132 +\hline
  69.133 +\end{tabular}
  69.134 +
  69.135 +\subsection{Experimentelle Parser implementiert}% am ..(*)...} 
  69.136 +\subsection{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}
  69.137 +%\newpage
  69.138 +
  69.139 +\section{Zusammenfassung und R\"uckblick}
  69.140 +
  69.141 +
  69.142 +%\bibliography{CTP-userinterfaces}
  69.143 +%\bibliography{bib/math-eng,bib/bk,bib/RISC_2,bib/isac,bib/pl,bib/math,bib/pl}
  69.144 +\end{document}
  69.145 \ No newline at end of file
    70.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    70.2 +++ b/doc-isac/msteger/bakk-presentation.tex	Tue Sep 17 09:50:52 2013 +0200
    70.3 @@ -0,0 +1,445 @@
    70.4 +% /usr/share/doc/latex-beamer/solutions/conference-talks/conference-ornate-20min.en.tex
    70.5 +
    70.6 +\documentclass{beamer}
    70.7 +\mode<presentation>
    70.8 +{
    70.9 +  \usetheme{Hannover}
   70.10 +  \setbeamercovered{transparent}
   70.11 +}
   70.12 +\usepackage[english]{babel}
   70.13 +\usepackage[latin1]{inputenc}
   70.14 +\usepackage{times}
   70.15 +\usepackage{ngerman}
   70.16 +\usepackage[T1]{fontenc}
   70.17 +%\usepackage{graphicx}
   70.18 +
   70.19 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   70.20 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   70.21 +
   70.22 +\title[Isabelle Frontend]
   70.23 +{Userinterfaces \\f\"ur Computer Theorem Prover,\\
   70.24 +	Machbarkeits-Studie im \isac-Projekt
   70.25 +}
   70.26 +\subtitle{Bachelorarbeit Telematik}
   70.27 +
   70.28 +\author{Marco Steger}
   70.29 +\institute{Institut f\"ur Software Technologie\\
   70.30 +  Technische Universit\"at Graz}
   70.31 +
   70.32 +\date{21.06.2011}
   70.33 +%\subject{Formal specification of math assistants}
   70.34 +% This is only inserted into the PDF information catalog
   70.35 +
   70.36 +% Delete this, if you do not want the table of contents to pop up at
   70.37 +% the beginning of each subsection:
   70.38 +\AtBeginSubsection[]
   70.39 +{
   70.40 +  \begin{frame}<beamer>
   70.41 +    \frametitle{Outline}
   70.42 +    \tableofcontents[currentsection,currentsubsection]
   70.43 +  \end{frame}
   70.44 +}
   70.45 +
   70.46 +
   70.47 +% If you wish to uncover everything in a step-wise fashion, uncomment
   70.48 +% the following command: 
   70.49 +%\beamerdefaultoverlayspecification{<+->}
   70.50 +
   70.51 +
   70.52 +\begin{document}
   70.53 +\begin{frame}
   70.54 +  \titlepage
   70.55 +\end{frame}
   70.56 +
   70.57 +\begin{frame}
   70.58 +  \frametitle{Outline}
   70.59 +  \tableofcontents
   70.60 +  % You might wish to add the option [pausesections]
   70.61 +\end{frame}
   70.62 +
   70.63 +\section[Stutus quo]{Ausgangssituation: das k\"unftige Isabelle Front-end}
   70.64 +\subsection[Isabelle]{Der Theoremprover Isabelle}
   70.65 +\begin{frame}
   70.66 +  \frametitle{Der Theoremprover Isabelle}
   70.67 +\begin{itemize}
   70.68 +\item Anwendungen von Isabelle
   70.69 +  \begin{itemize}
   70.70 +  \item Mechanisieren von Mathematik Theorien
   70.71 +    \begin{itemize}
   70.72 +    \item nat\"urliche, reelle, komplexe Zahlen, Listen, Lattices, \dots
   70.73 +    \item Gr\"obner Basen, Integral/Differential, Taylorreihen, \dots          
   70.74 +    \item High Order Logics, Logic of Computable Functions, \dots
   70.75 +    \end{itemize}
   70.76 +\pause
   70.77 +  \item Math.Grundlagen f\"ur Softwaretechnologie
   70.78 +    \begin{itemize}
   70.79 +    \item Hoare Logic, Temporal Logic of Actions, Hoare for Java
   70.80 +    \item Theory for Unix file-system security, for state spaces, \dots
   70.81 +    \item Archive of Formal Proofs {\tiny\tt http://afp.sourceforge.net}
   70.82 +    \end{itemize}
   70.83 +  \end{itemize}
   70.84 +\pause
   70.85 +\item Integration von Isabelle in Entwicklungstools
   70.86 +  \begin{itemize}
   70.87 +  \item Boogie --- Verification Condition Generator
   70.88 +  \item $\mathbf{\pi}d.e$ Projekt: Unterst\"utzung Domain-spezifischen CTPs
   70.89 +  \item Test Case Generators (TUG) ?
   70.90 +  \end{itemize}
   70.91 +\pause
   70.92 +\item Isar, die Beweissprache von Isabelle
   70.93 +  \begin{itemize}
   70.94 +  %\item Demo $\sqrt{2}\not\in{\cal R}\;\;\;$ 
   70.95 +  \item Demo 'Allgemeine Dreiecke'
   70.96 +\pause
   70.97 +\alert{Beweisteile asynchron interpretiert}
   70.98 +  \end{itemize}
   70.99 +\end{itemize}
  70.100 +\end{frame}
  70.101 +
  70.102 +\subsection[Scala-Layer]{Die Konzeption des Scala-Layers}
  70.103 +\begin{frame}\frametitle{Die Konzeption des Scala-Layers}
  70.104 +\begin{figure}
  70.105 +\begin{center}
  70.106 +\includegraphics[width=100mm]{fig-reuse-ml-scala-SD}
  70.107 +\end{center}
  70.108 +%\nocaptionrule\caption{Reuse of Isabelle/Isar's Scala API.}
  70.109 +\label{fig-reuse-ml-scala}
  70.110 +\end{figure}
  70.111 +\end{frame}
  70.112 +
  70.113 +\begin{frame}\frametitle{Kommunikationsprotokoll \\Scala --- SML}
  70.114 +\begin{itemize}
  70.115 +\item Das Protokoll ist \textbf{asynchron}: \\
  70.116 +verschiedene Teile eines Beweises werden in verschiedenen Threads interpretiert
  70.117 +\pause
  70.118 +\item Die Threads werden von Scala-\textbf{``Actors''} verwaltet (``Actors'' von der Programmsprache Erlang \"ubernommen)
  70.119 +\pause
  70.120 +\item \alert{Das Protokoll hat \textbf{kein API} nach aussen:}\\
  70.121 +\pause
  70.122 +Der Scala-Layer zielt auf konsistente Verwaltung gro\3er, verteilter Theorie-Bibliotheken\\
  70.123 +\pause
  70.124 +Anwendungsprogrammierer sollen nicht hier eingreifen, sondern Isabelle Theorien erweitern\\
  70.125 +\pause
  70.126 +\alert{\textit{!~Grunds\"atzliches Problem f\"ur das Projekt ``SD''~!}}
  70.127 +\end{itemize}
  70.128 +\end{frame}
  70.129 +
  70.130 +\subsection[Integration]{Isabelles Filestruktur im \"Ubergangsstadium}
  70.131 +
  70.132 +
  70.133 +\begin{frame}\frametitle{Isabelle Files: *.scala}
  70.134 +{\tiny
  70.135 +\textbf{\$ find -name ``*.scala''}\\
  70.136 +./src/Pure/General/xml.scala\\
  70.137 +./src/Pure/General/linear\_set.scala\\
  70.138 +
  70.139 +./src/Pure/General/symbol.scala\\
  70.140 +./src/Pure/General/exn.scala\\
  70.141 +./src/Pure/General/position.scala\\
  70.142 +./src/Pure/General/scan.scala\\
  70.143 +./src/Pure/General/xml\_data.scala\\
  70.144 +./src/Pure/General/yxml.scala\\
  70.145 +./src/Pure/General/markup.scala\\
  70.146 +:\\
  70.147 +./src/Pure/General/sha1.scala\\
  70.148 +./src/Pure/General/timing.scala\\
  70.149 +./src/Pure/General/pretty.scala\\
  70.150 +.\\
  70.151 +./src/Pure/Concurrent/volatile.scala\\
  70.152 +./src/Pure/Concurrent/future.scala\\
  70.153 +./src/Pure/Concurrent/simple\_thread.scala\\
  70.154 +.\\
  70.155 +./src/Pure/Thy/html.scala\\
  70.156 +./src/Pure/Thy/completion.scala\\
  70.157 +./src/Pure/Thy/thy\_header.scala\\
  70.158 +./src/Pure/Thy/thy\_syntax.scala\\
  70.159 +./src/Pure/Isac/isac.scala\\
  70.160 +./src/Pure/library.scala\\
  70.161 +.\\
  70.162 +./src/Pure/Isar/keyword.scala\\
  70.163 +./src/Pure/Isar/outer\_syntax.scala\\
  70.164 +./src/Pure/Isar/token.scala\\
  70.165 +./src/Pure/Isar/parse.scala\\
  70.166 +.\\
  70.167 +./src/Pure/System/gui\_setup.scala\\
  70.168 +./src/Pure/System/isabelle\_system.scala\\
  70.169 +./src/Pure/General/timing.scala\\
  70.170 +./src/Pure/General/pretty.scala\\
  70.171 +.\\
  70.172 +./src/Pure/Concurrent/volatile.scala\\
  70.173 +./src/Pure/Concurrent/future.scala\\
  70.174 +./src/Pure/Concurrent/simple\_thread.scala\\
  70.175 +.\\
  70.176 +./src/Pure/Thy/html.scala\\
  70.177 +./src/Pure/Thy/completion.scala\\
  70.178 +./src/Pure/Thy/thy\_header.scala\\
  70.179 +./src/Pure/Thy/thy\_syntax.scala\\
  70.180 +./src/Pure/Isac/isac.scala\\
  70.181 +./src/Pure/library.scala\\
  70.182 +.\\
  70.183 +./src/Pure/Isar/keyword.scala\\
  70.184 +./src/Pure/Isar/outer\_syntax.scala\\
  70.185 +./src/Pure/Isar/token.scala\\
  70.186 +./src/Pure/Isar/parse.scala\\
  70.187 +.\\
  70.188 +./src/Pure/System/gui\_setup.scala\\
  70.189 +./src/Pure/System/isabelle\_system.scala\\
  70.190 +./src/Pure/System/swing\_thread.scala\\
  70.191 +./src/Pure/System/download.scala\\
  70.192 +./src/Pure/System/session\_manager.scala\\
  70.193 +./src/Pure/System/standard\_system.scala\\
  70.194 +./src/Pure/System/isabelle\_syntax.scala\\
  70.195 +./src/Pure/System/session.scala\\
  70.196 +./src/Pure/System/platform.scala\\
  70.197 +./src/Pure/System/cygwin.scala\\
  70.198 +./src/Pure/System/event\_bus.scala\\
  70.199 +./src/Pure/System/isabelle\_process.scala\\
  70.200 +.\\
  70.201 +./src/Pure/PIDE/document.scala\\
  70.202 +./src/Pure/PIDE/markup\_tree.scala\\
  70.203 +./src/Pure/PIDE/text.scala\\
  70.204 +./src/Pure/PIDE/command.scala\\
  70.205 +./src/Pure/PIDE/isar\_document.scala
  70.206 +}
  70.207 +\end{frame}
  70.208 +
  70.209 +
  70.210 +
  70.211 +\subsection[jEdit]{Das Frontend: jEdit und ``plugins''}
  70.212 +\begin{frame}\frametitle{Das Frontend: \\jEdit und ``plugins''}
  70.213 +\begin{itemize}
  70.214 +\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.''}
  70.215 +\pause
  70.216 +\item Also: Die Funktionalit\"at von jEdit wird \"uber ``plugins'' bestimmt
  70.217 +\pause
  70.218 +\item Isabelle verwendet eine Reihe davon
  70.219 +  \begin{itemize}
  70.220 +  \item der Parser ``Sidekick''
  70.221 +  \item Console f\"ur jEdit-Komponenten
  70.222 +  \item + Scala
  70.223 +  \item + Ml
  70.224 +  \item etc
  70.225 +  \end{itemize}
  70.226 +\pause
  70.227 +\item jEdit ist ``open source'' mit gro\3er Community
  70.228 +\pause
  70.229 +\item Anfragen an Mailinglisten von jEdit (ohne Scala-plugin!) und Isabelle
  70.230 +\end{itemize}
  70.231 +\end{frame}
  70.232 +
  70.233 +\section[Projektarbeit]{Projekt: Vorarbeiten f\"ur ``structured derivations'' (SD)}
  70.234 +\subsection[Aufgabenstellung]{Definition der Aufgabenstellung}
  70.235 +\begin{frame}\frametitle{Definition der Aufgabenstellung}
  70.236 +Aufgabenstellung: \\Feasibility-Study zur Implementierung von ``structured~derivations'' (SD) in Isabelle.\\
  70.237 +
  70.238 +\textit{``Die Implementierung soweit vorantreiben wie im gegebenen Studenausma\3 m\"oglich~!''}\\
  70.239 +
  70.240 +Milestones:
  70.241 +\begin{enumerate}
  70.242 +\item Relevante Isabelle Komponenten identifizieren und studieren
  70.243 +\item Installation der Standard-Komponenten
  70.244 +\item Entwicklungsumgebung vom Isabelle-Team kopieren
  70.245 +\item Relevante Komponenten implementieren
  70.246 +  \begin{itemize}
  70.247 +  \item jEdit Plugin f\"ur SD
  70.248 +  \item zugeh\"origen Parser
  70.249 +  \item nicht vorgesehen: SD-Interpreter in Isar (SML)
  70.250 +  \end{itemize}
  70.251 +\end{enumerate}
  70.252 +\end{frame}
  70.253 +
  70.254 +%\subsection[Beispiel SD]{Beispiel ``structured derivation'' (SD)}
  70.255 +\begin{frame}\frametitle{Beispiel ``structured~derivation''~(SD)}
  70.256 +{\footnotesize
  70.257 +\begin{tabbing}
  70.258 +123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
  70.259 +\>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
  70.260 +\>  \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
  70.261 +\>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
  70.262 +\>  \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
  70.263 +\>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
  70.264 +\>  \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
  70.265 +\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
  70.266 +\>  \>   \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
  70.267 +\>  \>$\equiv$\>\vdots\\
  70.268 +\>  \>  \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
  70.269 +\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$  \\
  70.270 +\>  \>     \>$1 + -1 * x$\\
  70.271 +\>\dots\>$1 + -1 * x$\\
  70.272 +\>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
  70.273 +\>  \>$1-x$
  70.274 +\end{tabbing}
  70.275 +}
  70.276 +\end{frame}
  70.277 +
  70.278 +\subsection[NetBeans]{Konfiguration des Projektes in der NetBeans IDE}
  70.279 +\begin{frame}\frametitle{Konfiguration in NetBeans}
  70.280 +Mehrere Run-Konfigurationen sind praktisch:
  70.281 +\begin{itemize}
  70.282 +\item Start von jEdit + Plug-ins aus NetBeans
  70.283 +  \begin{itemize}
  70.284 +  \item Exekution der fertig kompilierten jEdit.jar
  70.285 +  \item Exkution der eingebundenen jEdit Sources: \\zum Debuggen !
  70.286 +  \end{itemize}
  70.287 +\item Start von jEdit aus der Konsole
  70.288 +\end{itemize}
  70.289 +\vspace{0.2cm}   \pause
  70.290 +Dementsprechend komplex sind die Konfigurations-Files:
  70.291 +\begin{center}
  70.292 +\begin{tabular}{l r l}
  70.293 +build.xml          & 102 & LOCs\\
  70.294 +project.xml        & 25  & LOCs\\
  70.295 +project.properties & 85  & LOCs\\
  70.296 +build-impl.xml     & 708 & LOCs\\
  70.297 +                   &     & (teilw. automatisch generiert)\end{tabular}
  70.298 +\end{center}
  70.299 +\end{frame}
  70.300 +
  70.301 +\subsection[Implementation]{Komponenten zur Implementation von SD}
  70.302 +
  70.303 +\begin{frame}\frametitle{Die Konzeption des Scala-Layers}
  70.304 +\begin{figure}
  70.305 +\includegraphics[width=100mm]{fig-jedit-plugins-SD}
  70.306 +\label{Frontend des jEdit}
  70.307 +\end{figure}
  70.308 +\end{frame}
  70.309 +
  70.310 +\begin{frame}\frametitle{jEdit-Plugin}
  70.311 +\begin{itemize}
  70.312 +\item Aufbau: Ein Plugin besteht aus:
  70.313 +\pause
  70.314 +	\begin{itemize}
  70.315 +	\item Source-Files: \textbf{Scala} 
  70.316 +	\pause
  70.317 +	\item Property file 
  70.318 +	\pause
  70.319 +	\item XML-Files: \textit{``glue code''} zwischen \textbf{Java} (Editor) und \textbf{Scala} (Plugin)
  70.320 +	\end{itemize}
  70.321 +%\pause
  70.322 +%\item Bestehendes Java-Plugin in Scala transferieren
  70.323 +%\pause
  70.324 +%\item Neue Ordnerstruktur in bestehende Isabelle-Ordner-Hierachie integrieren
  70.325 +\end{itemize}
  70.326 +\end{frame}
  70.327 +
  70.328 +\begin{frame}\frametitle{Sources des jEdit Plugins}
  70.329 +{\tiny
  70.330 +src/Tools/jEditC\textbf{\$ ls -l *}\\
  70.331 +build.xml\\
  70.332 +%makedist\\
  70.333 +%manifest.mf\\
  70.334 +%README\_BUILD\\
  70.335 +\textbf{build/*}\\
  70.336 +\textbf{contrib/*}\\
  70.337 +\textbf{dist/*}\\
  70.338 +\textbf{plugin/}build.xml\\
  70.339 +\textbf{plugin/}changes40.txt\\
  70.340 +\textbf{plugin/}changes42.txt\\
  70.341 +\textbf{plugin/}description.html\\
  70.342 +\textbf{plugin/}IsacActions.java\\
  70.343 +\textbf{plugin/}Isac.iml\\
  70.344 +\textbf{plugin/}Isac.java\\
  70.345 +\textbf{plugin/}IsacOptionPane.java\\
  70.346 +\textbf{plugin/}IsacPlugin.java\\
  70.347 +\textbf{plugin/}IsacTextArea.java\\
  70.348 +\textbf{plugin/}IsacToolPanel.java\\
  70.349 +\textbf{plugin/}plugin\\
  70.350 +\textbf{plugin/}README.txt\\
  70.351 +\textbf{nbproject/*}\\
  70.352 +\textbf{src/}actions.xml\\
  70.353 +\textbf{src/}changes40.txt\\
  70.354 +\textbf{src/}changes42.txt\\
  70.355 +\textbf{src/}description.html\\
  70.356 +\textbf{src/}dockables.xml\\
  70.357 +\textbf{src/}IsacActions.scala\\
  70.358 +\textbf{src/}Isac.iml\\
  70.359 +\textbf{src/}IsacOptionPane.scala\\
  70.360 +\textbf{src/}IsacPlugin.scala\\
  70.361 +\textbf{src/}Isac.props\\
  70.362 +\textbf{src/}Isac.scala\\
  70.363 +\textbf{src/}IsacTextArea.scala\\
  70.364 +\textbf{src/}IsacToolPanel.scala\\
  70.365 +\textbf{src/}manifest.mf\\
  70.366 +\textbf{src/}README.txt\\
  70.367 +\textbf{src/}users-guide.xml
  70.368 +}
  70.369 +\end{frame}
  70.370 +
  70.371 +\begin{frame}\frametitle{Anforderungen an das Versuchs-Plugin}
  70.372 +Folgende Funktionalit\"at wurde zu Testzwecken umgesetzt:
  70.373 +\pause
  70.374 +\begin{itemize}
  70.375 +	\item Grunds\"atzlicher Aufbau eines GUIs
  70.376 +	\pause
  70.377 +	\item Kopieren von Text zwischen den einzelnen Buffers
  70.378 +	\pause
  70.379 +		\begin{itemize}
  70.380 +		\item \alert{Somit auch Zugriff auf andere Plugins!}
  70.381 +		\end{itemize}
  70.382 +	\pause
  70.383 +	\item Ansatz f\"ur die Einbindung des SD-Parsers
  70.384 +	\pause
  70.385 +		\begin{itemize}
  70.386 +		\item Zugriff auf Isabelle-Pure: \alert{parsen von SD parallel zu Isabelle/Isar}
  70.387 +		\end{itemize}
  70.388 +	\pause
  70.389 +	\item \textit{DEMO}
  70.390 +\end{itemize}
  70.391 +\end{frame}
  70.392 +
  70.393 +
  70.394 +%\subsection[Parser]{Ein funktionaler Parser f\"ur SD (in SML)}
  70.395 +
  70.396 +\section[Summary]{Zusammenfassung}
  70.397 +\begin{frame}\frametitle{Zusammenfassung}
  70.398 +Folgende Milestones wurden erfolgreich abgeschlossen:
  70.399 +\begin{enumerate}
  70.400 +\item Relevante Isabelle Komponenten dokumentiert
  70.401 +\pause
  70.402 +\item Installation der Standard-Komponenten:
  70.403 +  \begin{itemize}
  70.404 +  \item Mercurial Versioncontrol
  70.405 +  \item NetBeans IDE
  70.406 +  \item Standard Isabelle Bundle
  70.407 +  \end{itemize}
  70.408 +  \pause
  70.409 +\item Entwicklungsumgebung vom Isabelle-Team kopieren
  70.410 +  \begin{itemize}
  70.411 +  \item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
  70.412 +  \item jEdit als NetBeans Projekt definiert
  70.413 +  \end{itemize}
  70.414 +  \pause
  70.415 +\item Relevante Komponenten implementieren
  70.416 +  \begin{itemize}
  70.417 +  \item jEdit Plugin f\"ur SD
  70.418 +  \item Verbindung des Plugins zu Isabelle
  70.419 +  \item zugeh\"origen Parser: nur ein Test in SML
  70.420 +  \end{itemize}
  70.421 +\end{enumerate}
  70.422 +\end{frame}
  70.423 +
  70.424 +\begin{frame}\frametitle{Zusammenfassung}
  70.425 +\pause
  70.426 +\alert{$\mathbf{- - -}$}\\
  70.427 +Aus Zeitgr\"unden nicht m\"oglich: ein komplettes SD-Plugin;\\
  70.428 +dazu w\"are auch ein Interpreter auf der ML-Seite n\"otig.\\
  70.429 +\vspace{0.3cm}
  70.430 +\alert{$\mathbf{+ + +}$}\\
  70.431 +\pause
  70.432 +Voraussetzungen f\"ur k\"unftige Entwicklung geschaffen:
  70.433 +\begin{enumerate}
  70.434 +\item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
  70.435 +\item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
  70.436 +\item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
  70.437 +\end{enumerate}
  70.438 +\end{frame}
  70.439 +
  70.440 +\begin{frame}\frametitle{}
  70.441 +\begin{center}
  70.442 +\LARGE{Danke f\"ur die Aufmerksamkeit !}
  70.443 +\end{center}
  70.444 +\end{frame}
  70.445 +
  70.446 +\end{document}
  70.447 +
  70.448 +
    71.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    71.2 +++ b/doc-isac/msteger/bibliografie.bib	Tue Sep 17 09:50:52 2013 +0200
    71.3 @@ -0,0 +1,15 @@
    71.4 +@article{wolff10-boogie,
    71.5 +  author    = {Sascha B{\"o}hme and
    71.6 +               Michal Moskal and
    71.7 +               Wolfram Schulte and
    71.8 +               Burkhart Wolff},
    71.9 +  title     = {HOL-Boogie - An Interactive Prover-Backend for the Verifying
   71.10 +               C Compiler},
   71.11 +  journal   = {J. Autom. Reasoning},
   71.12 +  volume    = {44},
   71.13 +  number    = {1-2},
   71.14 +  year      = {2010},
   71.15 +  pages     = {111-144},
   71.16 +  ee        = {http://dx.doi.org/10.1007/s10817-009-9142-9},
   71.17 +  bibsource = {DBLP, http://dblp.uni-trier.de}
   71.18 +}
   71.19 \ No newline at end of file
    72.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    72.2 +++ b/doc-isac/msteger/dirs-all-jars.txt	Tue Sep 17 09:50:52 2013 +0200
    72.3 @@ -0,0 +1,79 @@
    72.4 +----- for "isabelle jedit &"; contained in Isabelle_bundle
    72.5 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jedit.jar
    72.6 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/LatestVersion.jar
    72.7 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/SideKick.jar
    72.8 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Console.jar
    72.9 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Pure.jar
   72.10 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Isac.jar
   72.11 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/scala-compiler.jar
   72.12 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Isabelle-jEdit.jar
   72.13 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/cobra.jar
   72.14 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/js.jar
   72.15 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Hyperlinks.jar
   72.16 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/scala-swing.jar
   72.17 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/scala-library.jar
   72.18 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/QuickNotepad.jar
   72.19 +./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/ErrorList.jar
   72.20 +----- scala system; contained in Isabelle_bundle
   72.21 +./contrib/scala-2.8.1.final/misc/sbaz/scala-bazaars.jar
   72.22 +./contrib/scala-2.8.1.final/misc/sbaz/sbaz-tests.jar
   72.23 +./contrib/scala-2.8.1.final/misc/scala-devel/plugins/continuations.jar
   72.24 +./contrib/scala-2.8.1.final/lib/scala-compiler.jar
   72.25 +./contrib/scala-2.8.1.final/lib/scalap.jar
   72.26 +./contrib/scala-2.8.1.final/lib/scala-swing.jar
   72.27 +./contrib/scala-2.8.1.final/lib/scala-library.jar
   72.28 +./contrib/scala-2.8.1.final/lib/jline.jar
   72.29 +./contrib/scala-2.8.1.final/lib/scala-dbc.jar
   72.30 +./contrib/scala-2.8.1.final/src/scala-library-src.jar
   72.31 +./contrib/scala-2.8.1.final/src/scala-swing-src.jar
   72.32 +./contrib/scala-2.8.1.final/src/scala-compiler-src.jar
   72.33 +./contrib/scala-2.8.1.final/src/scala-dbc-src.jar
   72.34 +./contrib/scala-2.8.1.final/src/sbaz-src.jar
   72.35 +----- Isars entry to SML from Scala-layer; created according to 3.3.#3{enumerate}
   72.36 +./lib/classes/isabelle-scala.jar 
   72.37 +./lib/classes/Pure.jar
   72.38 +===== all below for NetBeans
   72.39 +----- standard Isabelle, started by <RUN> in NetBeans
   72.40 +      description in 2.2.2
   72.41 +./src/Tools/jEdit/dist/jars/jedit.jar
   72.42 +./src/Tools/jEdit/dist/jars/SideKick.jar
   72.43 +./src/Tools/jEdit/dist/jars/Console.jar
   72.44 +./src/Tools/jEdit/dist/jars/Pure.jar
   72.45 +./src/Tools/jEdit/dist/jars/scala-compiler.jar
   72.46 +./src/Tools/jEdit/dist/jars/Isabelle-jEdit.jar
   72.47 +./src/Tools/jEdit/dist/jars/cobra.jar
   72.48 +./src/Tools/jEdit/dist/jars/js.jar
   72.49 +./src/Tools/jEdit/dist/jars/Hyperlinks.jar
   72.50 +./src/Tools/jEdit/dist/jars/scala-swing.jar
   72.51 +./src/Tools/jEdit/dist/jars/scala-library.jar
   72.52 +./src/Tools/jEdit/dist/jars/ErrorList.jar
   72.53 +----- source of jEdit, required for <DEBUG> in NetBeans;
   72.54 +      adapted from NetBeans' webpages,
   72.55 +      description in 2.2.3.#5
   72.56 +./src/Tools/jEditC/contrib/jEdit/build/jars/SideKick.jar
   72.57 +./src/Tools/jEditC/contrib/jEdit/build/jars/Console.jar
   72.58 +./src/Tools/jEditC/contrib/jEdit/build/jars/Pure.jar
   72.59 +./src/Tools/jEditC/contrib/jEdit/build/jars/Isac.jar
   72.60 +./src/Tools/jEditC/contrib/jEdit/build/jars/QuickNPScala.jar
   72.61 +./src/Tools/jEditC/contrib/jEdit/build/jars/scala-compiler.jar
   72.62 +./src/Tools/jEditC/contrib/jEdit/build/jars/Isabelle-jEdit.jar
   72.63 +./src/Tools/jEditC/contrib/jEdit/build/jars/cobra.jar
   72.64 +./src/Tools/jEditC/contrib/jEdit/build/jars/js.jar
   72.65 +./src/Tools/jEditC/contrib/jEdit/build/jars/Hyperlinks.jar
   72.66 +./src/Tools/jEditC/contrib/jEdit/build/jars/scala-swing.jar
   72.67 +./src/Tools/jEditC/contrib/jEdit/build/jars/scala-library.jar
   72.68 +./src/Tools/jEditC/contrib/jEdit/build/jars/ErrorList.jar
   72.69 +./src/Tools/jEditC/contrib/jEdit/build/jEdit.jar
   72.70 +----- demo plugin, started by <RUN> in NetBeans
   72.71 +      description in 2.2.3.#4
   72.72 +./src/Tools/jEditC/dist/jars/SideKick.jar
   72.73 +./src/Tools/jEditC/dist/jars/Console.jar
   72.74 +./src/Tools/jEditC/dist/jars/Pure.jar
   72.75 +./src/Tools/jEditC/dist/jars/Isac.jar
   72.76 +./src/Tools/jEditC/dist/jars/scala-compiler.jar
   72.77 +./src/Tools/jEditC/dist/jars/cobra.jar
   72.78 +./src/Tools/jEditC/dist/jars/js.jar
   72.79 +./src/Tools/jEditC/dist/jars/Hyperlinks.jar
   72.80 +./src/Tools/jEditC/dist/jars/scala-swing.jar
   72.81 +./src/Tools/jEditC/dist/jars/scala-library.jar
   72.82 +./src/Tools/jEditC/dist/jars/ErrorList.jar
    73.1 Binary file doc-isac/msteger/fig-jedit-plugins-SD.odg has changed
    74.1 Binary file doc-isac/msteger/fig-jedit-plugins-SD.png has changed
    75.1 Binary file doc-isac/msteger/fig-reuse-ml-scala-SD.odg has changed
    76.1 Binary file doc-isac/msteger/fig-reuse-ml-scala-SD.png has changed
    77.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    77.2 +++ b/doc-isac/msteger/official_docu/Doku.tex	Tue Sep 17 09:50:52 2013 +0200
    77.3 @@ -0,0 +1,540 @@
    77.4 +\chapter{Definition der Aufgabenstellung}
    77.5 +\section{Detaillierte Beschreibung der Aufgabenstellung}
    77.6 +Zu Beginn des Projekts wurden einige Vorgaben und Ziele des Projektes erarbeitet 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. 
    77.7 +
    77.8 +Hauptaugenmerk war dabei auf die Erstellung eines jEdit-Plugins, dass die Verarbeitung von Back's Structured Derivations m\"oglich machen soll, gelegt worden. Mit anderen Worten, es sollte so viel Plugin-Code, wie im begrenzten Projektzeitraum m\"oglich, implementiert werden.
    77.9 +
   77.10 +Weiters sollte eine Projektstruktur aufgebaut werden, die die Initialisierungsarbeiten von weiterf\"uhrende bzw. nachfolgende Projekten erleichtert und somit verk\"urzt. Dabei sollte darauf geachtet werden, dass die vom Isabelleteam bereits verwendete Projekthierarchie soweit wie m\"oglich \"ubernommen bzw. erweitert wird.
   77.11 +Die nachfolgende Auflistung soll die wichtigsten Tasks nochmals zusammenfassen:
   77.12 +\begin{enumerate}
   77.13 +\item Relevante Isabelle Komponenten identifizieren und studieren
   77.14 +\item Installation der Standard-Komponenten
   77.15 +\item Entwicklungsumgebung vom Isabelle-Team kopieren
   77.16 +\item Relevante Komponenten implementieren
   77.17 +  \begin{itemize}
   77.18 +  \item jEdit Plugin f\"ur SD
   77.19 +  \item zugeh\"origen Parser
   77.20 +  \item nicht vorgesehen: SD-Interpreter in Isar (SML)
   77.21 +  \end{itemize}
   77.22 +\end{enumerate}
   77.23 +
   77.24 +\chapter{Beleuchtung der Projekt-relevanten Technologien}
   77.25 +Dieses Kapitel soll die vielen unterschiedlichen Technologien, die im Rahmen dieser Arbeit verwendet oder zumindest ber\"uhrt wurden, beleuchten und dem Leser helfen, nachfolgende Zusammenh\"ange zu verstehen. Nat\"urlich kann in keines der folgenden Themen sehr tief eingestiegen werden. Viel mehr sollen die nachfolgenden Ausf\"uhrungen einen groben \"Uberblick \"uber die einzelnen Technologien geben.
   77.26 +\section{Back's Structured Derivations}
   77.27 +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.
   77.28 +
   77.29 +Das nachfolgende Beispiel zeigt ein einfaches Beispiel, wie eine Formel mittels SD dargestellt bzw. umgeformt werden kann:
   77.30 +
   77.31 +%{\footnotesize
   77.32 +\begin{tabbing}
   77.33 +123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
   77.34 +\>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
   77.35 +\>  \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
   77.36 +\>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
   77.37 +\>  \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
   77.38 +\>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
   77.39 +\>  \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
   77.40 +\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
   77.41 +\>  \>   \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
   77.42 +\>  \>$\equiv$\>\vdots\\
   77.43 +\>  \>  \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
   77.44 +\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$  \\
   77.45 +\>  \>     \>$1 + -1 * x$\\
   77.46 +\>\dots\>$1 + -1 * x$\\
   77.47 +\>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
   77.48 +\>  \>$1-x$
   77.49 +\end{tabbing}
   77.50 +%}
   77.51 +
   77.52 +Dieses Beispiel kann wie folgt interpretiert werden:
   77.53 +\begin{enumerate}
   77.54 +\item Die erste Zeile ist als Angabe bzw. Ausgangspunkt der Berechnung zu verstehen.
   77.55 +\item Nun folgt der eigentliche Ablauf einer Umformung mittels SD: Mit der Formel in der zweiten Zeile beginnt die Berechnung.
   77.56 +\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 schlie{\ss}en zu k\"onnen.
   77.57 +\item Aus dieser Rechenvorschrift ergibt sich die Formel in der n\"achsten Zeile.
   77.58 +\item Dieser Ablauf wiederholt sich und zieht sich \"uber die weiteren Berechnungen.
   77.59 +\end{enumerate}
   77.60 +
   77.61 +Back liefert mit SD eine sehr gute Darstellungs- und Verbarbeitungs-Richtlinie, die einerseits dem Leser/Anwender hilft, da durch die Regel- bzw. Beschreibungs-Zeile klar gestellt wird, wie der letzte Berechnungsschritt durchgef\"uhrt wurde. Andererseits 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\"oglich ist.
   77.62 +
   77.63 +\section{Der Texteditor jEdit}\label{jEdit}
   77.64 +%     http://www.jedit.org/
   77.65 +%     http://de.wikipedia.org/wiki/JEdit
   77.66 +%     http://www.chip.de/downloads/jEdit_19235021.html
   77.67 +%
   77.68 +jEdit ist ein in Java geschriebener und als Open-Source-Projekt erh\"altlicher Texteditor, der vor allem durch sein sehr gut entwickeltes und ebenso einfaches Plugin-Management-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.
   77.69 +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.
   77.70 +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.
   77.71 +
   77.72 +\subsection{Das Plugin-System}
   77.73 +% http://jedit.org/users-guide/writing-plugins-part.html
   77.74 +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} verwendet. Dabei ist es m\"oglich, dass Java-Plugins mit Scala-Plugins kombiniert werden, da diese auch problemlos miteinander kommunizieren k\"{o}nnen.
   77.75 +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.
   77.76 +Weiters bietet sich die M\"oglichkeit, 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.
   77.77 +
   77.78 +
   77.79 +\subsection{Pluginstruktur}
   77.80 +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. 
   77.81 +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. 
   77.82 +
   77.83 +\section{Isabelle}
   77.84 +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(mit funktionalen sowie imperativen Sprachanteilen). 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.
   77.85 +
   77.86 +\subsection{Isabelle-Pure}
   77.87 +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. 
   77.88 +Eine Auflistung der f\"ur das Isabelle-Pure-Packet ben\"otigten Scala-Source-Filles kann Anhang B.2 entnommen werden.
   77.89 +
   77.90 +\subsection{Isabelle-jEdit}
   77.91 +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.
   77.92 +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.
   77.93 +
   77.94 +\subsection{Paketstruktur von Isabelle}
   77.95 +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.
   77.96 +Die nachfolgende Auflistung zeigt alle Pakete, die f\"{u}r SD bzw. {\sisac} von Bedeutung sind und und wo diese zu finden sind.
   77.97 + 
   77.98 +
   77.99 +\begin{itemize}
  77.100 +\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. 
  77.101 +\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.
  77.102 +\item \textit{src/Tools/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} 
  77.103 +\item \textit{src/Tools/jEditC/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.
  77.104 +\item \textit{src/Tools/jEditC/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 bzw. sollte dies nur f\"ur schwer nachvollziebare Abl\"aufe ohne Isabelle-Beteiligung angewendet werden. 
  77.105 +\end{itemize} 
  77.106 +
  77.107 +Siehe dazu auch Anhang B. Dort sind alle relevanten jar-Pakete noch einmal aufgearbeitet und entsprechend gruppiert.
  77.108 +
  77.109 +\section{Die Programmiersprache Scala}
  77.110 +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.
  77.111 +
  77.112 +\subsection{Grundlage der Sprache}
  77.113 +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, und vorallem auch das von Erlang \"ubernommene und sehr gut umgesetzte Actorprinzip, sind wohl die Hauptgr\"unde, warum sich das Isabelle-Entwicklungsteam f\"{u}r diese Sprache entschieden hat. Wie bereits 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.
  77.114 +
  77.115 +Dieser direkte Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing gezeigt bzw. die Vorteile, die daraus resultieren, beleuchtet werden.
  77.116 +
  77.117 +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. 
  77.118 +
  77.119 +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. 
  77.120 +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.
  77.121 +
  77.122 +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.
  77.123 +
  77.124 +\subsection{Scala, Java und jEdit}
  77.125 +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!
  77.126 +
  77.127 +\subsection{Der Isabelle-Scala-Layer}
  77.128 +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. 
  77.129 +
  77.130 +Dieser Absatz sollen nun die Eigenschaften des Scala-Layers und die damit verbundenen Chancen f\"ur das Isac- bzw. SD-Projektes 
  77.131 +erarbeitet werden. 
  77.132 +
  77.133 +\begin{figure}
  77.134 +\begin{center}
  77.135 +\includegraphics[width=100mm]{../fig-reuse-ml-scala-SD}
  77.136 +\end{center}
  77.137 +\label{fig-reuse-ml-scala}
  77.138 +\end{figure}
  77.139 +
  77.140 +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 sollte hier also nicht angreifen sonder die Isabelle-Theorien entsprechend erweitern.
  77.141 +
  77.142 +\chapter{Konfiguration und Implementation der Komponenten}
  77.143 +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.
  77.144 +
  77.145 +\section{Konfiguration des Netbeans Projektes}
  77.146 +Um in k\"unftigen Entwicklungsvorhaben effizient kooperieren zu k\"onnen, wurde das Netbeans-Projekt genau nach den Vorgaben des Isabelle-Teams konfiguriert. 
  77.147 +
  77.148 +\begin{enumerate}
  77.149 +\item Konfigurations-Files von Netbeans in ``Files''-View; beeinflussen sich gegenseitig
  77.150 +  \begin{enumerate}
  77.151 +  \item build.xml (aus template erzeugt, keine automatischen Ver\"anderunen)
  77.152 +  \item nbproject/build-impl.xml (z.T. automatische Ver\"anderunen)
  77.153 +  \item nbproject/project.xml (z.T. automatische Ver\"anderunen)
  77.154 +  \item TODO
  77.155 +  \end{enumerate}
  77.156 +\item Sacla-plugin installieren laut http://wiki.netbeans.org/Scala69, 
  77.157 +  \begin{enumerate}
  77.158 +  \item von ``Install with NetBeasn 6.9''
  77.159 +  \item nach /usr/local/netbeans.../plugins/scala
  77.160 +  \end{enumerate}
  77.161 +\item Scala-plugin installiert in NetBeans
  77.162 +  \begin{enumerate}
  77.163 +  \item Men\"u $>$ Tools $>$ Plugins $>$ Downloaded $>$ Add Plugins 
  77.164 +  \item alle Files von /usr/local/netbeans.../plugins/scala/
  77.165 +  \item Fenster zeigt alle ausgew\"alten Files
  77.166 +  \item $<$Install$>$ calls Wizzard $<$Next$>$ probably accept Warning
  77.167 +  \item Funktionstest: Men\"ue $>$ Files $>$ New Project: zeigt Scala als ``Categories''
  77.168 +  \end{enumerate}
  77.169 +\item Neues Projekt ``isac-jedit'' konfigurieren
  77.170 +  \begin{enumerate}
  77.171 +  \item Men\"u $>$ Open Project (weil schon aus dem Repository die notwendigen Files vorhanden sind)
  77.172 +  \item /src/Tools/jeditC: Reference Problems, weil jEdit folgende Plugins braucht
  77.173 +  \item Funktionskontrolle: ``Projects''-View zeigt das neue Projekt
  77.174 +  \item Die Konfigurations-Files sind v\"ollig getrennt von anderen Projekten
  77.175 +  \item Referenz-Probleme beheben; das zeigt auch eventuell fehlende Files
  77.176 +    \begin{enumerate}
  77.177 +    \item ``Projects''-View $>$ rightMouse $>$ Resolve Reference Problems: Fenster zeigt dieListe der fehlenden Dateien; $<$Next$>$
  77.178 +    \item Files holen aus ``Tools'' $>$ Libraries: \"uber Filebrowser aus dem Isabelle\_bundle holen contrib/jEdit---/jars
  77.179 +    \item ``New Library'' 
  77.180 +      \begin{enumerate}
  77.181 +      \item Cobra-renderer: cobra.jar
  77.182 +      \item Console:  Console.jar
  77.183 +      \item ErrorList: ErrorList.jar
  77.184 +      \item Hyperlinks: Hyperlinks.jar
  77.185 +      \item Isabelle-Pure: Pure.jar
  77.186 +      \item Rhino-JavaScript: js.jar
  77.187 +      \item Scala-compiler: scala-compiler.jar
  77.188 +      \item SideKick: SideKick.jar
  77.189 +      \end{enumerate}
  77.190 +    \item Funktions-Kontrollen 
  77.191 +      \begin{enumerate}
  77.192 +      \item das kleine gelbe Warndreieck im ``Projects''-View ist verschwunden
  77.193 +      \item im ``Projects''-View 2 Ordner: ``src'' und ``Libraries''
  77.194 +      \end{enumerate}
  77.195 +    \end{enumerate}
  77.196 +  \item jEdit-Paket zum ``isac-jedit''-Projekt hinzuf\"ugen
  77.197 +    \begin{enumerate}
  77.198 +    \item ``Project''-View $>$ rightMouse $>$ Add Jar/Folder: Filebrowser
  77.199 +    \item /contrib/jedit.../jedit.jar
  77.200 +    \item Funktions-Kontrolle: ist in ``Projects''/Libraries/jedit.jar
  77.201 +    \end{enumerate}
  77.202 +  \item Das neue Projekt ``isac-jedit'' zum Hauptprojekt machen: ``Project''-View $>$ rightMouse $>$ Set as Main Project; Funktions-Kontrolle: der Projektname ist boldface.
  77.203 +  \end{enumerate}
  77.204 +\item Ab nun wird die Konfiguration \"uber ``trial and error'' zu Ende gef\"uhrt
  77.205 +  \begin{enumerate}
  77.206 +  \item Men\"u $>$ Build Main 
  77.207 +    \begin{enumerate}
  77.208 +    \item Wenn: Target ``Isac-impl.jar'' does not exist in the project ``isac-jedit''. It is used from target ``debug''
  77.209 +      \begin{enumerate}
  77.210 +      \item Versuch
  77.211 +        \begin{itemize}
  77.212 +        \item build-impl.xml l\"oschen
  77.213 +        \item NetBeans neu starten, stellt build-impl.xml automatisch aus build.xml wieder her
  77.214 +        \item \dots hat in diesem Fall nicht geholfen
  77.215 +       \end{itemize}
  77.216 +      \item Versuch zur Vermutung: Projekt wurde umbenannt von ``Isac'' in ``isac-jedit'', und das machte build.xml inkonsistent
  77.217 +        \begin{itemize}
  77.218 +        \item in build.xml query-replace ``Isac'' in ``isac-jedit''
  77.219 +        \item TODO?
  77.220 +        \item 
  77.221 +        \end{itemize}
  77.222 +      \end{enumerate}
  77.223 +    \item Wenn: Problem: failed to create tsk or type scalac
  77.224 +      \begin{enumerate}
  77.225 +      \item Versuch: Pfad zum Scala bekanntgeben
  77.226 +        \begin{itemize}
  77.227 +        \item /usr/local/netbeans-6.9.1/etc/netbeans.conf: netbeans\_default\_options= richtigen Scala-Pfad setzen
  77.228 +        \item build-impl.xml l\"oschen
  77.229 +        \item NetBeans neu starten.
  77.230 +        \end{itemize}
  77.231 +      \end{enumerate}
  77.232 +    \item Wenn Fehler: ``/usr/local/isabisac/src/Tools/jEditC/\${project.jEdit}/modes does not exist''
  77.233 +      \begin{enumerate}
  77.234 +      \item grep -r "project.jEdit" *
  77.235 +      \item nbproject/project.properties:project.jEdit=contrib/jEdit
  77.236 +      \item TODO?
  77.237 +      \end{enumerate}
  77.238 +    \end{enumerate}
  77.239 +  \end{enumerate}
  77.240 +\item error in project files, not in build.xml etc (1)
  77.241 +  \begin{enumerate}
  77.242 +  \item follow link to testSD.scala:22
  77.243 +  \item val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')\\
  77.244 +        val str1: String = ``TEST'' //isabelle.Isac.parse(``Testdaten aus dem Parser!'')\\
  77.245 +  \item build once again ... successful\\
  77.246 +  \item watch in console what is being copied and compare build.xml, 
  77.247 +          $<$target name=''-pre-jar''$>$
  77.248 +          $<$target name=''-post-jar''$>$
  77.249 +  \item essential: a new Pure.jar has been generated, which has been extended with a new class ``Isac''; this class has been defined in scr/Pure/Isac/isac.scala
  77.250 +  \item restore ``val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')" requires new Pure.jar at the right place \dots
  77.251 +  \item \dots the shellscript bin/testSD\_jedit creates this new Pure.jar
  77.252 +  \end{enumerate}
  77.253 +\item error in bin/testSD
  77.254 +  \begin{enumerate}
  77.255 +  \item look at error messages, eg. src/Pure/: no such file or directory \dots
  77.256 +  \item \dots means that the script has not been started from $\approx\approx$ --- this behaviour shall be improved a.s.a.p.
  77.257 +  \item function test: \\
  77.258 +        \#\#\#\\
  77.259 +        \#\#\# Building Isabelle/Scala layer\\
  77.260 +        \#\#\#\\
  77.261 +  \item 
  77.262 +  \item 
  77.263 +  \end{enumerate}
  77.264 +$<$ $>$
  77.265 +Men\"u $>$  $>$ $>$  $>$ $>$  $>$
  77.266 +``Project''-View $>$ rightMouse $>$ $>$  $>$ $>$  $>$
  77.267 +\item 
  77.268 +  \begin{enumerate}
  77.269 +  \item 
  77.270 +    \begin{enumerate}
  77.271 +    \item 
  77.272 +      \begin{itemize}
  77.273 +      \item 
  77.274 +        \begin{itemize}
  77.275 +        \item 
  77.276 +        \item 
  77.277 +        \item 
  77.278 +        \end{itemize}
  77.279 +      \item 
  77.280 +      \item 
  77.281 +      \end{itemize}
  77.282 +    \item 
  77.283 +    \item 
  77.284 +    \end{enumerate}
  77.285 +  \item 
  77.286 +  \item 
  77.287 +  \end{enumerate}
  77.288 +\item 
  77.289 +  \begin{enumerate}
  77.290 +  \item 
  77.291 +    \begin{enumerate}
  77.292 +    \item 
  77.293 +      \begin{itemize}
  77.294 +      \item 
  77.295 +        \begin{itemize}
  77.296 +        \item 
  77.297 +        \item 
  77.298 +        \item 
  77.299 +        \end{itemize}
  77.300 +      \item 
  77.301 +      \item 
  77.302 +      \end{itemize}
  77.303 +    \item 
  77.304 +    \item 
  77.305 +    \end{enumerate}
  77.306 +  \item 
  77.307 +  \item 
  77.308 +  \end{enumerate}
  77.309 +\end{enumerate}
  77.310 +
  77.311 +
  77.312 +\section{Implementation der jEdit Komponenten}
  77.313 +
  77.314 +\subsection{Erstellen des Plugin-Ger\"{u}sts}
  77.315 +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. 
  77.316 +
  77.317 +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 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.
  77.318 +
  77.319 +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.
  77.320 +
  77.321 +\subsection{Erzeugung des Plugins}
  77.322 +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, Anhang C):
  77.323 +\begin{enumerate}
  77.324 +\item Das Plugin kann mittels Kommandline folgenderma{\ss}en erstellt werden: \\ \textit{cd ISABELLE\_HOME/src/Tools/isac/jEdit} $\rightarrow$ \textit{ant jar}
  77.325 +\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/}
  77.326 +\item jEdit ausf\"{u}hren und testen
  77.327 +\end{enumerate}
  77.328 +
  77.329 +\subsection{Verbindung zum Isabelle-Pure Plugin herstellen}
  77.330 +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. 
  77.331 +
  77.332 +\begin{figure}
  77.333 +\begin{center}
  77.334 +\includegraphics[width=100mm]{../fig-jedit-plugins-SD}
  77.335 +\end{center}
  77.336 +\label{fig-jedit-plugins-SD}
  77.337 +\end{figure}
  77.338 +
  77.339 +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.
  77.340 +
  77.341 +
  77.342 +\begin{enumerate}
  77.343 +\item Um den \sisac-Teil im Isabelle-Pure genau abzugrenzen, wurde ein Ordner \textit{Isac} angelegt und ein Testfile \textit{isac.scala} erstellt.
  77.344 +\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.
  77.345 +\item Nun kann Pure.jar mittels Kommandline erstellt werden: \textit{cd /src/Pure} $\rightarrow$ \textit{../../bin/isabelle env ./build-jars}
  77.346 +\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/}
  77.347 +\item jEdit ausf\"{u}hren und testen
  77.348 +\end{enumerate}
  77.349 +Alle die oben angef\"{u}hrten Punkte, sowie das Erzeugen und Kopieren des Plugins selbst, werden vom Script isac\_jedit erledigt.
  77.350 +Das Skript kann dem Anhang C entnommen werden.
  77.351 +
  77.352 +\section{Umsetzung des SD-Parsers}
  77.353 +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.
  77.354 +
  77.355 +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. 
  77.356 +
  77.357 +
  77.358 +\chapter{Ausblick: Von SD- zum \isac-Plugin}
  77.359 +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. 
  77.360 +
  77.361 +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. 
  77.362 +
  77.363 +\chapter{Zusammenfassung und R\"{u}ckblick}
  77.364 +Zusammenfassend wird nun ein \"Uberblick gegeben, welche Milestones erledigt wurden und welche nicht; Details dazu finden sich in Anhang A. %TODO
  77.365 +Abschlie{\ss}end gebe ich einen R\"uckblick auf meine pers\"onlichen Erfahrungen aus dieser Bakkalaureats-Arbeit.
  77.366 +
  77.367 +\section{Zusammenfassung}
  77.368 +Folgende Milestones wurden erfolgreich abgeschlossen:
  77.369 +\begin{enumerate}
  77.370 +\item Relevante Isabelle Komponenten dokumentiert
  77.371 +
  77.372 +\item Installation der Standard-Komponenten:
  77.373 +  \begin{itemize}
  77.374 +  \item Mercurial Versioncontrol
  77.375 +  \item NetBeans IDE
  77.376 +  \item Standard Isabelle Bundle
  77.377 +  \end{itemize}
  77.378 +  
  77.379 +\item Entwicklungsumgebung vom Isabelle-Team kopieren
  77.380 +  \begin{itemize}
  77.381 +  \item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
  77.382 +  \item jEdit als NetBeans Projekt definiert
  77.383 +  \end{itemize}
  77.384 +  
  77.385 +\item Relevante Komponenten implementieren
  77.386 +  \begin{itemize}
  77.387 +  \item jEdit Plugin f\"ur SD
  77.388 +  \item Verbindung des Plugins zu Isabelle
  77.389 +  \item zugeh\"origen Parser: nur ein Test in SML
  77.390 +  \end{itemize}
  77.391 +\end{enumerate}
  77.392 +
  77.393 +\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.
  77.394 +
  77.395 +\paragraph{Voraussetzungen f\"ur k\"unftige Entwicklung} geschaffen:
  77.396 +\begin{enumerate}
  77.397 +\item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
  77.398 +\item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
  77.399 +\item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
  77.400 +\end{enumerate}
  77.401 +
  77.402 +\section{R\"uckblick}
  77.403 +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.
  77.404 +
  77.405 +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\"onnen.
  77.406 +
  77.407 +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.
  77.408 +
  77.409 +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. 
  77.410 +
  77.411 +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.
  77.412 +
  77.413 +%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!
  77.414 +
  77.415 +%\chapter{Milestones und Arbeitsprotokolle}
  77.416 +%\section{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010} 
  77.417 +%\begin{itemize}
  77.418 +%\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010 
  77.419 +%\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
  77.420 +%\item Scala Actors: beendet am 12.08.2010
  77.421 +%\end{itemize}
  77.422 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  77.423 +%\hline
  77.424 +%Datum & T\"atigkeit & Einheiten \\ \hline
  77.425 +%12.07.2010 & Meeting: erste Besprechung und Erkl\"{a}rungen zu Isabelle, Isac und CTPs & 2 \\ \hline
  77.426 +%15.07.2010 & Recherche \"{u}ber Isabelle und CTPs & 3 \\ \hline
  77.427 +%20.07.2010 & Meeting: Besprechen der grunds\"{a}tzlichen Vorgangsweise und Ziele & 1 \\ \hline
  77.428 +%23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenh\"{a}nge mit Isac abkl\"{a}ren & 1 \\ \hline 
  77.429 +%30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise \"{u}ber Backs 'structured derivations'; Begriffserkl\"{a}rung & 3 \\ \hline
  77.430 +%01.08.2010 & Recherche: Buch f\"{u}r Scala & 2 \\ \hline
  77.431 +%03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
  77.432 +%05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1  \\ \hline
  77.433 +%06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
  77.434 +%08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
  77.435 +%09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
  77.436 +%12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
  77.437 +%24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
  77.438 +%25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
  77.439 +%27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline \hline
  77.440 +% & Anzahl der Einheiten & 44 \\
  77.441 +%\hline
  77.442 +%\end{tabular}
  77.443 +%
  77.444 +%
  77.445 +%\section{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
  77.446 +%\begin{itemize}
  77.447 +%\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
  77.448 +%\item Scala in NetBeans eingebunden: beendet am 22.07.2010
  77.449 +%\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010 
  77.450 +%\end{itemize}
  77.451 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  77.452 +%\hline
  77.453 +%Datum & T\"atigkeit & Einheiten \\ \hline
  77.454 +%19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
  77.455 +%20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
  77.456 +%21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
  77.457 +%22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
  77.458 +%23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausf\"{u}hren: testen & 5 \\ \hline 
  77.459 +%27.07.2010 & Isabelle-jEdit-Plugin: \"{a}nderungen an der Projektstruktur & 7 \\ \hline
  77.460 +%28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
  77.461 +%29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
  77.462 +%30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung \"{u}ber Erfahrungen mit Filestruktur & 4 \\ \hline
  77.463 +%02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
  77.464 +% & Anzahl der Einheiten & 60 \\
  77.465 +%\hline
  77.466 +%\end{tabular}
  77.467 +%
  77.468 +%\section{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010} 
  77.469 +%\begin{itemize}
  77.470 +%\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
  77.471 +%\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
  77.472 +%\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010 
  77.473 +%\end{itemize}
  77.474 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  77.475 +%\hline
  77.476 +%Datum & T\"atigkeit & Einheiten \\ \hline
  77.477 +%10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
  77.478 +%11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
  77.479 +%21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
  77.480 +%22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten f\"{u}r ISAC & 3 \\ \hline
  77.481 +%24.08.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 6 \\ \hline 
  77.482 +%26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach L\"{o}sungen & 3 \\ \hline
  77.483 +%28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
  77.484 +%29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
  77.485 +%30.08.2010 & Isabelle-jEdit-Plugin endlich vollst\"{a}ndig lauff\"{a}hig gebracht & 4 \\ \hline
  77.486 +%01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
  77.487 +%04.09.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 5 \\ \hline 
  77.488 +%20.09.2010 & Einrichten des Laptops f\"{u}r Isabelle-Isac & 4 \\ \hline 
  77.489 +%22.09.2010 & Meeting: Fortschrittsbericht, kurze Einf\"{u}hrung f\"{u}r Mitstreiter & 3 \\ \hline
  77.490 +%
  77.491 +%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 
  77.492 +%30.09.2010 & QN: Start mit \"{u}bersetzten der Sourcefiles & 5 \\ \hline
  77.493 +%02.10.2010 & QN: \"{U}bersetzten der Sourcefiles & 6 \\ \hline
  77.494 +%04.10.2010 & QN: \"{U}bersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
  77.495 +%05.10.2010 & QN: QN vollst\"andig in Scala \"{u}bersetzt, testen & 2 \\ \hline \hline
  77.496 +% & Anzahl der Einheiten & 71 \\
  77.497 +%\hline
  77.498 +%\end{tabular}
  77.499 +%
  77.500 +%\section{Experimentelle Parser implementiert: beendet am 04.03.2011} 
  77.501 +%\begin{itemize}
  77.502 +%\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
  77.503 +%\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
  77.504 +%\item Implementierung des Scala-Parsers: aufgeschoben
  77.505 +%\end{itemize}
  77.506 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  77.507 +%\hline
  77.508 +%Datum & T\"atigkeit & Einheiten \\ \hline
  77.509 +%28.01.2011 & Testen des SideKick-Parsers im Isabelle-Plugin & 2 \\ \hline
  77.510 +%29.01.2011 & Leichte Modifikationen des SideKick-Parsers im Isabelle-Plugin & 1 \\ \hline
  77.511 +%08.02.2011 & Besprechung zum Abschluss der praktischen Arbeiten & 1 \\ \hline
  77.512 +%16.02.2011 & Erstellen des Isabelle-Pur jar-Files & 1 \\ \hline
  77.513 +%19.02.2011 & Behebung des Problems mit den Umgebungsvariablen & 1 \\ \hline
  77.514 +%03.03.2011 & Erzeugung des Pure.jar Package m\"{o}glich & 2 \\ \hline
  77.515 +%04.04.2011 & Verbindung zwischen Plugin und Isabelle-Pure hergestellt und getestet  & 3 \\ \hline
  77.516 +%08.04.2011 & Besprechung: Implementierung des experimentellen Parsers wird nicht mehr durchgef\"{u}hrt & 1 \\ \hline \hline
  77.517 +% & Anzahl der Einheiten & 12 \\
  77.518 +%\hline
  77.519 +%\end{tabular}
  77.520 +%
  77.521 +%\section{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am TO.DO.2011}
  77.522 +%\begin{itemize}
  77.523 +%\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
  77.524 +%\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
  77.525 +%\item Dokumentation abgeschlossen: beendet am TO.DO.2011 
  77.526 +%\end{itemize}
  77.527 +%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  77.528 +%\hline
  77.529 +%Datum & T\"atigkeit & Einheiten \\ \hline
  77.530 +%01.03.2011 & Besprechung zum Ablauf der Dokumentationsarbeiten: Protokoll und Dokumentation & 1 \\ \hline
  77.531 +%01.03.2011 & Erstellen des Protokolls & 2 \\ \hline
  77.532 +%08.03.2011 & Besprechung zur Doku und zur Schnittstelle zu Isabelle-Pure & 1 \\ \hline
  77.533 +%17.03.2011 & Dokumentation schreiben & 2 \\ \hline
  77.534 +%19.03.2011 & Dokumentation schreiben & 3 \\ \hline
  77.535 +%24.04.2011 & Dokumentation schreiben & 2 \\ \hline
  77.536 +%25.04.2011 & Dokumentation schreiben & 4 \\ \hline
  77.537 +%27.04.2011 & Dokumentation schreiben & 2 \\ \hline
  77.538 +%28.04.2011 & Dokumentation: Fertigstellen der ersten Version & 3 \\ \hline \hline
  77.539 +% & Anzahl der Einheiten & 20 \\
  77.540 +%\hline
  77.541 +%\end{tabular}
  77.542 +%
  77.543 +%\section{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}
    78.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    78.2 +++ b/doc-isac/tactics.tex	Tue Sep 17 09:50:52 2013 +0200
    78.3 @@ -0,0 +1,26 @@
    78.4 +\chapter{\isac s tactics}
    78.5 +
    78.6 +\begin{description}
    78.7 +\item{\bf Init\_Proof\_Hid (dialogmode, formalization, specification)} transfers the arguments to the math engine, the latter two in order to solve the example automatically. The tactic is not intended to be used by the student; it generates a proof tree with an empty model.
    78.8 +\item{\bf Init\_Proof} generates a proof tree with an empty model.
    78.9 +\item{\bf Model\_Problem problem} determines a problemtype (eventually found in the hierarchy) to be used for modeling.
   78.10 +\item{\bf Add\_Given, Add\_Find, Add\_Relation formula} inputs a formula to the respective field in a model (necessary as long as there is no facility for the user to input formula directly, and not only select the respective tactic plus formula from a list).
   78.11 +\item{\bf Specify\_Theory theory, Specify\_Problem problem, Specify\_Method method} specifies the respective element of the knowledgebase.
   78.12 +\item{\bf Refine\_Problem problem} searches for a matching problem in the hierarchy below 'problem'.
   78.13 +\item{\bf Apply\_Method method} finishes the model and specification phase and starts the solve phase. 
   78.14 +\item{\bf Free\_Solve} initiates the solve phase without guidance by a method.
   78.15 +\item{\bf Rewrite theorem} applies 'theorem' to the current formula and transforms it accordingly (if possible -- otherwise error). 
   78.16 +\item{\bf Rewrite\_Asm theorem} is the same tactic as 'Rewrite', but stores an eventual assumption of the theorem (instead of evaluating the assumption, i.e. the condition)
   78.17 +\item{\bf Rewrite\_Set ruleset} similar to 'Rewrite', but applies a whole set of theorems ('ruleset').
   78.18 +\item{\bf Rewrite\_Inst (substitution, theorem), Rewrite\_Set\_Inst (substitution, ruleset)} similar to the respective tactics, but substitute a constant (e.g. a bound variable) in 'theorem' before application.
   78.19 +\item{\bf Calculate operation} calculates the result of numerals w.r.t. 'operation' (plus, minus, times, cancel, pow, sqrt) within the current formula.
   78.20 +\item{\bf Substitute substitution} applies 'substitution' to the current formula and transforms it accordingly.
   78.21 +\item{\bf Take formula} starts a new sequence of calculations on 'formula' within an already ongoing calculation. 
   78.22 +\item{\bf Subproblem (theory, problem)} initiates a subproblem within a calculation.
   78.23 +\item{\bf Function formula} calls a function, where 'formula' contains the function name, e.g. 'Function (solve $1+2x+3x^2=0\;\;\;x$)'. In this case the modelling and specification phases are suppressed by default, i.e. the solving phase of this subproblem starts immediately. 
   78.24 +\item{\bf Split\_And, Conclude\_And, Split\_Or, Conclude\_Or, Begin\_Trans, End\_Trans, Begin\_Sequ, End\_Sequ, Split\_Intersect, End\_Intersect} concern the construction of particular branches of the prooftree; usually suppressed by the dialog guide.
   78.25 +\item{\bf Check\_elementwise assumptions} w.r.t. the current formula which comprises elements in a list.
   78.26 +\item{\bf Or\_to\_List} transforms a conjunction of equations to a list of equations (a questionable tactic in equation solving).
   78.27 +\item{\bf Check\_postcond:} check the current formula w.r.t. the postcondition on finishing the resepctive (sub)problem. 
   78.28 +\item{\bf End\_Proof} finishes a proof and delivers a result only if 'Check\_postcond' has been successful before.
   78.29 +\end{description}
   78.30 \ No newline at end of file
    79.1 Binary file doc-isac/template_master_thesis.zip has changed
    80.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    80.2 +++ b/doc-isac/template_thesis_prelim.tex	Tue Sep 17 09:50:52 2013 +0200
    80.3 @@ -0,0 +1,42 @@
    80.4 +\documentclass{report}
    80.5 +\usepackage{a4}
    80.6 +\usepackage{times}
    80.7 +\usepackage{latexsym}
    80.8 +%\bibliographystyle{alpha}
    80.9 +\bibliographystyle{abbrv}
   80.10 +\usepackage{graphicx}
   80.11 +
   80.12 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   80.13 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   80.14 +
   80.15 +\title{Tentative Title:\\
   80.16 +  TODO}
   80.17 +\author{n.n.\\
   80.18 +{\tt TODO@xxx.at}}
   80.19 +
   80.20 +\begin{document}
   80.21 +\maketitle
   80.22 +\abstract{
   80.23 +TODO
   80.24 +}
   80.25 +
   80.26 +\chapter{Background}
   80.27 +
   80.28 +\chapter{Goal}
   80.29 +
   80.30 +\chapter{State of the Art}
   80.31 +
   80.32 +\chapter{Thesis Structure}
   80.33 +
   80.34 +\chapter{Timeline}
   80.35 +Milestones
   80.36 +
   80.37 +\section{TODO}
   80.38 +
   80.39 +\section{TODO}
   80.40 +
   80.41 +\section{TODO}
   80.42 +
   80.43 +
   80.44 +%\bibliography{bib/TODO}
   80.45 +\end{document}
    81.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    81.2 +++ b/doc-isac/tleh/ferialprakt.tex	Tue Sep 17 09:50:52 2013 +0200
    81.3 @@ -0,0 +1,96 @@
    81.4 +\documentclass[a4paper,12pt]{article}
    81.5 +%usepackage{ngerman}
    81.6 +
    81.7 +
    81.8 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    81.9 +\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   81.10 +
   81.11 +\title{Ferialpraxis\\ am Institut f\"ur Softwaretechnologie\\
   81.12 +       der Technischen Universit\"at Graz\\
   81.13 +       Arbeitsprotokoll}
   81.14 +\author{Thomas Leh\\
   81.15 +       t.leh@gmx.at}
   81.16 +\date{\today}
   81.17 +
   81.18 +\begin{document}
   81.19 +\maketitle
   81.20 +
   81.21 +\section{Pers\"ohnliche Zielsetzung}
   81.22 +Im letzen Sommer vor der Maturaklasse wollte ich mich schon \"uber 
   81.23 +Studienm\"oglichkeiten informieren. 
   81.24 +Meine Interessen liegen im Bereich der Computerwissenschaften und ich war
   81.25 +deshalb froh, die Praktikumsstelle bekommen zu haben.
   81.26 +Dabei wollte ich Folgendes erzielen:
   81.27 +\begin{itemize}\itemsep1pt
   81.28 +\item Genereller Einblick in die Software-Entwicklung 
   81.29 +\item Einblick ins Programmieren 
   81.30 +\item Informationen \"uber die Studienrichtung Informatik auf der TU
   81.31 +\item Arbeitserfahrung im Bereich der Informatik
   81.32 +\end{itemize}
   81.33 +\newpage
   81.34 +\section{Arbeitsprotokoll}
   81.35 +\begin{center}
   81.36 +\begin{tabular}{l|l|r}
   81.37 +Datum   & T\"atigkeit & Std. \\ \hline
   81.38 +12.7.11
   81.39 + & Demonstration des ``educational math assistant \sisac'' &7.5 \\
   81.40 + & Demonstration des Theorem Provers Isabelle & \\
   81.41 + & Einf\"uhrung Linux, objektorientierte/funktionale Programmierung& \\
   81.42 + & Installation: Isabelle, \sisac-core, Mercurial & \\ \hline
   81.43 +13.7.11 & Einf\"uhrung Latex und ML Basic & 7.5 \\
   81.44 + & Konfiguration von Mercurial & \\
   81.45 + & ML Basics \"Ubungen  &  \\\hline
   81.46 +14.7.11 & Einf\"uhrung ML Functions und ML Combinators  &7.5 \\
   81.47 + &  \"Ubungen ML Functions und ML Combinators s & \\ \hline
   81.48 +15.7.11&  Einf\"uhrung ML Datastructure  &7.5 \\ 
   81.49 + & Ml Datastructure \"Ubungen & \\
   81.50 + & Informationen \"uber Rewriting und MathEngine & \\  \hline
   81.51 +18.7.11 & Einf\"uhrung in die Fehlersuche (ISAC-Tests)  & 7.5 \\ 
   81.52 + & Fehlersuche im Directory ``Frontend'' &  \\ \hline
   81.53 +19.7.11 & Fehlersuche im Directory ``Knowledge''   & 7.5 \\
   81.54 + & Uncommanding funktionierender Tests   & \\ \hline
   81.55 +20.7.11 & Einf\"uhrung Fehlerbeseitigung (ISAC-Tests) &  7.5  \\
   81.56 + & Fehlerbeseitigung im File polyminus.sml  &  \\ \hline
   81.57 +21.7.11 & Informationen \"uber Studienrichtungen der Informatik & 7.5 \\
   81.58 + & Fehlerbeseitigung im File integrate.sml  &  \\ \hline
   81.59 +22.7.11 & Fehlersuche in der File ``diffapp''   &  7.5 \\ 
   81.60 +& Beseitigung des Fehlers   & \\ \hline
   81.61 +25.7.11 & Fehlersuche  in der File ``diff.sml''  & 7.5\\ 
   81.62 +& Fehlerbeseitigung in der File ``diff.sml``& \\\hline
   81.63 +26.7.11 & updaten des ``scr'' Directories & 7.5  \\ 
   81.64 +& Fehlersuche im ``scr'' Directory & \\ \hline
   81.65 +27.7.11 & updaten des ``scr'' Directories  &  7.5 \\
   81.66 +& Fehlerbehebung in den Files eqsystem.thy, atools.thy & \\  \hline
   81.67 +28.7.11 & Abschluss: Check des builds, check aller Tests & 7.5 \\
   81.68 + & Fertigstellung des Protokolls  &   \\ \hline
   81.69 +29.7.11 & Austausch mit Ferialpraktikanten von anderen Fakult\"aten & 7.5 \\
   81.70 +\end{tabular}
   81.71 +\end{center}
   81.72 +\newpage
   81.73 +\section{R\"uckblick auf das Praktikum}
   81.74 +
   81.75 +
   81.76 +
   81.77 +\paragraph{Im Bereich der Software-Entwicklung} wurden meine Erwartungen 
   81.78 +erf\"ullt. Ich wei\ss \ jetzt wie bei einem gr\"o\ss eren Software-Projekt 
   81.79 +gearbeitet wird und habe mich mit den Umgang mit der Versionsverwaltungssoftware
   81.80 +Mercurial vertraut gemacht. Des weiteren wurde mir die wichtige Rolle von Tests in
   81.81 +Software-Projekten bewusst gemacht.
   81.82 +
   81.83 +\paragraph{Von der Programmierung} habe ich mir einen gro\ss en \"Überblick
   81.84 + verschaffen k\"onnen. Dabei habe ich vorallem einiges zum Thema ``Funktionales 
   81.85 +Programmieren (SML)'' erfahren und wurde mit dem Editor-Programm ``Jedit'' 
   81.86 +vertraut gemacht.
   81.87 +
   81.88 +\paragraph{Informationen \"uber die Studienrichtungen der Informatik} konnte ich 
   81.89 +auch gewinnen. Ich habe Zug\"ange bei tugonline in Erfahrung gebracht und habe 
   81.90 +mich \"uber die Studienrichtungen Informatik, Telematik und Softwareentwicklung-
   81.91 +Wirtschaft informiert.
   81.92 +
   81.93 +\paragraph{Arbeitserfahrung} konnte ich auch einige erlangen. Es herrschte eine 
   81.94 +sehr komplexe, und vor allem ungewohnte Arbeitsumgebung (Linux,Mercurial,Isabelle)
   81.95 +an die es sich zu gew\"ohnen galt. Es wurde mit mehreren dutzend Files mit einigen
   81.96 +tausend Programmzeilen gearbeitet.
   81.97 +
   81.98 +
   81.99 +\end{document}
    82.1 --- a/src/Doc/isac/CTP-userinterfaces.bib	Mon Sep 16 12:27:20 2013 +0200
    82.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    82.3 @@ -1,161 +0,0 @@
    82.4 -@inproceedings{Aspinall:2007:FIP:1420412.1420429,
    82.5 - author = {Aspinall, David and L\"{u}th, Christoph and Winterstein, Daniel},
    82.6 - title = {A Framework for Interactive Proof},
    82.7 - booktitle = {Proceedings of the 14th symposium on Towards Mechanized Mathematical Assistants: 6th International Conference},
    82.8 - series = {Calculemus '07 / MKM '07},
    82.9 - year = {2007},
   82.10 - isbn = {978-3-540-73083-5},
   82.11 - location = {Hagenberg, Austria},
   82.12 - pages = {161--175},
   82.13 - numpages = {15},
   82.14 - url = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
   82.15 - doi = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
   82.16 - acmid = {1420429},
   82.17 - publisher = {Springer-Verlag},
   82.18 - address = {Berlin, Heidelberg},
   82.19 -}
   82.20 -
   82.21 -@Book{armstrong:erlang96,
   82.22 -  author = 	 {Armstrong, Joe and others},
   82.23 -  title = 	 {Concurrent Programming in Erlang},
   82.24 -  publisher = {Prentice Hall},
   82.25 -  year = 	 {1996}
   82.26 -}
   82.27 -
   82.28 -@TechReport{odersky:scala06,
   82.29 -  author = 	 {Odersky, Martin and others},
   82.30 -  title = 	 {An Overview of the Scala Programming Language},
   82.31 -  institution =  {\'Ecole Polytechnique F\'ed\'erale de Lausanne (EPFL)},
   82.32 -  year = 	 {2006},
   82.33 -  type = 	 {Technical Report LAMP-REPORT-2006-001},
   82.34 -  address = 	 {1015 Lausanne, Switzerland},
   82.35 -  note = 	 {Second Edition},
   82.36 -  annote = 	 {http://www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf}
   82.37 -}
   82.38 -
   82.39 -@article{Haller:2009:SAU:1496391.1496422,
   82.40 - author = {Haller, Philipp and Odersky, Martin},
   82.41 - title = {Scala Actors: Unifying thread-based and event-based programming},
   82.42 - journal = {Theor. Comput. Sci.},
   82.43 - volume = {410},
   82.44 - issue = {2-3},
   82.45 - month = {February},
   82.46 - year = {2009},
   82.47 - issn = {0304-3975},
   82.48 - pages = {202--220},
   82.49 - numpages = {19},
   82.50 - url = {http://portal.acm.org/citation.cfm?id=1496391.1496422},
   82.51 - doi = {10.1016/j.tcs.2008.09.019},
   82.52 - acmid = {1496422},
   82.53 - publisher = {Elsevier Science Publishers Ltd.},
   82.54 - address = {Essex, UK},
   82.55 - keywords = {Actors, Concurrent programming, Events, Threads},
   82.56 -} 
   82.57 -
   82.58 -@InProceedings{scala:jmlc06,
   82.59 -  author =       {Philipp Haller and Martin Odersky},
   82.60 -  title =        {Event-Based Programming without Inversion of Control},
   82.61 -  booktitle =    {Proc. Joint Modular Languages Conference},
   82.62 -  year =         2006,
   82.63 -  series =       {Springer LNCS}
   82.64 -}
   82.65 -
   82.66 -
   82.67 -@InProceedings{makarius:isa-scala-jedit,
   82.68 -  author = 	 {Makarius Wenzel},
   82.69 -  title = 	 {Asyncronous Proof Processing with {Isabelle/Scala} and {Isabelle/jEdit}},
   82.70 -  booktitle = {User Interfaces for Theorem Provers (UITP 2010)},
   82.71 -  year = 	 {2010},
   82.72 -  editor = 	 {C. Sacerdoti Coen and D. Aspinall},
   82.73 -  address = 	 {Edinburgh, Scotland},
   82.74 -  month = 	 {July},
   82.75 -  organization = {FLOC 2010 Satellite Workshop},
   82.76 -  note = 	 {http://www4.in.tum.de/~wenzelm/papers/async-isabelle-scala.pdf}
   82.77 -}
   82.78 -
   82.79 -@Book{db:dom-eng,
   82.80 -  author = 	 {Bj{\o}rner, Dines},
   82.81 -  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
   82.82 -  publisher = 	 {JAIST Press},
   82.83 -  year = 	 {2009},
   82.84 -  month = 	 {Feb},
   82.85 -  series = 	 {COE Research Monograph Series},
   82.86 -  volume = 	 {4},
   82.87 -  address = 	 {Nomi, Japan}
   82.88 -}
   82.89 -
   82.90 -@inproceedings{Haftmann-Nipkow:2010:code,
   82.91 -  author =      {Florian Haftmann and Tobias Nipkow},
   82.92 -  title =       {Code Generation via Higher-Order Rewrite Systems},
   82.93 -  booktitle =   {Functional and Logic Programming, 10th International
   82.94 -Symposium: {FLOPS} 2010},
   82.95 -  year =        {2010},
   82.96 -  publisher =   {Springer},
   82.97 -  series =      {Lecture Notes in Computer Science},
   82.98 -  volume =      {6009}
   82.99 -}
  82.100 -
  82.101 -@Manual{coq1999,
  82.102 -  title = 	 {The Coq Proof Assistant},
  82.103 -  author = 	 {Barras, B. and others},
  82.104 -  organization = {INRIA-Rocquencourt - CNRS-ENS Lyon},
  82.105 -  month = 	 {July},
  82.106 -  year = 	 {1999},
  82.107 -  pnote={},status={cited},source={mkm01.caprotti},location={}  
  82.108 -}
  82.109 -
  82.110 -@Book{meta-ML,
  82.111 -  author = 	 {Gordon,M. and Milner,R.  and Wadsworth,C. P.},
  82.112 -  title = 	 {Edinburgh LCF: A Mechanised Logic of Computation},
  82.113 -  publisher = 	 { Springer-Verlag},
  82.114 -  year = 	 {1979},
  82.115 -  volume = 	 {78},
  82.116 -  series = 	 {Lecture Notes in Computer Science}
  82.117 -}
  82.118 - 
  82.119 -@book{Paulson:Isa94,
  82.120 -        title={Isabelle: a generic theorem prover}, 
  82.121 -        author={Paulson, Lawrence C. }, publisher={Springer-Verlag},year={1994}, 
  82.122 -	volume={828},series={Lecture Notes in Computer Science},address={},edition={},month={}, 
  82.123 -	note={With contributions by Topias Nipkow},
  82.124 -        status={},source={},location={-} 
  82.125 -        }  
  82.126 -
  82.127 -@Book{pl:milner97,
  82.128 -  author = 	 {Robin Milner and Mads Tofte and Robert Harper and David MacQueen},
  82.129 -  title = 	 {The Definition of Standard ML (Revised)},
  82.130 -  publisher = 	 {The MIT Press},
  82.131 -  year = 	 1997,
  82.132 -  address =	 {Cambridge, London},
  82.133 -  annote =	 {97bok375}
  82.134 -}
  82.135 -
  82.136 -@Article{back-grundy-wright-98,
  82.137 -  author = 	 {Back, Ralph and Grundy, Jim and von Wright, Joakim},
  82.138 -  title = 	 {Structured Calculational Proof},
  82.139 -  journal = 	 {Formal Aspects of Computing},
  82.140 -  year = 	 {1998},
  82.141 -  number = 	 {9},
  82.142 -  pages = 	 {469-483}
  82.143 -}
  82.144 -
  82.145 -@Manual{isar-impl,
  82.146 -  title = 	 {The {Isabelle/Isar} Implementation},
  82.147 -  author = 	 {Makarius Wenzel},
  82.148 -  month = 	 {April 19},
  82.149 -  year = 	 {2009},
  82.150 -  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
  82.151 -}
  82.152 -
  82.153 -@InProceedings{wenzel:isar,
  82.154 -  author = 	 {Wenzel, Markus},
  82.155 -  title = 	 {Isar - a Generic Interpretative Approach to Readable Formal Proof Documents},
  82.156 -  booktitle = 	 {Theorem Proving in Higher Order Logics},
  82.157 -  year = 	 {1999},
  82.158 -  editor = 	 {G. Dowek, A. Hirschowitz, C. Paulin, L. Thery},
  82.159 -  series = 	 {LNCS 1690},
  82.160 -  organization = {12th International Conference TPHOLs'99},
  82.161 -  publisher = {Springer}
  82.162 -}
  82.163 -
  82.164 -
    83.1 --- a/src/Doc/isac/CTP-userinterfaces.tex	Mon Sep 16 12:27:20 2013 +0200
    83.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    83.3 @@ -1,445 +0,0 @@
    83.4 -\documentclass{article}
    83.5 -\usepackage{a4}
    83.6 -\usepackage{times}
    83.7 -\usepackage{latexsym}
    83.8 -\bibliographystyle{alpha}
    83.9 -\usepackage{graphicx}
   83.10 -
   83.11 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   83.12 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   83.13 -\def\Problem{ {\tt Problem }}
   83.14 -
   83.15 -\title{Userinterfaces for Computer Theorem Provers.\\
   83.16 -	Contributions to Isabelle
   83.17 -}
   83.18 -
   83.19 -\author{G. Schafhauser, A. Schulhofer, M. Steger\\
   83.20 -Knowledge Management Institute (KMI)\\
   83.21 -TU Graz}
   83.22 -
   83.23 -\begin{document}
   83.24 -\maketitle
   83.25 -\abstract{
   83.26 -This paper accompanies a pre-study on a sub-project planned within the \sisac-project. The goal of this sub-project is to extend the userinterface of the theorem prover Isabelle such, that Structured Derivations according to R.J.Back are interactively processed. The sub-project is one step towards using the upcoming Isabelle/Isar/Scala layer for \sisac.
   83.27 -
   83.28 -The paper comprises three parts: (1) Ample space is given to background information about the state of the art in user interfaces for theorem provers and about the upcoming requirements for future developments. (2) focuses the strategy of Isabelle and decisions in order to cope with future requirements. (3) provides a protocol of preparatory work for the sub-project.
   83.29 -
   83.30 -By the way, this paper shall serve as an entry point for students interested in joining the the work propared.}
   83.31 -
   83.32 -\section{Introduction}\label{intro}
   83.33 -Computer Theorem Provers (CTPs \footnote{The term CTP is used to address two different things in this paper: (1) the academic discipline comprising respective theories as well as (2) the products developed within this discipline, the provers and the respective technology.}) have a tradition as long as Computer Algebra Systems (CAS), another kind of mathematics assistants. However, CTPs task of proving is more challenging than calculating; so, in contrary to CASs, CTPs are not yet in widespread use --- not yet, because CTPs are on the step into industrial use in the current decade: Safe-critical software requires to be proven correct more and more \cite{db:dom-eng}, and the technology of CTP becomes ready to accomplish the task of efficiently proving hundreds of proof obligations.
   83.34 -
   83.35 -The present shift of the predominant user group from academic experts to software engineers raises novel user requirements for graphical user interfaces (GUI) of CTP. CTPs will become components of integrated development environments, and the knowledge bases have to scale up to industrial size.
   83.36 -
   83.37 -Two issues are particularly challenging: First, future knowledge bases (containing specifications, programs, tests etc) will under joint construction of many engineers. So requirements concerning cooperative work arise as already known from distributed repositories and version management.
   83.38 -
   83.39 -Second, CTP tends to exhaust resources in memory and in run-time. So, CTP will take profit from multicore processors upcoming in this decade --- and CTP are best suited to meet the architectural challenges raised by parallel programming, since this kind of mathematics assistants generally follow rigorous architectural principles and are comparably easy to adapt to these challenges \cite{makarius:isa-scala-jedit}.
   83.40 -
   83.41 -\medskip The paper is organised as follows: First a survey on CTP is given, Sect.\ref{ctp-techn} introduces two prominent CTPs, Sect.\ref{gui-coq-isa} describes their present user interfaces and Sect.\ref{gui-requir} goes into details with the novel requirements mentioned. Then Isabelle's plans for re-designing the user interface are presented: Sect.\ref{ml-users} motivates the strategy of how to approach the users' world, Sect.\ref{scala-medi} describes the rather recent programming language Scala connecting the world of languages for mathematics with the users' world and Sect.\ref{actors} goes into details with Scala's actor library. Finally possible contributions of the \sisac-team at TUG are discussed and prerequisites for such contributions presented: Sect.\ref{struct-der} presents a format for calculations particularly appropriate for education, which requires CTP support, Sect.\ref{plugin} describes plug-in technology required and Sect.\ref{netbeans} notes crucial details of proper project set-up in an integrated development environment.
   83.42 -
   83.43 -%Georg
   83.44 -\section{State of the art in CTP Interfaces}
   83.45 -
   83.46 -\subsection{A European technology: Coq and Isabelle}\label{ctp-techn}
   83.47 -%     http://en.wikipedia.org/wiki/Coq\\
   83.48 -%     http://coq.inria.fr/
   83.49 -%
   83.50 -%     http://en.wikipedia.org/wiki/Isabelle\_(theorem\_prover)\\
   83.51 -%     http://isabelle.in.tum.de/index.html
   83.52 -%
   83.53 -%why math -- functional: some of the languages have been specifically designed for constructing software for symbolic computation (SC). 
   83.54 -%%+ required for \ref{ml-users}
   83.55 -%
   83.56 -%SC http://en.wikipedia.org/wiki/Symbolic\_computation
   83.57 -%% mainly does not compute numerical values, but terms containing variables like functions (symbols)
   83.58 -%
   83.59 -%The LCF project
   83.60 -%http://hopl.murdoch.edu.au/showlanguage.prx?exp=8177
   83.61 -%specifically designed a 'meta language' (ML)
   83.62 -%http://en.wikipedia.org/wiki/ML\_(programming\_language)
   83.63 -%\cite{pl:milner97}
   83.64 -%for developing CTP
   83.65 -\subsubsection{Standard ML}
   83.66 -Standard ML is a general-purpose, modular, functional programming language \cite{pl:milner97}.
   83.67 -Programs written in Standard ML consist of expressions to be evaluated, as opposed to statements or commands. 
   83.68 -Functional programming languages constitute a family very different of object orientated languages, see Sect. \ref{ml-users}. ML originated from the LCF-project(Logic for Computable Functions)\cite{meta-Ml}, where it had been developed as a meta language. Since ML has been standardised this family of language is called Standard ML. Important for the logical foundation of SML is the $\lambda$-calculus.
   83.69 -%http://en.wikipedia.org/wiki/Standard_M 
   83.70 -\subsubsection{Coq}
   83.71 -Coq is an interactive theorem prover, developed in France.
   83.72 -It is programmed in Objective Caml, an ML based programming language.
   83.73 -It has the ability to express  mathematical  assertions and check proof of mathematical assertions. 
   83.74 -Furthermore Coq includes automatic theorem proving tactics and decision procedures.
   83.75 -Properties, programs and proofs are written a functional programming language called the Calculus of Inductive Constructions (CIC).
   83.76 -Proof development in Coq is done through a language of tactics that allows a user-guided proof process \cite{coq1999}.
   83.77 -Another feature of Coq is “that it can automatically extract executable programs from specifications, as either Objective Caml 
   83.78 -or Haskell source code.“
   83.79 -There are many easy-to-read introductions to Coq \footnote{http://coq.inria.fr/a-short-introduction-to-coq} on the internet.
   83.80 -\subsubsection{Isabelle}
   83.81 -Isabelle is an interactive theorem proving framework for high-level natural deduction proofs \cite{Paulson:Isa94}, written in Standard ML. 
   83.82 -Isabelle is developed at University of Cambridge, Technische Universit\"at M\"unchen
   83.83 -and Universit\'e Paris-Sud. Isabelle is called a framework, because it implements several object logics.
   83.84 -The most widespread logic of Isabelle is Isabelle/HOL, short for higher-order logic.
   83.85 -Isabelle/HOL includes several  specification tools, e.g. for data-types, inductive definitions and functions with complex pattern matching.
   83.86 -Proofs are written in the structured proof language Isar \cite{wenzel:isar}.Isabelle implements several tools, e.g. a reasoner, a simplifier and powerful automatic provers(Sledgehammer), increase the user's productivity in theorem proving. 
   83.87 -Isabelle provides notational support: new notations can be introduced, using normal mathematical symbols.
   83.88 -Definitions and proofs may include \LaTeX{} source, from which Isabelle can automatically generate typeset documents.
   83.89 -Isabelle/HOL allows to turn executable specifications directly into code in SML, OCaml, and Haskell \cite{Haftmann-Nipkow:2010:code}.
   83.90 -%(http://www.cl.cam.ac.uk/research/hvg/Isabelle/overview.html)
   83.91 -\subsection{Userinterfaces for CTP: Coq and Isabelle}\label{gui-coq-isa}
   83.92 -%     CoqIDE, ..
   83.93 -%         http://coq.inria.fr/what-is-coq?q=node/57\\
   83.94 -%         earlier than Isabelle/jEdit
   83.95 -%
   83.96 -%     ProofGeneral for Isabelle
   83.97 -%         http://proofgeneral.inf.ed.ac.uk/\\
   83.98 -%         emacs stone age ?
   83.99 -\subsubsection{Coq Integrated Development Environment}
  83.100 -CoqIDE\footnote{http://coq.inria.fr/V8.1/refman/Reference-Manual016.html}, short for Coq Integrated Development Environment, is a graphical interface for Coq. It is written in Ocaml.
  83.101 -Its main purpose is to allow the user to navigate forward and backward into a Coq file, 
  83.102 -executing corresponding commands or undoing them respectively. 
  83.103 -There are several  buffers for helping to write proof scripts.
  83.104 -Among all these buffers, there is always one which is the current running buffer, whose name is displayed on a green background,
  83.105 -which is the one where Coq commands are currently executed.  
  83.106 -CoqIDE provides also a feedback system for the user. 
  83.107 -Therefore the background is green when a command succeeds, otherwise an error message is displayed in the message window and the error location is underlined red.
  83.108 -CoqIDE offers only basic editing commands, therefore it is possible to launch another more sophisticated text editor. 
  83.109 -Furthermore CoqIde provides a proof wizard “for automatically trying to solve the current goal using simple tactics.”
  83.110 -Another features of this IDE are the customisation options, which can be accessed by the Edit menu. 
  83.111 -This allows the user to change the appearance of the IDE.
  83.112 -
  83.113 -
  83.114 -\begin{figure}[htbp]
  83.115 -\centering
  83.116 -%\includegraphics[bb=0 0 10 10]{coqide.png}
  83.117 -\includegraphics[scale=0.20]{fig/coqide}
  83.118 -\caption{CoqIDE main screen}
  83.119 -\end{figure}
  83.120 -
  83.121 -
  83.122 -%(http://coq.inria.fr/V8.1/refman/Reference-Manual016.html)
  83.123 -\subsubsection{Proof General for Isabelle}
  83.124 -Proof General is a generic front-end for proof assistants \cite{Aspinall:2007:FIP:1420412.1420429}, based on the text editor Emacs.
  83.125 -It has been developed at the University of Edinburgh with contributions from other sites.
  83.126 -Proof General supports the following proof assistants: Isabelle, Coq, PhoX, LEGO.
  83.127 -It is used to write proof scripts. A Proof Script is a sequence of commands sent to theorem prover. 
  83.128 -The communication between the user and the theorem prover takes place via two or  more Emacs text widgets.
  83.129 -Therefore the user sees only the output from the latest proof step.
  83.130 -
  83.131 -
  83.132 -Isabelle/Isar\footnote{http://proofgeneral.inf.ed.ac.uk/} Proof General has full support for multiple file scripting, with dependencies between theories communicated between Isabelle and Proof General. 
  83.133 -There is full support for Unicode Tokens, using the Isabelle print mode for X Symbol tokens. Many Isabelle theories have X Symbol syntax already defined 
  83.134 -and it's easy to add to your own theories. 
  83.135 -%(http://proofgeneral.inf.ed.ac.uk/fileshow.php?file=releases%2FProofGeneral%2Fisar%2FREADME)
  83.136 -\begin{figure}[htbp]
  83.137 -\centering
  83.138 -\includegraphics[scale=0.30]{fig/pgisabelle}
  83.139 -\caption{Proof General for Isabelle}%
  83.140 -\end{figure}
  83.141 -
  83.142 -\subsubsection{Isabelle/Jedit}
  83.143 -jEdit is a text editor for programmers, written in Java.
  83.144 -Compared to fully-featured IDEs, such as Eclipse or NetBeans, jEdit is much 
  83.145 -smaller and better focused on its primary task of text editing.
  83.146 -The general look of the Isabelle/jEdit plug-in is similar to existing Java IDEs \cite{makarius:isa-scala-jedit}.
  83.147 -The main Isabelle/jEdit plug-in consists of ten small Scala files that augment some key jEdit components in order to provide a metaphor of asynchronous proof document editing. 
  83.148 -Isabelle/jEdit integrates the jEdit 4.3.2 framework  and some further  jEdit plug-ins. 
  83.149 -It also implements custom-made 'IsabelleText Unicode' font that actually contains the usual Isabelle symbols that users expect from long 
  83.150 -years of Proof General X-Symbol support.
  83.151 -The editor provides useful feedback, via semantic information from the processed document in the background. 
  83.152 -A lot of information can be directly attached 
  83.153 -to the source text, via colouring, tool-tips, pop-ups etc.
  83.154 -
  83.155 -\subsection{Upcoming requirements for userinterfaces in CTP}\label{gui-requir}
  83.156 -%     @ interaction close to tty (Telegraph)\\
  83.157 -%       BUT: separate parts in {\em one} proof could be processed in parallel
  83.158 -%
  83.159 -%     @ http://www.informatik.uni-bremen.de/uitp/
  83.160 -%
  83.161 -%     @ ... see\\
  83.162 -%       http://www4.in.tum.de/~wenzelm/papers/async-isabelle-scala.pdf,\\
  83.163 -%       http://www4.in.tum.de/~wenzelm/papers/parallel-isabelle.pdf
  83.164 -"After several decades, most proof assistants are still centred around TTY-based interaction in a
  83.165 -tight read-eval-print loop.
  83.166 -All Emacs-based GUI's for CTPs follow this synchronous
  83.167 -model based on single commands with immediate response, meaning that the editor waits for the
  83.168 -prover after each command", according to \cite{makarius:isa-scala-jedit}. As to multicore politics of leading semiconductor chip manufacturer, parallelism in software technology has become an issue.
  83.169 -Therefore the support of parallelism in CTP technology improves the performance and multiuser support.
  83.170 -%So it is necessary to use proof documents instead of proof scripts.  
  83.171 -%Proof scripts are  sequences of commands however proof documents are structured texts. 
  83.172 -%So the proof document idea seems to guarantee the perfect support for parallelism in the CTP technology. 
  83.173 -Proof language Isar is structured such, that different parts can be interpreted in parallel. For instance, some might employ an 
  83.174 -an automated prover for some minutes, while the user wants to proceed with other parts of the same proof.
  83.175 -A well-established concept able to cope with such parallel processing in actors, as introduced by Erlang.
  83.176 -This will be discussed in more detail in Sect. \ref{actors}
  83.177 -
  83.178 -
  83.179 -%Andreas
  83.180 -\section{Isabelle's plans for new userinterfaces}\label{gui-plans}
  83.181 -
  83.182 -The following observations lead to novel requirements for CTPS' userinterface:
  83.183 -
  83.184 -\begin{itemize}
  83.185 -\item theorem proving will be integrated into software development
  83.186 -\item hundreds of proof obligations are generated during a software verification process
  83.187 -\item so the final goal of Isabelle's planning is integration with other software development tools in an integrated development environment (IDE)
  83.188 -\item still many principal issues need to be clarified with respect to integration of CTP and other development tools. So engaging into details makes no sense at the present, and Isabelle will approach the final goal via experimental intermediate steps of integration
  83.189 -\item favourite IDE is jEdit, because it is clearer than Eclipse or NetBeans. The reason behind this choice follows in section \ref{plugin}
  83.190 -\end{itemize}
  83.191 -
  83.192 -These indicate design decisions are sketched in the sequel.
  83.193 -
  83.194 -\subsection{Connect ML-world to the users' world via JVM}\label{ml-users}
  83.195 -In Sect.\ref{ctp-techn} reasons have been given, why mathematics software at the state-of-the-art cannot be written in Java or the like. On the other side, Sect.\ref{gui-requir} stated requirements for mathematical userinterfaces, which cannot be accomplished by ML-like languages. These requirements can be best accomplished by languages like Java, which have powerful libraries available for convenient assembly of GUIs.
  83.196 -
  83.197 -\paragraph{Example: a functional mathematics engine} as the experimental one in the \sisac-project is given by the following signature:
  83.198 -{\it
  83.199 -\begin{tabbing}
  83.200 -\=xx\=xxxxxxxxxxxxxxxxxxxxxxxxx\=\kill
  83.201 -\>signature INTERPRETER =\\
  83.202 -\>sig\\
  83.203 -\>\>type calcstate\\
  83.204 -\>\>type step = formula * position * tactic\\
  83.205 -\>\> \\
  83.206 -\>\>val do\_next : program $\rightarrow$ calcstate $\rightarrow$ (calcstate * step)\\
  83.207 -\>\>val apply\_tactic : program $\rightarrow$ calcstate $\rightarrow$ position $\rightarrow$ tactic $\rightarrow$ (calcstate * step list)\\
  83.208 -\>\>val apply\_formula : program $\rightarrow$ calcstate $\rightarrow$ position $\rightarrow$ formula $\rightarrow$ (calcstate * step list)\\
  83.209 -\>end
  83.210 -\end{tabbing}}
  83.211 -The three essential functions are \textit{do\_next}, which reads a \textit{program} for determining the next \textit{step} in a calculation, the function \textit{apply\_tactic}, which applies a \textit{tactic} input by the user to the current \textit{position} in a calculation and thus may produce a list of \textit{step}s and the function \textit{apply\_formula}, which applies an input \textit{formula} accordingly.
  83.212 -
  83.213 -Now, the point with functional programming is, that the functions do {\em not} cause persistent updates in some memory, rather: all three functions above take the current state of the calculation, \textit{calcstate}, as an argument and after they have done they work return the updated \textit{calcstate}.
  83.214 -
  83.215 -There are several advantages of this kind of programming: more straight forward verification, which is not discussed here, and other features. For instance, given the three functions above, it is easy to undo steps of calculations, or go back to an earlier step of calculations: one just needs to store the \textit{calcstate}s (in a list), even without knowing the details of the \textit{calcstate}, which thus can be encapsulated for internal access only.
  83.216 -
  83.217 -\paragraph{Example: an object-oriented wrapper} as required for embedding the above mathematics engine into an object-oriented system. Such a wrapper may look like this:
  83.218 -{\footnotesize
  83.219 -\begin{verbatim}
  83.220 -   public class Calcstate
  83.221 -   {
  83.222 -     private Program program_;
  83.223 -     private Tree<Step> calcstate_;
  83.224 -     private Position position_;
  83.225 -     
  83.226 -     public Calcstate(Program program) {...}
  83.227 -     public Step do_next() {...}
  83.228 -     public List<Step> apply_tactic(Tactic tactic) {...}
  83.229 -     public List<Step> apply_formular(Formular formular) {...}
  83.230 -   }
  83.231 -\end{verbatim} 
  83.232 -}
  83.233 -\subsection{Scala as a mediator between ML and JVM}\label{scala-medi}
  83.234 -Scala \footnote{http://www.scala-lang.org} is a hybrid programming language. It combines object-oriented programming and functional programming. Scala runs on the Java Virtual Machine and is byte-code compatible with existing Java programs. The compilation model of Scala is nearly the same as the Java's model. So existing tools, libraries and applications can be used with Scala. The syntax of Scala is similar to Java and ML. A number of keywords plus the block syntax is adopted from Java and from ML the syntax for type annotation and declaration. The source-code is typically reduced, concisely and more compact compared to equivalent Java code \footnote{http://www.scalasolutions.com/scala}.
  83.235 -
  83.236 -Scala is pure object-oriented, this means every value is an object \cite{odersky:scala06}. The same is true for primitive data types, because compiler-generated byte code is using primitive data types. Known design patterns from OOP can be used with Scala as well. "Data types and behaviours of objects are described by classes and traits" \footnote{http://en.wikipedia.org/wiki/Scala\_(programming\_language)}. Traits not only consist of definitions, they also can contain implementations of methods. To avoid the problems of multiple inheritance, classes are able to extend various traits, this is a flexible mixin-based mechanism. The keyword Object is used to implement a Singleton-Class.
  83.237 -
  83.238 -In Scala every function is a value, hence Scala is also a functional language \cite{odersky:scala06}. Functions in Scala are first-class objects, this means it is possible to pass a function as a parameter, return a function from a subroutine, or assign to a variable. Scala also supports case classes, which are used for pattern matching. Case classes are regular classes which export their constructor parameters \footnote{http://de.wikipedia.org/wiki/Scala\_(Programmiersprache)}. Furthermore Scala allows functions to be nested.
  83.239 -
  83.240 -Scala is more statically typed than Java, but is able to infer types by usage. So most static type declarations are optional. This static type system ensures a safe and coherent use of abstraction. Scala supports \footnote{http://en.wikipedia.org/wiki/Scala\_(programming\_language)}:
  83.241 -
  83.242 -\begin{itemize}
  83.243 -\item generic classes
  83.244 -\item variance annotations
  83.245 -\item upper and lower type bounds
  83.246 -\item classes and abstract types as object members
  83.247 -\item compound types
  83.248 -\item explicitly typed self references
  83.249 -\item views
  83.250 -\item polymorphic methods
  83.251 -\end{itemize}
  83.252 -
  83.253 -Static types need no explicit declaration but can be given to give the code some clarity.
  83.254 -
  83.255 -Scala supports threads, but the Scala library contains an actor model inspired from Erlang \cite{armstrong:erlang96}. Concurrency and Scala actors follow in the next section.
  83.256 -
  83.257 -\subsection{Support for parallel processing}\label{actors}
  83.258 -Concurrency has lately become more and more attention, because multicore processors make concurrency very important for efficient program execution, by running multiple threads parallel and so concurrent programming gets indispensable and distributed computing, web services and mobile environments are naturally concurrent. A very attractive model is message-based concurrency, which is based on the actor model.
  83.259 -
  83.260 -An actor is a concurrent process that executes a function. The state of an actor gets never shared, so it doesn't need to compete for locks of shared data. Actors own a mailbox where incoming messages are stored in. A mailbox is mainly a queue with actors, which operate as several producers and one consumer. Actors share data by sending messages which are sent asynchronously. Messages are unchangeable, so they don't require a lock. By creating new actors, by sending messages to known actors, or changing its behaviour, an actor is able to reply to a message. The actor-based process is combined with pattern matching for messages.
  83.261 -
  83.262 -The Erlang programming language is a functional programming language that supports message-based concurrency, which operates with actors. It was developed for real-time control systems. Such systems are telephone exchanges, network simulators and distributed resource controllers \cite{scala:jmlc06}. These systems use a very popular lightweight implementation and a large number of concurrent processes, which can be active simultaneously.
  83.263 -
  83.264 -Operating system threads and threads of virtual machines are too heavyweight for the implementation of such processes. The standard concurrency for mainstream platforms were shared-memory threads with locks. Such a platform is the Java Virtual Machine (JVM), which suffers from high memory consumption and context-switching overhead.
  83.265 -The most disadvantageous consequences are \cite{scala:jmlc06}:
  83.266 -\begin{enumerate}
  83.267 -\item quick exhaustion of virtual address space
  83.268 -\item locking mechanisms often lack suitable contention managers
  83.269 -\end{enumerate}
  83.270 -
  83.271 -For that reasons Erlang uses lightweight concurrent processes by its own run time system and not by the underlying operating system \cite{scala:jmlc06} and the computations on these platforms are often modelled in an event-driven style, which is complicated and error-prone.
  83.272 -\paragraph{Two different strategies for concurrency} are being used for implementation. This two strategies often follow different programming models, the benefit of thread-based models is that they are easier to use, but they still suffer from the memory consumption and the context-switching. The event-based models are just the opposite of the thread-based, they are more efficient, but in massive designs they are very difficult.
  83.273 -
  83.274 -\subparagraph{Thread-based implementation:} The behaviour of a concurrent process is defined by implementing a thread-specific method. The execution state is maintained by an associated thread stack \cite{Haller:2009:SAU:1496391.1496422}.
  83.275 -Supports blocking operations and can be executed on multicore processors in parallel.
  83.276 -
  83.277 -\subparagraph{Event-based implementation:} The behaviour is defined by a number of (non-nested) event-handlers which are called from inside an event loop. The execution state of a concurrent process is maintained by an associated record or object \cite{Haller:2009:SAU:1496391.1496422}. Targets to a large number of actor which can be active simultaneously, because they are more lightweight.
  83.278 -
  83.279 -\paragraph{Actors in Scala} are based on actors in Erlang. Scala uses the basic thread model of Erlang, but on the other hand all higher-level functions got implemented in the Scala library as classes or methods. The Scala-actors are a unification of the implementation models mentioned above and they are compatible with normal Virtual Machine (VM) thread. Normal VM threads can use the same communication and monitoring capabilities, because they are treated like an actor. A message-based concurrency seems to be more secure than shared-memory with locks, because accessing an actor's mailbox is race-free. The advantage of a implementation in a library is that it can be flexibly extended and adapted to new needs. The library makes use of Scala abstraction opportunities, like partial functions and pattern matching.
  83.280 -
  83.281 -The main idea of this model is that an actor is able to wait for a message by using two different operations, which try to remove a message from the current actor's mailbox. To do so, a partial function must be given to the operation, that specifies a set of message patterns. These are {\itshape receive} and {\itshape react}. 'An actor can suspend with a full thread stack (receive) or it can suspend with just a continuation closure (react)' \cite{Haller:2009:SAU:1496391.1496422}. The first operation of an actor to wait for an message is equal to thread-based programming and the second operation to event-based programming.
  83.282 -
  83.283 -\subparagraph{receive:} The current actor's mailbox get scanned and if there is one message which matches one of the patterns declared in the partial function, the message is removed from the mailbox and the partial function is applied to the message, the result is returned. The declaration of receive:
  83.284 -$$\mathit{def}\;\mathit{receive}\mathit{[R]}(f: \mathit{PartialFunction}[Any, R]): \mathit{R}$$
  83.285 -Otherwise the current thread blocks. Thus the receiving actor has the ability to execute normally when receiving a message which matches.  Note that receive retains the complete call stack of the receiving actor; the actor’s behaviour is therefore a sequential program which corresponds to thread-based programming \cite{Haller:2009:SAU:1496391.1496422}.
  83.286 -\subparagraph{react:} The action which is specified in the partial function is the last code that the current actor executes, if the message is matching. The declaration of react:
  83.287 -$$\mathit{def}\;\mathit{react}(f: \mathit{PartialFunction}[Any, Unit]): \mathit{Nothing}$$
  83.288 -The partial function gets registered by the current actor and the underlying thread gets released. React has the return type Nothing, this means that the method never returns normally. When the actor receives a matching message, the earlier registered partial function gets called and the actor's execution gets continued. The partial function f which corresponds to a set of event handlers \cite{Haller:2009:SAU:1496391.1496422}. 
  83.289 -
  83.290 -For this implementation multiple actors are executed by multiple threads and therefore a thread pool is used. Whenever it is necessary the pool can be re sized, to support the operations of the thread-based and event-based model. If only operations of the event-based model are executed then the thread pool could be fixed. To avoid system-included deadlocks, if some actors use thread-based operations, the thread pool has to grow, because if there are outstanding tasks and every worker thread is occupied by a blocked actor, new threads are necessary.
  83.291 -
  83.292 -Since the communication between actors takes place through asynchronous message passing, asynchronous operations get executed, tasks have to be created and submitted to a thread pool for execution. A new task is created, when an actor spawns a new actor or a message, which enables an actor to continue, is send to an actor which is suspended in a react operation or by calling react, where a message can be immediately removed from the mailbox \cite{Haller:2009:SAU:1496391.1496422}.
  83.293 -
  83.294 -% Marco
  83.295 -\section{Planned contributions at TU Graz}
  83.296 -
  83.297 -\subsection{Make Isabelle process structured derivations}\label{struct-der}
  83.298 -Structured Derivations (SD) is a format for calculational reasoning, which has been established by \cite{back-grundy-wright-98}. This is an example calculation:
  83.299 -{\it\begin{tabbing}
  83.300 -123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=\kill
  83.301 -\> $\bullet$\> \Problem [ maximum\_by, calculus ]\\
  83.302 -\>\> $\vdash$\> $A = 2\cdot u\cdot v - u^2$\\
  83.303 -\>\> $\bullet$\> \Problem [make, diffable, funtion]\\
  83.304 -\>\> \dots\> $\overline{A}(\alpha) = 8\cdot r^2\cdot\sin\alpha\cdot\cos\alpha - 4\cdot r^2\cdot(\sin\alpha)^2$\\
  83.305 -\>\> $\bullet$\> \Problem [on\_interval, for\_maximum, differentiate, function]\\
  83.306 -\>\>\> $\vdash$\> $\overline{A}(\alpha) = 8\cdot r^2\cdot\sin\alpha\cdot\cos\alpha - 4\cdot r^2\cdot(\sin\alpha)^2$\\
  83.307 -\>\>\> $\bullet$\> \Problem [differentiate, funtion]\\
  83.308 -\>\>\> \dots\> $\overline{A}^\prime(\alpha) = 8\cdot r^2\cdot(-(\sin\alpha)^2+(\cos\alpha)^2 - 2\cdot\sin\alpha\cdot\cos\alpha)$\\
  83.309 -\>\>\> $\bullet$\> \Problem [on\_interval, goniometric, equation]\\
  83.310 -\>\>\> \dots\> $\alpha = \tan^{-1}(-1+\sqrt{2})$\\
  83.311 -\>\> \dots\> $\alpha = \tan^{-1}(-1+\sqrt{2})$\\
  83.312 -\>\> $\bullet$\> \Problem [tool, find\_values]\\
  83.313 -\>\> \dots\> [ $u=0.23\cdot r, \:v=0.76\cdot r$ ]\\
  83.314 -\> \dots\> [ $u=0.23\cdot r, \:v=0.76\cdot r$ ] %TODO calculate !
  83.315 -\end{tabbing}}
  83.316 -The plan is to use the machinery provided Isabelle/Isar as a 'logical operating system' ~\cite{isar-impl} and adapt the machinery such that is accepts SC in parallel to the Isar proof language~\cite{wenzel:isar}.
  83.317 -
  83.318 -This plan involves the following details.
  83.319 -
  83.320 -\subsection{Add a plug-in to jEdit}\label{plugin}
  83.321 -    % file structure, copied from example project ...
  83.322 -%Die von jEdit verfolgte Strategie im Bezug auf plug-in Management und natürlich generell die totale Offenlegegung des Codes ist für ein Projekt wie Isabelle und auch für das Isac-Project an der TU ideal. plug-ins lassen sich sehr einfach anfügen und durch die riesige Vielfalt von bereits bestehenden plug-ins ist auch die Adaption von plug-ins möglich bzw. zu empfehlen, denn warum sollte nicht bereits funktionierender Code verwendet werden?\\
  83.323 -The importance of connecting the ML-world with the world of user interfaces has been is discussed in Sect.\ref{ml-users}. jEdit follows these lines, it is an open-source, Java-based text editor that works on Windows, Mac OS X, and Linux. A big advantage of jEdit is, that there is a very good and also simple way to use and write a plug-in. There are a lot of useful and powerful plug-ins available in the net and it is also possible to use a existing plug-in as part of a new one. Because of this facts, jEdit is very suitable for a project like Isabelle and also for the \sisac-project at TU-Graz.
  83.324 -
  83.325 -Each jEdit plug-in\footnote{To get more information about the jEdit infrastructure see: http://jedit.org/users-guide/plugin-intro} basically consists of source files, written in Java or Scala, XML-files and property files. The XML-Files are important for the administration of a plug-in and provides information like the name, author, ... of the plug-in. They are also containing small pieces of BeanShell code which is executed upon a user request. (Like pressing the 'start plugin' button.) So the XML-files provide the “glue” between user input and specific plug-in routines located in the source files. As you see, this files are used as interface between the plug-in and the jEdit engine itself.
  83.326 -
  83.327 -Based on the jEdit API, you are allowed to design your code quit freely and don't have to use a prescribed way to implement your ideas.    
  83.328 -
  83.329 -
  83.330 -%isabell plugin beschreiben!!!!!!!!
  83.331 -The Isabelle-team also follow use this plug-in structure. In the next paragraph the involved files will be described. The jEdit-Isabelle plug-in consists of:
  83.332 -\begin{itemize}
  83.333 -\item 14 Scala-source-files
  83.334 -\item 3 XML-files
  83.335 -\item 1 property file
  83.336 -\end{itemize}
  83.337 -%Das vom Isabelle-Team erstellte jEdit plug-in folgt natürlich auch dem oben erklärten Muster. Es wird nun genauer auf dieses plug-in eingegangen. The plugin consits of 14 scala-source-files, three xml-files and one property-file. 
  83.338 -\begin{description}
  83.339 -\item[Isabelle.props] The property-file \textit{Isabelle.props} contains general information about the Isabelle plug-in and the needed dependencies between Isabelle and the other used plug-ins like sidekick.
  83.340 -\item[dockables.xml] The XML-file \textit{dockables.xml} is used to create the needed dock-able windows which are important to set up the GUI of the plug-in.
  83.341 -\item[actions.xml] In the file \textit{actions.xml}, the dockable windows are added to the window-manager \textit{wm} and there is also some BeanShell-code to activate the Isabelle-GUI.
  83.342 -\item[services.xml] The last XML-file is \textit{services.xml} and is used to create instances of needed jEdit plug-ins.
  83.343 -\end{description}
  83.344 -This four files are located in the folder \textit{plugin}.\\
  83.345 -
  83.346 -The more interesting files, the scala-files of the plug-in, can be found in the 'src/jedit'-directory. In this directory you can find the file \textit{Dummy.java} which is a dummy class and is simply used to make javadoc work. Just forget about this file. Also there is a folder/package \textit{jedit} which contains all Scala-source-files. Now it is time to take a closer look on the source-files: 
  83.347 -\begin{description}
  83.348 -\item[plugin.scala] The file \textit{plugin.scala} is the main-file of the Isabelle plug-in and there are two important parts. First the \textit{Isabelle object}. This object contains data like name and path and also few basic functions. The second part is the \textit{class Plugin} which is derived from EBPlugin. Here the basic methods \textit{handleMessage}, \textit{start} and \textit{stop} are implemented. Each jEdit plug-in should have this methods because they are very important for the handling of the plug-in!
  83.349 -\item[dockable.scala] jEdit and also the Isabelle plug-in work with dock-able windows. This means that you can move around each single window and dock it somewhere on the screen. So it is possible to customise the jEdit-GUI. To support this, the file \textit{dockable.scala} is needed. The file \textit{output-dockable.scala} is derived from \textit{dockable.scala} and is used to print the result/output in a dock-able window. The same thing with \textit{protocol-dockable.scala} and \textit{raw-output-dockable.scala}.
  83.350 -\item[scala-console.scala] The next interesting file is \textit{scala-console.scala} with the main-class Scala-Console. This class is used to expand the Console plug-in in a way, that it is possible to interpret Scala-code with a Shell inside of jEdit.
  83.351 -\item[isabelle-sidekick.scala] The file \textit{isabelle-sidekick.scala} is related to the file \textit{scala-console.scala} because it is also used to adapt the plug-in Sidekick for Isabelle.
  83.352 -\item[document-model.scala, document-view.scala] The files \textit{document-model.scala} and \textit{document-view.scala} are used to connect the jEdit-buffer/the text-area to Isabelle. Both classes offer, upon others, methods to activate and deactivate this features.
  83.353 -\end{description}
  83.354 -There also some other source-files but they aren’t discussed here, because the main goal of this paragraph is to give a basic idea how a jEdit plug-in should be set up and the remaining files are not as important for the Isabelle plug-in structure.
  83.355 -%\begin{itemize}
  83.356 -%\item $html_panel.scala$
  83.357 -%\item $isabelle_encoding.scala$
  83.358 -%\item $isabelle_hyperlinks.scala$
  83.359 -%\item $isabelle_options.scala$
  83.360 -%\item $isabelle_token_maker.scala$
  83.361 -%\item $isabelle_hyperlinks.scala$
  83.362 -%\end{itemize}
  83.363 -
  83.364 -
  83.365 -%  Like each other jEdit-Plugin also this 
  83.366 -
  83.367 -%Das Konzept des frei wählbaren Designs ist am Beginn villeicht etwas schwierig umzusetzten, da es leichter ist, sich irgendwo anzulehnen bzw. ein bereits bestehendes sowie funktionierendes Konzept zu übernehmen. So wurden auch die ersten Schritte an der TU gemacht. Zu diesem Zweck wurde das von den Entwicklern von jEdit zur Verfügung gestellte plugin 'QuickNotepad' übernommen und in Scala übersetzt. Obwohl Scala eng mit Java verknüpft ist, war doch einiges an 'rewritting' notwendig bis das Scala-plugin lauffähig wurde. Die benötigten XML-files konnten dazu nahezu unberührt gelassen werden.\\
  83.368 -
  83.369 -\subsection{Details of NetBeans projects}\label{netbeans}
  83.370 -%     Scala + Java: html project files
  83.371 -As described in the last paragraph, jEdit is a open-source-project. The jEdit-developers use a NetBeans-project to produce the source-code and so it is beneficial to use a NetBeans project too, because there is a quite good documentation about setting up a NetBeans-project with the jEdit-source. See http://wiki.netbeans.org/NetbeansedJEdit for further information.\\\\
  83.372 -If you want to set up a new jEdit plug-in project you have to attend that you have to create some source-files and that there must be a connection to the jEdit-source because you will need to exchange data with the jEdit engine. This could probably look like: \textit{jEdit.getProperty("options.isabelle.isabelle")}\\
  83.373 -As shown above, the jEdit-source is needed to compile and build your plug-in. There are two ways to organise your project:
  83.374 -\begin{itemize}
  83.375 -\item with jEdit source code - two projects in one
  83.376 -\item with jedit.jar library
  83.377 -\end{itemize}
  83.378 -\subsubsection{Plug-in with jEdit-source}
  83.379 -It is a good way to download the jEdit source as NetBeans project because then it is possible to add another sub-project to the existing jEdit-NetBeans-project. As you see it is also possible to mix Scala and Java. A big advantage is, that debugging will now work really fine. If you want to set up a project like this, you should complete the following steps.
  83.380 -\begin{enumerate}
  83.381 -\item {Create a new NetBeans-project for your plug-in like \textit{example-plugin}. This will probably be a Scala-Project.}
  83.382 -\item Download (and try out) the \textit{jEdit-NetBeans-project}
  83.383 -\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at \textit{Libraries} $\rightarrow$ \textit{add Project...} and then choose the \textit{jEdit-NetBeans-project}.
  83.384 -\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at project-name-label $\rightarrow$ \textit{Properties} $\rightarrow$ \textit{Run} $\rightarrow$ \textit{Main Class:} org.gjt.sp.jedit.jEdit
  83.385 -\item compile and run
  83.386 -\end{enumerate}
  83.387 -
  83.388 -\subsubsection{Plug-in with jedit.jar}
  83.389 -It is also possible to use the \textit{jedit.jar} file. This file is already included in \$ISABELLE-HOME/contrib/jedit-4.3.2. Now you just have to follow this steps:
  83.390 -\begin{enumerate}
  83.391 -\item {Create a new NetBeans-project for your plug-in like \textit{example-plugin}. This will probably be a Scala-Project.}
  83.392 -\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at \textit{Libraries} $\rightarrow$ \textit{add JAR/Folder...} and then choose the \textit{jedit.jar} file.
  83.393 -\item at project \textit{example-plugin}: \textit{Project-browser} $\rightarrow$ Right-click at project-name-label $\rightarrow$ \textit{Properties} $\rightarrow$ \textit{Run} $\rightarrow$ \textit{Main Class:} org.gjt.sp.jedit.jEdit
  83.394 -\item compile and run
  83.395 -\end{enumerate}
  83.396 -This are two different ways to get started. It is difficult to say what is better because both versions have advantages. Now it is time to start coding your own plug-in but there are still a few things to think about. Remember, that a plug-in consists of source-, XML- and property-files. On default, NetBeans will just pack the source-files in the \textit{example-plugin.jar}-package. So you have to add a copy/move-routine in the \textit{build.xml} file of your NetBeans-project to get a complemented package.
  83.397 -\begin{itemize}
  83.398 -\item $\langle target name="-pre-jar"\rangle$
  83.399 -\item $	\langle copy $file="plugin/services.xml" todir="\${build.classes.dir}" $/\rangle$
  83.400 -\item $	\langle copy $file="plugin/dockables.xml" todir="\${build.classes.dir}" $/\rangle$
  83.401 -\item $	\langle copy $file="plugin/actions.xml" todir="\${build.classes.dir}" $/\rangle$	
  83.402 -\item $	\langle copy $file="plugin/Isabelle.props" todir="\${build.classes.dir}" $/\rangle$
  83.403 -\item $	\langle /target\rangle$
  83.404 -\end{itemize}
  83.405 -%* kurze aufzählung der xml-netbeans-files + erklärung\\
  83.406 -\subsubsection{NetBeans project files}
  83.407 -As you see in the paragraph above, it is also important to have basic knowledge about NetBeans, the project structure and how to change the operational sequences. A typical NetBeans-project consist of the source- and library-files and administrative XML- and property-files. In this paragraph the administrative part of the project is of note. The most important file is \textit{build.xml}. This file can be found in the project directory. There is also a folder \textit{nbproject} which contains the remaining XML- and property-files and also a folder \textit{private}, where individual user information about the project is stored. The files in this \textit{private} folder are not important to describe (and they should not be pushed on the repository!).
  83.408 -
  83.409 -A build-file like \textit{build.xml} contains one project and at least one (default) target. Targets contain task elements. Each task element of the build-file can have an id attribute and can later be referred to by the value supplied to this. So the id has to be unique. Such targets can be "run", "debug", "build", ... and can have dependencies to other targets. Tasks define what should happen, if a target is executed. So like in the example above, the target is \textit{pre-jar}, that means that this things will happen before the jar-package is packed. The tasks of this target are copying some files into the package.
  83.410 -
  83.411 -The files inside the \textit{nbproject}-folder are not so important because some of it are generated from \textit{build.xml} and changes in this files are useless. Just the file project.properties is really interesting because this file gives a nice and tight overview about the project settings.
  83.412 -
  83.413 -\subsection{Use interfaces between Java and Scala}\label{java-scala}
  83.414 -%     how are data exchanged between Scala and Java ...
  83.415 -jEdit is completely written in Java and the required plugin(s) for \sisac{ }will be coded in Scala - so there must be ways to exchange data between Java and Scala. One way is to connect this two worlds with the in 4.2 described XML-files. Here you need to use a third type of code to get an interface between Java and Scala code. But there is also a way to get a direct connection.
  83.416 -
  83.417 -This link should be shown on the graphic-library \textit{Swing}. In both languages it is possible to use Swing which provides a lot of different shapes and useful functionality. So there is a Java-Swing and also a Scala-Swing-library. Now it is interesting to examine the connection between this two libraries.
  83.418 -
  83.419 -In Scala a direct use of Java-Libs (like Java-Swing) is possible. So if you are Java-Programmer and want to use Java-Swing in Scala, you can simply type\\ \textit{import javax.swing.JButton}\footnote{http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JButton.html} to work with a Java-button. But you can also use the Scala-equivalent \textit{scala.swing.Button}\footnote{http://www.scala-lang.org/api/current/scala/swing/Button.html}. This two button-types will provide nearly the same functionality.
  83.420 -
  83.421 -So what is the idea of creating a nearly similar library a second time? Why have the Scala-developers done such extra work? The answer is, that they have tried to improve and simplify the usage of the Swing-library(and many other libs too!). So big parts of this Scala-Libraries are just Wrapper-objects, Wrapper-Classes and Wrapper-Methods of already existing parts in Java-Libraries. Needless to say that they also added new useful shapes and functionality.
  83.422 -But there is one important question left: Is it possible to mix Scala- and Java-objects? And yes, it is possible. There is a really easy way to convert a Scala-object to the Java-equivalent:
  83.423 -\begin{enumerate}
  83.424 -\item \textit{import javax.swing.JButton}
  83.425 -\item \textit{import scala.swing.Button}
  83.426 -\item \textit{var b: scala.swing.Button}
  83.427 -\item \textit{var jb: javax.swing.JButton}
  83.428 -\item \textit{jb = b.peer}
  83.429 -\end{enumerate}
  83.430 -As the example above illustrates, a conversion of Scala- to Java-objects is possible. It looks easy but also a little bit useless. Why should you need this? Just imagine that there is a plug-in written in Scala and one coded in Java. With this connection between Scala and Java, it would be easy to connect this two plug-ins! 
  83.431 -%Diesen direkten Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing. Beide Sprachen stellen diese Grafik-Bibliotheken zur Verfügung (und darin auch eigene Shapes und Funktionalität). Es ist jedoch möglich, Java-Bibliotheken, wie eben auch Java-Swing in Scala zu verwenden. Ein JButton kann zum Beispiel mittels \textit{import javax.swing.JButton} eingebunden und damit sofort auch verwendet werden. Auch Scala stellt in seiner Swing-Bibliothek zur Verfügung: \textit{scala.swing.Button}. Es wird nahezu die selbe Funktionalität angeboten und teilweise die Erzeugung bzw. Verwendung vereinfacht(???). Man kann sich nun fragen, warum sich die Scala-Entwickler einerseit die Mühe gemacht haben die Verwendung Java-Swing, wie in Java selbst, möglich zu machen und andererseits mit Scala-Swing eine nahezu idente Alternative geschaffen haben. Die Antwort darauf zeigt wie der objektorientierte Teil von Scala in vielen Bereichen aufgebaut wurden. Es wurde kein neues Konzept für diese Grafikklassen entworfen sondern Wrapper-Objekte/Methoden/Klassen erstellt, die das Arbeiten mit diesen Grafikkomponenten erleichtern soll. 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 von Java-Komponente in ein Scala-Äquivalent ist problemlos möglich. ...
  83.432 -\section{Conclusion and future work}
  83.433 -This paper collected background information on the topic of userinterfaces for theorem provers, which is not covered by the standard curriculum at Graz University of Technology: Computer theorem proving, respective interfaces and novel challenges for userinterfaces raised by integration of CTP into software engineering tools within the current decade.
  83.434 -
  83.435 -The general background information has been related to students' knowledge already gained during studies: functional and object-oriented programming paradigm, programming languages with focus on Scala and Scala's specific concept to handle asynchronous processing of proof documents, the concept of actors.
  83.436 -
  83.437 -An important part of the paper is a protocol of preparatory work already done on project-setup and software components required for the next goal which is: extend the theorem prover Isabelle with Structured Derivations.
  83.438 -
  83.439 -This part is considered an appropriate to start realising this goal and to prepare for future work, which will join the \sisac-project with front-of-the-wave technology in computer theorem proving and respective userinterfaces.
  83.440 -
  83.441 -\bigskip\noindent {\Large\textbf{Acknowledgements}}
  83.442 -
  83.443 -\medskip\noindent The authors thank the lecturer of 'Verfassen wissenschaftlicher Arbeiten' in winter semester 2010/11, Dipl.-Ing. Dr.techn. Markus Strohmaier, for his support on working on the topic they are interested in.\\
  83.444 -The leader of the \sisac-project expresses his pleasure about the efficient collaboration between the institutes IICM and IST at TUG.
  83.445 -
  83.446 -\bibliography{CTP-userinterfaces}
  83.447 -%\bibliography{bib/math-eng,bib/bk,bib/RISC_2,bib/isac,bib/pl,bib/math,bib/pl}
  83.448 -\end{document}
  83.449 \ No newline at end of file
    84.1 --- a/src/Doc/isac/akargl/ferialprakt.tex	Mon Sep 16 12:27:20 2013 +0200
    84.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    84.3 @@ -1,101 +0,0 @@
    84.4 -\message{ !name(ferialprakt.tex)}\documentclass[a4paper,12pt]{article}
    84.5 -\usepackage{ngerman}
    84.6 -\usepackage{longtable}
    84.7 -
    84.8 -
    84.9 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   84.10 -\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   84.11 -
   84.12 -\title{Ferialpraxis\\ am Institut f\"ur Softwaretechnologie\\
   84.13 -       der Technischen Universit\"at Graz\\ \ 
   84.14 -       \\Arbeitsprotokoll}
   84.15 -\author{Alexander Kargl\\
   84.16 -       akargl@brgkepler.net}
   84.17 -\date{\today}
   84.18 -
   84.19 -\begin{document}
   84.20 -
   84.21 -\message{ !name(ferialprakt.tex) !offset(-3) }
   84.22 -
   84.23 -\maketitle
   84.24 -$\;$\\
   84.25 -\vspace{0.2cm}
   84.26 -\section{Urspr\"ungliche Erwartungen}
   84.27 -In den letzten Sommerferien vor der Maturaklasse wollte ich mich genauer \"uber die Studienrichtungen im Bereich Informatik an der TU Graz informieren. Meine Interessen tendierten bereits in diese Richtung, aber ich war mir noch nicht sicher, ob das die richtige Entscheidung ist.
   84.28 -
   84.29 -Ich hatte das Gl\"uck ein Praktikum am Insitut f\"ur Softwaretechnologie absolvieren zu d\"urfen. Ich hoffte dadurch:
   84.30 -\begin{itemize}
   84.31 - \item einen Einblick in die Programmierung und Entstehung von gr\"o\3eren Softwareprojekten zu erhalten
   84.32 - \item neue Programmiertechniken und Sprachen kennenzulernen
   84.33 - \item und au\3erdem gleich wertvolle Erfahrung im Arbeitsleben sammeln zu k\"onnen
   84.34 -\end{itemize}
   84.35 -
   84.36 -\newpage
   84.37 -\section{Arbeitsprotokoll}
   84.38 -\begin{center}
   84.39 -\begin{tabular}{l|l||r}
   84.40 -\textbf{Datum}   &\textbf{T\"atigkeit} & \textbf{Std.} \\[1pt] \hline \hline\noalign{\smallskip}
   84.41 -12.7.2011
   84.42 - & Demonstration von ``educational math assistant \isac{}'', Isabelle & 1.6\\
   84.43 - %& Demonstration des Theorem Provers  & 0.6\\
   84.44 - & Einf\"uhrung Linux, objektorientierte/funktionale Programmierung& 2.0\\
   84.45 - & Installation: Isabelle, \isac-core, Mercurial & 3.0\\[3pt] \hline\noalign{\smallskip}
   84.46 -13.7.2011
   84.47 - & Einf\"uhrung Latex,  Konfiguration von Mercurial & 2.6 \\
   84.48 - %& & 1.6 \\
   84.49 - & ML-Programmierung/Einf\"uhrung & 5.0 \\[3pt] \hline\noalign{\smallskip}
   84.50 -14.7.2011
   84.51 - & Einf\"uhrung und \"Ubung ML II & 4.6 \\
   84.52 -% & Programmierung ML & 2.0 \\
   84.53 - & Erstellung v. Beispielen f\"ur Kombinatoren in ML & 3.0 \\[3pt] \hline\noalign{\smallskip}
   84.54 -15.7.2011
   84.55 - & Einf\"uhrung ML/\isac\  IV & 2.1 \\
   84.56 - & ML- Programmierung & 5.5 \\ \hline \hline\noalign{\smallskip}
   84.57 -18.7.2011
   84.58 - & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
   84.59 -19.7.2011
   84.60 - & Tests zu korrigiertem CompleteCalc auskommentiert & 7.6 \\
   84.61 - & interface.sml calchead.sml ctree.sml mathengine.sml rewtools.sml &  \\[3pt] \hline\noalign{\smallskip}
   84.62 -20.7.2011
   84.63 - & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
   84.64 -21.7.2011
   84.65 - & Alle Fehler in Frontend/interface.sml behoben & 7.6 \\
   84.66 - & Beginn zugeh\"orige Tests auskommentieren & 7.6 \\[3pt] \hline\noalign{\smallskip}
   84.67 -22.7.2011
   84.68 - & Information \"uber Studienrichtungen etc. & 1.1 \\
   84.69 - & Fehlersuche/Debugging Isac-Tests & 6.5 \\[3pt] \hline \hline\noalign{\smallskip}
   84.70 -25.7.2011
   84.71 - & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
   84.72 -26.7.2011
   84.73 - & Beginn: systematisches Aufr\"aumen von auskommentierten Tests & 7.6 \\
   84.74 - & Interpret/appl.sml Interpret/ctree.sml ProgLang/calculate.sml & \\[3pt] \hline\noalign{\smallskip} 
   84.75 -27.7.2011
   84.76 - & Fehlersuche/Debugging Isac-Tests & 7.6 \\[3pt] \hline\noalign{\smallskip}
   84.77 -28.7.2011
   84.78 - & Fehlersuche/Debugging Isac-Tests & 3.6 \\
   84.79 - & Fertigstellung Protokoll         & 4.0 \\[3pt] \hline\noalign{\smallskip}
   84.80 -29.7.2011
   84.81 - & Austausch mit Ferialpraktikanten anderer Studienrichtungen  & 1.0 \\
   84.82 - & Arbeit mit Robotern  & 5.0 \\[3pt] \hline\noalign{\smallskip}
   84.83 -\end{tabular}
   84.84 -\end{center}
   84.85 -Die Arbeiten am Update der Tests sind in das Repository des \isac-Projektes hochgeladen worden und sind auf {\tt https://intra.ist.tugraz.at/hg/isa/} einzusehen.
   84.86 -
   84.87 -
   84.88 -\newpage
   84.89 -\section{R\"uckblick auf das Praktikum}
   84.90 -Meine Erwartungen haben sich gr\"o\3tenteils alle erf\"ullt und ich habe viel Neues dazugelernt:
   84.91 -\begin{itemize}
   84.92 -  \item Grundlagen funktionaler Programmierung (SML)
   84.93 -  \item Zusammenarbeit an einem gro\3sem Softwareprojekt mit mehreren Programmierern (Benutzung von Versionsverwaltungssystemen (Mercurial) , Kommentaren etc.)
   84.94 -  \item Grundz\"uge der Funktionsweise eines Theorem Provers (Isabelle)
   84.95 -  \item ``Test driven development'' - Verifizierung von Softwarekomponenten
   84.96 -  \item schnelle Einarbeitung in neue komplexe Arbeitsumgebungen und Problemstellungen
   84.97 -\end{itemize}
   84.98 -Alles in allem hat sich dieses Praktikum f\"ur mich in jeder Hinsicht gelohnt.
   84.99 -
  84.100 -
  84.101 -
  84.102 -\end{document}
  84.103 -
  84.104 -\message{ !name(ferialprakt.tex) !offset(-78) }
    85.1 --- a/src/Doc/isac/chuber/Functions.thy	Mon Sep 16 12:27:20 2013 +0200
    85.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    85.3 @@ -1,27 +0,0 @@
    85.4 -theory Functions imports Main begin
    85.5 -
    85.6 -fun fib :: "nat \<Rightarrow> nat"
    85.7 -where
    85.8 -"fib 0 = 1"
    85.9 -| "fib (Suc 0) = 1"
   85.10 -| "fib (Suc (Suc n)) = fib n + fib (Suc n)"
   85.11 -
   85.12 -thm fib.simps
   85.13 -
   85.14 -(*"fib (Suc (Suc n))"*)
   85.15 -
   85.16 -lemma "fib 0 = 1"
   85.17 -by simp
   85.18 -lemma "fib (Suc 0) = 1"
   85.19 -by simp
   85.20 -lemma "fib (Suc (Suc (Suc 0))) = (Suc (Suc (Suc 0)))"
   85.21 -by simp
   85.22 -
   85.23 -(*fun sep :: "’a \<Rightarrow> ’a list \<Rightarrow> ’a list"
   85.24 -where
   85.25 -"sep a (x#y#xs) = x # a # sep a (y # xs)"
   85.26 -| "sep a xs
   85.27 -= xs"*)
   85.28 -
   85.29 -
   85.30 -end
    86.1 --- a/src/Doc/isac/chuber/bakk_thesis_prelim.tex	Mon Sep 16 12:27:20 2013 +0200
    86.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    86.3 @@ -1,102 +0,0 @@
    86.4 -\documentclass[12pt]{article}
    86.5 -\usepackage{a4}
    86.6 -\usepackage{times}
    86.7 -\usepackage{latexsym}
    86.8 -\bibliographystyle{alpha}
    86.9 -%\bibliographystyle{abbrv}
   86.10 -\usepackage{graphicx}
   86.11 -
   86.12 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   86.13 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   86.14 -
   86.15 -\title{Tentative Title:\\
   86.16 -  Theory of Functional Programming\\
   86.17 -  Introduced by Isabelle and \isac}
   86.18 -\author{n.n\\
   86.19 -{\tt TODO@xxx.at}}
   86.20 -
   86.21 -\begin{document}
   86.22 -\maketitle
   86.23 -%\abstract{
   86.24 -%TODO
   86.25 -%}
   86.26 -
   86.27 -\section{Background}
   86.28 -
   86.29 -``Functional programing'' (FP) is one of the leading paradigms in programming besides ``object oriented programming'' %\cite{?} 
   86.30 -and ``logic (or constraint) programming'' \cite{?}. One advantage of FP are general and elegant approaches to the mathematical theory of programming \cite{?}.
   86.31 -
   86.32 -Presently FP gains importance in face of the ``multi-core crisis'' \cite{?}: functional programs are ready to exploit many cores in parallel. In spite of this fact, at Graz University of Technology (TUG) FP has vanished during recent years, and it is of actual importance to include FP again in education.
   86.33 -
   86.34 -In order to support such education this thesis will compile a course based on advanced tools developed in the intersection between computer science and mathematics: The computer theorem prover Isabelle \cite{Nipkow-Paulson-Wenzel:2002} and the educational math assistant \sisac.
   86.35 -
   86.36 -\section{Goal}
   86.37 -
   86.38 -The goal of this thesis is generation of interactive course material on FP and respective theory of programming, implemented in Isabelle and \sisac.
   86.39 -
   86.40 -The material shall use most recent developments, for instance the ``function package'' \cite{krauss:funs,krauss:termination07,krauss:partial06} recently implemented in Isabelle. This package supports all what is needed for programming and proving properties of programs.
   86.41 -
   86.42 -Although addressing most recent developments and theory at the state of the art, the material also shall serve in early phases of programming. Experience shows, that in early phases (in analogy to doing mathematics \cite{?}) proceeding step by step in a program is important for learning. This will be done by implementing selected programs into \sisac.
   86.43 -
   86.44 -The interactive course material shall serve in certain courses at TUG and in the recently established ``entry and orientation phase'' (Studien-Eingangs und -Orientierungs Phase, STEOP).
   86.45 -
   86.46 -\section{State of the Art}
   86.47 -The thesis cover a wide range of topics some of which will be presented in more detail to be agreed on.
   86.48 -
   86.49 -\paragraph{Theory of functional programming ?}
   86.50 -TODO
   86.51 -
   86.52 -\paragraph{Proof tools for FP}
   86.53 -Isabelle's function package \cite{krauss:funs} is the most advanced in comparison to other provers. It supports two different way of function definitions, one providing full automation (applicable in simple cases) and another featuring interactive proofs of termination.
   86.54 -
   86.55 -The function package covers the full range of FP:  mutual, nested and higher-order recursion, partiality
   86.56 -
   86.57 -The other European computer theorem prover, Coq \cite{}, has less powerful support for FP (TODO)
   86.58 -
   86.59 -\paragraph{Didactics of FP} is concern of very different opinions: At some universities FP is addressed in introductory courses, while at other universities FP is considered an abstract topic addressed in higher semesters. The choice between these extreme alternatives seems to be related to principcal considerations on software construction \cite{aichernig:ingenieur}.
   86.60 -
   86.61 -The planned course might provide a bridge between the alternatives, addressing novices as well as advanced students by employing computer theorem provers.
   86.62 -
   86.63 -\paragraph{Educational math assistants,} if based on computer theorem proving, are appropriate to serve introduction to FP in a specific way: If considering evaluation of functional programs as rewriting, there is an obstacle. Empirical data show that students do not learn to apply rules at high-school --- for instance, the cannot apply the law of distributivity in algebra consciously, they do algebra in the same way they they use their mother language.
   86.64 -
   86.65 -The experimental system \sisac{}\footnote{http://www.ist.tugraz.at/projects/isac/} developed at TU Graz seems appropriate to provide experience in rigorous application of rewrite rules as a prerequisite to understand evaluation in FP.
   86.66 -
   86.67 -
   86.68 -\section{Thesis Structure}
   86.69 -
   86.70 -The main result of this thesis is the interactive course material, accompanied by a thesis.
   86.71 -
   86.72 -\paragraph{The interactive course material} will be implemented as Isabelle theories. Isabelle provides a document preparation system for theories which shall lead for a twofold presentation of the course: as (a) pdf-file(s) and as theories supporting interactive learning.
   86.73 -
   86.74 -For stepwise exercises in \sisac{} an additional Isabelle theory is required, which contains the specifications and programs for the respective exercises in ML-sections.
   86.75 -
   86.76 -\paragraph{The thesis} completes the work as required for a bakkalaureate.
   86.77 -
   86.78 -%general survey on FP
   86.79 -%
   86.80 -%description of the state of the art in proof tools specialized on FP
   86.81 -%
   86.82 -%didactic consideration about the course (what has been omitted, ...)
   86.83 -%
   86.84 -%future work, probably extending the course to more advanced topics
   86.85 -%
   86.86 -%future work, extending the course to more elementary topics, probably usable at high school
   86.87 -%
   86.88 -%...
   86.89 -%
   86.90 -%... 
   86.91 -
   86.92 -
   86.93 -\section{Timeline}
   86.94 -
   86.95 -The main work shall be done during this summer as much as possible.
   86.96 -
   86.97 -%Milestones
   86.98 -%\subsection{TODO}
   86.99 -%study introductory material for Isabelle; contact Alexander Kraus and others for similar course material
  86.100 -%
  86.101 -%\subsection{TODO}
  86.102 -%\sisac =''=
  86.103 -
  86.104 -\bibliography{references}
  86.105 -\end{document}
    87.1 --- a/src/Doc/isac/chuber/references.bib	Mon Sep 16 12:27:20 2013 +0200
    87.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.3 @@ -1,55 +0,0 @@
    87.4 -
    87.5 -@InCollection{krauss:partial06,
    87.6 -  author = 	 {Alexander Krauss},
    87.7 -  title = 	 {Partial recursive functions in higher-order logic},
    87.8 -  booktitle = 	 {Automated Reasoning (IJCAR 2006)},
    87.9 -  pages = 	 {589-603},
   87.10 -  publisher = {Springer Verlag},
   87.11 -  year = 	 {2006},
   87.12 -  editor = 	 {Ulrich Furbach and Natarajan Shankar},
   87.13 -  volume = 	 {4130},
   87.14 -  series = 	 {Lecture Notes in Artificial Intelligence},
   87.15 -  doi = {http://dx.doi.org/10.1007/11814771_48}
   87.16 -}
   87.17 -
   87.18 -@InCollection{krauss:termination07,
   87.19 -  author = 	 {Lukas Bulwahn, Alexander Krauss, and Tobias Nipkow},
   87.20 -  title = 	 {Finding lexicographic orders for termination proofs in Isabelle/HOL},
   87.21 -  booktitle = 	 {Theorem Proving in Higher Order Logics (TPHOLs 2007)},
   87.22 -  pages = 	 {38-53},
   87.23 -  publisher = {Springer Verlag},
   87.24 -  year = 	 {2007},
   87.25 -  editor = 	 {Schneider and J. Brandt},
   87.26 -  volume = 	 {4732},
   87.27 -  series = 	 {Lecture Notes in Computer Science},
   87.28 -  doi = {http://dx.doi.org/10.1007/978-3-540-74591-4_5}
   87.29 -}
   87.30 -
   87.31 -@Article{aichernig:ingenieur,
   87.32 -  author = 	 {Bernhard K. Aichernig and Peter Lucas},
   87.33 -  title = 	 {Softwareentwicklung --- eine {I}ngenieursdisziplin!(?)},
   87.34 -  journal = 	 {Telematik, Zeitschrift des Telematik-Ingenieur-Verbandes (TIV)},
   87.35 -  year = 	 {1998},
   87.36 -  volume = 	 {4},
   87.37 -  number = 	 {2},
   87.38 -  pages = 	 {2-8},
   87.39 -  note = 	 {http://www.ist.tu-graz.ac.at/publications},
   87.40 -  annote = 	 {}
   87.41 -}
   87.42 -
   87.43 -@Book{Nipkow-Paulson-Wenzel:2002,
   87.44 -  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
   87.45 -  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
   87.46 -  publisher	= {Springer},
   87.47 -  series	= {LNCS},
   87.48 -  volume	= 2283,
   87.49 -  year		= 2002
   87.50 -}
   87.51 -@PhdThesis{krauss:funs,
   87.52 -  author = 	 {Alexander Krauss},
   87.53 -  title = 	 {Automating Recursive Definitions and Termination Proofs in Higher-Order Logic},
   87.54 -  school = 	 {Technische Universit\"at M\"unchen},
   87.55 -  year = 	 {2009},
   87.56 -  OPTnote = 	 {http://www4.in.tum.de/~krauss/diss/}
   87.57 -}
   87.58 -
    88.1 --- a/src/Doc/isac/dmeindl/Hauptdatei.tex	Mon Sep 16 12:27:20 2013 +0200
    88.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.3 @@ -1,168 +0,0 @@
    88.4 -\documentclass[12pt,a4paper]{article}
    88.5 -\usepackage{a4}
    88.6 -\usepackage[naustrian]{babel}
    88.7 -\usepackage[latin1]{inputenc}
    88.8 -\usepackage{calc}
    88.9 -\usepackage{amsmath}   
   88.10 -\usepackage{epsfig}
   88.11 -\usepackage{graphicx}
   88.12 -\usepackage{xcolor}
   88.13 -\usepackage{amsfonts}
   88.14 -
   88.15 -
   88.16 -% Seitenrder einstellen und Hhe der Seitenzahlen
   88.17 -\usepackage{geometry}
   88.18 -\geometry{a4paper, left=2.5cm, right=2cm, top=3cm, bottom=2.8cm}
   88.19 -\setlength{\footskip}{2cm}
   88.20 -
   88.21 -
   88.22 -\newcommand{\R}{\mathbb R}
   88.23 -%\newcommand{\N}{\mathbb N}
   88.24 -%\newcommand{\Q}{\mathbb Q}
   88.25 -%\newcommand{\C}{\mathbb C}
   88.26 -
   88.27 -%Zhler definieren und Starwert setzen:
   88.28 -\newcounter{ctr}
   88.29 -\setcounter{ctr}{0}
   88.30 -
   88.31 -\newcounter{Teubner}
   88.32 -\newcounter{Klingenberg}
   88.33 -\newcounter{T}
   88.34 -\newcounter{Vo}
   88.35 -\newcounter{Se}
   88.36 -\newcounter{E}
   88.37 -\newcounter{Bwl}
   88.38 -\newcounter{Int}
   88.39 -\newcounter{Prim}
   88.40 -\newcounter{Z}
   88.41 -\setcounter{Z}{0}
   88.42 -\setcounter{Teubner}{1}
   88.43 -\setcounter{Klingenberg}{2}
   88.44 -\setcounter{T}{1}
   88.45 -\setcounter{Vo}{7}
   88.46 -\setcounter{Se}{2}
   88.47 -\setcounter{E}{3}
   88.48 -\setcounter{Bwl}{4}
   88.49 -\setcounter{Int}{5}
   88.50 -\setcounter{Prim}{6}
   88.51 -
   88.52 -%BSP
   88.53 -\newenvironment{myBsp}{
   88.54 -  \begin{list}{\textbf{\textsc{Bsp:}}}{
   88.55 -    \setlength{\labelwidth}{8Pc}
   88.56 -    \setlength{\labelsep}{0.5Pc}    
   88.57 -    \setlength{\rightmargin}{0Pc}
   88.58 -    \setlength{\leftmargin}{2Pc}
   88.59 -    \setlength{\parsep}{0ex plus 0.5ex}
   88.60 -    \setlength{\listparindent}{1em}
   88.61 -    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   88.62 -    \setlength{\topsep}{0.5Pc}
   88.63 -  }}
   88.64 -  {\end{list}
   88.65 -}
   88.66 -
   88.67 -
   88.68 -%Lemma
   88.69 -\newenvironment{myLemma}{
   88.70 -  \begin{list}{\textsc{\textbf{Lemma:\ \ \ }}}{
   88.71 -   \setlength{\labelsep}{-0.5Pc}    
   88.72 -    \setlength{\leftmargin}{1Pc}
   88.73 -    \setlength{\parsep}{0ex plus 0.5ex}
   88.74 -    \setlength{\listparindent}{1em}
   88.75 -    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   88.76 -    \setlength{\topsep}{0.5Pc}
   88.77 -  }}
   88.78 -  {\end{list}
   88.79 -}
   88.80 -%Korollar
   88.81 -\newenvironment{myKorollar}{
   88.82 -  \begin{list}{\textsc{\textbf{Korollar: }}}{
   88.83 -    \setlength{\labelwidth}{8Pc}
   88.84 -    \setlength{\labelsep}{0.5Pc}    
   88.85 -    \setlength{\rightmargin}{0Pc}
   88.86 -    \setlength{\leftmargin}{4Pc}
   88.87 -    \setlength{\parsep}{0ex plus 0.5ex}
   88.88 -    \setlength{\listparindent}{1em}
   88.89 -    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   88.90 -    \setlength{\topsep}{0.5Pc}
   88.91 -  }}
   88.92 -  {\end{list}
   88.93 -}
   88.94 -
   88.95 -%Theorem
   88.96 -\newenvironment{myTheorem}{
   88.97 -  \begin{list}{\textsc{\textbf{Theorem: }}}{
   88.98 -    \setlength{\labelwidth}{8Pc}
   88.99 -    \setlength{\labelsep}{0.5Pc}    
  88.100 -    \setlength{\rightmargin}{0Pc}
  88.101 -    \setlength{\leftmargin}{5Pc}
  88.102 -    \setlength{\parsep}{0ex plus 0.5ex}
  88.103 -    \setlength{\listparindent}{1em}
  88.104 -    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
  88.105 -    \setlength{\topsep}{0.5Pc}
  88.106 -  }}
  88.107 -  {\end{list}
  88.108 -}
  88.109 -
  88.110 -
  88.111 -%Proportion
  88.112 -\newenvironment{myProp}{
  88.113 -  \begin{list}{\textsc{\textbf{Proportion: }}}{
  88.114 -    \setlength{\labelwidth}{8Pc}
  88.115 -    \setlength{\labelsep}{0.5Pc}    
  88.116 -    \setlength{\rightmargin}{0Pc}
  88.117 -    \setlength{\leftmargin}{4Pc}
  88.118 -    \setlength{\parsep}{0ex plus 0.5ex}
  88.119 -    \setlength{\listparindent}{1em}
  88.120 -    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
  88.121 -    \setlength{\topsep}{0.5Pc}
  88.122 -  }}
  88.123 -  {\end{list}
  88.124 -}
  88.125 -
  88.126 -%Farben
  88.127 -
  88.128 -\newcommand{\red}[1]{\textcolor[rgb]{0.7,0,0}{\bf #1}}
  88.129 -\newcommand{\rd}[1]{\color{red}{#1}}
  88.130 -\newcommand{\white}[1]{\textcolor[rgb]{1,0,0}{\bf #1}}
  88.131 -\newcommand{\w}[1]{\color{white}{#1}}
  88.132 -\newcommand{\g}[1]{\color{myColor}{#1}}
  88.133 -
  88.134 -\usepackage{color}
  88.135 -\definecolor{myColor}{rgb}{0.9,0.9,0.9}% Wir definieren im RGB-Farbraum
  88.136 -
  88.137 -
  88.138 -\newcommand{\myDef}[1]{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\w .}\\[-0.2cm]\textbf{Definition\ \Nummer:}\\#1}}
  88.139 -\newcommand{\mySatz}[2]{\colorbox{myColor}{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\g .}\\[-0.2cm]\textbf{Satz\ \Nummer:}\ #1\\ #2}}}
  88.140 -\newcommand{\myBeweis}[1]{\textit{\textbf{Beweis:}\\ #1}}
  88.141 -\newcommand{\myAlg}[2]{\parbox{\columnwidth}{\addtocounter{ctr}{1}\textbf{Algorithmus\ \Nummer:}\ \ #1\\#2}}
  88.142 -\newcommand{\myProg}[1]{\fbox{\parbox{\columnwidth}{#1}}}
  88.143 -
  88.144 -\newcommand{\add}[1]{\addtocounter{#1}{1}}
  88.145 -\newcommand{\zahl}[1]{\setcounter{#1}{Z}}
  88.146 -\newcommand{\Q}[2]{\parbox{\columnwidth}{$^{[\arabic{#1}/#2]}$ }}
  88.147 -
  88.148 -\newcommand{\Nummer}{\thesection.\arabic{ctr}}
  88.149 -
  88.150 -%------------------------------------------------------------- Beginn -----------------------------------------------------------------------
  88.151 -
  88.152 -\title{Greates common divisor \\ for multivariable Polynomials}
  88.153 -\author{By\\Diana Meindl\\meindl$_-$diana@yahoo.com}
  88.154 -\date{}
  88.155 -
  88.156 -\begin{document}
  88.157 -\maketitle
  88.158 -{\w .}\\[12cm]
  88.159 -\begin{center}
  88.160 -Presented to \\
  88.161 -A.Univ.Prof. Dipl.-Ing. Dr. Wolfgang Schreiner (RISC Insitute)\\
  88.162 -and\\
  88.163 -Dr. techn. Walther Neuper (Institut fr Softwaretechnologie, TU Graz)
  88.164 -\end{center}
  88.165 -\newpage
  88.166 -%\tableofcontents
  88.167 -\newpage
  88.168 -\input{proposal}
  88.169 -\newpage
  88.170 -
  88.171 -\end{document}
  88.172 \ No newline at end of file
    89.1 --- a/src/Doc/isac/dmeindl/proposal.tex	Mon Sep 16 12:27:20 2013 +0200
    89.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.3 @@ -1,504 +0,0 @@
    89.4 -%WN mit diesen 3 Zeichen beginnen meine Kommentare
    89.5 -%WN111107: bitte spellchecker dr"uberlaufen lassen !!!
    89.6 -
    89.7 -\documentclass[12pt,a4paper]{article}
    89.8 -\bibliographystyle{alpha}
    89.9 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   89.10 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   89.11 -%\usepackage{a4}
   89.12 -%\usepackage[naustrian]{babel}
   89.13 -%\usepackage[latin1]{inputenc}
   89.14 -%\usepackage{calc}
   89.15 -%\usepackage{amsmath}   
   89.16 -%\usepackage{epsfig}
   89.17 -%\usepackage{graphicx}
   89.18 -%\usepackage{xcolor}
   89.19 -%\usepackage{amsfonts}
   89.20 -%
   89.21 -%WN BITTE DIESE DEFINITIONEN WEGLASSEN ...
   89.22 -%% Seitenrder einstellen und Hhe der Seitenzahlen
   89.23 -%\usepackage{geometry}
   89.24 -%\geometry{a4paper, left=2.5cm, right=2cm, top=3cm, bottom=2.8cm}
   89.25 -%\setlength{\footskip}{2cm}
   89.26 -%
   89.27 -%
   89.28 -%%Zhler definieren und Starwert setzen:
   89.29 -%\newcommand{\R}{\mathbb R}
   89.30 -%%\newcommand{\N}{\mathbb N}
   89.31 -%%\newcommand{\Q}{\mathbb Q}
   89.32 -%%\newcommand{\C}{\mathbb C}
   89.33 -%
   89.34 -%
   89.35 -%\newcounter{ctr}
   89.36 -%\setcounter{ctr}{0}
   89.37 -%
   89.38 -%\newcounter{Teubner}
   89.39 -%\newcounter{Klingenberg}
   89.40 -%\newcounter{T}
   89.41 -%\newcounter{Vo}
   89.42 -%\newcounter{Se}
   89.43 -%\newcounter{E}
   89.44 -%\newcounter{Bwl}
   89.45 -%\newcounter{Int}
   89.46 -%\newcounter{Prim}
   89.47 -%\newcounter{Z}
   89.48 -%\setcounter{Z}{0}
   89.49 -%\setcounter{Teubner}{1}
   89.50 -%\setcounter{Klingenberg}{2}
   89.51 -%\setcounter{T}{1}
   89.52 -%\setcounter{Vo}{7}
   89.53 -%\setcounter{Se}{2}
   89.54 -%\setcounter{E}{3}
   89.55 -%\setcounter{Bwl}{4}
   89.56 -%\setcounter{Int}{5}
   89.57 -%\setcounter{Prim}{6}
   89.58 -%%BSP
   89.59 -%\newenvironment{myBsp}{
   89.60 -%  \begin{list}{\textbf{\textsc{Bsp:}}}{
   89.61 -%    \setlength{\labelwidth}{8Pc}
   89.62 -%    \setlength{\labelsep}{0.5Pc}    
   89.63 -%    \setlength{\rightmargin}{0Pc}
   89.64 -%    \setlength{\leftmargin}{2Pc}
   89.65 -%    \setlength{\parsep}{0ex plus 0.5ex}
   89.66 -%    \setlength{\listparindent}{1em}
   89.67 -%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   89.68 -%    \setlength{\topsep}{0.5Pc}
   89.69 -%  }}
   89.70 -%  {\end{list}
   89.71 -%}
   89.72 -%
   89.73 -%
   89.74 -%%Lemma
   89.75 -%\newenvironment{myLemma}{
   89.76 -%  \begin{list}{\textsc{\textbf{Lemma:\ \ \ }}}{
   89.77 -%   \setlength{\labelsep}{-0.5Pc}    
   89.78 -%    \setlength{\leftmargin}{1Pc}
   89.79 -%    \setlength{\parsep}{0ex plus 0.5ex}
   89.80 -%    \setlength{\listparindent}{1em}
   89.81 -%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   89.82 -%    \setlength{\topsep}{0.5Pc}
   89.83 -%  }}
   89.84 -%  {\end{list}
   89.85 -%}
   89.86 -%%Korollar
   89.87 -%\newenvironment{myKorollar}{
   89.88 -%  \begin{list}{\textsc{\textbf{Korollar: }}}{
   89.89 -%    \setlength{\labelwidth}{8Pc}
   89.90 -%    \setlength{\labelsep}{0.5Pc}    
   89.91 -%    \setlength{\rightmargin}{0Pc}
   89.92 -%    \setlength{\leftmargin}{4Pc}
   89.93 -%    \setlength{\parsep}{0ex plus 0.5ex}
   89.94 -%    \setlength{\listparindent}{1em}
   89.95 -%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
   89.96 -%    \setlength{\topsep}{0.5Pc}
   89.97 -%  }}
   89.98 -%  {\end{list}
   89.99 -%}
  89.100 -%
  89.101 -%%Theorem
  89.102 -%\newenvironment{myTheorem}{
  89.103 -%  \begin{list}{\textsc{\textbf{Theorem: }}}{
  89.104 -%    \setlength{\labelwidth}{8Pc}
  89.105 -%    \setlength{\labelsep}{0.5Pc}    
  89.106 -%    \setlength{\rightmargin}{0Pc}
  89.107 -%    \setlength{\leftmargin}{5Pc}
  89.108 -%    \setlength{\parsep}{0ex plus 0.5ex}
  89.109 -%    \setlength{\listparindent}{1em}
  89.110 -%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
  89.111 -%    \setlength{\topsep}{0.5Pc}
  89.112 -%  }}
  89.113 -%  {\end{list}
  89.114 -%}
  89.115 -%
  89.116 -%
  89.117 -%%Proportion
  89.118 -%\newenvironment{myProp}{
  89.119 -%  \begin{list}{\textsc{\textbf{Proportion: }}}{
  89.120 -%    \setlength{\labelwidth}{8Pc}
  89.121 -%    \setlength{\labelsep}{0.5Pc}    
  89.122 -%    \setlength{\rightmargin}{0Pc}
  89.123 -%    \setlength{\leftmargin}{4Pc}
  89.124 -%    \setlength{\parsep}{0ex plus 0.5ex}
  89.125 -%    \setlength{\listparindent}{1em}
  89.126 -%    \setlength{\itemsep}{1ex plus 0.5ex minus 0.2ex}
  89.127 -%    \setlength{\topsep}{0.5Pc}
  89.128 -%  }}
  89.129 -%  {\end{list}
  89.130 -%}
  89.131 -%
  89.132 -%%Farben
  89.133 -%
  89.134 -%\newcommand{\red}[1]{\textcolor[rgb]{0.7,0,0}{\bf #1}}
  89.135 -%\newcommand{\rd}[1]{\color{red}{#1}}
  89.136 -%\newcommand{\white}[1]{\textcolor[rgb]{1,0,0}{\bf #1}}
  89.137 -%\newcommand{\w}[1]{\color{white}{#1}}
  89.138 -%\newcommand{\g}[1]{\color{myColor}{#1}}
  89.139 -%
  89.140 -%\usepackage{color}
  89.141 -%\definecolor{myColor}{rgb}{0.9,0.9,0.9}% Wir definieren im RGB-Farbraum
  89.142 -%
  89.143 -%
  89.144 -%\newcommand{\myDef}[1]{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\w .}\\[-0.2cm]\textbf{Definition\ \Nummer:}\\#1}}
  89.145 -%\newcommand{\mySatz}[2]{\colorbox{myColor}{\parbox{\columnwidth}{\addtocounter{ctr}{1}{\g .}\\[-0.2cm]\textbf{Satz\ \Nummer:}\ #1\\ #2}}}
  89.146 -%\newcommand{\myBeweis}[1]{\textit{\textbf{Beweis:}\\ #1}}
  89.147 -%\newcommand{\myAlg}[2]{\parbox{\columnwidth}{\addtocounter{ctr}{1}\textbf{Algorithmus\ \Nummer:}\ \ #1\\#2}}
  89.148 -%\newcommand{\myProg}[1]{\fbox{\parbox{\columnwidth}{#1}}}
  89.149 -%
  89.150 -%\newcommand{\add}[1]{\addtocounter{#1}{1}}
  89.151 -%\newcommand{\zahl}[1]{\setcounter{#1}{Z}}
  89.152 -%\newcommand{\Q}[2]{\parbox{\columnwidth}{$^{[\arabic{#1}/#2]}$ }}
  89.153 -%
  89.154 -%\newcommand{\Nummer}{\thesection.\arabic{ctr}}
  89.155 -%
  89.156 -%---------- --------------------------------------------------- Beginn -----------------------------------------------------------------------
  89.157 -
  89.158 -\title{Greatest Common Divisor \\ for Multivariate Polynomials}
  89.159 -\author{Diana Meindl\\meindl\_diana@yahoo.com}
  89.160 -\date{\today}
  89.161 -
  89.162 -\begin{document}
  89.163 -\maketitle
  89.164 -%{\w .}\\[12cm]
  89.165 -%\begin{center}
  89.166 -%Presented to \\
  89.167 -%A.Univ.Prof. Dipl.-Ing. Dr. Wolfgang Schreiner (RISC Insitute)\\
  89.168 -%and\\
  89.169 -%Dr. techn. Walther Neuper (Institut fr Softwaretechnologie, TU Graz)
  89.170 -%\end{center}
  89.171 -%\newpage
  89.172 -%{\w .}\hspace{6.5cm}\textbf{Abstact}\\[0.5cm]
  89.173 -
  89.174 -\abstract{
  89.175 -This is a proposal for a Masters Thesis at RISC, the Research Institute for Symbolic Computation at Linz University.\\
  89.176 -
  89.177 -Calculation with fractions is an important part of Computer Algebra Systems (CAS). This proposal aims at a specific part of such calculations, the greatest common divisor (GCD) used for cancellation, but in the very general context of multivariate polynomials. Cancellation of multivariate polynomials is a settled topic in Computer Algebra, respective algorithms well documented and implementations available in all CASs.
  89.178 -
  89.179 -This proposal claims for novelty with respect to the context of implementation, an implementation as a CAS-feature in Computer Theorem Proving (CTP). On CTP's present development towards industrial use in software and systems verification, specific domain models involve demand on more and more mathematics, and within mathematics involve demand for more and more features. Thus the proposed implementation of GCD and cancellation follows an actual demand.
  89.180 -
  89.181 -If the implementation is successful, it is planned to be included into the distribution of Isabelle, one of the two dominating CTPs in Europe. As part of the Isabelle distribution it will also serve the {\sisac} project aiming at an educational math assistant under development at RISC Linz and Graz University of Technology.
  89.182 -}
  89.183 -
  89.184 -\newpage
  89.185 -%WN vorerst zu Zwecken der "Ubersicht lassen ...
  89.186 -\tableofcontents
  89.187 -
  89.188 -\section{Background}
  89.189 -The \sisac-project is a research and development project launched at the Institute for Software Technology of the Graz University of Technology (TUG) and now continued at the Research Institute for Symbolic Computation (RISC) of University of Linz and at the Institute for Information Systems and Computer Media (IICM) of TUG. The resulting \sisac{} prototype is a ``transparent single-stepping system for applied mathematics'' based on the computer theorem prover Isabelle. The prototype has been proven useful in field tests at Austrain schools \cite{imst-htl06-SH,imst-htl07-SH,imst-hpts08-SH} and is now extended for wider use.
  89.190 -
  89.191 -Authoring knowledge in \sisac{} provides a strict separation of concerns between authoring math knowledge and authoring dialogues. The latter is pursued at IICM, the former is concern of this thesis. Math authoring is done by use of a CTP-based programming language \cite{plmms10} or by use of SML \cite{pl:milner97} as the meta language and implementation language of Isabelle. Since the code resulting from this thesis shall serve Isabelle, it will be written in SML. Via Isabelle distribution this thesis shall also serve \sisac; a re-implementation in \sisac's CTP-based language is planned as a subsequent project -- this will make cancellation transparent for singe-stepping.
  89.192 -
  89.193 -%The special is an easy readable knowledge base including Isabelles HOL-theories and a transparently working knowledge interpreter (a generalization of 'single stepping' algebra systems).
  89.194 -%The background to both, development and research, is given by actual needs in math education as well as by foundamental questions about 'the mechanization of thinking' as an essential aspect in mathematics and in technology.
  89.195 -%The \sisac-system under construction comprises a tutoring-system and an authoring-system. The latter provides for adaption to various needs of individual users and educational institutions and for extensions to arbitrary fields of applied mathematics.
  89.196 -
  89.197 -TODO.WN111107 bitte googeln und je einen Absatz kopieren + zitieren woher (PLAGIATsgefahr):\\
  89.198 -European provers: Isabelle \cite{Nipkow-Paulson-Wenzel:2002}, Coq \cite{Huet_all:94}\\
  89.199 -American provers: PVS~\cite{pvs}, ACL2~\footnote{http://userweb.cs.utexas.edu/~moore/acl2/}\\
  89.200 -
  89.201 -\section{Goal of the thesis}
  89.202 -\subsection{Current situation}
  89.203 -At the presetn time there is no implimentation for the problem of canceling fractions in Isabelle, and a deficient one in \sisac. But because canceling is important for calculating with fractions a new implimentation is necessary.
  89.204 -
  89.205 -\subsection{Problem} 
  89.206 -The wish is to handle fractions in \sisac{} not only in one variable also in more. So the goal of this thesis ist to find, assess and evaluate the existing algorithms and methods for finding the GCD. This will be an functional programm with the posibility to include it into Isabelle, where it will be used by \sisac{} as well.
  89.207 -
  89.208 -%WN eine pr"azisere Beschreibung des Problems kann ich mir nicht vorstellen (englische Version der Mail haben wir auch, aber sie passt nicht zur deutschen Antwort von Prof.Nipkow) ...
  89.209 -\bigskip
  89.210 -A mail to Prof. Nipkow, leader of the development of Isabelle \cite{Nipkow-Paulson-Wenzel:2002} at TU M\"unchen, Mon, 23 May 2011 08:58:14 +0200 describes the problem as follows:
  89.211 -\begin{verbatim}
  89.212 -Eine erste Idee, wie die Integration der Diplomarbeit f"ur
  89.213 -einen Benutzer von Isabelle aussehen k"onnte, w"are zum 
  89.214 -Beispiel im
  89.215 -
  89.216 -   lemma cancel:
  89.217 -     assumes asm3: "x2 - x*y \<noteq> 0" and asm4: "x \<noteq> 0"
  89.218 -     shows "(x2 - y2) / (x2 - x*y) = (x + y) / (x::real)"
  89.219 -     apply (insert asm3 asm4)
  89.220 -     apply simp
  89.221 -   sorry
  89.222 -
  89.223 -die Assumptions
  89.224 -
  89.225 -   asm1: "(x2 - y2) = (x + y) * (x - y)" and asm2: "x2 - x*y = x * (x - y)"
  89.226 -
  89.227 -im Hintergrund automatisch zu erzeugen (mit der Garantie, 
  89.228 -dass "(x - y)" der GCD ist) und sie dem Simplifier (f"ur die 
  89.229 -Rule nonzero_mult_divide_mult_cancel_right) zur Verf"ugung zu 
  89.230 -stellen, sodass anstelle von "sorry" einfach "done" stehen kann.
  89.231 -Und weiters w"are eventuell asm3 zu "x - y \<noteq> 0" zu vereinfachen, 
  89.232 -eine Rewriteorder zum Herstellen einer Normalform festzulegen, etc.
  89.233 -\end{verbatim}
  89.234 -%WN und eine bessere Motivation f"ur eine Master Thesis kann ich mir auch nicht vorstellen ...
  89.235 -Response of Prof. Nipkow:
  89.236 -
  89.237 -\begin{verbatim}
  89.238 -Unser Spezialist fuer die mathematischen Theorien ist Johannes H"olzl. 
  89.239 -Etwas allgemeinere Fragen sollten auf jeden Fall an isabelle-dev@ 
  89.240 -gestellt werden.
  89.241 -
  89.242 -Viel Erfolg bei der Arbeit!
  89.243 -Tobias Nipkow
  89.244 -\end{verbatim}
  89.245 -
  89.246 -
  89.247 -\subsection{Expected results}
  89.248 -Implementation of algorithms for the different problems, and find out which one will be the best for the specific requirements in Isabelle.\\
  89.249 -The program should accomplish:
  89.250 -\begin{itemize}
  89.251 -\item Real and rational coefficients. Maybe also imaginary coefficients.
  89.252 -\item Canceling and adding multivariate polynomials, when they are in normal form.
  89.253 -\end{itemize}
  89.254 -The program will be written in the functional programming language SML with appropriate comments. The resulting code shall meet the coding standards of Isabelle \cite{isar-impl} p.3-10. The integration of the code into the Isabelle distribution will be done by the Isabelle developer team.
  89.255 -
  89.256 -\section{State of the art}
  89.257 -In a broad view the context of this thesis can be seen as ``computation and deduction'': simplification and in particular cancellation of rational terms is concern of \textbf{computation} implemented in Computer Algebra Systems (CAS) --- whereas the novelty within the thesis is given by an implementation of cancellation in a computer theorem prover (CTP), i.e. in the domain of \textbf{deduction} with respective logical rigor not addressed in the realm of CAS.
  89.258 -
  89.259 -Below, after a general survey on computation, represented by CAS, and on deduction, represented by CTP, a more narrow view on ``CAS-functionality in CTP'' is pursued.
  89.260 -
  89.261 -\subsection{Computer Algebra and Proof Assistants}
  89.262 -%WN achtung: diese subsection is fast w"ortlich kopiert aus \cite{plmms10} -- also in der Endfassung bitte "uberarbeiten !!!
  89.263 -Computer Algebra and Proof Assistants have coexisted for a many years so there is much research trying to bridge the gap between these approaches from both sides. We shall continue to abbreviate Computer Algebra (Systems) by ``CAS'', and in analogy we shall abbreviate proof assistants by CTP, computer theorem provig (comprising both, interactive theorem proving (ITP) and automated theorem proving (ATP), since in CTP there are ATP-tools included today.)
  89.264 -
  89.265 -First, many CTPs already have CAS-like functionality,
  89.266 -especially for domains like arithmetic. They provide the user
  89.267 -with conversions, tactics or decision procedures that solve
  89.268 -problems in a particular domain. Such decision procedures present
  89.269 -in the standard library of HOL Light~\footnote{http://www.cl.cam.ac.uk/~jrh13/hol-light/} are used inside the
  89.270 -prototype described in Sect.\ref{cas-funct} on p.\pageref{part-cond} for arithmetic's,
  89.271 -symbolic differentiation and others.
  89.272 -
  89.273 -Similarly some CAS systems provide environments that allow
  89.274 -logical reasoning and proving properties within the system. Such
  89.275 -environments are provided either as logical
  89.276 -extensions (e.g.~\cite{logicalaxiom}) or are implemented within a
  89.277 -CAS using its language~\cite{theorema00}.
  89.278 -
  89.279 -There are numerous architectures for information exchange between
  89.280 -CAS and CTP with different levels of \emph{degree of trust}
  89.281 -between the prover and the CAS. In principle, there are several approaches. 
  89.282 -If CAS-functionality is not fully embedded in CTP, CAS can be called as ``oracles'' nevertheless (for efficiency reasons, in general) --- their results are regarded like prophecies of Pythia in Delphi. There are three kinds of checking oracles, however:
  89.283 -\begin{enumerate}
  89.284 -\item Just adopt the CAS result without any check. Isabelle internally marks such results.
  89.285 -\item Check the result inside CTP. There are many cases, where such checks are straight forward, for instance, checking the result of factorization by multiplication of the factors, or checking integrals by differentiation.
  89.286 -\item Generate a derivation of the result within CTP; in Isabelle this is called ``proof reconstruction''.
  89.287 -\end{enumerate}
  89.288 -A longer list of frameworks for
  89.289 -information exchange and bridges between systems can be found
  89.290 -in~\cite{casproto}.
  89.291 -
  89.292 -There are many approaches to defining partial functions in proof
  89.293 -assistants. Since we would like the user to define functions
  89.294 -without being exposed to the underlying logic of the proof
  89.295 -assistant we only mention some automated mechanisms for defining
  89.296 -partial functions in the logic of a CTP.
  89.297 -Krauss~\cite{krauss} has developed a framework for defining
  89.298 -partial recursive functions in Isabelle/HOL, which formally
  89.299 -proves termination by searching for lexicographic combinations of
  89.300 -size measures. Farmer~\cite{farmer} implements a scheme for
  89.301 -defining partial recursive functions in \textrm{IMPS}.
  89.302 -
  89.303 -\subsection{Motivation for CAS-functionality in CTP}
  89.304 -In the realm of CTP formuas are dominated by quantifiers $\forall$, $\exists$ and $\epsilon$ (such) and by operations like $\Rightarrow$, $\land$ and $\lor$. Numbers were strangers initially; numerals have been introduced to Isabelle not much before the year 2000~\footnote{In directory src/Provers/Arith/ see the files cancel\_numerals.ML and cancel\_numeral\_factor.ML in the Isabelle distribution 2011. They still use the notation $\#1,\#2,\#3,\dots$ from before 2000~!}. However, then numerals have been implemented with {\em polymorphic type} such that $2\cdot r\cdot\pi$ ($2$ is type \textit{real}) and $\pi_{\it approx}=3.14\,\land\, 2\cdot r\cdot\pi_{\it approx}$ can be written as well as $\sum_i^n i=\frac{n\cdot(n+1)}{2}$ ($2$ is type \textit{nat}). The different types are inferred by Hindle-Milner type inference \cite{damas-milner-82,Milner-78,Hindley-69}.
  89.305 -
  89.306 -1994 was an important year for CTP: the Pentium Bug caused excitement in the IT community all around the world and motivated INTEL to invest greatly into formal verification of circuits (which carried over to verification of software). Not much later John Harrison mechanized real numbers as Dedekind Cuts in HOL Light \footnote{http://www.cl.cam.ac.uk/~jrh13/hol-light/} and derived calculus, derivative and integral from that definition \cite{harr:thesis}, an implementation which has been transferred to Isabelle very soon after that~\footnote{In the directory src/HOL/Multivariate\_Analysis/ see the files Gauge\_Measure.thy, Integration.thy, Derivative.thy, Real\_Integration.thy, Brouwer\_Fixpoint.thy, Fashoda.thy}.
  89.307 -
  89.308 -Harrison also says that ``CAS are ill-defined'' and gives, among others, an example relevant for this thesis on cancellation: TODO.WN111104 search for ... meromorphic functions in http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-428.ps.gz
  89.309 -
  89.310 -\medskip
  89.311 -The main motivation for further introduction of CAS-functionality to CTP is also technology-driven: In this decade domain engineering is becoming an academic discipline with industrial relevance \cite{db:dom-eng}: vigorous efforts extend the scope of formal specifications even beyond software technology, and thus respective domains of mathematical knowledge are being mechanized in CTP. The Archive of Formal Proofs~\footnote{http://afp.sourceforge.net/} is Isabelle's repository for such work.
  89.312 -
  89.313 -\subsection{Simplification within CTP}
  89.314 -Cancellation, the topic of this thesis, is a specific part of simplification of rationals. In the realm of CAS cancellation is {\em not} an interesting part of the state of the art, because cancellation has been implemented in the prevailing CAS more than thirty years ago --- however, cancellation of multivariate polynomials is {\em not} yet implemted in any of the dominating CTPs.
  89.315 -%WN: bitte mit Anfragen an die Mailing-Listen nachpr"ufen: Coq, HOL, ACL2, PVS
  89.316 -
  89.317 -As in other CTPs, in Isabelle the simplifier is a powerful software component; the sets of rewrite rules, called \textit{simpsets}, contain several hundreds of elements. Rewriting is still very efficient, because the simpsets are transformed to term nets \cite{term-nets}.
  89.318 -
  89.319 -Rational terms of multivariate polynomials still have a normal form \cite{bb-loos} and thus equivalence of respective terms is decidable. This is not the case, however, with terms containing roots or transcedent functions. Thus, CAS are unreliable by design in these cases.
  89.320 -
  89.321 -In CTP, simplification of non-decidable domains is already an issue, as can be seem in the mail with subject ``simproc divide\_cancel\_factor produces error'' in the mailing-list \textit{isabelle-dev@mailbroy.informatik.tu-muenchen.de} from Thu, 15 Sep 2011 16:34:12 +0200
  89.322 -{%\footnotesize --- HILFT NICHTS
  89.323 -\begin{verbatim}
  89.324 -Hi everyone,
  89.325 -
  89.326 -in the following snippet, applying the simplifier causes an error:
  89.327 -
  89.328 -------------------------------------------
  89.329 -theory Scratch
  89.330 -  imports Complex_Main
  89.331 -begin
  89.332 -
  89.333 -lemma
  89.334 -  shows "(3 / 2) * ln n = ((6 * k * ln n) / n) * ((1 / 2 * n / k) / 2)"
  89.335 -apply simp
  89.336 -------------------------------------------
  89.337 -
  89.338 -outputs
  89.339 -
  89.340 -------------------------------------------
  89.341 -Proof failed.
  89.342 -(if n = 0 then 0 else 6 * (k * ln n) / 1) * 2 / (4 * k) =
  89.343 -2 * (Numeral1 * (if n = 0 then 0 else 6 * (k * ln n) / 1)) / (2 * (2 * k))
  89.344 - 1. n \not= Numeral0 \rightarrow k * (ln n * (2 * 6)) / (k * 4) = k * (ln n * 12) / (k * 4)
  89.345 -1 unsolved goal(s)!
  89.346 -The error(s) above occurred for the goal statement:
  89.347 -(if n = 0 then 0 else 6 * (k * ln n) / 1) * 2 / (4 * k) =
  89.348 -2 * (Numeral1 * (if n = 0 then 0 else 6 * (k * ln n) / 1)) / (2 * (2 * k))
  89.349 -------------------------------------------
  89.350 -\end{verbatim}
  89.351 -}
  89.352 -Mail ``Re: simproc divide\_cancel\_factor produces error'' on Fri, 16 Sep 2011 22:33:36 +0200
  89.353 -\begin{verbatim}
  89.354 -> > After the release, I'll have to think about doing a complete overhaul
  89.355 -> > of all of the cancellation simprocs.
  89.356 -You are very welcome to do so.  Before you start, call on me and I will
  89.357 -write down some ideas I had long ago (other may want to join, too).
  89.358 -\end{verbatim}
  89.359 -%WN: bist du schon angemeldet in den Mailing-Listen isabelle-users@ und isabelle-dev@ ? WENN NICHT, DANN WIRD ES H"OCHSTE ZEIT !!!
  89.360 -
  89.361 -\subsection{Open Issues with CAS-functionality in CTP}\label{cas-funct}
  89.362 -There is at least one effort explicitly dedicated to implement CAS-functionality in CTP \cite{cezary-phd}. %WN bitte unbedingt lesen (kann von mir in Papierform ausgeborgt werden) !!!
  89.363 -In this work three issues has been identified: partiality conditions, multi-valued functions and real numbers. These issues are addressed in the subsequent paragraphs, followed by a forth issue raised by \sisac{}.
  89.364 -
  89.365 -\paragraph{Partiality conditions}\label{part-cond} are introduced by partial functions or by conditional rewriting. An example of how the CAS-functionality \cite{cezary-phd} looks like is given on p.\pageref{fig:casproto}. 
  89.366 -\cite{cezary-phd} gives an introductory example (floated to p.\pageref{fig:casproto}) which will be referred to in the sequel.
  89.367 -\input{thol.tex}
  89.368 -%WN das nachfolgende Format-Problem l"osen wir sp"ater ...
  89.369 -\begin{figure}[hbt]
  89.370 -\begin{center}
  89.371 -\begin{holnb}
  89.372 -  In1 := vector [\&2; \&2] - vector [\&1; \&0] + vec 1
  89.373 - Out1 := vector [\&2; \&3]
  89.374 -  In2 := diff (diff (\Lam{}x. \&3 * sin (\&2 * x) +
  89.375 -         \&7 + exp (exp x)))
  89.376 - Out2 := \Lam{}x. exp x pow 2 * exp (exp x) +
  89.377 -         exp x * exp (exp x) + -- \&12 * sin (\&2 * x)
  89.378 -  In3 := N (exp (\&1)) 10
  89.379 - Out3 := #2.7182818284 + ... (exp (\&1)) 10 F
  89.380 -  In4 := x + \&1 - x / \&1 + \&7 * (y + x) pow 2
  89.381 - Out4 := \&7 * x pow 2 + \&14 * x * y + \&7 * y pow 2 + \&1
  89.382 -  In5 := sum (0,5) (\Lam{}x. \&x * \&x)
  89.383 - Out5 := \&30
  89.384 -  In6 := sqrt (x * x) assuming x > &1
  89.385 - Out6 := x
  89.386 -\end{holnb}
  89.387 -\end{center}
  89.388 -\caption{\label{fig:casproto}Example interaction with the prototype
  89.389 -  CAS-like input-response loop. For the user input given in the
  89.390 -  \texttt{In} lines, the system produces the output in \texttt{Out}
  89.391 -  lines together with HOL Light theorems that state the equality
  89.392 -  between the input and the output.}
  89.393 -\end{figure}
  89.394 -In lines {\tt In6, Out6} this examples shows how to reliably simplify $\sqrt{x}$. \cite{caspartial} gives more details on handling side conditions in formalized partial functions.
  89.395 -
  89.396 -Analoguous to this example, cancellations (this thesis is concerned with) like
  89.397 -$$\frac{x^2-y^2}{x^2-x\cdot y}=\frac{x+y}{x}\;\;\;\;{\it assuming}\;x-y\not=0\land x\not=0$$
  89.398 -produce assumptions, $x-y\not=0, x\not=0$ here. Since the code produced in the framework of this thesis will be implemented in Isabelle's simplifier (outside this thesis), the presentation to the user will be determined by Isabelle and \sisac{}{} using the respective component of Isabelle. Also reliable handling of assumptions like $x-y\not=0, x\not=0$ is up to these systems.
  89.399 -
  89.400 -\paragraph{Multi-valued functions:}\label{multi-valued}
  89.401 -\cite{seeingroots,davenp-multival-10} discuss cases where CAS are error prone when dropping a branch of a multi-valued function~\footnote{``Multivalued \textit{function}'' is a misnomer, since the value of a function applied to a certain argument is unique by definition of function.}. Familiar examples are ...
  89.402 -%TODO.WN111104 ... zur Erkl"arung ein paar Beispiele von http://en.wikipedia.org/wiki/Multivalued_function
  89.403 -
  89.404 -\paragraph{Real numbers} cannot be represented by numerals. In engineering applications, however, approximation by floating-point numbers are frequently useful. In CTP floating-point numbers must be handled rigorously as approximations. Already \cite{harr:thesis} introduced operations on real numerals accompanied by rigorous calculation of precision. \cite{russellphd} describes efficient implementation of infinite precision real numbers in Coq.
  89.405 -
  89.406 -\paragraph{All solutions for equations} must be guaranted, if equation solving is embedded within CTP. So, given an equation $f(x)=0$ and the set of solutions $S$ of this equation, we want to have both,
  89.407 -\begin{eqnarray}
  89.408 -   \exists x_s.\;x_s\in S &\Rightarrow& f(x_s) = 0 \\\label{is-solut}
  89.409 -  x_s\in S &\Leftarrow& \exists x_s.\;f(x_s) = 0    \label{all-solut}
  89.410 -\end{eqnarray}
  89.411 -where (\ref{all-solut}) ensures that $S$ contains {\em all} solutions of the equation. The \sisac{}-project has implemented a prototype of an equation solver~\footnote{See \textit{equations} in the hierarchy of specifications at http://www.ist.tugraz.at/projects/isac/www/kbase/pbl/index\_pbl.html}.
  89.412 -
  89.413 -There is demand for fullfledged equation solving in CTP, including equational systems and differential equations, because \sisac{}{} has a prototype of a CTP-based programming language calling CAS functions; and Lucas-Interpretation \cite{wn:lucas-interp-12} makes these functions accessible by single-stepping and ``next step guidance'', which would automatically generate a learning system for equation solving.
  89.414 -
  89.415 -\subsection{Algorithms for cancellation of multivariate polynomials}
  89.416 -The most appropriate book for implementing the required algorithms in this thesis is \cite{Winkler:96}. TODO.WN111104 welche noch ?
  89.417 -
  89.418 -\section{Thesis structure}
  89.419 -The proposed table of contents of the thesis on the chapter level is as follows:
  89.420 -\begin{enumerate}
  89.421 -	\item Introduction (2-3 pages)
  89.422 -	\item Computer Algebra Systems (CAS) (5 - 7 pages)\\
  89.423 -	Which different CAS exists and whats the focus of them.
  89.424 -	\item The \sisac{}-Project (5 - 7 pages)\\
  89.425 -	This chapter will describe the \sisac{}-Project and the goals of the project.
  89.426 -	\item Univariate Polynomials (15-20 pages)\\
  89.427 -	This chapter will describe different Algorithms for univariate polynomials, with different coefficients.
  89.428 -	\item Multivariate Polynomials (20-25 pages)\\
  89.429 -	This chapter will describe different Algorithms for multivariate polynomials,  with different coefficients
  89.430 -	\item Functional programming and SML(2-5 pages)\\
  89.431 -	The basic idea of this programming languages.
  89.432 -	\item Implimentation in \sisac{}-Project (15-20 pages)
  89.433 -	\item Conclusion (2-3 pages)
  89.434 -\end{enumerate}
  89.435 -%\newpage
  89.436 -
  89.437 -\section{Timeline}
  89.438 -%Werd nie fertig.\\
  89.439 -\begin{center}
  89.440 -		\begin{tabular}{|l|l|l|}
  89.441 -		\hline
  89.442 -			 \textbf{Time}&\textbf{Thesis}&\textbf{Project}\\
  89.443 -			 \hline
  89.444 -			 & Functional programming & Learning the basics and the idea\\
  89.445 -			 & & of funcional programming\\
  89.446 -			 \hline
  89.447 -			 & Different CAS & Can they handle the problem \\
  89.448 -			 & &and which algorithm do they use?\\ \hline
  89.449 -			 & Univariate Polynomials & Implementation of the Algorithm\\
  89.450 -			 & & for univariate Polynomials \\ \hline
  89.451 -		   & Multivariate Polynomials &  Implementation of the Algorithm\\
  89.452 -			 & & for multivariate Polynomials \\ \hline 
  89.453 -		   & The \sisac-Project &\\ \hline
  89.454 -		   & Conclusion and Introduction & Find good examples for testing\\
  89.455 -			\hline
  89.456 -		\end{tabular}
  89.457 -	\end{center}
  89.458 -
  89.459 -%WN oben an passender stelle einf"ugen
  89.460 -\cite{einf-funct-progr}
  89.461 -		
  89.462 -		
  89.463 -\bibliography{bib/math-eng,bib/didact,bib/bk,bib/RISC_2,bib/isac,bib/pl,bib/math,references}
  89.464 -%\section{Bibliography}
  89.465 -%%mindestens 10
  89.466 -%\begin{enumerate}
  89.467 -% \item Bird/Wadler, \textit{Einfhrung in die funktionale Programmierung}, Carl Hanser and Prentice-Hall International, 1992
  89.468 -% \item Franz Winkler, \textit{Polynomial Algorithms in Computer Algebra}, Springer,1996
  89.469 -% \item %M. Mignotte, \textit{An inequality about factors of polynomial}
  89.470 -% \item %M. Mignotte, \textit{Some useful bounds}
  89.471 -% \item %W. S. Brown and J. F. Traub. \textit{On euclid's algorithm and the theory of subresultans}, Journal of the ACM (JACM), 1971
  89.472 -% \item %Bruno Buchberger, \textit{Algorhimic mathematics: Problem types, data types, algorithm types}, Lecture notes, RISC Jku A-4040 Linz, 1982
  89.473 -% 
  89.474 -% \item %Tateaki Sasaki and Masayuki Suzuki, \textit{Thre new algorithms for multivariate polynomial GCD}, J. Symbolic Combutation, 1992
  89.475 -% \item
  89.476 -% \item
  89.477 -% \item
  89.478 -%\end{enumerate} 
  89.479 -
  89.480 -\end{document}
  89.481 -
  89.482 -ALLES UNTERHALB \end{document} WIRD VON LATEX NICHT BERUECKSICHTIGT
  89.483 -WN110916 grep-ing through Isabelle code:
  89.484 -
  89.485 -neuper@neuper:/usr/local/isabisac/src$ find -name "*umeral*"
  89.486 -./HOL/ex/Numeral.thy
  89.487 -./HOL/Tools/nat_numeral_simprocs.ML
  89.488 -./HOL/Tools/numeral_syntax.ML
  89.489 -./HOL/Tools/numeral.ML
  89.490 -./HOL/Tools/numeral_simprocs.ML
  89.491 -./HOL/Matrix/ComputeNumeral.thy
  89.492 -./HOL/Library/Numeral_Type.thy
  89.493 -./HOL/Numeral_Simprocs.thy
  89.494 -./HOL/Import/HOL/numeral.imp
  89.495 -./HOL/Code_Numeral.thy
  89.496 -./HOL/Nat_Numeral.thy
  89.497 -./ZF/Tools/numeral_syntax.ML
  89.498 -./Provers/Arith/cancel_numeral_factor.ML
  89.499 -./Provers/Arith/cancel_numerals.ML
  89.500 -./Provers/Arith/combine_numerals.ML
  89.501 -
  89.502 -neuper@neuper:/usr/local/isabisac/src$ find -name "*ancel*"
  89.503 -./HOL/Tools/abel_cancel.ML                 
  89.504 -./Provers/Arith/cancel_div_mod.ML
  89.505 -./Provers/Arith/cancel_numeral_factor.ML  Paulson 2000 !!!
  89.506 -./Provers/Arith/cancel_sums.ML            
  89.507 -./Provers/Arith/cancel_numerals.ML        Paulson 2000
    90.1 --- a/src/Doc/isac/dmeindl/references.bib	Mon Sep 16 12:27:20 2013 +0200
    90.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    90.3 @@ -1,296 +0,0 @@
    90.4 -@proceedings{DBLP:conf/mkm/2007,
    90.5 -  editor    = {Manuel Kauers and
    90.6 -               Manfred Kerber and
    90.7 -               Robert Miner and
    90.8 -               Wolfgang Windsteiger},
    90.9 -  title     = {Towards Mechanized Mathematical Assistants, 14th Symposium,
   90.10 -               Calculemus 2007, 6th International Conference, MKM 2007,
   90.11 -               Hagenberg, Austria, June 27-30, 2007, Proceedings},
   90.12 -  booktitle = {Calculemus/MKM},
   90.13 -  publisher = {Springer},
   90.14 -  series    = {Lecture Notes in Computer Science},
   90.15 -  volume    = {4573},
   90.16 -  year      = {2007},
   90.17 -  isbn      = {978-3-540-73083-5},
   90.18 -  bibsource = {DBLP, http://dblp.uni-trier.de}
   90.19 -}
   90.20 -
   90.21 -@proceedings{DBLP:conf/cade/2006,
   90.22 -  editor    = {Ulrich Furbach and
   90.23 -               Natarajan Shankar},
   90.24 -  title     = {Automated Reasoning, Third International Joint Conference,
   90.25 -               IJCAR 2006, Seattle, WA, USA, August 17-20, 2006, Proceedings},
   90.26 -  booktitle = {IJCAR},
   90.27 -  publisher = {Springer},
   90.28 -  series    = {Lecture Notes in Computer Science},
   90.29 -  volume    = {4130},
   90.30 -  year      = {2006},
   90.31 -  isbn      = {3-540-37187-7},
   90.32 -  bibsource = {DBLP, http://dblp.uni-trier.de}
   90.33 -}
   90.34 -
   90.35 -@proceedings{DBLP:conf/iwfm/1999,
   90.36 -  editor    = {Andrew Butterfield and
   90.37 -               Klemens Haegele},
   90.38 -  title     = {3rd Irish Workshop on Formal Methods, Galway, Eire, July
   90.39 -               1999},
   90.40 -  booktitle = {IWFM},
   90.41 -  publisher = {BCS},
   90.42 -  series    = {Workshops in Computing},
   90.43 -  year      = {1999},
   90.44 -  bibsource = {DBLP, http://dblp.uni-trier.de}
   90.45 -}
   90.46 -
   90.47 -@proceedings{DBLP:conf/aisc/2008,
   90.48 -  editor    = {Serge Autexier and
   90.49 -               John Campbell and
   90.50 -               Julio Rubio and
   90.51 -               Volker Sorge and
   90.52 -               Masakazu Suzuki and
   90.53 -               Freek Wiedijk},
   90.54 -  title     = {Intelligent Computer Mathematics, 9th International Conference,
   90.55 -               AISC 2008, 15th Symposium, Calculemus 2008, 7th International
   90.56 -               Conference, MKM 2008, Birmingham, UK, July 28 - August 1,
   90.57 -               2008. Proceedings},
   90.58 -  booktitle = {AISC/MKM/Calculemus},
   90.59 -  publisher = {Springer},
   90.60 -  series    = {Lecture Notes in Computer Science},
   90.61 -  volume    = {5144},
   90.62 -  year      = {2008},
   90.63 -  isbn      = {978-3-540-85109-7},
   90.64 -  bibsource = {DBLP, http://dblp.uni-trier.de}
   90.65 -}
   90.66 -
   90.67 -@InProceedings{wn:lucas-interp-12,
   90.68 -  author = 	 {Neuper, Walther},
   90.69 -  title = 	 {Automated Generation of User Guidance by Combining Computation and Deduction},
   90.70 -  booktitle = {THedu'11: CTP-compontents for educational software},
   90.71 -  year = 	 {2012},
   90.72 -  editor = 	 {Quaresma, Pedro},
   90.73 -  publisher = {EPTCS},
   90.74 -  note = {To appear}
   90.75 -}
   90.76 -
   90.77 -@InProceedings{davenp-multival-10,
   90.78 -  author = 	 {Davenport, James},
   90.79 -  title = 	 {The Challenges of Multivalued "Functions"},
   90.80 -  booktitle = {Proceedings of the Conferences on Intelligent Computer Mathematics (CICM)},
   90.81 -  year = 	 {2010}
   90.82 -}
   90.83 -
   90.84 -@PhdThesis{cezary-phd,
   90.85 -  author = 	 {Kalisyk, Cezary},
   90.86 -  title = 	 {Correctness and Availability. Building Computer Algebra on top of Proof Assistants and making Proof Assistants available over the Web},
   90.87 -  school = 	 {Radboud University Nijmegen},
   90.88 -  year = 	 {2009},
   90.89 -  type = 	 {IPA Dissertation Series 2009-18},
   90.90 -  note = 	 {Promotor Herman Geuvers}
   90.91 -}
   90.92 -
   90.93 -@Book{bb-loos,
   90.94 -  editor = 	 {Buchberger, Bruno and Collins, George Edwin and Loos, 
   90.95 -                  R\"udiger and Albrecht, Rudolf},
   90.96 -  title = 	 {Computer Algebra. Symbolic and Algebraic Computation},
   90.97 -  publisher = 	 {Springer Verlag},
   90.98 -  year = 	 {1982},
   90.99 -  edition = 	 {2}
  90.100 -}
  90.101 -
  90.102 -@Book{term-nets,
  90.103 -  author = 	 {Charniak, E. and Riesbeck, C. K. and McDermott, D. V.},
  90.104 -  title = 	 {Artificial Intelligence Programming},
  90.105 -  publisher = 	 {Lawrence Erlbaum Associates},
  90.106 -  year = 	 {1980},
  90.107 -  note = 	 {(Chapter 14)}
  90.108 -}
  90.109 -
  90.110 -@Book{db:dom-eng,
  90.111 -  author = 	 {Bj{\o}rner, Dines},
  90.112 -  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
  90.113 -  publisher = 	 {JAIST Press},
  90.114 -  year = 	 {2009},
  90.115 -  month = 	 {Feb},
  90.116 -  series = 	 {COE Research Monograph Series},
  90.117 -  volume = 	 {4},
  90.118 -  address = 	 {Nomi, Japan}
  90.119 -}
  90.120 -
  90.121 -@techreport{harr:thesis,
  90.122 -        author={Harrison, John R.},
  90.123 -        title={Theorem proving with the real numbers},
  90.124 -        institution={University of Cambridge, Computer Laboratory},year={1996}, 
  90.125 -        type={Technical Report},number={408},address={},month={November},
  90.126 -        note={},status={},source={},location={loc?} 
  90.127 -        }  
  90.128 -
  90.129 -@InProceedings{damas-milner-82,
  90.130 -  author = 	 {Damas, Luis and Milner, Robin},
  90.131 -  title = 	 {Principal type-schemes for functional programs},
  90.132 -  booktitle = {9th Symposium on Principles of programming languages (POPL'82)},
  90.133 -  pages = 	 {207-212},
  90.134 -  year = 	 {1982},
  90.135 -  editor = 	 {ACM}
  90.136 -}
  90.137 -
  90.138 -@Article{Milner-78,
  90.139 -  author = 	 {Milner, R.},
  90.140 -  title = 	 {A Theory of Type Polymorphism in Programming},
  90.141 -  journal = 	 {Journal of Computer and System Science (JCSS)},
  90.142 -  year = 	 {1978},
  90.143 -  number = 	 {17},
  90.144 -  pages = 	 {348-374}
  90.145 -}
  90.146 -
  90.147 -@Article{Hindley-69,
  90.148 -  author = 	 {Hindley, R.},
  90.149 -  title = 	 {The Principal Type-Scheme of an Object in Combinatory Logic},
  90.150 -  journal = 	 {Transactions of the American Mathematical Society},
  90.151 -  year = 	 {1969},
  90.152 -  volume = 	 {146},
  90.153 -  pages = 	 {29-60}
  90.154 -}
  90.155 -
  90.156 -@article{seeingroots,
  90.157 - author = {Jeffrey, D.J. and Norman, A.C.},
  90.158 - title = {Not seeing the roots for the branches: multivalued functions in computer algebra},
  90.159 - journal = {SIGSAM Bull.},
  90.160 - volume = {38},
  90.161 - number = {3},
  90.162 - year = {2004},
  90.163 - issn = {0163-5824},
  90.164 - pages = {57--66},
  90.165 - doi = {http://doi.acm.org/10.1145/1040034.1040036},
  90.166 - publisher = {ACM},
  90.167 - address = {New York, NY, USA},
  90.168 - }
  90.169 -
  90.170 -@PhdThesis{russellphd,
  90.171 -  author =       {Russell O'Connor},
  90.172 -  title =        {Incompleteness and Completeness.},
  90.173 -  school =       {Radboud University Nijmegen},
  90.174 -  year =         {2009},
  90.175 -}
  90.176 -
  90.177 -@inproceedings{caspartial,
  90.178 -  author    = {Cezary Kaliszyk},
  90.179 -  title     = {Automating Side Conditions in Formalized Partial Functions},
  90.180 -  booktitle = {AISC/MKM/Calculemus},
  90.181 -  year      = {2008},
  90.182 -  pages     = {300-314},
  90.183 -  ee        = {http://dx.doi.org/10.1007/978-3-540-85110-3_26},
  90.184 -  crossref  = {DBLP:conf/aisc/2008},
  90.185 -  bibsource = {DBLP, http://dblp.uni-trier.de}
  90.186 -}
  90.187 -
  90.188 -@inproceedings{farmer,
  90.189 -  author    = {Farmer, William M.},
  90.190 -  title     = {A Scheme for Defining Partial Higher-Order Functions by
  90.191 -               Recursion.},
  90.192 -  booktitle = {IWFM},
  90.193 -  year      = {1999},
  90.194 -  crossref  = {DBLP:conf/iwfm/1999},
  90.195 -  bibsource = {DBLP, http://dblp.uni-trier.de}
  90.196 -}
  90.197 -
  90.198 -@inproceedings{krauss,
  90.199 -  author    = {Krauss, Alexander},
  90.200 -  title     = {Partial Recursive Functions in Higher-Order Logic},
  90.201 -  booktitle = {IJCAR},
  90.202 -  year      = {2006},
  90.203 -  pages     = {589-603},
  90.204 -  ee        = {http://dx.doi.org/10.1007/11814771_48},
  90.205 -  crossref  = {DBLP:conf/cade/2006},
  90.206 -  bibsource = {DBLP, http://dblp.uni-trier.de}
  90.207 -}
  90.208 -
  90.209 -@inproceedings{casproto,
  90.210 -  author    = {Cezary Kaliszyk and
  90.211 -               Freek Wiedijk},
  90.212 -  title     = {Certified Computer Algebra on Top of an Interactive Theorem
  90.213 -               Prover},
  90.214 -  booktitle = {Calculemus},
  90.215 -  year      = {2007},
  90.216 -  pages     = {94-105},
  90.217 -  ee        = {http://dx.doi.org/10.1007/978-3-540-73086-6_8},
  90.218 -  crossref  = {DBLP:conf/mkm/2007},
  90.219 -  bibsource = {DBLP, http://dblp.uni-trier.de}
  90.220 -}
  90.221 -
  90.222 -@inproceedings{theorema00,
  90.223 -  author = "Buchberger, B. and
  90.224 -    Dupre, C. and
  90.225 -    Jebelean, T. and
  90.226 -    Kriftner, F. and
  90.227 -    Nakagawa, K. and
  90.228 -    Vasaru, D. and
  90.229 -    Windsteiger, W.",
  90.230 -  title = "{The Theorema Project: A Progress Report}",
  90.231 -  booktitle = "Symbolic Computation and Automated Reasoning
  90.232 -    (Proceedings of CALCULEMUS 2000, Symposium on the Integration of
  90.233 -    Symbolic Computation and Mechanized Reasoning)",
  90.234 -  editor = "Kerber, M. and
  90.235 -    Kohlhase, M.",
  90.236 -  publisher = "A.K.~Peters",
  90.237 -  address = "Natick, Massachusetts",
  90.238 -  isbn = "1-56881-145-4",
  90.239 -  year = 2000
  90.240 -}
  90.241 -
  90.242 -@inproceedings{logicalaxiom,
  90.243 -	author = {E. Poll and S. Thompson},
  90.244 -	title = {{Adding the axioms to Axiom: Towards a system of automated reasoning in Aldor}},
  90.245 -  booktitle = {Calculemus and Types '98},
  90.246 -	year = {1998},
  90.247 -  place = {Eindhoven, The Netherlands},
  90.248 -	month = {July},
  90.249 -	note = {Also as technical report 6-98, Computing Laboratory, University of Kent}
  90.250 -}
  90.251 -
  90.252 -@InProceedings{pvs,
  90.253 -  author = 	 {Owre, S. and Rajan, S. and Rushby, J. and Shankar, N. and Srivas, M.},
  90.254 -  title = 	 {{PVS}: Combining specification, proof checking, and model checking},
  90.255 -  booktitle = 	 {Computer-Aided Verification},
  90.256 -  pages = 	 {411-414},
  90.257 -  year = 	 {1996},
  90.258 -  editor = 	 {Alur, R. and Henzinger, T.A.},
  90.259 -  organization = {CAV'96},
  90.260 -  annote = 	 {}
  90.261 -}
  90.262 -
  90.263 -@Book{Nipkow-Paulson-Wenzel:2002,
  90.264 -  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
  90.265 -  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
  90.266 -  publisher	= {Springer},
  90.267 -  series	= {LNCS},
  90.268 -  volume	= 2283,
  90.269 -  year		= 2002
  90.270 -}
  90.271 -
  90.272 -@Manual{Huet_all:94,
  90.273 -  author = 	 {Huet, G. and Kahn, G. and and Paulin-Mohring, C.},
  90.274 -  title = 	 {The Coq Proof Assistant},
  90.275 -  institution =  {INRIA-Rocquencourt},
  90.276 -  year = 	 {1994},
  90.277 -  type = 	 {Tutorial},
  90.278 -  number = 	 {Version 5.10},
  90.279 -  address = 	 {CNRS-ENS Lyon},
  90.280 -  status={},source={Theorema},location={-}
  90.281 -}
  90.282 -
  90.283 -@Book{einf-funct-progr,
  90.284 -  author = 	 {Richard Bird and Philip Wadler},
  90.285 -  title = 	 {Introduction to Functional Programming},
  90.286 -  publisher = 	 {Prentice Hall},
  90.287 -  year = 	 1988,
  90.288 -  editor =	 {C. A. R. Hoare},
  90.289 -  series =	 {Prentice Hall International Series in Computer Science},
  90.290 -  address =	 {New York, London, Toronto, Sydney, Tokyo},
  90.291 -  annote =	 {88bok371}
  90.292 -}
  90.293 -@Book{Winkler:96,
  90.294 -  author =       {F. Winkler},
  90.295 -  title =        {{Polynomial Algorithms in Computer Algebra}},
  90.296 -  publisher =    {Springer-Verlag Wien New York},
  90.297 -  year =         {1996}
  90.298 -}
  90.299 -
    91.1 Binary file src/Doc/isac/dmeindl/thol.tex has changed
    92.1 Binary file src/Doc/isac/fig/coqide.png has changed
    93.1 Binary file src/Doc/isac/fig/jrocnik/isac-Ztrans-math-3.png has changed
    94.1 Binary file src/Doc/isac/fig/jrocnik/math-universe-small.png has changed
    95.1 Binary file src/Doc/isac/fig/jrocnik/math-universe.odg has changed
    96.1 Binary file src/Doc/isac/fig/jrocnik/math-universe.png has changed
    97.1 Binary file src/Doc/isac/fig/pgisabelle.png has changed
    98.1 --- a/src/Doc/isac/jrocnik/CLEANUP	Mon Sep 16 12:27:20 2013 +0200
    98.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    98.3 @@ -1,10 +0,0 @@
    98.4 -rm *.dvi
    98.5 -rm *.bbl
    98.6 -rm *.blg
    98.7 -rm *.aux
    98.8 -rm *.log
    98.9 -rm *.nav
   98.10 -rm *.out
   98.11 -rm *.snm
   98.12 -rm *.toc
   98.13 -rm *~
    99.1 --- a/src/Doc/isac/jrocnik/FFT.thy	Mon Sep 16 12:27:20 2013 +0200
    99.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    99.3 @@ -1,532 +0,0 @@
    99.4 -(*  Title:      Fast Fourier Transform
    99.5 -    Author:     Clemens Ballarin <ballarin at in.tum.de>, started 12 April 2005
    99.6 -    Maintainer: Clemens Ballarin <ballarin at in.tum.de>
    99.7 -*)
    99.8 -
    99.9 -theory FFT
   99.10 -imports Complex_Main
   99.11 -begin
   99.12 -
   99.13 -text {* We formalise a functional implementation of the FFT algorithm
   99.14 -  over the complex numbers, and its inverse.  Both are shown
   99.15 -  equivalent to the usual definitions
   99.16 -  of these operations through Vandermonde matrices.  They are also
   99.17 -  shown to be inverse to each other, more precisely, that composition
   99.18 -  of the inverse and the transformation yield the identity up to a
   99.19 -  scalar.
   99.20 -
   99.21 -  The presentation closely follows Section 30.2 of Cormen \textit{et
   99.22 -  al.}, \emph{Introduction to Algorithms}, 2nd edition, MIT Press,
   99.23 -  2003. *}
   99.24 -
   99.25 -
   99.26 -section {* Preliminaries *}
   99.27 -
   99.28 -lemma of_nat_cplx:
   99.29 -  "of_nat n = Complex (of_nat n) 0"
   99.30 -  by (induct n) (simp_all add: complex_one_def)
   99.31 -
   99.32 -
   99.33 -text {* The following two lemmas are useful for experimenting with the
   99.34 -  transformations, at a vector length of four. *}
   99.35 -
   99.36 -lemma Ivl4:
   99.37 -  "{0..<4::nat} = {0, 1, 2, 3}"
   99.38 -proof -
   99.39 -  have "{0..<4::nat} = {0..<Suc (Suc (Suc (Suc 0)))}" by (simp add: eval_nat_numeral)
   99.40 -  also have "... = {0, 1, 2, 3}"
   99.41 -    by (simp add: atLeastLessThanSuc eval_nat_numeral insert_commute)
   99.42 -  finally show ?thesis .
   99.43 -qed
   99.44 -
   99.45 -lemma Sum4:
   99.46 -  "(\<Sum>i=0..<4::nat. x i) = x 0 + x 1 + x 2 + x 3"
   99.47 -  by (simp add: Ivl4 eval_nat_numeral)
   99.48 -
   99.49 -
   99.50 -text {* A number of specialised lemmas for the summation operator,
   99.51 -  where the index set is the natural numbers *}
   99.52 -
   99.53 -lemma setsum_add_nat_ivl_singleton:
   99.54 -  assumes less: "m < (n::nat)"
   99.55 -  shows "f m + setsum f {m<..<n} = setsum f {m..<n}"
   99.56 -proof -
   99.57 -  have "f m + setsum f {m<..<n} = setsum f ({m} \<union> {m<..<n})"
   99.58 -    by (simp add: setsum_Un_disjoint ivl_disj_int)
   99.59 -  also from less have "... = setsum f {m..<n}"
   99.60 -    by (simp only: ivl_disj_un)
   99.61 -  finally show ?thesis .
   99.62 -qed
   99.63 -
   99.64 -lemma setsum_add_split_nat_ivl_singleton:
   99.65 -  assumes less: "m < (n::nat)"
   99.66 -    and g: "!!i. [| m < i; i < n |] ==> g i = f i"
   99.67 -  shows "f m + setsum g {m<..<n} = setsum f {m..<n}"
   99.68 -  using less g
   99.69 -  by(simp add: setsum_add_nat_ivl_singleton cong: strong_setsum_cong)
   99.70 -
   99.71 -lemma setsum_add_split_nat_ivl:
   99.72 -  assumes le: "m <= (k::nat)" "k <= n"
   99.73 -    and g: "!!i. [| m <= i; i < k |] ==> g i = f i"
   99.74 -    and h: "!!i. [| k <= i; i < n |] ==> h i = f i"
   99.75 -  shows "setsum g {m..<k} + setsum h {k..<n} = setsum f {m..<n}"
   99.76 -  using le g h by (simp add: setsum_add_nat_ivl cong: strong_setsum_cong)
   99.77 -
   99.78 -lemma ivl_splice_Un:
   99.79 -  "{0..<2*n::nat} = (op * 2 ` {0..<n}) \<union> ((%i. Suc (2*i)) ` {0..<n})"
   99.80 -  apply (unfold image_def Bex_def)
   99.81 -  apply auto
   99.82 -  apply arith
   99.83 -  done
   99.84 -
   99.85 -lemma ivl_splice_Int:
   99.86 -  "(op * 2 ` {0..<n}) \<inter> ((%i. Suc (2*i)) ` {0..<n}) = {}"
   99.87 -  by auto arith
   99.88 -
   99.89 -lemma double_inj_on:
   99.90 -  "inj_on (%i. 2*i::nat) A"
   99.91 -  by (simp add: inj_onI)
   99.92 -
   99.93 -lemma Suc_double_inj_on:
   99.94 -  "inj_on (%i. Suc (2*i)) A"
   99.95 -  by (rule inj_onI) simp
   99.96 -
   99.97 -lemma setsum_splice:
   99.98 -  "(\<Sum>i::nat = 0..<2*n. f i) = (\<Sum>i = 0..<n. f (2*i)) + (\<Sum>i = 0..<n. f (2*i+1))"
   99.99 -proof -
  99.100 -  have "(\<Sum>i::nat = 0..<2*n. f i) =
  99.101 -    setsum f (op * 2 ` {0..<n}) + setsum f ((%i. 2*i+1) ` {0..<n})"
  99.102 -    by (simp add: ivl_splice_Un ivl_splice_Int setsum_Un_disjoint)
  99.103 -  also have "... = (\<Sum>i = 0..<n. f (2*i)) + (\<Sum>i = 0..<n. f (2*i+1))"
  99.104 -    by (simp add: setsum_reindex [OF double_inj_on]
  99.105 -      setsum_reindex [OF Suc_double_inj_on])
  99.106 -  finally show ?thesis .
  99.107 -qed
  99.108 -
  99.109 -
  99.110 -section {* Complex Roots of Unity *}
  99.111 -
  99.112 -text {* The function @{term cis} from the complex library returns the
  99.113 -  point on the unity circle corresponding to the argument angle.  It
  99.114 -  is the base for our definition of @{text root}.  The main property,
  99.115 -  De Moirve's formula is already there in the library. *}
  99.116 -
  99.117 -definition root :: "nat => complex" where
  99.118 -  "root n == cis (2*pi/(real (n::nat)))"
  99.119 -
  99.120 -lemma sin_periodic_pi_diff [simp]: "sin (x - pi) = - sin x"
  99.121 -  by (simp add: sin_diff)
  99.122 -
  99.123 -lemma sin_cos_between_zero_two_pi:
  99.124 -  assumes 0: "0 < x" and pi: "x < 2 * pi"
  99.125 -  shows "sin x \<noteq> 0 \<or> cos x \<noteq> 1"
  99.126 -proof -
  99.127 -  { assume "0 < x" and "x < pi"
  99.128 -    then have "sin x \<noteq> 0" by (auto dest: sin_gt_zero_pi) }
  99.129 -  moreover
  99.130 -  { assume "x = pi"
  99.131 -    then have "cos x \<noteq> 1" by simp }
  99.132 -  moreover
  99.133 -  { assume pi1: "pi < x" and pi2: "x < 2 * pi"
  99.134 -    then have "0 < x - pi" and "x - pi < pi" by arith+
  99.135 -    then have "sin (x - pi) \<noteq> 0" by (auto dest: sin_gt_zero_pi)
  99.136 -    with pi1 pi2 have "sin x \<noteq> 0" by simp }
  99.137 -  ultimately show ?thesis using 0 pi by arith
  99.138 -qed
  99.139 -
  99.140 -
  99.141 -subsection {* Basic Lemmas *}
  99.142 -
  99.143 -lemma root_nonzero:
  99.144 -  "root n ~= 0"
  99.145 -  apply (unfold root_def)
  99.146 -  apply (unfold cis_def)
  99.147 -  apply auto
  99.148 -  apply (drule sin_zero_abs_cos_one)
  99.149 -  apply arith
  99.150 -  done
  99.151 -
  99.152 -lemma root_unity:
  99.153 -  "root n ^ n = 1"
  99.154 -  apply (unfold root_def)
  99.155 -  apply (simp add: DeMoivre)
  99.156 -  apply (simp add: cis_def)
  99.157 -  done
  99.158 -
  99.159 -lemma root_cancel:
  99.160 -  "0 < d ==> root (d * n) ^ (d * k) = root n ^ k"
  99.161 -  apply (unfold root_def)
  99.162 -  apply (simp add: DeMoivre)
  99.163 -  done
  99.164 -
  99.165 -lemma root_summation:
  99.166 -  assumes k: "0 < k" "k < n"
  99.167 -  shows "(\<Sum>i=0..<n. (root n ^ k) ^ i) = 0"
  99.168 -proof -
  99.169 -  from k have real0: "0 < real k * (2 * pi) / real n"
  99.170 -    by (simp add: zero_less_divide_iff
  99.171 -      mult_strict_right_mono [where a = 0, simplified])
  99.172 -  from k mult_strict_right_mono [where a = "real k" and
  99.173 -    b = "real n" and c = "2 * pi / real n", simplified]
  99.174 -  have realk: "real k * (2 * pi) / real n < 2 * pi"
  99.175 -    by (simp add: zero_less_divide_iff)
  99.176 -  txt {* Main part of the proof *}
  99.177 -  have "(\<Sum>i=0..<n. (root n ^ k) ^ i) =
  99.178 -    ((root n ^ k) ^ n - 1) / (root n ^ k - 1)"
  99.179 -    apply (rule geometric_sum)
  99.180 -    apply (unfold root_def)
  99.181 -    apply (simp add: DeMoivre)
  99.182 -    using real0 realk sin_cos_between_zero_two_pi 
  99.183 -    apply (auto simp add: cis_def complex_one_def)
  99.184 -    done
  99.185 -  also have "... = ((root n ^ n) ^ k - 1) / (root n ^ k - 1)"
  99.186 -    by (simp add: power_mult [THEN sym] mult_ac)
  99.187 -  also have "... = 0"
  99.188 -    by (simp add: root_unity)
  99.189 -  finally show ?thesis .
  99.190 -qed
  99.191 -
  99.192 -lemma root_summation_inv:
  99.193 -  assumes k: "0 < k" "k < n"
  99.194 -  shows "(\<Sum>i=0..<n. ((1 / root n) ^ k) ^ i) = 0"
  99.195 -proof -
  99.196 -  from k have real0: "0 < real k * (2 * pi) / real n"
  99.197 -    by (simp add: zero_less_divide_iff
  99.198 -      mult_strict_right_mono [where a = 0, simplified])
  99.199 -  from k mult_strict_right_mono [where a = "real k" and
  99.200 -    b = "real n" and c = "2 * pi / real n", simplified]
  99.201 -  have realk: "real k * (2 * pi) / real n < 2 * pi"
  99.202 -    by (simp add: zero_less_divide_iff)
  99.203 -  txt {* Main part of the proof *}
  99.204 -  have "(\<Sum>i=0..<n. ((1 / root n) ^ k) ^ i) =
  99.205 -    (((1 / root n) ^ k) ^ n - 1) / ((1 / root n) ^ k - 1)"
  99.206 -    apply (rule geometric_sum)
  99.207 -    apply (simp add: nonzero_inverse_eq_divide [THEN sym] root_nonzero)
  99.208 -    apply (unfold root_def)
  99.209 -    apply (simp add: DeMoivre)
  99.210 -    using real0 realk sin_cos_between_zero_two_pi
  99.211 -    apply (auto simp add: cis_def complex_one_def)
  99.212 -    done
  99.213 -  also have "... = (((1 / root n) ^ n) ^ k - 1) / ((1 / root n) ^ k - 1)"
  99.214 -    by (simp add: power_mult [THEN sym] mult_ac)
  99.215 -  also have "... = 0"
  99.216 -    by (simp add: power_divide root_unity)
  99.217 -  finally show ?thesis .
  99.218 -qed
  99.219 -
  99.220 -lemma root0 [simp]:
  99.221 -  "root 0 = 1"
  99.222 -  by (simp add: root_def cis_def)
  99.223 -
  99.224 -lemma root1 [simp]:
  99.225 -  "root 1 = 1"
  99.226 -  by (simp add: root_def cis_def)
  99.227 -
  99.228 -lemma root2 [simp]:
  99.229 -  "root 2 = Complex -1 0"
  99.230 -  by (simp add: root_def cis_def)
  99.231 -
  99.232 -lemma root4 [simp]:
  99.233 -  "root 4 = ii"
  99.234 -  by (simp add: root_def cis_def)
  99.235 -
  99.236 -
  99.237 -subsection {* Derived Lemmas *}
  99.238 -
  99.239 -lemma root_cancel1:
  99.240 -  "root (2 * m) ^ (i * (2 * j)) = root m ^ (i * j)"
  99.241 -proof -
  99.242 -  have "root (2 * m) ^ (i * (2 * j)) = root (2 * m) ^ (2 * (i * j))"
  99.243 -    by (simp add: mult_ac)
  99.244 -  also have "... = root m ^ (i * j)"
  99.245 -    by (simp add: root_cancel)
  99.246 -  finally show ?thesis .
  99.247 -qed
  99.248 -
  99.249 -lemma root_cancel2:
  99.250 -  "0 < n ==> root (2 * n) ^ n = - 1"
  99.251 -  txt {* Note the space between @{text "-"} and @{text "1"}. *}
  99.252 -  using root_cancel [where n = 2 and k = 1]
  99.253 -  apply (simp only: mult_ac)
  99.254 -  apply (simp add: complex_one_def)
  99.255 -  done
  99.256 -
  99.257 -
  99.258 -section {* Discrete Fourier Transformation *}
  99.259 -
  99.260 -text {*
  99.261 -  We define operations  @{text DFT} and @{text IDFT} for the discrete
  99.262 -  Fourier Transform and its inverse.  Vectors are simply functions of
  99.263 -  type @{text "nat => complex"}. *}
  99.264 -
  99.265 -text {*
  99.266 -  @{text "DFT n a"} is the transform of vector @{text a}
  99.267 -  of length @{text n}, @{text IDFT} its inverse. *}
  99.268 -
  99.269 -definition DFT :: "nat => (nat => complex) => (nat => complex)" where
  99.270 -  "DFT n a == (%i. \<Sum>j=0..<n. (root n) ^ (i * j) * (a j))"
  99.271 -
  99.272 -definition IDFT :: "nat => (nat => complex) => (nat => complex)" where
  99.273 -  "IDFT n a == (%i. (\<Sum>k=0..<n. (a k) / (root n) ^ (i * k)))"
  99.274 -
  99.275 -schematic_lemma "map (DFT 4 a) [0, 1, 2, 3] = ?x"
  99.276 -  by(simp add: DFT_def Sum4)
  99.277 -
  99.278 -text {* Lemmas for the correctness proof. *}
  99.279 -
  99.280 -lemma DFT_lower:
  99.281 -  "DFT (2 * m) a i =
  99.282 -  DFT m (%i. a (2 * i)) i +
  99.283 -  (root (2 * m)) ^ i * DFT m (%i. a (2 * i + 1)) i"
  99.284 -proof (unfold DFT_def)
  99.285 -  have "(\<Sum>j = 0..<2 * m. root (2 * m) ^ (i * j) * a j) =
  99.286 -    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j)) * a (2 * j)) +
  99.287 -    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j + 1)) * a (2 * j + 1))"
  99.288 -    (is "?s = _")
  99.289 -    by (simp add: setsum_splice)
  99.290 -  also have "... = (\<Sum>j = 0..<m. root m ^ (i * j) * a (2 * j)) +
  99.291 -    root (2 * m) ^ i *
  99.292 -    (\<Sum>j = 0..<m. root m ^ (i * j) * a (2 * j + 1))"
  99.293 -    (is "_ = ?t")
  99.294 -    txt {* First pair of sums *}
  99.295 -    apply (simp add: root_cancel1)
  99.296 -    txt {* Second pair of sums *}
  99.297 -    apply (simp add: setsum_right_distrib)
  99.298 -    apply (simp add: power_add)
  99.299 -    apply (simp add: root_cancel1)
  99.300 -    apply (simp add: mult_ac)
  99.301 -    done
  99.302 -  finally show "?s = ?t" .
  99.303 -qed
  99.304 -
  99.305 -lemma DFT_upper:
  99.306 -  assumes mbound: "0 < m" and ibound: "m <= i"
  99.307 -  shows "DFT (2 * m) a i =
  99.308 -    DFT m (%i. a (2 * i)) (i - m) -
  99.309 -    root (2 * m) ^ (i - m) * DFT m (%i. a (2 * i + 1)) (i - m)"
  99.310 -proof (unfold DFT_def)
  99.311 -  have "(\<Sum>j = 0..<2 * m. root (2 * m) ^ (i * j) * a j) =
  99.312 -    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j)) * a (2 * j)) +
  99.313 -    (\<Sum>j = 0..<m. root (2 * m) ^ (i * (2 * j + 1)) * a (2 * j + 1))"
  99.314 -    (is "?s = _")
  99.315 -    by (simp add: setsum_splice)
  99.316 -  also have "... =
  99.317 -    (\<Sum>j = 0..<m. root m ^ ((i - m) * j) * a (2 * j)) -
  99.318 -    root (2 * m) ^ (i - m) *
  99.319 -    (\<Sum>j = 0..<m. root m ^ ((i - m) * j) * a (2 * j + 1))"
  99.320 -    (is "_ = ?t")
  99.321 -    txt {* First pair of sums *}
  99.322 -    apply (simp add: root_cancel1)
  99.323 -    apply (simp add: root_unity ibound root_nonzero power_diff power_mult)
  99.324 -    txt {* Second pair of sums *}
  99.325 -    apply (simp add: mbound root_cancel2)
  99.326 -    apply (simp add: setsum_right_distrib)
  99.327 -    apply (simp add: power_add)
  99.328 -    apply (simp add: root_cancel1)
  99.329 -    apply (simp add: power_mult)
  99.330 -    apply (simp add: mult_ac)
  99.331 -    done
  99.332 -  finally show "?s = ?t" .
  99.333 -qed
  99.334 -
  99.335 -lemma IDFT_lower:
  99.336 -  "IDFT (2 * m) a i =
  99.337 -  IDFT m (%i. a (2 * i)) i +
  99.338 -  (1 / root (2 * m)) ^ i * IDFT m (%i. a (2 * i + 1)) i"
  99.339 -proof (unfold IDFT_def)
  99.340 -  have "(\<Sum>j = 0..<2 * m. a j / root (2 * m) ^ (i * j)) =
  99.341 -    (\<Sum>j = 0..<m. a (2 * j) / root (2 * m) ^ (i * (2 * j))) +
  99.342 -    (\<Sum>j = 0..<m. a (2 * j + 1) / root (2 * m) ^ (i * (2 * j + 1)))"
  99.343 -    (is "?s = _")
  99.344 -    by (simp add: setsum_splice)
  99.345 -  also have "... = (\<Sum>j = 0..<m. a (2 * j) / root m ^ (i * j)) +
  99.346 -    (1 / root (2 * m)) ^ i *
  99.347 -    (\<Sum>j = 0..<m. a (2 * j + 1) / root m ^ (i * j))"
  99.348 -    (is "_ = ?t")
  99.349 -    txt {* First pair of sums *}
  99.350 -    apply (simp add: root_cancel1)
  99.351 -    txt {* Second pair of sums *}
  99.352 -    apply (simp add: setsum_right_distrib)
  99.353 -    apply (simp add: power_add)
  99.354 -    apply (simp add: nonzero_power_divide root_nonzero)
  99.355 -    apply (simp add: root_cancel1)
  99.356 -    done
  99.357 -  finally show "?s = ?t" .
  99.358 -qed
  99.359 -
  99.360 -lemma IDFT_upper:
  99.361 -  assumes mbound: "0 < m" and ibound: "m <= i"
  99.362 -  shows "IDFT (2 * m) a i =
  99.363 -    IDFT m (%i. a (2 * i)) (i - m) -
  99.364 -    (1 / root (2 * m)) ^ (i - m) *
  99.365 -    IDFT m (%i. a (2 * i + 1)) (i - m)"
  99.366 -proof (unfold IDFT_def)
  99.367 -  have "(\<Sum>j = 0..<2 * m. a j / root (2 * m) ^ (i * j)) =
  99.368 -    (\<Sum>j = 0..<m. a (2 * j) / root (2 * m) ^ (i * (2 * j))) +
  99.369 -    (\<Sum>j = 0..<m. a (2 * j + 1) / root (2 * m) ^ (i * (2 * j + 1)))"
  99.370 -    (is "?s = _")
  99.371 -    by (simp add: setsum_splice)
  99.372 -  also have "... =
  99.373 -    (\<Sum>j = 0..<m. a (2 * j) / root m ^ ((i - m) * j)) -
  99.374 -    (1 / root (2 * m)) ^ (i - m) *
  99.375 -    (\<Sum>j = 0..<m. a (2 * j + 1) / root m ^ ((i - m) * j))"
  99.376 -    (is "_ = ?t")
  99.377 -    txt {* First pair of sums *}
  99.378 -    apply (simp add: root_cancel1)
  99.379 -    apply (simp add: root_unity ibound root_nonzero power_diff power_mult)
  99.380 -    txt {* Second pair of sums *}
  99.381 -    apply (simp add: nonzero_power_divide root_nonzero)
  99.382 -    apply (simp add: mbound root_cancel2)
  99.383 -    apply (simp add: setsum_divide_distrib)
  99.384 -    apply (simp add: power_add)
  99.385 -    apply (simp add: root_cancel1)
  99.386 -    apply (simp add: power_mult)
  99.387 -    apply (simp add: mult_ac)
  99.388 -    done
  99.389 -  finally show "?s = ?t" .
  99.390 -qed
  99.391 -
  99.392 -text {* @{text DFT} und @{text IDFT} are inverses. *}
  99.393 -
  99.394 -declare divide_divide_eq_right [simp del]
  99.395 -  divide_divide_eq_left [simp del]
  99.396 -
  99.397 -lemma power_diff_inverse:
  99.398 -  assumes nz: "(a::'a::field) ~= 0"
  99.399 -  shows "m <= n ==> (inverse a) ^ (n-m) = (a^m) / (a^n)"
  99.400 -  apply (induct n m rule: diff_induct)
  99.401 -    apply (simp add: nonzero_power_inverse
  99.402 -      nonzero_inverse_eq_divide [THEN sym] nz)
  99.403 -   apply simp
  99.404 -  apply (simp add: nz)
  99.405 -  done
  99.406 -
  99.407 -lemma power_diff_rev_if:
  99.408 -  assumes nz: "(a::'a::field) ~= 0"
  99.409 -  shows "(a^m) / (a^n) = (if n <= m then a ^ (m-n) else (1/a) ^ (n-m))"
  99.410 -proof (cases "n <= m")
  99.411 -  case True with nz show ?thesis
  99.412 -    by (simp add: power_diff)
  99.413 -next
  99.414 -  case False with nz show ?thesis
  99.415 -    by (simp add: power_diff_inverse nonzero_inverse_eq_divide [THEN sym])
  99.416 -qed
  99.417 -
  99.418 -lemma power_divides_special:
  99.419 -  "(a::'a::field) ~= 0 ==>
  99.420 -  a ^ (i * j) / a ^ (k * i) = (a ^ j / a ^ k) ^ i"
  99.421 -  by (simp add: nonzero_power_divide power_mult [THEN sym] mult_ac)
  99.422 -
  99.423 -theorem DFT_inverse:
  99.424 -  assumes i_less: "i < n"
  99.425 -  shows  "IDFT n (DFT n a) i = of_nat n * a i"
  99.426 -  using [[linarith_split_limit = 0]]
  99.427 -  apply (unfold DFT_def IDFT_def)
  99.428 -  apply (simp add: setsum_divide_distrib)
  99.429 -  apply (subst setsum_commute)
  99.430 -  apply (simp only: times_divide_eq_left [THEN sym])
  99.431 -  apply (simp only: power_divides_special [OF root_nonzero])
  99.432 -  apply (simp add: power_diff_rev_if root_nonzero)
  99.433 -  apply (simp add: setsum_divide_distrib [THEN sym]
  99.434 -    setsum_left_distrib [THEN sym])
  99.435 -  proof -
  99.436 -    from i_less have i_diff: "!!k. i - k < n" by arith
  99.437 -    have diff_i: "!!k. k < n ==> k - i < n" by arith
  99.438 -
  99.439 -    let ?sum = "%i j n. setsum (op ^ (if i <= j then root n ^ (j - i)
  99.440 -                  else (1 / root n) ^ (i - j))) {0..<n} * a j"
  99.441 -    let ?sum1 = "%i j n. setsum (op ^ (root n ^ (j - i))) {0..<n} * a j"
  99.442 -    let ?sum2 = "%i j n. setsum (op ^ ((1 / root n) ^ (i - j))) {0..<n} * a j"
  99.443 -
  99.444 -    from i_less have "(\<Sum>j = 0..<n. ?sum i j n) =
  99.445 -      (\<Sum>j = 0..<i. ?sum2 i j n) + (\<Sum>j = i..<n. ?sum1 i j n)"
  99.446 -      (is "?s = _")
  99.447 -      by (simp add: root_summation_inv nat_dvd_not_less
  99.448 -        setsum_add_split_nat_ivl [where f = "%j. ?sum i j n"])
  99.449 -    also from i_less i_diff
  99.450 -    have "... = (\<Sum>j = i..<n. ?sum1 i j n)"
  99.451 -      by (simp add: root_summation_inv nat_dvd_not_less)
  99.452 -    also from i_less have "... =
  99.453 -      (\<Sum>j\<in>{i} \<union> {i<..<n}. ?sum1 i j n)"
  99.454 -      by (simp only: ivl_disj_un)
  99.455 -    also have "... =
  99.456 -      (?sum1 i i n + (\<Sum>j\<in>{i<..<n}. ?sum1 i j n))"
  99.457 -      by (simp add: setsum_Un_disjoint ivl_disj_int)
  99.458 -    also from i_less diff_i have "... = ?sum1 i i n"
  99.459 -      by (simp add: root_summation nat_dvd_not_less)
  99.460 -    also from i_less have "... = of_nat n * a i" (is "_ = ?t")
  99.461 -      by (simp add: of_nat_cplx)
  99.462 -    finally show "?s = ?t" .
  99.463 -  qed
  99.464 -
  99.465 -
  99.466 -section {* Discrete, Fast Fourier Transformation *}
  99.467 -
  99.468 -text {* @{text "FFT k a"} is the transform of vector @{text a}
  99.469 -  of length @{text "2 ^ k"}, @{text IFFT} its inverse. *}
  99.470 -
  99.471 -primrec FFT :: "nat => (nat => complex) => (nat => complex)" where
  99.472 -  "FFT 0 a = a"
  99.473 -| "FFT (Suc k) a =
  99.474 -     (let (x, y) = (FFT k (%i. a (2*i)), FFT k (%i. a (2*i+1)))
  99.475 -      in (%i. if i < 2^k
  99.476 -            then x i + (root (2 ^ (Suc k))) ^ i * y i
  99.477 -            else x (i- 2^k) - (root (2 ^ (Suc k))) ^ (i- 2^k) * y (i- 2^k)))"
  99.478 -
  99.479 -primrec IFFT :: "nat => (nat => complex) => (nat => complex)" where
  99.480 -  "IFFT 0 a = a"
  99.481 -| "IFFT (Suc k) a =
  99.482 -     (let (x, y) = (IFFT k (%i. a (2*i)), IFFT k (%i. a (2*i+1)))
  99.483 -      in (%i. if i < 2^k
  99.484 -            then x i + (1 / root (2 ^ (Suc k))) ^ i * y i
  99.485 -            else x (i - 2^k) -
  99.486 -              (1 / root (2 ^ (Suc k))) ^ (i - 2^k) * y (i - 2^k)))"
  99.487 -
  99.488 -text {* Finally, for vectors of length @{text "2 ^ k"},
  99.489 -  @{text DFT} and @{text FFT}, and @{text IDFT} and
  99.490 -  @{text IFFT} are equivalent. *}
  99.491 -
  99.492 -theorem DFT_FFT:
  99.493 -  "!!a i. i < 2 ^ k ==> DFT (2 ^ k) a i = FFT k a i"
  99.494 -proof (induct k)
  99.495 -  case 0
  99.496 -  then show ?case by (simp add: DFT_def)
  99.497 -next
  99.498 -  case (Suc k)
  99.499 -  assume i: "i < 2 ^ Suc k"
  99.500 -  show ?case proof (cases "i < 2 ^ k")
  99.501 -    case True
  99.502 -    then show ?thesis apply simp apply (simp add: DFT_lower)
  99.503 -      apply (simp add: Suc) done
  99.504 -  next
  99.505 -    case False
  99.506 -    from i have "i - 2 ^ k < 2 ^ k" by simp
  99.507 -    with False i show ?thesis apply simp apply (simp add: DFT_upper)
  99.508 -      apply (simp add: Suc) done
  99.509 -  qed
  99.510 -qed
  99.511 -
  99.512 -theorem IDFT_IFFT:
  99.513 -  "!!a i. i < 2 ^ k ==> IDFT (2 ^ k) a i = IFFT k a i"
  99.514 -proof (induct k)
  99.515 -  case 0
  99.516 -  then show ?case by (simp add: IDFT_def)
  99.517 -next
  99.518 -  case (Suc k)
  99.519 -  assume i: "i < 2 ^ Suc k"
  99.520 -  show ?case proof (cases "i < 2 ^ k")
  99.521 -    case True
  99.522 -    then show ?thesis apply simp apply (simp add: IDFT_lower)
  99.523 -      apply (simp add: Suc) done
  99.524 -  next
  99.525 -    case False
  99.526 -    from i have "i - 2 ^ k < 2 ^ k" by simp
  99.527 -    with False i show ?thesis apply simp apply (simp add: IDFT_upper)
  99.528 -      apply (simp add: Suc) done
  99.529 -  qed
  99.530 -qed
  99.531 -
  99.532 -schematic_lemma "map (FFT (Suc (Suc 0)) a) [0, 1, 2, 3] = ?x"
  99.533 -  by simp
  99.534 -
  99.535 -end
   100.1 --- a/src/Doc/isac/jrocnik/Makefile	Mon Sep 16 12:27:20 2013 +0200
   100.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   100.3 @@ -1,81 +0,0 @@
   100.4 -## targets
   100.5 -
   100.6 -default: thesis clean
   100.7 -all: thesis docu present clean
   100.8 -thesis: thesis clean
   100.9 -docu: docu clean
  100.10 -present: present1 present2 clean
  100.11 -cadgme: cadgme clean
  100.12 -
  100.13 -
  100.14 -## dependencies
  100.15 -
  100.16 -
  100.17 -## settings
  100.18 -
  100.19 -LATEX = latex
  100.20 -PDFLATEX = pdflatex
  100.21 -BIBTEX = bibtex
  100.22 -RAIL = rail -a
  100.23 -SEDINDEX = ./sedindex
  100.24 -FIXBOOKMARKS = perl -pi fixbookmarks.pl
  100.25 -
  100.26 -DEFAULT_GARBAGE = *.aux *.log *.toc *.idx *.rai *.rao *.bbl *.ind *.ilg *.blg *.out *.lof
  100.27 -DEFAULT_OUTPUT = *.dvi jrocnik_present1.pdf jrocnik_present2.pdf jrocnik_bakk.pdf *.ps
  100.28 -GARBAGE =
  100.29 -OUTPUT =
  100.30 -
  100.31 -## special targets
  100.32 -
  100.33 -.DELETE_ON_ERROR:
  100.34 -
  100.35 -## actions
  100.36 -
  100.37 -nothing:
  100.38 -
  100.39 -clean:
  100.40 -	@rm -f $(DEFAULT_GARBAGE) $(GARBAGE)
  100.41 -
  100.42 -mrproper:
  100.43 -	@rm -f $(DEFAULT_GARBAGE) $(DEFAULT_OUTPUT) $(GARBAGE) $(OUTPUT)
  100.44 -
  100.45 -THESIS_NAME = jrocnik_bakk
  100.46 -THESIS_FILES = jrocnik_bakk.tex
  100.47 -
  100.48 -DOCU_NAME = Inverse_Z_Transform/doc/Inverse_Z_Transform
  100.49 -DOCU_FILES = Inverse_Z_Transform/doc/root.tex 
  100.50 -
  100.51 -PRESENT1_NAME = jrocnik_present1
  100.52 -PRESENT1_FILES = jrocnik_present1.tex
  100.53 -
  100.54 -PRESENT2_NAME = jrocnik_present2
  100.55 -PRESENT2_FILES = jrocnik_present2.tex
  100.56 -
  100.57 -CADGME_NAME = jrocnik_cadgme
  100.58 -CADGME_FILES = cadgme.tex
  100.59 -
  100.60 -thesis: $(THESIS_NAME).pdf
  100.61 -
  100.62 -$(THESIS_NAME).pdf: $(THESIS_FILES)
  100.63 -	$(PDFLATEX) $(THESIS_NAME)
  100.64 -	$(BIBTEX) $(THESIS_NAME)
  100.65 -	$(PDFLATEX) $(THESIS_NAME)
  100.66 -	$(PDFLATEX) $(THESIS_NAME)
  100.67 -  
  100.68 -present1: $(PRESENT1_NAME).pdf
  100.69 -
  100.70 -$(PRESENT1_NAME).pdf: $(PRESENT1_FILES)
  100.71 -	$(PDFLATEX) $(PRESENT1_NAME)
  100.72 -	$(PDFLATEX) $(PRESENT1_NAME)
  100.73 -  
  100.74 -present2: $(PRESENT2_NAME).pdf
  100.75 -
  100.76 -$(PRESENT2_NAME).pdf: $(PRESENT2_FILES)
  100.77 -	$(PDFLATEX) $(PRESENT2_NAME)
  100.78 -	$(PDFLATEX) $(PRESENT2_NAME)
  100.79 -  
  100.80 -cadgme: $(CADGME_NAME).pdf
  100.81 -
  100.82 -$(CADGME_NAME).pdf: $(CADGME_FILES)
  100.83 -	$(PDFLATEX) $(CADGME_NAME)
  100.84 -	$(PDFLATEX) $(CADGME_NAME)
   101.1 --- a/src/Doc/isac/jrocnik/TUGlogo.pdf	Mon Sep 16 12:27:20 2013 +0200
   101.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   101.3 @@ -1,219 +0,0 @@
   101.4 -%PDF-1.3
   101.5 -%
   101.6 -2 0 obj
   101.7 -<<
   101.8 -/Length 2930
   101.9 ->>
  101.10 -stream
  101.11 -0 0.957 0.569 0 k
  101.12 -/GS1 gs
  101.13 -0 31.119 20.745 -20.746 re
  101.14 -f
  101.15 -22.819 31.119 20.746 -20.746 re
  101.16 -f
  101.17 -q
  101.18 -1 i 
  101.19 -0 41.492 112.876 -41.432 re
  101.20 -W n
  101.21 -45.641 31.119 20.744 -20.746 re
  101.22 -f
  101.23 -10.372 20.746 20.747 -20.686 re
  101.24 -f
  101.25 -Q
  101.26 -35.268 41.492 20.744 -20.746 re
  101.27 -f
  101.28 -0.941 0.82 0.808 0.894 k
  101.29 -1 i 
  101.30 -75.104 27.791 m
  101.31 -68.462 27.791 l
  101.32 -68.462 31.11 l
  101.33 -85.581 31.11 l
  101.34 -85.581 27.791 l
  101.35 -78.94 27.791 l
  101.36 -78.94 10.417 l
  101.37 -75.104 10.417 l
  101.38 -75.104 27.791 l
  101.39 -f
  101.40 -q
  101.41 -0 41.492 112.876 -41.432 re
  101.42 -W n
  101.43 -104.828 18.021 m
  101.44 -104.828 16.774 104.604 15.649 104.156 14.646 c
  101.45 -103.708 13.643 103.097 12.79 102.321 12.09 c
  101.46 -101.546 11.387 100.631 10.848 99.57 10.469 c
  101.47 -98.511 10.088 97.359 9.898 96.115 9.898 c
  101.48 -94.873 9.898 93.722 10.088 92.661 10.469 c
  101.49 -91.601 10.848 90.678 11.387 89.895 12.09 c
  101.50 -89.109 12.79 88.497 13.643 88.061 14.646 c
  101.51 -87.621 15.649 87.403 16.774 87.403 18.021 c
  101.52 -87.403 31.11 l
  101.53 -91.241 31.11 l
  101.54 -91.241 18.153 l
  101.55 -91.241 17.648 91.321 17.117 91.485 16.562 c
  101.56 -91.648 16.008 91.919 15.497 92.298 15.029 c
  101.57 -92.676 14.563 93.177 14.178 93.801 13.877 c
  101.58 -94.423 13.576 95.194 13.425 96.115 13.425 c
  101.59 -97.035 13.425 97.808 13.576 98.431 13.877 c
  101.60 -99.054 14.178 99.556 14.563 99.934 15.029 c
  101.61 -100.312 15.497 100.582 16.008 100.746 16.562 c
  101.62 -100.909 17.117 100.991 17.648 100.991 18.153 c
  101.63 -100.991 31.11 l
  101.64 -104.828 31.11 l
  101.65 -104.828 18.021 l
  101.66 -f
  101.67 -83.257 7.566 m
  101.68 -82.496 7.895 81.511 8.052 80.723 8.052 c
  101.69 -78.43 8.052 77.162 6.609 77.162 4.734 c
  101.70 -77.162 2.873 78.401 1.471 80.497 1.471 c
  101.71 -81.032 1.471 81.456 1.523 81.793 1.602 c
  101.72 -81.793 3.987 l
  101.73 -79.71 3.987 l
  101.74 -79.71 5.43 l
  101.75 -83.679 5.43 l
  101.76 -83.679 0.5 l
  101.77 -82.638 0.238 81.553 0.028 80.497 0.028 c
  101.78 -77.316 0.028 75.106 1.51 75.106 4.604 c
  101.79 -75.106 7.737 77.162 9.494 80.497 9.494 c
  101.80 -81.638 9.494 82.538 9.35 83.383 9.113 c
  101.81 -83.257 7.566 l
  101.82 -f
  101.83 -85.62 6.938 m
  101.84 -87.296 6.938 l
  101.85 -87.296 5.403 l
  101.86 -87.324 5.403 l
  101.87 -87.408 6.033 88.182 7.095 89.308 7.095 c
  101.88 -89.491 7.095 89.689 7.095 89.885 7.042 c
  101.89 -89.885 5.272 l
  101.90 -89.717 5.363 89.379 5.416 89.04 5.416 c
  101.91 -87.507 5.416 87.507 3.633 87.507 2.664 c
  101.92 -87.507 0.186 l
  101.93 -85.62 0.186 l
  101.94 -85.62 6.938 l
  101.95 -f
  101.96 -93.587 1.312 m
  101.97 -94.164 1.312 94.614 1.549 94.909 1.916 c
  101.98 -95.219 2.296 95.304 2.781 95.304 3.306 c
  101.99 -94.487 3.306 l
 101.100 -93.644 3.306 92.391 3.175 92.391 2.139 c
 101.101 -92.391 1.563 92.911 1.312 93.587 1.312 c
 101.102 -h
 101.103 -91.376 6.583 m
 101.104 -92.107 6.898 93.094 7.095 93.896 7.095 c
 101.105 -96.105 7.095 97.021 6.242 97.021 4.249 c
 101.106 -97.021 3.384 l
 101.107 -97.021 2.703 97.035 2.191 97.049 1.693 c
 101.108 -97.063 1.182 97.091 0.71 97.134 0.186 c
 101.109 -95.473 0.186 l
 101.110 -95.402 0.539 95.402 0.985 95.389 1.195 c
 101.111 -95.359 1.195 l
 101.112 -94.924 0.448 93.979 0.028 93.122 0.028 c
 101.113 -91.842 0.028 90.588 0.749 90.588 2.034 c
 101.114 -90.588 3.043 91.108 3.633 91.827 3.961 c
 101.115 -92.546 4.289 93.474 4.355 94.263 4.355 c
 101.116 -95.304 4.355 l
 101.117 -95.304 5.442 94.783 5.81 93.671 5.81 c
 101.118 -92.869 5.81 92.066 5.522 91.434 5.076 c
 101.119 -91.376 6.583 l
 101.120 -f
 101.121 -98.569 6.938 m
 101.122 -104.312 6.938 l
 101.123 -104.312 5.495 l
 101.124 -100.707 1.549 l
 101.125 -104.438 1.549 l
 101.126 -104.438 0.186 l
 101.127 -98.414 0.186 l
 101.128 -98.414 1.615 l
 101.129 -102.087 5.574 l
 101.130 -98.569 5.574 l
 101.131 -98.569 6.938 l
 101.132 -f
 101.133 -0 0.957 0.569 0 k
 101.134 -105.965 6.911 6.911 -6.851 re
 101.135 -f
 101.136 -Q
 101.137 -endstream
 101.138 -endobj
 101.139 -3 0 obj
 101.140 -<<
 101.141 -/ProcSet [/PDF ]
 101.142 -/ExtGState <<
 101.143 -/GS1 4 0 R
 101.144 ->>
 101.145 ->>
 101.146 -endobj
 101.147 -4 0 obj
 101.148 -<<
 101.149 -/Type /ExtGState
 101.150 -/SA false
 101.151 -/SM 0.02
 101.152 -/OP false
 101.153 -/op false
 101.154 -/OPM 1
 101.155 -/BG2 /Default
 101.156 -/UCR2 /Default
 101.157 -/HT /Default
 101.158 -/TR2 /Default
 101.159 ->>
 101.160 -endobj
 101.161 -1 0 obj
 101.162 -<<
 101.163 -/Type /Page
 101.164 -/Parent 5 0 R
 101.165 -/Resources 3 0 R
 101.166 -/Contents 2 0 R
 101.167 ->>
 101.168 -endobj
 101.169 -6 0 obj
 101.170 -<<
 101.171 -/S /D
 101.172 ->>
 101.173 -endobj
 101.174 -7 0 obj
 101.175 -<<
 101.176 -/Nums [0 6 0 R ]
 101.177 ->>
 101.178 -endobj
 101.179 -5 0 obj
 101.180 -<<
 101.181 -/Type /Pages
 101.182 -/Kids [1 0 R]
 101.183 -/Count 1
 101.184 -/MediaBox [0 0 113 42]
 101.185 ->>
 101.186 -endobj
 101.187 -8 0 obj
 101.188 -<<
 101.189 -/CreationDate (D:20060111234722+13'00')
 101.190 -/ModDate (D:20060111234722+13'00')
 101.191 -/Producer (PSNormalizer.framework)
 101.192 ->>
 101.193 -endobj
 101.194 -9 0 obj
 101.195 -<<
 101.196 -/Type /Catalog
 101.197 -/Pages 5 0 R
 101.198 -/PageLabels 7 0 R
 101.199 ->>
 101.200 -endobj
 101.201 -xref
 101.202 -0 10
 101.203 -0000000000 65535 f 
 101.204 -0000003204 00000 n 
 101.205 -0000000016 00000 n 
 101.206 -0000002998 00000 n 
 101.207 -0000003064 00000 n 
 101.208 -0000003349 00000 n 
 101.209 -0000003284 00000 n 
 101.210 -0000003311 00000 n 
 101.211 -0000003429 00000 n 
 101.212 -0000003560 00000 n 
 101.213 -trailer
 101.214 -<<
 101.215 -/Size 10
 101.216 -/Root 9 0 R
 101.217 -/Info 8 0 R
 101.218 -/ID [<99444215e2a4a31d5c4ca09b38102d5e><99444215e2a4a31d5c4ca09b38102d5e>]
 101.219 ->>
 101.220 -startxref
 101.221 -3627
 101.222 -%%EOF
   102.1 --- a/src/Doc/isac/jrocnik/Test_Complex.thy	Mon Sep 16 12:27:20 2013 +0200
   102.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   102.3 @@ -1,113 +0,0 @@
   102.4 -theory Test_Complex imports Isac begin
   102.5 -
   102.6 -section {*terms and operations*}
   102.7 -ML {*
   102.8 -  print_depth 999; @{term "Complex 1 (2::real)"};
   102.9 -*}
  102.10 -ML {*
  102.11 -@{term "Complex 1 2 + Complex 3 4"};
  102.12 -print_depth 999; str2term "Complex 1 2 + Complex 3 4"; print_depth 999;
  102.13 -*}
  102.14 -ML {*
  102.15 -@{term "Complex 1 2 * Complex 3 4"};
  102.16 -@{term "Complex 1 2 - Complex 3 4"};
  102.17 -@{term "Complex 1 2 / Complex 3 4"};
  102.18 -(*@{term "Complex 1 2 ^ Complex 3 4"};
  102.19 -  Type unification failed: Clash of types "complex" and "nat"
  102.20 -  Operator:  op ^ (Complex 1 2) :: nat \<Rightarrow> complex
  102.21 -  Operand:   Complex 3 4 :: complex*)
  102.22 -*}
  102.23 -ML {*
  102.24 -term2str @{term "Complex 1 2 + Complex 3 4"};
  102.25 -term2str @{term "Complex 1 2 / Complex 3 4"};
  102.26 -*}
  102.27 -
  102.28 -ML {*
  102.29 -val a = @{term "Complex 1 2"};
  102.30 -atomty a;
  102.31 -val a = str2term "Complex 1 2";
  102.32 -atomty a;
  102.33 -*}
  102.34 -ML {*
  102.35 -val b = @{term "Complex 3 4"};
  102.36 -val b = str2term "Complex 3 4";
  102.37 -(*a + (b::complex); ERROR: term + term*)
  102.38 -*}
  102.39 -
  102.40 -section {*use the operations for simplification*}
  102.41 -
  102.42 -
  102.43 -
  102.44 -subsection {*example 1 -- ADD*}
  102.45 -ML {*
  102.46 -  print_depth 1;
  102.47 -  val (thy, ro, er) = (@{theory}, tless_true, eval_rls);
  102.48 -*}
  102.49 -ML {*
  102.50 -  val thm = @{thm "complex_add"};
  102.51 -  val t = str2term "Complex 1 2 + Complex 3 4";
  102.52 -  val SOME _ = rewrite_ thy ro er true thm t;
  102.53 -  val SOME (t', _) = rewrite_ thy ro er true thm t;
  102.54 -  "Complex (1 + 3) (2 + 4)" = term2str t';
  102.55 -*}
  102.56 -
  102.57 -
  102.58 -
  102.59 -
  102.60 -subsection {*example 2 -- ADD, MULT*}
  102.61 -ML {*
  102.62 -
  102.63 -val Simplify_complex = append_rls "Simplify_complex" e_rls
  102.64 -  [ Thm  ("complex_add",num_str @{thm complex_add}),
  102.65 -		    Thm  ("complex_mult",num_str @{thm complex_mult}),
  102.66 -		    Rls_ norm_Poly
  102.67 -		  ];
  102.68 -
  102.69 -*}
  102.70 -ML {*
  102.71 -
  102.72 -val t = str2term "(Complex 1 2 * (Complex 3 4 + Complex 5 (6::real)))";
  102.73 -term2str t = "Complex 1 2 * (Complex 3 4 + Complex 5 6)";
  102.74 -atomty t;
  102.75 -
  102.76 -*}
  102.77 -ML {*
  102.78 -
  102.79 -
  102.80 -val SOME (t, _) = rewrite_set_ thy true Simplify_complex t;
  102.81 -
  102.82 -term2str t = "Complex -12 26";
  102.83 -atomty t;
  102.84 -
  102.85 -*}
  102.86 -
  102.87 -subsection {*example 3*}
  102.88 -ML {*
  102.89 -val Simplify_complex = append_rls "Simplify_complex" e_rls
  102.90 -  [ Thm  ("complex_mult",num_str @{thm complex_mult}),
  102.91 -    Thm  ("complex_inverse",num_str @{thm complex_inverse}),
  102.92 -		    Rls_ norm_Poly
  102.93 -		  ];
  102.94 -*}
  102.95 -ML {*
  102.96 -val t = str2term "inverse (Complex (2::real) (4::real))";
  102.97 -term2str t = "inverse Complex (2) (4)";
  102.98 -atomty t;
  102.99 -*}
 102.100 -ML {*
 102.101 -trace_rewrite := true;
 102.102 -val SOME (t, _) = rewrite_set_ thy true Simplify_complex t;
 102.103 -trace_rewrite := false;
 102.104 -term2str t = "Complex -12 26";
 102.105 -atomty t;
 102.106 -*}
 102.107 -
 102.108 -
 102.109 -
 102.110 -ML {*
 102.111 -trace_rewrite := true;
 102.112 -trace_rewrite := false;
 102.113 -*}
 102.114 -
 102.115 -end
 102.116 -
   103.1 --- a/src/Doc/isac/jrocnik/Test_Integral.thy	Mon Sep 16 12:27:20 2013 +0200
   103.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   103.3 @@ -1,17 +0,0 @@
   103.4 -(*
   103.5 -doc-src/isac/jrocnik$ /usr/local/isabisac/bin/isabelle jedit Test_Integral.thy &
   103.6 -*)
   103.7 -
   103.8 -theory Test_Integral imports "../../../src/HOL/Multivariate_Analysis/Integration"
   103.9 -Integration begin
  103.10 -
  103.11 -ML {*
  103.12 -@{term "Integral s f k"}
  103.13 -*}
  103.14 -ML {*
  103.15 -*}
  103.16 -ML {*
  103.17 -*}
  103.18 -
  103.19 -end
  103.20 -
   104.1 --- a/src/Doc/isac/jrocnik/Test_SUM.thy	Mon Sep 16 12:27:20 2013 +0200
   104.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   104.3 @@ -1,28 +0,0 @@
   104.4 -
   104.5 -theory Test_SUM imports Isac begin
   104.6 -
   104.7 -section {*trials with implicit function, probably required*}
   104.8 -ML {*
   104.9 -@{term "(%n :: nat. n) 2"};
  104.10 -@{term "(%n. n) 2"};
  104.11 -@{term "2"};
  104.12 -*}
  104.13 -ML {*
  104.14 -@{term "(%n. n+n)"};
  104.15 -@{term "(%n. n+n) a"};
  104.16 -@{term "a+a"};
  104.17 -*}
  104.18 -section {*sums*}
  104.19 -ML {*
  104.20 -val x = @{term "(SUM i = 0..< k. f i)"};
  104.21 -term2str x
  104.22 -*}
  104.23 -ML {*
  104.24 -*}
  104.25 -ML {*
  104.26 -*}
  104.27 -ML {*
  104.28 -*}
  104.29 -
  104.30 -end
  104.31 -
   105.1 --- a/src/Doc/isac/jrocnik/bakkarbeit.tcp	Mon Sep 16 12:27:20 2013 +0200
   105.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   105.3 @@ -1,12 +0,0 @@
   105.4 -[FormatInfo]
   105.5 -Type=TeXnicCenterProjectInformation
   105.6 -Version=4
   105.7 -
   105.8 -[ProjectInfo]
   105.9 -MainFile=jrocnik_bakk.tex
  105.10 -UseBibTeX=1
  105.11 -UseMakeIndex=0
  105.12 -ActiveProfile=LaTeX => PDF (Sumatra)
  105.13 -ProjectLanguage=en
  105.14 -ProjectDialect=US
  105.15 -
   106.1 --- a/src/Doc/isac/jrocnik/bakkarbeit.tps	Mon Sep 16 12:27:20 2013 +0200
   106.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   106.3 @@ -1,154 +0,0 @@
   106.4 -[FormatInfo]
   106.5 -Type=TeXnicCenterProjectSessionInformation
   106.6 -Version=2
   106.7 -
   106.8 -[SessionInfo]
   106.9 -ActiveTab=0
  106.10 -FrameCount=5
  106.11 -ActiveFrame=0
  106.12 -
  106.13 -[Frame0]
  106.14 -Columns=1
  106.15 -Rows=1
  106.16 -Flags=2
  106.17 -ShowCmd=3
  106.18 -MinPos.x=-1
  106.19 -MinPos.y=-1
  106.20 -MaxPos.x=-4
  106.21 -MaxPos.y=-23
  106.22 -NormalPos.left=0
  106.23 -NormalPos.top=0
  106.24 -NormalPos.right=112
  106.25 -NormalPos.bottom=299
  106.26 -Class=CLatexEdit
  106.27 -Document=jrocnik_bakk.tex
  106.28 -
  106.29 -[Frame0_Row0]
  106.30 -cyCur=848
  106.31 -cyMin=10
  106.32 -
  106.33 -[Frame0_Col0]
  106.34 -cxCur=992
  106.35 -cxMin=10
  106.36 -
  106.37 -[Frame0_View0,0]
  106.38 -Cursor.row=143
  106.39 -Cursor.column=297
  106.40 -TopSubLine=145
  106.41 -
  106.42 -[Frame1]
  106.43 -Columns=1
  106.44 -Rows=1
  106.45 -Flags=0
  106.46 -ShowCmd=1
  106.47 -MinPos.x=-1
  106.48 -MinPos.y=-1
  106.49 -MaxPos.x=-4
  106.50 -MaxPos.y=-23
  106.51 -NormalPos.left=44
  106.52 -NormalPos.top=44
  106.53 -NormalPos.right=676
  106.54 -NormalPos.bottom=512
  106.55 -Class=CLatexEdit
  106.56 -Document=calulations.tex
  106.57 -
  106.58 -[Frame1_Row0]
  106.59 -cyCur=421
  106.60 -cyMin=10
  106.61 -
  106.62 -[Frame1_Col0]
  106.63 -cxCur=604
  106.64 -cxMin=10
  106.65 -
  106.66 -[Frame1_View0,0]
  106.67 -Cursor.row=52
  106.68 -Cursor.column=25
  106.69 -TopSubLine=35
  106.70 -
  106.71 -[Frame2]
  106.72 -Columns=1
  106.73 -Rows=1
  106.74 -Flags=0
  106.75 -ShowCmd=1
  106.76 -MinPos.x=-1
  106.77 -MinPos.y=-1
  106.78 -MaxPos.x=-4
  106.79 -MaxPos.y=-23
  106.80 -NormalPos.left=66
  106.81 -NormalPos.top=66
  106.82 -NormalPos.right=698
  106.83 -NormalPos.bottom=534
  106.84 -Class=CLatexEdit
  106.85 -Document=bakkarbeit_titlepage.tex
  106.86 -
  106.87 -[Frame2_Row0]
  106.88 -cyCur=421
  106.89 -cyMin=10
  106.90 -
  106.91 -[Frame2_Col0]
  106.92 -cxCur=604
  106.93 -cxMin=10
  106.94 -
  106.95 -[Frame2_View0,0]
  106.96 -Cursor.row=7
  106.97 -Cursor.column=0
  106.98 -TopSubLine=0
  106.99 -
 106.100 -[Frame3]
 106.101 -Columns=1
 106.102 -Rows=1
 106.103 -Flags=0
 106.104 -ShowCmd=1
 106.105 -MinPos.x=-1
 106.106 -MinPos.y=-1
 106.107 -MaxPos.x=-4
 106.108 -MaxPos.y=-23
 106.109 -NormalPos.left=88
 106.110 -NormalPos.top=88
 106.111 -NormalPos.right=1134
 106.112 -NormalPos.bottom=670
 106.113 -Class=CLatexEdit
 106.114 -Document=preambleForGeneratedDocuments.tex
 106.115 -
 106.116 -[Frame3_Row0]
 106.117 -cyCur=535
 106.118 -cyMin=10
 106.119 -
 106.120 -[Frame3_Col0]
 106.121 -cxCur=1018
 106.122 -cxMin=10
 106.123 -
 106.124 -[Frame3_View0,0]
 106.125 -Cursor.row=3
 106.126 -Cursor.column=30
 106.127 -TopSubLine=0
 106.128 -
 106.129 -[Frame4]
 106.130 -Columns=1
 106.131 -Rows=1
 106.132 -Flags=0
 106.133 -ShowCmd=1
 106.134 -MinPos.x=-1
 106.135 -MinPos.y=-1
 106.136 -MaxPos.x=-4
 106.137 -MaxPos.y=-23
 106.138 -NormalPos.left=110
 106.139 -NormalPos.top=110
 106.140 -NormalPos.right=1156
 106.141 -NormalPos.bottom=692
 106.142 -Class=CLatexEdit
 106.143 -Document=references.bib
 106.144 -
 106.145 -[Frame4_Row0]
 106.146 -cyCur=535
 106.147 -cyMin=10
 106.148 -
 106.149 -[Frame4_Col0]
 106.150 -cxCur=1018
 106.151 -cxMin=10
 106.152 -
 106.153 -[Frame4_View0,0]
 106.154 -Cursor.row=24
 106.155 -Cursor.column=15
 106.156 -TopSubLine=0
 106.157 -
   107.1 --- a/src/Doc/isac/jrocnik/bakkarbeit_titlepage.tex	Mon Sep 16 12:27:20 2013 +0200
   107.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   107.3 @@ -1,44 +0,0 @@
   107.4 -\begin{titlepage}
   107.5 -
   107.6 -	% Top of the page
   107.7 -	\vspace*{-2cm}
   107.8 -	\hfill
   107.9 -	\begin{minipage}{4cm}
  107.10 -		\includegraphics[width=40mm]{./TUGlogo.pdf}
  107.11 -	\end{minipage}
  107.12 -	
  107.13 -	% Center of the page
  107.14 -	\begin{center}
  107.15 -		\vspace{1cm}  
  107.16 -		
  107.17 -		\normalsize{Baccalaureate Thesis}\\
  107.18 -		
  107.19 -		\HRule
  107.20 -		\vspace{0.3cm}
  107.21 -		\Large{
  107.22 -		  	\bf Interactive Course Material for Signal Processing based on Isabelle/\isac\\
  107.23 -		  }
  107.24 -		\HRule
  107.25 -			
  107.26 -			\vspace{1cm}
  107.27 -			\normalsize{conducted at the}\\
  107.28 -			\normalsize{Institute for Software Technology}\\
  107.29 -			\normalsize{Institute of Signal Processing and Speech Communication}\\
  107.30 -			\vspace{0.3cm}
  107.31 -			\normalsize{Graz University of Technology}\\
  107.32 -			
  107.33 -			\vspace{1cm}
  107.34 -			\normalsize{by}\\
  107.35 -			Jan Simon Ro\v{c}nik\\\href{mailto:student.tugraz.at}{\tt jan.rocnik@student.tugraz.at}
  107.36 -			
  107.37 -			\vspace{1cm}
  107.38 -			\normalsize{Supervisor}\\
  107.39 -			Univ.-Prof. Dipl.-Ing. Dr.techn. Franz Wotawa
  107.40 -		\vfill
  107.41 -		
  107.42 -		% Bottom of the page
  107.43 -		{\large Graz, \today}
  107.44 -	
  107.45 -	\end{center}
  107.46 -
  107.47 -\end{titlepage}
  107.48 \ No newline at end of file
   108.1 --- a/src/Doc/isac/jrocnik/calulations.tex	Mon Sep 16 12:27:20 2013 +0200
   108.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   108.3 @@ -1,202 +0,0 @@
   108.4 -%\documentclass[a4paper]{scrartcl}
   108.5 -%\usepackage[top=2cm, bottom=2.5cm, left=3cm, right=2cm, footskip=1cm]{geometry}
   108.6 -%\usepackage[german]{babel}
   108.7 -%\usepackage[T1]{fontenc}
   108.8 -%\usepackage[latin1]{inputenc}
   108.9 -%\usepackage{endnotes}
  108.10 -%\usepackage{trfsigns}
  108.11 -%\usepackage{setspace}
  108.12 -%
  108.13 -%\setlength{\parindent}{0ex}
  108.14 -%\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  108.15 -%\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  108.16 -%
  108.17 -%\begin{document}
  108.18 -%\title{Interactive Course Material for Signal Processing based on Isabelle/\isac}
  108.19 -%\subtitle{Problemsolutions (Calculations)}
  108.20 -%\author{Walther Neuper, Jan Rocnik}
  108.21 -%\maketitle
  108.22 -
  108.23 -
  108.24 -%------------------------------------------------------------------------------
  108.25 -%FOURIER
  108.26 -
  108.27 -\subsection{Fourier Transformation}
  108.28 -\subsubsection*{Problem\endnote{Problem submitted by Bernhard Geiger. Originally fragment of the exam to \emph{Signaltransformationen VO} from 04.03.2011. Translated from German.}}
  108.29 -\textbf{(a)} Determine the fourier transform for the given rectangular impulse:
  108.30 -
  108.31 -\begin{center}
  108.32 -$x(t)= \left\{
  108.33 -     \begin{array}{lr}
  108.34 -       1 & -1\leq t\geq1\\
  108.35 -       0 & else
  108.36 -     \end{array}
  108.37 -   \right.$
  108.38 -\end{center}
  108.39 -
  108.40 -\textbf{\noindent (b)} Now consider the given delayed impulse, determine its fourie transformation and calculate phase and magnitude:
  108.41 -
  108.42 -\begin{center}
  108.43 -$x(t)= \left\{
  108.44 -     \begin{array}{lr}
  108.45 -       1 & -1\leq t\leq1\\
  108.46 -       0 & else
  108.47 -     \end{array}
  108.48 -   \right.$
  108.49 -\end{center}
  108.50 -
  108.51 -\subsubsection{Solution}
  108.52 -\textbf{(a)} \textsf{Subproblem 1}
  108.53 -\onehalfspace{
  108.54 -\begin{tabbing}
  108.55 -000\=\kill
  108.56 -\texttt{\footnotesize{01}} \> Definition: $X(j\omega)=\int_\infty^\infty{x(t)\cdot e^{-j\omega t}}$\\
  108.57 -\`Insert Condition: $x(t) = 1\;$ for $\;\{-1\leq t\;\land\;t\leq 1\}\;$ and $\;x(t)=0\;$ otherwise\\
  108.58 -\texttt{\footnotesize{02}} \> $X(j\omega)=\int_{-1}^{1}{1\cdot e^{-j\omega t}}$\\
  108.59 -      \` $\int_a^b f\;t\;dt = \int f\;t\;dt\;|_a^b$\\
  108.60 -\texttt{\footnotesize{03}} \> $\int 1\cdot e^{-j\cdot\omega\cdot t} d t\;|_{-1}^1$\\
  108.61 -       \` pbl: integration in $\cal C$\\
  108.62 -\texttt{\footnotesize{04}} \> $\left(\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot t} \;|_{-1}^1\right)$\\
  108.63 -      \` $f\;t\;|_a^b = f\;b-f\;a$\\
  108.64 -\texttt{\footnotesize{05}} \> $\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot 1} -  \frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot -1}$\\
  108.65 -\texttt{\footnotesize{06}} \> $\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega} -  \frac{1}{-j\cdot\omega}\cdot e^{j\cdot\omega}$\\
  108.66 -\` Lift $\frac{1}{j\omega}$\\
  108.67 -\texttt{\footnotesize{07}} \> $\frac{1}{j\cdot\omega}\cdot(e^{j\cdot\omega} - e^{-j\cdot\omega})$\\
  108.68 -      \` trick~!\\
  108.69 -\texttt{\footnotesize{08}} \> $\frac{1}{\omega}\cdot(\frac{-e^{j\cdot\omega} + e^{-j\cdot\omega}}{j})$\\
  108.70 -      \` table\\
  108.71 -\texttt{\footnotesize{09}} \> $2\cdot\frac{\sin\;\omega}{\omega}$
  108.72 -\end{tabbing}
  108.73 -}
  108.74 -
  108.75 -\noindent\textbf{(b)} \textsf{Subproblem 1}
  108.76 -\onehalfspace{
  108.77 -\begin{tabbing}
  108.78 -000\=\kill
  108.79 -\texttt{\footnotesize{01}} \> Definition: $X(j\omega)=\int_\infty^\infty{x(t)\cdot e^{-j\omega t}}$\\
  108.80 -\`Insert Condition: $x(t) = 1\;$ for $\;\{1\leq t\;\land\;t\leq 3\}\;$ and $\;x(t)=0\;$ otherwise\\
  108.81 -\texttt{\footnotesize{02}} \> $X(j\omega)=\int_{-1}^{1}{1\cdot e^{-j\omega t}}$\\
  108.82 -      \` $\int_a^b f\;t\;dt = \int f\;t\;dt\;|_a^b$\\
  108.83 -\texttt{\footnotesize{03}} \> $\int 1\cdot e^{-j\cdot\omega\cdot t} d t\;|_{1}^3$\\
  108.84 -       \` pbl: integration in $\cal C$\\
  108.85 -\texttt{\footnotesize{04}} \> $\left(\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot t} \;|_{1}^3\right)$\\
  108.86 -      \` $f\;t\;|_a^b = f\;b-f\;a$\\
  108.87 -\texttt{\footnotesize{05}} \> $\frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot 3} -  \frac{1}{-j\cdot\omega}\cdot e^{-j\cdot\omega\cdot 1}$\\
  108.88 -\`Lift $\frac{1}{-j\omega}$\\
  108.89 -\texttt{\footnotesize{06}} \> $\frac{1}{j\cdot\omega}\cdot(e^{-j\cdot\omega} - e^{-j\cdot\omega3})$\\
  108.90 -      \`Lift $e^{j\omega2}$ (trick)\\
  108.91 -\texttt{\footnotesize{07}} \> $\frac{1}{j\omega}\cdot e^{j\omega2}\cdot(e^{j\omega} - e^{-j\omega})$\\
  108.92 -\`Simplification (trick)\\
  108.93 -\texttt{\footnotesize{08}} \> $\frac{1}{\omega}\cdot e^{j\omega2}\cdot(\frac{e^{j\omega} - e^{-j\omega}}{j})$\\
  108.94 -      \` table\\
  108.95 -\texttt{\footnotesize{09}} \> $2\cdot e^{j\omega2}\cdot\frac{\sin\;\omega}{\omega}$\\
  108.96 -\noindent\textbf{(b)} \textsf{Subproblem 2}\\
  108.97 -\`Definition: $X(j\omega)=|X(j\omega)|\cdot e^{arg(X(j\omega))}$\\
  108.98 -\`$|X(j\omega)|$ is called \emph{Magnitude}\\
  108.99 -\`$arg(X(j\omega))$ is called \emph{Phase}\\
 108.100 -\texttt{\footnotesize{10}} \> $|X(j\omega)|=\frac{2}{\omega}\cdot sin(\omega)$\\
 108.101 -\texttt{\footnotesize{11}} \> $arg(X(j\omega)=-2\omega$\\
 108.102 -\end{tabbing}
 108.103 -}
 108.104 -%------------------------------------------------------------------------------
 108.105 -%CONVOLUTION
 108.106 -
 108.107 -\subsection{Convolution}
 108.108 -\subsubsection*{Problem\endnote{Problem submitted by Bernhard Geiger. Originally part of the SPSC Problem Class 2, Summer term 2008}}
 108.109 -Consider the two discrete-time, linear and time-invariant (LTI) systems with the following impulse response:
 108.110 -
 108.111 -\begin{center}
 108.112 -$h_1[n]=\left(\frac{3}{5}\right)^n\cdot u[n]$\\
 108.113 -$h_1[n]=\left(-\frac{2}{3}\right)^n\cdot u[n]$
 108.114 -\end{center}
 108.115 -
 108.116 -The two systems are cascaded seriell. Derive the impulse respinse of the overall system $h_c[n]$.
 108.117 -\subsubsection*{Solution}
 108.118 -
 108.119 -\doublespace{
 108.120 -\begin{tabbing}
 108.121 -000\=\kill
 108.122 -\texttt{\footnotesize{01}} \> $h_c[n]=h_1[n]*h_2[n]$\\
 108.123 -\texttt{\footnotesize{02}} \> $h_c[n]=\left(\left(\frac{3}{5}\right)^n\cdot u[n]\right)*\left(\left(-\frac{2}{3}\right)^n\cdot u[n]\right)$\\
 108.124 -\`Definition: $a^n\cdot u[n]\,*\,b^n\cdot u[n]=\sum\limits_{k=-\infty}^{\infty}{a^k\cdot u[k]\cdot b^{n-k}\cdot u[n-k]}$\\
 108.125 -\texttt{\footnotesize{03}} \> $h_c[n]=\sum\limits_{k=-\infty}^{\infty}{\left(\frac{3}{5}\right)^k\cdot u[n]\,\cdot \,\left(-\frac{2}{3}\right)^{n-k}\cdot u[n-k]}$\\
 108.126 -\`$u[n]= \left\{
 108.127 -     \begin{array}{lr}
 108.128 -       1 & for\ n>=0\\
 108.129 -       0 & else
 108.130 -     \end{array}
 108.131 -   \right.$\\
 108.132 -\`We can leave the unitstep through simplification.\\
 108.133 -\`So the lower limit is 0, the upper limit is n.\\
 108.134 -\texttt{\footnotesize{04}} \> $h_c[n]=\sum\limits_{k=0}^{n}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{2}{3}\right)^{n-k}}$\\
 108.135 -\`Expand\\
 108.136 -\texttt{\footnotesize{05}} \> $h_c[n]=\sum\limits_{k=0}^{n}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{2}{3}\right)^{n}\cdot \left(-\frac{2}{3}\right)^{-k}}$\\
 108.137 -\`Lift\\
 108.138 -\texttt{\footnotesize{06}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\sum\limits_{k=0}^{\infty}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{2}{3}\right)^{-k}}$\\
 108.139 -\texttt{\footnotesize{07}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\sum\limits_{k=0}^{n}{\left(\frac{3}{5}\right)^k\cdot \left(-\frac{3}{2}\right)^{k}}$\\
 108.140 -\texttt{\footnotesize{08}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\sum\limits_{k=0}^{n}{\left(-\frac{9}{10}\right)^{k}}$\\
 108.141 -\`Geometric Series: $\sum\limits_{k=0}^{n}{q^k}=\frac{1-q^{n+1}}{1-q}$\\
 108.142 -\`Now we have to consider the limits again.\\
 108.143 -\`It is neccesarry to put the unitstep in again.\\
 108.144 -\texttt{\footnotesize{09}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\frac{1-\left(-\frac{9}{10}\right)^{n+1}}{1-\left(-\frac{9}{10}\right)}\cdot u[n]$\\
 108.145 -\texttt{\footnotesize{10}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\frac{1-\left(-\frac{9}{10}\right)^{n}\cdot\left(-\frac{9}{10}\right)}{1-\left(-\frac{9}{10}\right)}\cdot u[n]$\\
 108.146 -\texttt{\footnotesize{11}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot\frac{1-\left(-\frac{9}{10}\right)^{n}\cdot\left(-\frac{9}{10}\right)}{\left(\frac{19}{10}\right)}\cdot u[n]$\\
 108.147 -\texttt{\footnotesize{12}} \> $h_c[n]=\left(-\frac{2}{3}\right)^{n}\cdot \left(1-\left(-\frac{9}{10}\right)^{n}\cdot\left(-\frac{9}{10}\right)\right)\cdot\left(\frac{10}{19}\right)\cdot u[n]$\\
 108.148 -\`Lift $u[n]$\\
 108.149 -\texttt{\footnotesize{13}} \> $\left(\frac{10}{19}\cdot\left(-\frac{2}{3}\right)^n+\frac{9}{19}\cdot\left(\frac{3}{5}\right)^n\right)\cdot u[n]$\\
 108.150 -\end{tabbing}
 108.151 -}
 108.152 -
 108.153 -%------------------------------------------------------------------------------
 108.154 -%Z-Transformation
 108.155 -
 108.156 -\subsection{Z-Transformation\label{sec:calc:ztrans}}
 108.157 -\subsubsection*{Problem\endnote{Problem submitted by Bernhard Geiger. Originally part of the signal processing problem class 5, summer term 2008.}}
 108.158 -Determine the inverse $\cal{z}$ transform of the following expression. Hint: applay the partial fraction expansion.
 108.159 -
 108.160 -\begin{center}
 108.161 -$X(z)=\frac{3}{z-\frac{1}{4}-\frac{1}{8}z^{-1}},\ \ x[n]$ is absolute summable
 108.162 -\end{center}
 108.163 -
 108.164 -\subsubsection*{Solution}
 108.165 -\onehalfspace{
 108.166 -\begin{tabbing}
 108.167 -000\=\kill
 108.168 -\textsf{Main Problem}\\
 108.169 -\texttt{\footnotesize{01}} \> $\frac{3}{z-\frac{1}{4}-\frac{1}{8}z^{-1}}$ \\
 108.170 -\`Divide through z, neccesary for z-transformation\\
 108.171 -\texttt{\footnotesize{02}} \> $\frac{3}{z^2-\frac{1}{4}z-\frac{1}{8}}$ \\
 108.172 -\`Start with partial fraction expansion\\
 108.173 -\texttt{\footnotesize{03}} \> $\frac{3}{z^2-\frac{1}{4}z-\frac{1}{8}}=\frac{A}{z-z_1}+\frac{B}{z-z_2}$ \\
 108.174 -\`Eliminate Fractions\\
 108.175 -\texttt{\footnotesize{04}} \> $3=A(z-z_2)+B(z-z_1)$ \\
 108.176 -\textsf{Subproblem 1}\\
 108.177 -\`Setup a linear equation system by inserting the zeros $z_1$ and $z_2$ for $z$\\
 108.178 -\texttt{\footnotesize{05}} \> $3=A(z_1-z_2)$ \& $3=B(z_2-z_1)$\\
 108.179 -\texttt{\footnotesize{06}} \> $\frac{3}{z_1-z_2}=A$ \& $\frac{3}{z_2-z_1}=B$\\
 108.180 -\textsf{Subproblem 2}\\
 108.181 -\`Determine $z_1$ and $z_2$\\
 108.182 -\texttt{\footnotesize{07}} \> $z_1=\frac{1}{8}+\sqrt{\frac{1}{64}+\frac{1}{8}}$ \& $z_2=\frac{1}{8}-\sqrt{\frac{1}{64}+\frac{1}{8}}$\\
 108.183 -\texttt{\footnotesize{08}} \> $z_1=\frac{1}{8}+\sqrt{\frac{9}{64}}$ \& $z_2=\frac{1}{8}-\sqrt{\frac{9}{64}}$\\
 108.184 -\texttt{\footnotesize{09}} \> $z_1=\frac{1}{8}+\frac{3}{8}$ \& $z_2=\frac{1}{8}-\frac{3}{8}$\\
 108.185 -\texttt{\footnotesize{10}} \> $z_1=\frac{1}{2}$ \& $z_2=-\frac{1}{4}$\\
 108.186 -\textsf{Continiue with Subproblem 1}\\
 108.187 -\`Get the coeffizients $A$ and $B$\\
 108.188 -\texttt{\footnotesize{11}} \> $\frac{3}{\frac{1}{2}-(-\frac{1}{4})}=A$ \& $\frac{3}{-\frac{1}{4}-\frac{1}{2}}=B$\\
 108.189 -\texttt{\footnotesize{12}} \> $\frac{3}{\frac{1}{2}+\frac{1}{4}}=A$ \& $\frac{3}{-\frac{1}{4}-\frac{1}{2}}=B$\\
 108.190 -\texttt{\footnotesize{13}} \> $\frac{3}{\frac{3}{4}}=A$ \& $\frac{3}{-\frac{3}{4}}=B$\\
 108.191 -\texttt{\footnotesize{14}} \> $\frac{12}{3}=A$ \& $-\frac{12}{3}=B$\\
 108.192 -\texttt{\footnotesize{15}} \> $4=A$ \& $-4=B$\\
 108.193 -\textsf{Continiue with Main Problem}\\
 108.194 -\texttt{\footnotesize{16}} \> $\frac{A}{z-z_1}+\frac{B}{z-z_2}$\\
 108.195 -\texttt{\footnotesize{17}} \> $\frac{4}{z-\frac{1}{2}}+\frac{4}{z-\left(-\frac{1}{4}\right)}$ \\
 108.196 -\texttt{\footnotesize{18}} \> $\frac{4}{z-\frac{1}{2}}-\frac{4}{z+\frac{1}{4}}$ \\
 108.197 -\`Multiply with z, neccesary for z-transformation\\
 108.198 -\texttt{\footnotesize{19}} \> $\frac{4z}{z-\frac{1}{2}}-\frac{4z}{z+\frac{1}{4}}$ \\
 108.199 -\texttt{\footnotesize{20}} \> $4\cdot\frac{z}{z-\frac{1}{2}}+(-4)\cdot\frac{z}{z+\frac{1}{4}}$ \\
 108.200 -\`Transformation\\
 108.201 -\texttt{\footnotesize{21}} \> $4\cdot\frac{z}{z-\frac{1}{2}}+(-4)\cdot\frac{z}{z+\frac{1}{4}}\ \Ztransf\ 4\cdot\left(-\frac{1}{2}\right)^n\cdot u[n]+(-4)\cdot\left(\frac{1}{4}\right)^n\cdot u[n]$\\
 108.202 -\end{tabbing}
 108.203 -}
 108.204 -\theendnotes
 108.205 -%\end{document}
 108.206 \ No newline at end of file
   109.1 Binary file src/Doc/isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math-3.png has changed
   110.1 Binary file src/Doc/isac/jrocnik/eJMT-paper/fig/isac-Ztrans-math.pdf has changed
   111.1 Binary file src/Doc/isac/jrocnik/eJMT-paper/fig/universe.pdf has changed
   112.1 --- a/src/Doc/isac/jrocnik/eJMT-paper/jrocnik_eJMT.tex	Mon Sep 16 12:27:20 2013 +0200
   112.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   112.3 @@ -1,2135 +0,0 @@
   112.4 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   112.5 -% Electronic Journal of Mathematics and Technology (eJMT) %
   112.6 -% style sheet for LaTeX.  Please do not modify sections   %
   112.7 -% or commands marked 'eJMT'.                              %
   112.8 -%                                                         %
   112.9 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  112.10 -%                                                         %
  112.11 -% eJMT commands                                           %
  112.12 -%                                                         %
  112.13 -\documentclass[12pt,a4paper]{article}%                    %
  112.14 -\usepackage{times}                                        %
  112.15 -\usepackage{amsfonts,amsmath,amssymb}                     %
  112.16 -\usepackage[a4paper]{geometry}                            %
  112.17 -\usepackage{fancyhdr}                                     %
  112.18 -\usepackage{color}                                        %
  112.19 -\usepackage[pdftex]{hyperref} % see note below            %
  112.20 -\usepackage{graphicx}%                                    %
  112.21 -\hypersetup{                                              %
  112.22 -    a4paper,                                              %
  112.23 -    breaklinks                                            %
  112.24 -}                                                         %
  112.25 -%                                                         %
  112.26 -\newtheorem{theorem}{Theorem}                             %
  112.27 -\newtheorem{acknowledgement}[theorem]{Acknowledgement}    %
  112.28 -\newtheorem{algorithm}[theorem]{Algorithm}                %
  112.29 -\newtheorem{axiom}[theorem]{Axiom}                        %
  112.30 -\newtheorem{case}[theorem]{Case}                          %
  112.31 -\newtheorem{claim}[theorem]{Claim}                        %
  112.32 -\newtheorem{conclusion}[theorem]{Conclusion}              %
  112.33 -\newtheorem{condition}[theorem]{Condition}                %
  112.34 -\newtheorem{conjecture}[theorem]{Conjecture}              %
  112.35 -\newtheorem{corollary}[theorem]{Corollary}                %
  112.36 -\newtheorem{criterion}[theorem]{Criterion}                %
  112.37 -\newtheorem{definition}[theorem]{Definition}              %
  112.38 -\newtheorem{example}[theorem]{Example}                    %
  112.39 -\newtheorem{exercise}[theorem]{Exercise}                  %
  112.40 -\newtheorem{lemma}[theorem]{Lemma}                        %
  112.41 -\newtheorem{notation}[theorem]{Notation}                  %
  112.42 -\newtheorem{problem}[theorem]{Problem}                    %
  112.43 -\newtheorem{proposition}[theorem]{Proposition}            %
  112.44 -\newtheorem{remark}[theorem]{Remark}                      %
  112.45 -\newtheorem{solution}[theorem]{Solution}                  %
  112.46 -\newtheorem{summary}[theorem]{Summary}                    %
  112.47 -\newenvironment{proof}[1][Proof]{\noindent\textbf{#1.} }  %
  112.48 -{\ \rule{0.5em}{0.5em}}                                   %
  112.49 -%                                                         %
  112.50 -% eJMT page dimensions                                    %
  112.51 -%                                                         %
  112.52 -\geometry{left=2cm,right=2cm,top=3.2cm,bottom=4cm}        %
  112.53 -%                                                         %
  112.54 -% eJMT header & footer                                    %
  112.55 -%                                                         %
  112.56 -\newcounter{ejmtFirstpage}                                %
  112.57 -\setcounter{ejmtFirstpage}{1}                             %
  112.58 -\pagestyle{empty}                                         %
  112.59 -\setlength{\headheight}{14pt}                             %
  112.60 -\geometry{left=2cm,right=2cm,top=3.2cm,bottom=4cm}        %
  112.61 -\pagestyle{fancyplain}                                    %
  112.62 -\fancyhf{}                                                %
  112.63 -\fancyhead[c]{\small The Electronic Journal of Mathematics%
  112.64 -\ and Technology, Volume 1, Number 1, ISSN 1933-2823}     %
  112.65 -\cfoot{%                                                  %
  112.66 -  \ifnum\value{ejmtFirstpage}=0%                          %
  112.67 -    {\vtop to\hsize{\hrule\vskip .2cm\thepage}}%          %
  112.68 -  \else\setcounter{ejmtFirstpage}{0}\fi%                  %
  112.69 -}                                                         %
  112.70 -%                                                         %
  112.71 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  112.72 -%
  112.73 -% Please place your own definitions here
  112.74 -%
  112.75 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  112.76 -\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  112.77 -
  112.78 -\usepackage{color}
  112.79 -\definecolor{lgray}{RGB}{238,238,238}
  112.80 -
  112.81 -\usepackage{hyperref}
  112.82 -
  112.83 -%
  112.84 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  112.85 -%                                                         %
  112.86 -% How to use hyperref                                     %
  112.87 -% -------------------                                     %
  112.88 -%                                                         %
  112.89 -% Probably the only way you will need to use the hyperref %
  112.90 -% package is as follows.  To make some text, say          %
  112.91 -% "My Text Link", into a link to the URL                  %
  112.92 -% http://something.somewhere.com/mystuff, use             %
  112.93 -%                                                         %
  112.94 -% \href{http://something.somewhere.com/mystuff}{My Text Link}
  112.95 -%                                                         %
  112.96 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  112.97 -%
  112.98 -\begin{document}
  112.99 -%
 112.100 -% document title
 112.101 -%
 112.102 -\title{Trials with TP-based Programming
 112.103 -\\
 112.104 -for Interactive Course Material}%
 112.105 -%
 112.106 -% Single author.  Please supply at least your name,
 112.107 -% email address, and affiliation here.
 112.108 -%
 112.109 -\author{\begin{tabular}{c}
 112.110 -\textit{Jan Ro\v{c}nik} \\
 112.111 -jan.rocnik@student.tugraz.at \\
 112.112 -IST, SPSC\\
 112.113 -Graz University of Technology\\
 112.114 -Austria\end{tabular}
 112.115 -}%
 112.116 -%
 112.117 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 112.118 -%                                                         %
 112.119 -% eJMT commands - do not change these                     %
 112.120 -%                                                         %
 112.121 -\date{}                                                   %
 112.122 -\maketitle                                                %
 112.123 -%                                                         %
 112.124 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 112.125 -%
 112.126 -% abstract
 112.127 -%
 112.128 -\begin{abstract}
 112.129 -
 112.130 -Traditional course material in engineering disciplines lacks an
 112.131 -important component, interactive support for step-wise problem
 112.132 -solving. Theorem-Proving (TP) technology is appropriate for one part
 112.133 -of such support, in checking user-input. For the other part of such
 112.134 -support, guiding the learner towards a solution, another kind of
 112.135 -technology is required.
 112.136 -
 112.137 -Both kinds of support can be achieved by so-called
 112.138 -Lucas-Interpretation which combines deduction and computation and, for
 112.139 -the latter, uses a novel kind of programming language. This language
 112.140 -is based on (Computer) Theorem Proving (TP), thus called a ``TP-based
 112.141 -programming language''.
 112.142 -
 112.143 -This paper is the experience report of the first ``application
 112.144 -programmer'' using this language for creating exercises in step-wise
 112.145 -problem solving for an advanced lab in Signal Processing. The tasks
 112.146 -involved in TP-based programming are described together with the
 112.147 -experience gained from a prototype of the programming language and of
 112.148 -it's interpreter.
 112.149 -
 112.150 -The report concludes with a positive proof of concept, states
 112.151 -insufficiency usability of the prototype and captures the requirements
 112.152 -for further development of both, the programming language and the
 112.153 -interpreter.
 112.154 -%
 112.155 -\end{abstract}%
 112.156 -%
 112.157 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 112.158 -%                                                         %
 112.159 -% eJMT command                                            %
 112.160 -%                                                         %
 112.161 -\thispagestyle{fancy}                                     %
 112.162 -%                                                         %
 112.163 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 112.164 -%
 112.165 -% Please use the following to indicate sections, subsections,
 112.166 -% etc.  Please also use \subsubsection{...}, \paragraph{...}
 112.167 -% and \subparagraph{...} as necessary.
 112.168 -%
 112.169 -
 112.170 -\section{Introduction}\label{intro}
 112.171 -
 112.172 -% \paragraph{Didactics of mathematics} 
 112.173 -%WN: wenn man in einem high-quality paper von 'didactics' spricht, 
 112.174 -%WN muss man am state-of-the-art ankn"upfen -- siehe
 112.175 -%WN W.Neuper, On the Emergence of TP-based Educational Math Assistants
 112.176 -% faces a specific issue, a gap
 112.177 -% between (1) introduction of math concepts and skills and (2)
 112.178 -% application of these concepts and skills, which usually are separated
 112.179 -% into different units in curricula (for good reasons). For instance,
 112.180 -% (1) teaching partial fraction decomposition is separated from (2)
 112.181 -% application for inverse Z-transform in signal processing.
 112.182 -% 
 112.183 -% \par This gap is an obstacle for applying math as an fundamental
 112.184 -% thinking technology in engineering: In (1) motivation is lacking
 112.185 -% because the question ``What is this stuff good for?'' cannot be
 112.186 -% treated sufficiently, and in (2) the ``stuff'' is not available to
 112.187 -% students in higher semesters as widespread experience shows.
 112.188 -% 
 112.189 -% \paragraph{Motivation} taken by this didactic issue on the one hand,
 112.190 -% and ongoing research and development on a novel kind of educational
 112.191 -% mathematics assistant at Graz University of
 112.192 -% Technology~\footnote{http://www.ist.tugraz.at/isac/} promising to
 112.193 -% scope with this issue on the other hand, several institutes are
 112.194 -% planning to join their expertise: the Institute for Information
 112.195 -% Systems and Computer Media (IICM), the Institute for Software
 112.196 -% Technology (IST), the Institutes for Mathematics, the Institute for
 112.197 -% Signal Processing and Speech Communication (SPSC), the Institute for
 112.198 -% Structural Analysis and the Institute of Electrical Measurement and
 112.199 -% Measurement Signal Processing.
 112.200 -%WN diese Information ist f"ur das Paper zu spezielle, zu aktuell 
 112.201 -%WN und damit zu verg"anglich.
 112.202 -% \par This thesis is the first attempt to tackle the above mentioned
 112.203 -% issue, it focuses on Telematics, because these specific studies focus
 112.204 -% on mathematics in \emph{STEOP}, the introductory orientation phase in
 112.205 -% Austria. \emph{STEOP} is considered an opportunity to investigate the
 112.206 -% impact of {\sisac}'s prototype on the issue and others.
 112.207 -% 
 112.208 -
 112.209 -Traditional course material in engineering disciplines lacks an
 112.210 -important component, interactive support for step-wise problem
 112.211 -solving. The lack becomes evident by comparing existing course
 112.212 -material with the sheets collected from written exams (in case solving
 112.213 -engineering problems is {\em not} deteriorated to multiple choice
 112.214 -tests) on the topics addressed by the materials.
 112.215 -Theorem-Proving (TP) technology can provide such support by
 112.216 -specific services. An important part of such services is called
 112.217 -``next-step-guidance'', generated by a specific kind of ``TP-based
 112.218 -programming language''. In the
 112.219 -{\sisac}-project~\footnote{http://www.ist.tugraz.at/projects/isac/} such
 112.220 -a language is prototyped in line with~\cite{plmms10} and built upon
 112.221 -the theorem prover Isabelle~\cite{Nipkow-Paulson-Wenzel:2002}
 112.222 -\footnote{http://isabelle.in.tum.de/}.
 112.223 -The TP services are coordinated by a specific interpreter for the
 112.224 -programming language, called
 112.225 -Lucas-Interpreter~\cite{wn:lucas-interp-12}. The language 
 112.226 - will be briefly re-introduced in order to make the paper
 112.227 -self-contained.
 112.228 -
 112.229 -The main part of the paper is an account of first experiences
 112.230 -with programming in this TP-based language. The experience was gained
 112.231 -in a case study by the author. The author was considered an ideal
 112.232 -candidate for this study for the following reasons: as a student in
 112.233 -Telematics (computer science with focus on Signal Processing) he had
 112.234 -general knowledge in programming as well as specific domain knowledge
 112.235 -in Signal Processing; and he was {\em not} involved in the development of
 112.236 -{\sisac}'s programming language and interpreter, thus being a novice to the
 112.237 -language.
 112.238 -
 112.239 -The goals of the case study were: (1) to identify some TP-based programs for
 112.240 -interactive course material for a specific ``Advanced Signal
 112.241 -Processing Lab'' in a higher semester, (2) respective program
 112.242 -development with as little advice as possible from the {\sisac}-team and (3) 
 112.243 -to document records and comments for the main steps of development in an
 112.244 -Isabelle theory; this theory should provide guidelines for future programmers.
 112.245 -An excerpt from this theory is the main part of this paper.
 112.246 -\par
 112.247 -
 112.248 -\medskip The major example resulting from the case study will be used
 112.249 -as running example throughout this paper. This example requires a
 112.250 -program resembling the size of real-world applications in engineering;
 112.251 -such a size was considered essential for the case study, since there
 112.252 -are many small programs for a long time (mainly concerned with
 112.253 -elementary Computer Algebra like simplification, equation solving,
 112.254 -calculus, etc.~\footnote{The programs existing in the {\sisac}
 112.255 -prototype are found at
 112.256 -http://www.ist.tugraz.at/projects/isac/www/kbase/met/index\_met.html})
 112.257 -
 112.258 -\paragraph{The mathematical background of the running example} is the
 112.259 -following: In Signal Processing, ``the ${\cal Z}$-transform for
 112.260 -discrete-time signals is the counterpart of the Laplace transform for
 112.261 -continuous-time signals, and they each have a similar relationship to
 112.262 -the corresponding Fourier transform. One motivation for introducing
 112.263 -this generalization is that the Fourier transform does not converge
 112.264 -for all sequences, and it is useful to have a generalization of the
 112.265 -Fourier transform that encompasses a broader class of signals. A
 112.266 -second advantage is that in analytic problems, the ${\cal Z}$-transform
 112.267 -notation is often more convenient than the Fourier transform
 112.268 -notation.''  ~\cite[p. 128]{oppenheim2010discrete}.  The ${\cal Z}$-transform
 112.269 -is defined as
 112.270 -\begin{equation*}
 112.271 -X(z)=\sum_{n=-\infty }^{\infty }x[n]z^{-n}
 112.272 -\end{equation*}
 112.273 -where a discrete time sequence $x[n]$ is transformed into the function
 112.274 -$X(z)$ where $z$ is a continuous complex variable. The inverse
 112.275 -function is addressed in the running example and can be determined by
 112.276 -the integral
 112.277 -\begin{equation*}
 112.278 -x[n]=\frac{1}{2\pi j} \oint_{C} X(z)\cdot z^{n-1} dz
 112.279 -\end{equation*}
 112.280 -where the letter $C$ represents a contour within the range of
 112.281 -convergence of the ${\cal Z}$-transform. The unit circle can be a special
 112.282 -case of this contour. Remember that $j$ is the complex number in the
 112.283 -domain of engineering.  As this transform requires high effort to
 112.284 -be solved, tables of commonly used transform pairs are used in
 112.285 -education as well as in engineering practice; such tables can be found
 112.286 -at~\cite{wiki:1} or~\cite[Table~3.1]{oppenheim2010discrete} as well.
 112.287 -A completely solved and more detailed example can be found at
 112.288 -~\cite[p. 149f]{oppenheim2010discrete}. 
 112.289 -
 112.290 -Following conventions in engineering education and in practice, the
 112.291 -running example solves the problem by use of a table. 
 112.292 -
 112.293 -\paragraph{Support for interactive stepwise problem solving} in the
 112.294 -{\sisac} prototype is shown in Fig.\ref{fig-interactive}~\footnote{ Fig.\ref{fig-interactive} also shows the prototype status of {\sisac}; for instance,
 112.295 -the lack of 2-dimensional presentation and input of formulas is the major obstacle for field-tests in standard classes.}:
 112.296 -A student inputs formulas line by line on the \textit{``Worksheet''},
 112.297 -and each step (i.e. each formula on completion) is immediately checked
 112.298 -by the system, such that at most {\em one inconsistent} formula can reside on
 112.299 -the Worksheet (on the input line, marked by the red $\otimes$).
 112.300 -\begin{figure} [htb]
 112.301 -\begin{center}
 112.302 -\includegraphics[width=140mm]{fig/isac-Ztrans-math-3}
 112.303 -%\includegraphics[width=140mm]{fig/isac-Ztrans-math}
 112.304 -\caption{Step-wise problem solving guided by the TP-based program
 112.305 -\label{fig-interactive}}
 112.306 -\end{center}
 112.307 -\end{figure}
 112.308 -If the student gets stuck and does not know the formula to proceed
 112.309 -with, there is the button \framebox{NEXT} presenting the next formula
 112.310 -on the Worksheet; this feature is called ``next-step-guidance''~\cite{wn:lucas-interp-12}. The button \framebox{AUTO} immediately delivers the
 112.311 -final result in case the student is not interested in intermediate
 112.312 -steps.
 112.313 -
 112.314 -Adaptive dialogue guidance is already under
 112.315 -construction~\cite{gdaroczy-EP-13} and the two buttons will disappear,
 112.316 -since their presence is not wanted in many learning scenarios (in
 112.317 -particular, {\em not} in written exams).
 112.318 -
 112.319 -The buttons \framebox{Theories}, \framebox{Problems} and
 112.320 -\framebox{Methods} are the entry points for interactive lookup of the
 112.321 -underlying knowledge.  For instance, pushing \framebox{Theories} in
 112.322 -the configuration shown in Fig.\ref{fig-interactive}, pops up a
 112.323 -``Theory browser'' displaying the theorem(s) justifying the current
 112.324 -step.  The browser allows to lookup all other theories, thus
 112.325 -supporting indepentend investigation of underlying definitions,
 112.326 -theorems, proofs --- where the HTML representation of the browsers is
 112.327 -ready for arbitrary multimedia add-ons. Likewise, the browsers for
 112.328 -\framebox{Problems} and \framebox{Methods} support context sensitive
 112.329 -as well as interactive access to specifications and programs
 112.330 -respectively. 
 112.331 -
 112.332 -There is also a simple web-based representation of knowledge items;
 112.333 -the items under consideration in this paper can be looked up as
 112.334 -well
 112.335 -~\footnote{\href{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Inverse\_Z\_Transform.thy}{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/\textbf{Inverse\_Z\_Transform.thy}}}
 112.336 -~\footnote{\href{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Partial\_Fractions.thy}{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/\textbf{Partial\_Fractions.thy}}}
 112.337 -~\footnote{\href{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Build\_Inverse\_Z\_Transform.thy}{http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/\textbf{Build\_Inverse\_Z\_Transform.thy}}}.
 112.338 -
 112.339 -% can be explained by having a look at 
 112.340 -% Fig.\ref{fig-interactive} which shows the beginning of the interactive 
 112.341 -% construction of a solution for the problem. This construction is done in the 
 112.342 -% right window named ``Worksheet''.
 112.343 -% \par
 112.344 -% User-interaction on the Worksheet is {\em checked} and {\em guided} by
 112.345 -% TP services:
 112.346 -% \begin{enumerate}
 112.347 -% \item Formulas input by the user are {\em checked} by TP: such a
 112.348 -% formula establishes a proof situation --- the prover has to derive the
 112.349 -% formula from the logical context. The context is built up from the
 112.350 -% formal specification of the problem (here hidden from the user) by the
 112.351 -% Lucas-Interpreter.
 112.352 -% \item If the user gets stuck, the program developed below in this
 112.353 -% paper ``knows the next step'' and Lucas-Interpretation provides services
 112.354 -% featuring so-called ``next-step-guidance''; this is out of scope of this
 112.355 -% paper and can be studied in~\cite{gdaroczy-EP-13}.
 112.356 -% \end{enumerate} It should be noted that the programmer using the
 112.357 -% TP-based language is not concerned with interaction at all; we will
 112.358 -% see that the program contains neither input-statements nor
 112.359 -% output-statements. Rather, interaction is handled by the interpreter
 112.360 -% of the language.
 112.361 -% 
 112.362 -% So there is a clear separation of concerns: Dialogues are adapted by
 112.363 -% dialogue authors (in Java-based tools), using TP services provided by
 112.364 -% Lucas-Interpretation. The latter acts on programs developed by
 112.365 -% mathematics-authors (in Isabelle/ML); their task is concern of this
 112.366 -% paper.
 112.367 -
 112.368 -\bigskip The paper is structured as follows: The introduction
 112.369 -\S\ref{intro} is followed by a brief re-introduction of the TP-based
 112.370 -programming language in \S\ref{PL}, which extends the executable
 112.371 -fragment of Isabelle's language (\S\ref{PL-isab}) by tactics which
 112.372 -play a specific role in Lucas-Interpretation and in providing the TP
 112.373 -services (\S\ref{PL-tacs}). The main part \S\ref{trial} describes
 112.374 -the main steps in developing the program for the running example:
 112.375 -prepare domain knowledge, implement the formal specification of the
 112.376 -problem, prepare the environment for the interpreter, implement the
 112.377 -program in \S\ref{isabisac} to \S\ref{progr} respectively. 
 112.378 -The work-flow of programming, debugging and testing is
 112.379 -described in \S\ref{workflow}. The conclusion \S\ref{conclusion} will
 112.380 -give directions identified for future development. 
 112.381 -
 112.382 -
 112.383 -\section{\isac's Prototype for a Programming Language}\label{PL} 
 112.384 -The prototype of the language and of the Lucas-Interpreter is briefly
 112.385 -described from the point of view of a programmer. The language extends
 112.386 -the executable fragment of Higher-Order Logic (HOL) in the theorem prover
 112.387 -Isabelle~\cite{Nipkow-Paulson-Wenzel:2002}\footnote{http://isabelle.in.tum.de/}.
 112.388 -
 112.389 -\subsection{The Executable Fragment of Isabelle's Language}\label{PL-isab}
 112.390 -The executable fragment consists of data-type and function
 112.391 -definitions.  It's usability even suggests that fragment for
 112.392 -introductory courses \cite{nipkow-prog-prove}. HOL is a typed logic whose type system resembles that of functional programming
 112.393 -languages. Thus there are
 112.394 -\begin{description}
 112.395 -\item[base types,] in particular \textit{bool}, the type of truth
 112.396 -values, \textit{nat}, \textit{int}, \textit{complex}, and the types of
 112.397 -natural, integer and complex numbers respectively in mathematics.
 112.398 -\item[type constructors] allow to define arbitrary types, from
 112.399 -\textit{set}, \textit{list} to advanced data-structures like
 112.400 -\textit{trees}, red-black-trees etc.
 112.401 -\item[function types,] denoted by $\Rightarrow$.
 112.402 -\item[type variables,] denoted by $^\prime a, ^\prime b$ etc, provide
 112.403 -type polymorphism. Isabelle automatically computes the type of each
 112.404 -variable in a term by use of Hindley-Milner type inference
 112.405 -\cite{pl:hind97,Milner-78}.
 112.406 -\end{description}
 112.407 -
 112.408 -\textbf{Terms} are formed as in functional programming by applying
 112.409 -functions to arguments. If $f$ is a function of type
 112.410 -$\tau_1\Rightarrow \tau_2$ and $t$ is a term of type $\tau_1$ then
 112.411 -$f\;t$ is a term of type~$\tau_2$. $t\;::\;\tau$ means that term $t$
 112.412 -has type $\tau$. There are many predefined infix symbols like $+$ and
 112.413 -$\leq$ most of which are overloaded for various types.
 112.414 -
 112.415 -HOL also supports some basic constructs from functional programming:
 112.416 -{\footnotesize\it\label{isabelle-stmts}
 112.417 -\begin{tabbing} 123\=\kill
 112.418 -01\>$( \; {\tt if} \; b \; {\tt then} \; t_1 \; {\tt else} \; t_2 \;)$\\
 112.419 -02\>$( \; {\tt let} \; x=t \; {\tt in} \; u \; )$\\
 112.420 -03\>$( \; {\tt case} \; t \; {\tt of} \; {\it pat}_1
 112.421 -  \Rightarrow t_1 \; |\dots| \; {\it pat}_n\Rightarrow t_n \; )$
 112.422 -\end{tabbing}}
 112.423 -\noindent The running example's program uses some of these elements
 112.424 -(marked by {\tt tt-font} on p.\pageref{s:impl}): for instance {\tt
 112.425 -let}\dots{\tt in} in lines {\rm 02} \dots {\rm 13}. In fact, the whole program
 112.426 -is an Isabelle term with specific function constants like {\tt
 112.427 -program}, {\tt Take}, {\tt Rewrite}, {\tt Subproblem} and {\tt
 112.428 -Rewrite\_Set} in lines {\rm 01, 03. 04, 07, 10} and {\rm 11, 12}
 112.429 -respectively.
 112.430 -
 112.431 -% Terms may also contain $\lambda$-abstractions. For example, $\lambda
 112.432 -% x. \; x$ is the identity function.
 112.433 -
 112.434 -%JR warum auskommentiert? WN2...
 112.435 -%WN2 weil ein Punkt wie dieser in weiteren Zusammenh"angen innerhalb
 112.436 -%WN2 des Papers auftauchen m"usste; nachdem ich einen solchen
 112.437 -%WN2 Zusammenhang _noch_ nicht sehe, habe ich den Punkt _noch_ nicht
 112.438 -%WN2 gel"oscht.
 112.439 -%WN2 Wenn der Punkt nicht weiter gebraucht wird, nimmt er nur wertvollen
 112.440 -%WN2 Platz f"ur Anderes weg.
 112.441 -
 112.442 -\textbf{Formulae} are terms of type \textit{bool}. There are the basic
 112.443 -constants \textit{True} and \textit{False} and the usual logical
 112.444 -connectives (in decreasing order of precedence): $\neg, \land, \lor,
 112.445 -\rightarrow$.
 112.446 -
 112.447 -\textbf{Equality} is available in the form of the infix function $=$
 112.448 -of type $a \Rightarrow a \Rightarrow {\it bool}$. It also works for
 112.449 -formulas, where it means ``if and only if''.
 112.450 -
 112.451 -\textbf{Quantifiers} are written $\forall x. \; P$ and $\exists x. \;
 112.452 -P$.  Quantifiers lead to non-executable functions, so functions do not
 112.453 -always correspond to programs, for instance, if comprising \\$(
 112.454 -\;{\it if} \; \exists x.\;P \; {\it then} \; e_1 \; {\it else} \; e_2
 112.455 -\;)$.
 112.456 -
 112.457 -\subsection{\isac's Tactics for Lucas-Interpretation}\label{PL-tacs}
 112.458 -The prototype extends Isabelle's language by specific statements
 112.459 -called tactics~\footnote{{\sisac}'s. These tactics are different from
 112.460 -Isabelle's tactics: the former concern steps in a calculation, the
 112.461 -latter concern proofs.}. For the programmer these
 112.462 -statements are functions with the following signatures:
 112.463 -
 112.464 -\begin{description}
 112.465 -\item[Rewrite:] ${\it theorem}\Rightarrow{\it term}\Rightarrow{\it
 112.466 -term} * {\it term}\;{\it list}$:
 112.467 -this tactic applies {\it theorem} to a {\it term} yielding a {\it
 112.468 -term} and a {\it term list}, the list are assumptions generated by
 112.469 -conditional rewriting. For instance, the {\it theorem}
 112.470 -$b\not=0\land c\not=0\Rightarrow\frac{a\cdot c}{b\cdot c}=\frac{a}{b}$
 112.471 -applied to the {\it term} $\frac{2\cdot x}{3\cdot x}$ yields
 112.472 -$(\frac{2}{3}, [x\not=0])$.
 112.473 -
 112.474 -\item[Rewrite\_Set:] ${\it ruleset}\Rightarrow{\it
 112.475 -term}\Rightarrow{\it term} * {\it term}\;{\it list}$:
 112.476 -this tactic applies {\it ruleset} to a {\it term}; {\it ruleset} is
 112.477 -a confluent and terminating term rewrite system, in general. If
 112.478 -none of the rules ({\it theorem}s) is applicable on interpretation
 112.479 -of this tactic, an exception is thrown.
 112.480 -
 112.481 -% \item[Rewrite\_Inst:] ${\it substitution}\Rightarrow{\it
 112.482 -% theorem}\Rightarrow{\it term}\Rightarrow{\it term} * {\it term}\;{\it
 112.483 -% list}$:
 112.484 -% 
 112.485 -% \item[Rewrite\_Set\_Inst:] ${\it substitution}\Rightarrow{\it
 112.486 -% ruleset}\Rightarrow{\it term}\Rightarrow{\it term} * {\it term}\;{\it
 112.487 -% list}$:
 112.488 -
 112.489 -%SPACEvvv
 112.490 -\item[Substitute:] ${\it substitution}\Rightarrow{\it
 112.491 -term}\Rightarrow{\it term}$: allows to access sub-terms.
 112.492 -%SPACE^^^
 112.493 -
 112.494 -\item[Take:] ${\it term}\Rightarrow{\it term}$:
 112.495 -this tactic has no effect in the program; but it creates a side-effect
 112.496 -by Lucas-Interpretation (see below) and writes {\it term} to the
 112.497 -Worksheet.
 112.498 -
 112.499 -\item[Subproblem:] ${\it theory} * {\it specification} * {\it
 112.500 -method}\Rightarrow{\it argument}\;{\it list}\Rightarrow{\it term}$:
 112.501 -this tactic is a generalisation of a function call: it takes an
 112.502 -\textit{argument list} as usual, and additionally a triple consisting
 112.503 -of an Isabelle \textit{theory}, an implicit \textit{specification} of the
 112.504 -program and a \textit{method} containing data for Lucas-Interpretation,
 112.505 -last not least a program (as an explicit specification)~\footnote{In
 112.506 -interactive tutoring these three items can be determined explicitly
 112.507 -by the user.}.
 112.508 -\end{description}
 112.509 -The tactics play a specific role in
 112.510 -Lucas-Interpretation~\cite{wn:lucas-interp-12}: they are treated as
 112.511 -break-points where, as a side-effect, a line is added to a calculation
 112.512 -as a protocol for proceeding towards a solution in step-wise problem
 112.513 -solving. At the same points Lucas-Interpretation serves interactive
 112.514 -tutoring and hands over control to the user. The user is free to
 112.515 -investigate underlying knowledge, applicable theorems, etc.  And the
 112.516 -user can proceed constructing a solution by input of a tactic to be
 112.517 -applied or by input of a formula; in the latter case the
 112.518 -Lucas-Interpreter has built up a logical context (initialised with the
 112.519 -precondition of the formal specification) such that Isabelle can
 112.520 -derive the formula from this context --- or give feedback, that no
 112.521 -derivation can be found.
 112.522 -
 112.523 -\subsection{Tactics as Control Flow Statements}
 112.524 -The flow of control in a program can be determined by {\tt if then else}
 112.525 -and {\tt case of} as mentioned on p.\pageref{isabelle-stmts} and also
 112.526 -by additional tactics:
 112.527 -\begin{description}
 112.528 -\item[Repeat:] ${\it tactic}\Rightarrow{\it term}\Rightarrow{\it
 112.529 -term}$: iterates over tactics which take a {\it term} as argument as
 112.530 -long as a tactic is applicable (for instance, {\tt Rewrite\_Set} might
 112.531 -not be applicable).
 112.532 -
 112.533 -\item[Try:] ${\it tactic}\Rightarrow{\it term}\Rightarrow{\it term}$:
 112.534 -if {\it tactic} is applicable, then it is applied to {\it term},
 112.535 -otherwise {\it term} is passed on without changes.
 112.536 -
 112.537 -\item[Or:] ${\it tactic}\Rightarrow{\it tactic}\Rightarrow{\it
 112.538 -term}\Rightarrow{\it term}$: If the first {\it tactic} is applicable,
 112.539 -it is applied to the first {\it term} yielding another {\it term},
 112.540 -otherwise the second {\it tactic} is applied; if none is applicable an
 112.541 -exception is raised.
 112.542 -
 112.543 -\item[@@:] ${\it tactic}\Rightarrow{\it tactic}\Rightarrow{\it
 112.544 -term}\Rightarrow{\it term}$: applies the first {\it tactic} to the
 112.545 -first {\it term} yielding an intermediate term (not appearing in the
 112.546 -signature) to which the second {\it tactic} is applied.
 112.547 -
 112.548 -\item[While:] ${\it term::bool}\Rightarrow{\it tactic}\Rightarrow{\it
 112.549 -term}\Rightarrow{\it term}$: if the first {\it term} is true, then the
 112.550 -{\it tactic} is applied to the first {\it term} yielding an
 112.551 -intermediate term (not appearing in the signature); the intermediate
 112.552 -term is added to the environment the first {\it term} is evaluated in
 112.553 -etc. as long as the first {\it term} is true.
 112.554 -\end{description}
 112.555 -The tactics are not treated as break-points by Lucas-Interpretation
 112.556 -and thus do neither contribute to the calculation nor to interaction.
 112.557 -
 112.558 -\section{Concepts and Tasks in TP-based Programming}\label{trial}
 112.559 -%\section{Development of a Program on Trial}
 112.560 -
 112.561 -This section presents all the concepts involved in TP-based
 112.562 -programming and all the tasks to be accomplished by programmers. The
 112.563 -presentation uses the running example from
 112.564 -Fig.\ref{fig-interactive} on p.\pageref{fig-interactive}.
 112.565 -
 112.566 -\subsection{Mechanization of Math --- Domain Engineering}\label{isabisac}
 112.567 -
 112.568 -%WN was Fachleute unter obigem Titel interessiert findet sich
 112.569 -%WN unterhalb des auskommentierten Textes.
 112.570 -
 112.571 -%WN der Text unten spricht Benutzer-Aspekte anund ist nicht speziell
 112.572 -%WN auf Computer-Mathematiker fokussiert.
 112.573 -% \paragraph{As mentioned in the introduction,} a prototype of an
 112.574 -% educational math assistant called
 112.575 -% {{\sisac}}\footnote{{{\sisac}}=\textbf{Isa}belle for
 112.576 -% \textbf{C}alculations, see http://www.ist.tugraz.at/isac/.} bridges
 112.577 -% the gap between (1) introducation and (2) application of mathematics:
 112.578 -% {{\sisac}} is based on Computer Theorem Proving (TP), a technology which
 112.579 -% requires each fact and each action justified by formal logic, so
 112.580 -% {{{\sisac}{}}} makes justifications transparent to students in
 112.581 -% interactive step-wise problem solving. By that way {{\sisac}} already
 112.582 -% can serve both:
 112.583 -% \begin{enumerate}
 112.584 -%   \item Introduction of math stuff (in e.g. partial fraction
 112.585 -% decomposition) by stepwise explaining and exercising respective
 112.586 -% symbolic calculations with ``next step guidance (NSG)'' and rigorously
 112.587 -% checking steps freely input by students --- this also in context with
 112.588 -% advanced applications (where the stuff to be taught in higher
 112.589 -% semesters can be skimmed through by NSG), and
 112.590 -%   \item Application of math stuff in advanced engineering courses
 112.591 -% (e.g. problems to be solved by inverse Z-transform in a Signal
 112.592 -% Processing Lab) and now without much ado about basic math techniques
 112.593 -% (like partial fraction decomposition): ``next step guidance'' supports
 112.594 -% students in independently (re-)adopting such techniques.
 112.595 -% \end{enumerate} 
 112.596 -% Before the question is answers, how {{\sisac}}
 112.597 -% accomplishes this task from a technical point of view, some remarks on
 112.598 -% the state-of-the-art is given, therefor follow up Section~\ref{emas}.
 112.599 -% 
 112.600 -% \subsection{Educational Mathematics Assistants (EMAs)}\label{emas}
 112.601 -% 
 112.602 -% \paragraph{Educational software in mathematics} is, if at all, based
 112.603 -% on Computer Algebra Systems (CAS, for instance), Dynamic Geometry
 112.604 -% Systems (DGS, for instance \footnote{GeoGebra http://www.geogebra.org}
 112.605 -% \footnote{Cinderella http://www.cinderella.de/}\footnote{GCLC
 112.606 -% http://poincare.matf.bg.ac.rs/~janicic/gclc/}) or spread-sheets. These
 112.607 -% base technologies are used to program math lessons and sometimes even
 112.608 -% exercises. The latter are cumbersome: the steps towards a solution of
 112.609 -% such an interactive exercise need to be provided with feedback, where
 112.610 -% at each step a wide variety of possible input has to be foreseen by
 112.611 -% the programmer - so such interactive exercises either require high
 112.612 -% development efforts or the exercises constrain possible inputs.
 112.613 -% 
 112.614 -% \subparagraph{A new generation} of educational math assistants (EMAs)
 112.615 -% is emerging presently, which is based on Theorem Proving (TP). TP, for
 112.616 -% instance Isabelle and Coq, is a technology which requires each fact
 112.617 -% and each action justified by formal logic. Pushed by demands for
 112.618 -% \textit{proven} correctness of safety-critical software TP advances
 112.619 -% into software engineering; from these advancements computer
 112.620 -% mathematics benefits in general, and math education in particular. Two
 112.621 -% features of TP are immediately beneficial for learning:
 112.622 -% 
 112.623 -% \paragraph{TP have knowledge in human readable format,} that is in
 112.624 -% standard predicate calculus. TP following the LCF-tradition have that
 112.625 -% knowledge down to the basic definitions of set, equality,
 112.626 -% etc~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL.html};
 112.627 -% following the typical deductive development of math, natural numbers
 112.628 -% are defined and their properties
 112.629 -% proven~\footnote{http://isabelle.in.tum.de/dist/library/HOL/Number\_Theory/Primes.html},
 112.630 -% etc. Present knowledge mechanized in TP exceeds high-school
 112.631 -% mathematics by far, however by knowledge required in software
 112.632 -% technology, and not in other engineering sciences.
 112.633 -% 
 112.634 -% \paragraph{TP can model the whole problem solving process} in
 112.635 -% mathematical problem solving {\em within} a coherent logical
 112.636 -% framework. This is already being done by three projects, by
 112.637 -% Ralph-Johan Back, by ActiveMath and by Carnegie Mellon Tutor.
 112.638 -% \par
 112.639 -% Having the whole problem solving process within a logical coherent
 112.640 -% system, such a design guarantees correctness of intermediate steps and
 112.641 -% of the result (which seems essential for math software); and the
 112.642 -% second advantage is that TP provides a wealth of theories which can be
 112.643 -% exploited for mechanizing other features essential for educational
 112.644 -% software.
 112.645 -% 
 112.646 -% \subsubsection{Generation of User Guidance in EMAs}\label{user-guid}
 112.647 -% 
 112.648 -% One essential feature for educational software is feedback to user
 112.649 -% input and assistance in coming to a solution.
 112.650 -% 
 112.651 -% \paragraph{Checking user input} by ATP during stepwise problem solving
 112.652 -% is being accomplished by the three projects mentioned above
 112.653 -% exclusively. They model the whole problem solving process as mentioned
 112.654 -% above, so all what happens between formalized assumptions (or formal
 112.655 -% specification) and goal (or fulfilled postcondition) can be
 112.656 -% mechanized. Such mechanization promises to greatly extend the scope of
 112.657 -% educational software in stepwise problem solving.
 112.658 -% 
 112.659 -% \paragraph{NSG (Next step guidance)} comprises the system's ability to
 112.660 -% propose a next step; this is a challenge for TP: either a radical
 112.661 -% restriction of the search space by restriction to very specific
 112.662 -% problem classes is required, or much care and effort is required in
 112.663 -% designing possible variants in the process of problem solving
 112.664 -% \cite{proof-strategies-11}.
 112.665 -% \par
 112.666 -% Another approach is restricted to problem solving in engineering
 112.667 -% domains, where a problem is specified by input, precondition, output
 112.668 -% and postcondition, and where the postcondition is proven by ATP behind
 112.669 -% the scenes: Here the possible variants in the process of problem
 112.670 -% solving are provided with feedback {\em automatically}, if the problem
 112.671 -% is described in a TP-based programing language: \cite{plmms10} the
 112.672 -% programmer only describes the math algorithm without caring about
 112.673 -% interaction (the respective program is functional and even has no
 112.674 -% input or output statements!); interaction is generated as a
 112.675 -% side-effect by the interpreter --- an efficient separation of concern
 112.676 -% between math programmers and dialog designers promising application
 112.677 -% all over engineering disciplines.
 112.678 -% 
 112.679 -% 
 112.680 -% \subsubsection{Math Authoring in Isabelle/ISAC\label{math-auth}}
 112.681 -% Authoring new mathematics knowledge in {{\sisac}} can be compared with
 112.682 -% ``application programing'' of engineering problems; most of such
 112.683 -% programing uses CAS-based programing languages (CAS = Computer Algebra
 112.684 -% Systems; e.g. Mathematica's or Maple's programing language).
 112.685 -% 
 112.686 -% \paragraph{A novel type of TP-based language} is used by {{\sisac}{}}
 112.687 -% \cite{plmms10} for describing how to construct a solution to an
 112.688 -% engineering problem and for calling equation solvers, integration,
 112.689 -% etc~\footnote{Implementation of CAS-like functionality in TP is not
 112.690 -% primarily concerned with efficiency, but with a didactic question:
 112.691 -% What to decide for: for high-brow algorithms at the state-of-the-art
 112.692 -% or for elementary algorithms comprehensible for students?} within TP;
 112.693 -% TP can ensure ``systems that never make a mistake'' \cite{casproto} -
 112.694 -% are impossible for CAS which have no logics underlying.
 112.695 -% 
 112.696 -% \subparagraph{Authoring is perfect} by writing such TP based programs;
 112.697 -% the application programmer is not concerned with interaction or with
 112.698 -% user guidance: this is concern of a novel kind of program interpreter
 112.699 -% called Lucas-Interpreter. This interpreter hands over control to a
 112.700 -% dialog component at each step of calculation (like a debugger at
 112.701 -% breakpoints) and calls automated TP to check user input following
 112.702 -% personalized strategies according to a feedback module.
 112.703 -% \par
 112.704 -% However ``application programing with TP'' is not done with writing a
 112.705 -% program: according to the principles of TP, each step must be
 112.706 -% justified. Such justifications are given by theorems. So all steps
 112.707 -% must be related to some theorem, if there is no such theorem it must
 112.708 -% be added to the existing knowledge, which is organized in so-called
 112.709 -% \textbf{theories} in Isabelle. A theorem must be proven; fortunately
 112.710 -% Isabelle comprises a mechanism (called ``axiomatization''), which
 112.711 -% allows to omit proofs. Such a theorem is shown in
 112.712 -% Example~\ref{eg:neuper1}.
 112.713 -
 112.714 -The running example requires to determine the inverse ${\cal Z}$-transform
 112.715 -for a class of functions. The domain of Signal Processing
 112.716 -is accustomed to specific notation for the resulting functions, which
 112.717 -are absolutely capable of being totalled and are called step-response: $u[n]$, where $u$ is the
 112.718 -function, $n$ is the argument and the brackets indicate that the
 112.719 -arguments are discrete. Surprisingly, Isabelle accepts the rules for
 112.720 -$z^{-1}$ in this traditional notation~\footnote{Isabelle
 112.721 -experts might be particularly surprised, that the brackets do not
 112.722 -cause errors in typing (as lists).}:
 112.723 -%\vbox{
 112.724 -% \begin{example}
 112.725 -  \label{eg:neuper1}
 112.726 -  {\footnotesize\begin{tabbing}
 112.727 -  123\=123\=123\=123\=\kill
 112.728 -
 112.729 -  01\>axiomatization where \\
 112.730 -  02\>\>  rule1: ``$z^{-1}\;1 = \delta [n]$'' and\\
 112.731 -  03\>\>  rule2: ``$\vert\vert z \vert\vert > 1 \Rightarrow z^{-1}\;z / (z - 1) = u [n]$'' and\\
 112.732 -  04\>\>  rule3: ``$\vert\vert z \vert\vert < 1 \Rightarrow z / (z - 1) = -u [-n - 1]$'' and \\
 112.733 -  05\>\>  rule4: ``$\vert\vert z \vert\vert > \vert\vert$ $\alpha$ $\vert\vert \Rightarrow z / (z - \alpha) = \alpha^n \cdot u [n]$'' and\\
 112.734 -  06\>\>  rule5: ``$\vert\vert z \vert\vert < \vert\vert \alpha \vert\vert \Rightarrow z / (z - \alpha) = -(\alpha^n) \cdot u [-n - 1]$'' and\\
 112.735 -  07\>\>  rule6: ``$\vert\vert z \vert\vert > 1 \Rightarrow z/(z - 1)^2 = n \cdot u [n]$''
 112.736 -  \end{tabbing}}
 112.737 -% \end{example}
 112.738 -%}
 112.739 -These 6 rules can be used as conditional rewrite rules, depending on
 112.740 -the respective convergence radius. Satisfaction from accordance with traditional
 112.741 -notation contrasts with the above word {\em axiomatization}: As TP-based, the
 112.742 -programming language expects these rules as {\em proved} theorems, and
 112.743 -not as axioms implemented in the above brute force manner; otherwise
 112.744 -all the verification efforts envisaged (like proof of the
 112.745 -post-condition, see below) would be meaningless.
 112.746 -
 112.747 -Isabelle provides a large body of knowledge, rigorously proved from
 112.748 -the basic axioms of mathematics~\footnote{This way of rigorously
 112.749 -deriving all knowledge from first principles is called the
 112.750 -LCF-paradigm in TP.}. In the case of the ${\cal Z}$-transform the most advanced
 112.751 -knowledge can be found in the theories on Multivariate
 112.752 -Analysis~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL-Multivariate\_Analysis}. However,
 112.753 -building up knowledge such that a proof for the above rules would be
 112.754 -reasonably short and easily comprehensible, still requires lots of
 112.755 -work (and is definitely out of scope of our case study).
 112.756 -
 112.757 -%REMOVED DUE TO SPACE CONSTRAINTS
 112.758 -%At the state-of-the-art in mechanization of knowledge in engineering
 112.759 -%sciences, the process does not stop with the mechanization of
 112.760 -%mathematics traditionally used in these sciences. Rather, ``Formal
 112.761 -%Methods''~\cite{ fm-03} are expected to proceed to formal and explicit
 112.762 -%description of physical items.  Signal Processing, for instance is
 112.763 -%concerned with physical devices for signal acquisition and
 112.764 -%reconstruction, which involve measuring a physical signal, storing it,
 112.765 -%and possibly later rebuilding the original signal or an approximation
 112.766 -%thereof. For digital systems, this typically includes sampling and
 112.767 -%quantization; devices for signal compression, including audio
 112.768 -%compression, image compression, and video compression, etc.  ``Domain
 112.769 -%engineering''\cite{db:dom-eng} is concerned with {\em specification}
 112.770 -%of these devices' components and features; this part in the process of
 112.771 -%mechanization is only at the beginning in domains like Signal
 112.772 -%Processing.
 112.773 -%
 112.774 -%TP-based programming, concern of this paper, is determined to
 112.775 -%add ``algorithmic knowledge'' to the mechanised body of knowledge.
 112.776 -%% in Fig.\ref{fig:mathuni} on
 112.777 -%% p.\pageref{fig:mathuni}.  As we shall see below, TP-based programming
 112.778 -%% starts with a formal {\em specification} of the problem to be solved.
 112.779 -%% \begin{figure}
 112.780 -%%   \begin{center}
 112.781 -%%     \includegraphics[width=110mm]{../../fig/jrocnik/math-universe-small}
 112.782 -%%     \caption{The three-dimensional universe of mathematics knowledge}
 112.783 -%%     \label{fig:mathuni}
 112.784 -%%   \end{center}
 112.785 -%% \end{figure}
 112.786 -%% The language for both axes is defined in the axis at the bottom, deductive
 112.787 -%% knowledge, in {\sisac} represented by Isabelle's theories.
 112.788 -
 112.789 -\subsection{Preparation of Simplifiers for the Program}\label{simp}
 112.790 -
 112.791 -All evaluation in the prototype's Lucas-Interpreter is done by term rewriting on
 112.792 -Isabelle's terms, see \S\ref{meth} below; in this section some of respective
 112.793 -preparations are described. In order to work reliably with term rewriting, the
 112.794 -respective rule-sets must be confluent and terminating~\cite{nipk:rew-all-that},
 112.795 -then they are called (canonical) simplifiers. These properties do not go without
 112.796 -saying, their establishment is a difficult task for the programmer; this task is
 112.797 -not yet supported in the prototype.
 112.798 -
 112.799 -The prototype rewrites using theorems only. Axioms which are theorems as well 
 112.800 -have been already shown in \S\ref{eg:neuper1} on p.\pageref{eg:neuper1} , we
 112.801 -assemble them in a rule-set and apply them in ML as follows:
 112.802 -
 112.803 -{\footnotesize
 112.804 -\begin{verbatim}
 112.805 -   01  val inverse_z = Rls 
 112.806 -   02      {id       = "inverse_z",
 112.807 -   03       rew_ord  = dummy_ord,
 112.808 -   04       erls     = Erls,
 112.809 -   05       rules    = [Thm ("rule1", @{thm rule1}), Thm ("rule2", @{thm rule1}), 
 112.810 -   06                   Thm ("rule3", @{thm rule3}), Thm ("rule4", @{thm rule4}), 
 112.811 -   07                   Thm ("rule5", @{thm rule5}), Thm ("rule6", @{thm rule6})],
 112.812 -   08       errpatts = [],
 112.813 -   09       scr      = ""}
 112.814 -\end{verbatim}}
 112.815 -
 112.816 -\noindent The items, line by line, in the above record have the following purpose:
 112.817 -\begin{description}
 112.818 -\item[01..02] the ML-value \textit{inverse\_z} stores it's identifier
 112.819 -as a string for ``reflection'' when switching between the language
 112.820 -layers of Isabelle/ML (like in the Lucas-Interpreter) and
 112.821 -Isabelle/Isar (like in the example program on p.\pageref{s:impl} on
 112.822 -line {\rm 12}).
 112.823 -
 112.824 -\item[03..04] both, (a) the rewrite-order~\cite{nipk:rew-all-that}
 112.825 -\textit{rew\_ord} and (b) the rule-set \textit{erls} are trivial here:
 112.826 -(a) the \textit{rules} in {\rm 07..12} don't need ordered rewriting
 112.827 -and (b) the assumptions of the \textit{rules} need not be evaluated
 112.828 -(they just go into the context during rewriting).
 112.829 -
 112.830 -\item[05..07] the \textit{rules} are the axioms from p.\pageref{eg:neuper1};
 112.831 -also ML-functions (\S\ref{funs}) can come into this list as shown in
 112.832 -\S\ref{flow-prep}; so they are distinguished by type-constructors \textit{Thm}
 112.833 -and \textit{Calc} respectively; for the purpose of reflection both
 112.834 -contain their identifiers.
 112.835 -
 112.836 -\item[08..09] are error-patterns not discussed here and \textit{scr}
 112.837 -is prepared to get a program, automatically generated by {\sisac} for
 112.838 -producing intermediate rewrites when requested by the user.
 112.839 -
 112.840 -\end{description}
 112.841 -
 112.842 -%OUTCOMMENTED DUE TO SPACE RESTRICTIONS
 112.843 -% \noindent It is advisable to immediately test rule-sets; for that
 112.844 -% purpose an appropriate term has to be created; \textit{parse} takes a
 112.845 -% context \textit{ctxt} and a string (with \textit{ZZ\_1} denoting ${\cal
 112.846 -% Z}^{-1}$) and creates a term:
 112.847 -% 
 112.848 -% {\footnotesize
 112.849 -% \begin{verbatim}
 112.850 -%    01 ML {*
 112.851 -%    02   val t = parse ctxt "ZZ_1 (z / (z - 1) + z / (z - </alpha>) + 1)";
 112.852 -%    03 *}
 112.853 -%    04 val t = Const ("Build_Inverse_Z_Transform.ZZ_1", 
 112.854 -%    05   "RealDef.real => RealDef.real => RealDef.real") $
 112.855 -%    06     (Const (...) $ (Const (...) $ Free (...) $ (Const (...) $ Free (...) 
 112.856 -% \end{verbatim}}
 112.857 -% 
 112.858 -% \noindent The internal representation of the term, as required for
 112.859 -% rewriting, consists of \textit{Const}ants, a pair of a string
 112.860 -% \textit{"Groups.plus\_class.plus"} for $+$ and a type, variables
 112.861 -% \textit{Free} and the respective constructor \textit{\$}. Now the
 112.862 -% term can be rewritten by the rule-set \textit{inverse\_z}:
 112.863 -% 
 112.864 -% {\footnotesize
 112.865 -% \begin{verbatim}
 112.866 -%    01 ML {*
 112.867 -%    02   val SOME (t', asm) = rewrite_set_ @{theory} inverse\_z t;
 112.868 -%    03   term2str t';
 112.869 -%    04   terms2str asm;
 112.870 -%    05 *}
 112.871 -%    06 val it = "u[n] + </alpha> ^ n * u[n] + </delta>[n]" : string
 112.872 -%    07 val it = "|| z || > 1 & || z || > </alpha>" : string
 112.873 -% \end{verbatim}}
 112.874 -% 
 112.875 -% \noindent The resulting term \textit{t} and the assumptions
 112.876 -% \textit{asm} are converted to readable strings by \textit{term2str}
 112.877 -% and \textit{terms2str}.
 112.878 -
 112.879 -\subsection{Preparation of ML-Functions}\label{funs}
 112.880 -Some functionality required in programming, cannot be accomplished by
 112.881 -rewriting. So the prototype has a mechanism to call functions within
 112.882 -the rewrite-engine: certain redexes in Isabelle terms call these
 112.883 -functions written in SML~\cite{pl:milner97}, the implementation {\em
 112.884 -and} meta-language of Isabelle. The programmer has to use this
 112.885 -mechanism.
 112.886 -
 112.887 -In the running example's program on p.\pageref{s:impl} the lines {\rm
 112.888 -05} and {\rm 06} contain such functions; we go into the details with
 112.889 -\textit{argument\_in X\_z;}. This function fetches the argument from a
 112.890 -function application: Line {\rm 03} in the example calculation on
 112.891 -p.\pageref{exp-calc} is created by line {\rm 06} of the example
 112.892 -program on p.\pageref{s:impl} where the program's environment assigns
 112.893 -the value \textit{X z} to the variable \textit{X\_z}; so the function
 112.894 -shall extract the argument \textit{z}.
 112.895 -
 112.896 -\medskip In order to be recognised as a function constant in the
 112.897 -program source the constant needs to be declared in a theory, here in
 112.898 -\textit{Build\_Inverse\_Z\_Transform.thy}; then it can be parsed in
 112.899 -the context \textit{ctxt} of that theory:
 112.900 -
 112.901 -{\footnotesize
 112.902 -\begin{verbatim}
 112.903 -01   consts
 112.904 -02     argument'_in :: "real => real" ("argument'_in _" 10)
 112.905 -\end{verbatim}}
 112.906 -   
 112.907 -%^3.2^    ML {* val SOME t = parse ctxt "argument_in (X z)"; *}
 112.908 -%^3.2^    val t = Const ("Build_Inverse_Z_Transform.argument'_in", "RealDef.real ⇒ RealDef.real") 
 112.909 -%^3.2^              $ (Free ("X", "RealDef.real ⇒ RealDef.real") $ Free ("z", "RealDef.real")): term
 112.910 -%^3.2^ \end{verbatim}}
 112.911 -%^3.2^ 
 112.912 -%^3.2^ \noindent Parsing produces a term \texttt{t} in internal
 112.913 -%^3.2^ representation~\footnote{The attentive reader realizes the 
 112.914 -%^3.2^ differences between interal and extermal representation even in the
 112.915 -%^3.2^ strings, i.e \texttt{'\_}}, consisting of \texttt{Const
 112.916 -%^3.2^ ("argument'\_in", type)} and the two variables \texttt{Free ("X",
 112.917 -%^3.2^ type)} and \texttt{Free ("z", type)}, \texttt{\$} is the term
 112.918 -%^3.2^ constructor. 
 112.919 -The function body below is implemented directly in SML,
 112.920 -i.e in an \texttt{ML \{* *\}} block; the function definition provides
 112.921 -a unique prefix \texttt{eval\_} to the function name:
 112.922 -
 112.923 -{\footnotesize
 112.924 -\begin{verbatim}
 112.925 -01   ML {*
 112.926 -02     fun eval_argument_in _ 
 112.927 -03       "Build_Inverse_Z_Transform.argument'_in" 
 112.928 -04       (t as (Const ("Build_Inverse_Z_Transform.argument'_in", _) $(f $arg))) _ =
 112.929 -05         if is_Free arg (*could be something to be simplified before*)
 112.930 -06         then SOME (term2str t ^"="^ term2str arg, Trueprop $(mk_equality (t, arg)))
 112.931 -07         else NONE
 112.932 -08     | eval_argument_in _ _ _ _ = NONE;
 112.933 -09   *}
 112.934 -\end{verbatim}}
 112.935 -
 112.936 -\noindent The function body creates either \texttt{NONE}
 112.937 -telling the rewrite-engine to search for the next redex, or creates an
 112.938 -ad-hoc theorem for rewriting, thus the programmer needs to adopt many
 112.939 -technicalities of Isabelle, for instance, the \textit{Trueprop}
 112.940 -constant.
 112.941 -
 112.942 -\bigskip This sub-task particularly sheds light on basic issues in the
 112.943 -design of a programming language, the integration of differential language
 112.944 -layers, the layer of Isabelle/Isar and Isabelle/ML.
 112.945 -
 112.946 -Another point of improvement for the prototype is the rewrite-engine: The
 112.947 -program on p.\pageref{s:impl} would not allow to contract the two lines {\rm 05}
 112.948 -and {\rm 06} to
 112.949 -
 112.950 -{\small\it\label{s:impl}
 112.951 -\begin{tabbing}
 112.952 -123l\=123\=123\=123\=123\=123\=123\=((x\=123\=(x \=123\=123\=\kill
 112.953 -\>{\rm 05/06}\>\>\>  (z::real) = argument\_in (lhs X\_eq) ;
 112.954 -\end{tabbing}}
 112.955 -
 112.956 -\noindent because nested function calls would require creating redexes
 112.957 -inside-out; however, the prototype's rewrite-engine only works top down
 112.958 -from the root of a term down to the leaves.
 112.959 -
 112.960 -How all these technicalities are to be checked in the prototype is 
 112.961 -shown in \S\ref{flow-prep} below.
 112.962 -
 112.963 -% \paragraph{Explicit Problems} require explicit methods to solve them, and within
 112.964 -% this methods we have some explicit steps to do. This steps can be unique for
 112.965 -% a special problem or refindable in other problems. No mather what case, such
 112.966 -% steps often require some technical functions behind. For the solving process
 112.967 -% of the Inverse Z Transformation and the corresponding partial fraction it was
 112.968 -% neccessary to build helping functions like \texttt{get\_denominator},
 112.969 -% \texttt{get\_numerator} or \texttt{argument\_in}. First two functions help us
 112.970 -% to filter the denominator or numerator out of a fraction, last one helps us to
 112.971 -% get to know the bound variable in a equation.
 112.972 -% \par
 112.973 -% By taking \texttt{get\_denominator} as an example, we want to explain how to 
 112.974 -% implement new functions into the existing system and how we can later use them
 112.975 -% in our program.
 112.976 -% 
 112.977 -% \subsubsection{Find a place to Store the Function}
 112.978 -% 
 112.979 -% The whole system builds up on a well defined structure of Knowledge. This
 112.980 -% Knowledge sets up at the Path:
 112.981 -% \begin{center}\ttfamily src/Tools/isac/Knowledge\normalfont\end{center}
 112.982 -% For implementing the Function \texttt{get\_denominator} (which let us extract
 112.983 -% the denominator out of a fraction) we have choosen the Theory (file)
 112.984 -% \texttt{Rational.thy}.
 112.985 -% 
 112.986 -% \subsubsection{Write down the new Function}
 112.987 -% 
 112.988 -% In upper Theory we now define the new function and its purpose:
 112.989 -% \begin{verbatim}
 112.990 -%   get_denominator :: "real => real"
 112.991 -% \end{verbatim}
 112.992 -% This command tells the machine that a function with the name
 112.993 -% \texttt{get\_denominator} exists which gets a real expression as argument and
 112.994 -% returns once again a real expression. Now we are able to implement the function
 112.995 -% itself, upcoming example now shows the implementation of
 112.996 -% \texttt{get\_denominator}.
 112.997 -% 
 112.998 -% %\begin{example}
 112.999 -%   \label{eg:getdenom}
112.1000 -%   \begin{verbatim}
112.1001 -% 
112.1002 -% 01  (*
112.1003 -% 02   *("get_denominator",
112.1004 -% 03   *  ("Rational.get_denominator", eval_get_denominator ""))
112.1005 -% 04   *)
112.1006 -% 05  fun eval_get_denominator (thmid:string) _ 
112.1007 -% 06            (t as Const ("Rational.get_denominator", _) $
112.1008 -% 07                (Const ("Rings.inverse_class.divide", _) $num 
112.1009 -% 08                  $denom)) thy = 
112.1010 -% 09          SOME (mk_thmid thmid "" 
112.1011 -% 10              (Print_Mode.setmp [] 
112.1012 -% 11                (Syntax.string_of_term (thy2ctxt thy)) denom) "", 
112.1013 -% 12              Trueprop $ (mk_equality (t, denom)))
112.1014 -% 13    | eval_get_denominator _ _ _ _ = NONE;\end{verbatim}
112.1015 -% %\end{example}
112.1016 -% 
112.1017 -% Line \texttt{07} and \texttt{08} are describing the mode of operation the best -
112.1018 -% there is a fraction\\ (\ttfamily Rings.inverse\_class.divide\normalfont) 
112.1019 -% splittet
112.1020 -% into its two parts (\texttt{\$num \$denom}). The lines before are additionals
112.1021 -% commands for declaring the function and the lines after are modeling and 
112.1022 -% returning a real variable out of \texttt{\$denom}.
112.1023 -% 
112.1024 -% \subsubsection{Add a test for the new Function}
112.1025 -% 
112.1026 -% \paragraph{Everytime when adding} a new function it is essential also to add
112.1027 -% a test for it. Tests for all functions are sorted in the same structure as the
112.1028 -% knowledge it self and can be found up from the path:
112.1029 -% \begin{center}\ttfamily test/Tools/isac/Knowledge\normalfont\end{center}
112.1030 -% This tests are nothing very special, as a first prototype the functionallity
112.1031 -% of a function can be checked by evaluating the result of a simple expression
112.1032 -% passed to the function. Example~\ref{eg:getdenomtest} shows the test for our
112.1033 -% \textit{just} created function \texttt{get\_denominator}.
112.1034 -% 
112.1035 -% %\begin{example}
112.1036 -% \label{eg:getdenomtest}
112.1037 -% \begin{verbatim}
112.1038 -% 
112.1039 -% 01 val thy = @{theory Isac};
112.1040 -% 02 val t = term_of (the (parse thy "get_denominator ((a +x)/b)"));
112.1041 -% 03 val SOME (_, t') = eval_get_denominator "" 0 t thy;
112.1042 -% 04 if term2str t' = "get_denominator ((a + x) / b) = b" then ()
112.1043 -% 05 else error "get_denominator ((a + x) / b) = b" \end{verbatim}
112.1044 -% %\end{example}
112.1045 -% 
112.1046 -% \begin{description}
112.1047 -% \item[01] checks if the proofer set up on our {\sisac{}} System.
112.1048 -% \item[02] passes a simple expression (fraction) to our suddenly created
112.1049 -%           function.
112.1050 -% \item[04] checks if the resulting variable is the correct one (in this case
112.1051 -%           ``b'' the denominator) and returns.
112.1052 -% \item[05] handels the error case and reports that the function is not able to
112.1053 -%           solve the given problem.
112.1054 -% \end{description}
112.1055 -
112.1056 -\subsection{Specification of the Problem}\label{spec}
112.1057 -%WN <--> \chapter 7 der Thesis
112.1058 -%WN die Argumentation unten sollte sich NUR auf Verifikation beziehen..
112.1059 -
112.1060 -Mechanical treatment requires to translate a textual problem
112.1061 -description like in Fig.\ref{fig-interactive} on
112.1062 -p.\pageref{fig-interactive} into a {\em formal} specification. The
112.1063 -formal specification of the running example could look like is this
112.1064 -~\footnote{The ``TODO'' in the postcondition indicates, that postconditions
112.1065 -are not yet handled in the prototype; in particular, the postcondition, i.e.
112.1066 -the correctness of the result is not yet automatically proved.}:
112.1067 -
112.1068 -%WN Hier brauchen wir die Spezifikation des 'running example' ...
112.1069 -%JR Habe input, output und precond vom Beispiel eingefügt brauche aber Hilfe bei
112.1070 -%JR der post condition - die existiert für uns ja eigentlich nicht aka
112.1071 -%JR haben sie bis jetzt nicht beachtet WN...
112.1072 -%WN2 Mein Vorschlag ist, das TODO zu lassen und deutlich zu kommentieren.
112.1073 -%JR2 done
112.1074 -
112.1075 -\label{eg:neuper2}
112.1076 -{\small\begin{tabbing}
112.1077 -  123\=123\=postcond \=: \= $\forall \,A^\prime\, u^\prime \,v^\prime.\,$\=\kill
112.1078 -  %\hfill \\
112.1079 -  \>Specification:\\
112.1080 -  \>  \>input    \>: ${\it filterExpression} \;\;X\;z=\frac{3}{z-\frac{1}{4}+-\frac{1}{8}*\frac{1}{z}}, \;{\it domain}\;\mathbb{R}-\{\frac{1}{2}, \frac{-1}{4}\}$\\
112.1081 -  \>\>precond  \>: $\frac{3}{z-\frac{1}{4}+-\frac{1}{8}*\frac{1}{z}}\;\; {\it continuous\_on}\; \mathbb{R}-\{\frac{1}{2}, \frac{-1}{4}\}$ \\
112.1082 -  \>\>output   \>: stepResponse $x[n]$ \\
112.1083 -  \>\>postcond \>: TODO
112.1084 -\end{tabbing}}
112.1085 -
112.1086 -%JR wie besprochen, kein remark, keine begründung, nur simples "nicht behandelt"
112.1087 -
112.1088 -% \begin{remark}
112.1089 -%    Defining the postcondition requires a high amount mathematical 
112.1090 -%    knowledge, the difficult part in our case is not to set up this condition 
112.1091 -%    nor it is more to define it in a way the interpreter is able to handle it. 
112.1092 -%    Due the fact that implementing that mechanisms is quite the same amount as 
112.1093 -%    creating the programm itself, it is not avaible in our prototype.
112.1094 -%    \label{rm:postcond}
112.1095 -% \end{remark}
112.1096 -
112.1097 -The implementation of the formal specification in the present
112.1098 -prototype, still bar-bones without support for authoring, is done
112.1099 -like that:
112.1100 -%WN Kopie von Inverse_Z_Transform.thy, leicht versch"onert:
112.1101 -
112.1102 -{\footnotesize\label{exp-spec}
112.1103 -\begin{verbatim}
112.1104 -   00 ML {*
112.1105 -   01  store_specification
112.1106 -   02    (prepare_specification
112.1107 -   03      "pbl_SP_Ztrans_inv"
112.1108 -   04      ["Jan Rocnik"]
112.1109 -   05      thy
112.1110 -   06      ( ["Inverse", "Z_Transform", "SignalProcessing"],
112.1111 -   07        [ ("#Given", ["filterExpression X_eq", "domain D"]),
112.1112 -   08          ("#Pre"  , ["(rhs X_eq) is_continuous_in D"]),
112.1113 -   09          ("#Find" , ["stepResponse n_eq"]),
112.1114 -   10          ("#Post" , [" TODO "])])
112.1115 -   11        prls
112.1116 -   12        NONE
112.1117 -   13        [["SignalProcessing","Z_Transform","Inverse"]]);
112.1118 -   14 *}
112.1119 -\end{verbatim}}
112.1120 -
112.1121 -Although the above details are partly very technical, we explain them
112.1122 -in order to document some intricacies of TP-based programming in the
112.1123 -present state of the {\sisac} prototype:
112.1124 -\begin{description}
112.1125 -\item[01..02]\textit{store\_specification:} stores the result of the
112.1126 -function \textit{prep\_specification} in a global reference
112.1127 -\textit{Unsynchronized.ref}, which causes principal conflicts with
112.1128 -Isabelle's asynchronous document model~\cite{Wenzel-11:doc-orient} and
112.1129 -parallel execution~\cite{Makarius-09:parall-proof} and is under
112.1130 -reconstruction already.
112.1131 -
112.1132 -\textit{prep\_specification:} translates the specification to an internal format
112.1133 -which allows efficient processing; see for instance line {\rm 07}
112.1134 -below.
112.1135 -\item[03..04] are a unique identifier for the specification within {\sisac}
112.1136 -and the ``mathematics author'' holding the copy-rights.
112.1137 -\item[05] is the Isabelle \textit{theory} required to parse the
112.1138 -specification in lines {\rm 07..10}.
112.1139 -\item[06] is a key into the tree of all specifications as presented to
112.1140 -the user (where some branches might be hidden by the dialogue
112.1141 -component).
112.1142 -\item[07..10] are the specification with input, pre-condition, output
112.1143 -and post-condition respectively; note that the specification contains
112.1144 -variables to be instantiated with concrete values for a concrete problem ---
112.1145 -thus the specification actually captures a class of problems. The post-condition is not handled in
112.1146 -the prototype presently.
112.1147 -\item[11] is a rule-set (defined elsewhere) for evaluation of the pre-condition: \textit{(rhs X\_eq) is\_continuous\_in D}, instantiated with the values of a concrete problem, evaluates to true or false --- and all evaluation is done by
112.1148 -rewriting determined by rule-sets.
112.1149 -\item[12]\textit{NONE:} could be \textit{SOME ``solve ...''} for a
112.1150 -problem associated to a function from Computer Algebra (like an
112.1151 -equation solver) which is not the case here.
112.1152 -\item[13] is a list of methods solving the specified problem (here
112.1153 -only one list item) represented analogously to {\rm 06}.
112.1154 -\end{description}
112.1155 -
112.1156 -
112.1157 -%WN die folgenden Erkl"arungen finden sich durch "grep -r 'datatype pbt' *"
112.1158 -%WN ...
112.1159 -%  type pbt = 
112.1160 -%     {guh  : guh,         (*unique within this isac-knowledge*)
112.1161 -%      mathauthors: string list, (*copyright*)
112.1162 -%      init  : pblID,      (*to start refinement with*)
112.1163 -%      thy   : theory,     (* which allows to compile that pbt
112.1164 -%			  TODO: search generalized for subthy (ref.p.69*)
112.1165 -%      (*^^^ WN050912 NOT used during application of the problem,
112.1166 -%       because applied terms may be from 'subthy' as well as from super;
112.1167 -%       thus we take 'maxthy'; see match_ags !*)
112.1168 -%      cas   : term option,(*'CAS-command'*)
112.1169 -%      prls  : rls,        (* for preds in where_*)
112.1170 -%      where_: term list,  (* where - predicates*)
112.1171 -%      ppc   : pat list,
112.1172 -%      (*this is the model-pattern; 
112.1173 -%       it contains "#Given","#Where","#Find","#Relate"-patterns
112.1174 -%       for constraints on identifiers see "fun cpy_nam"*)
112.1175 -%      met   : metID list}; (* methods solving the pbt*)
112.1176 -%
112.1177 -%WN weil dieser Code sehr unaufger"aumt ist, habe ich die Erkl"arungen
112.1178 -%WN oben selbst geschrieben.
112.1179 -
112.1180 -
112.1181 -
112.1182 -
112.1183 -%WN das w"urde ich in \sec\label{progr} verschieben und
112.1184 -%WN das SubProblem partial fractions zum Erkl"aren verwenden.
112.1185 -% Such a specification is checked before the execution of a program is
112.1186 -% started, the same applies for sub-programs. In the following example
112.1187 -% (Example~\ref{eg:subprob}) shows the call of such a subproblem:
112.1188 -% 
112.1189 -% \vbox{
112.1190 -%   \begin{example}
112.1191 -%   \label{eg:subprob}
112.1192 -%   \hfill \\
112.1193 -%   {\ttfamily \begin{tabbing}
112.1194 -%   ``(L\_L::bool list) = (\=SubProblem (\=Test','' \\
112.1195 -%   ``\>\>[linear,univariate,equation,test],'' \\
112.1196 -%   ``\>\>[Test,solve\_linear])'' \\
112.1197 -%   ``\>[BOOL equ, REAL z])'' \\
112.1198 -%   \end{tabbing}
112.1199 -%   }
112.1200 -%   {\small\textit{
112.1201 -%     \noindent If a program requires a result which has to be
112.1202 -% calculated first we can use a subproblem to do so. In our specific
112.1203 -% case we wanted to calculate the zeros of a fraction and used a
112.1204 -% subproblem to calculate the zeros of the denominator polynom.
112.1205 -%     }}
112.1206 -%   \end{example}
112.1207 -% }
112.1208 -
112.1209 -\subsection{Implementation of the Method}\label{meth}
112.1210 -A method collects all data required to interpret a certain program by
112.1211 -Lucas-Interpretation. The \texttt{program} from p.\pageref{s:impl} of
112.1212 -the running example is embedded on the last line in the following method:
112.1213 -%The methods represent the different ways a problem can be solved. This can
112.1214 -%include mathematical tactics as well as tactics taught in different courses.
112.1215 -%Declaring the Method itself gives us the possibilities to describe the way of 
112.1216 -%calculation in deep, as well we get the oppertunities to build in different
112.1217 -%rulesets.
112.1218 -
112.1219 -{\footnotesize
112.1220 -\begin{verbatim}
112.1221 -   00 ML {*
112.1222 -   01  store_method
112.1223 -   02    (prep_method
112.1224 -   03      "SP_InverseZTransformation_classic" 
112.1225 -   04      ["Jan Rocnik"]
112.1226 -   05      thy 
112.1227 -   06      ( ["SignalProcessing", "Z_Transform", "Inverse"], 
112.1228 -   07        [ ("#Given", ["filterExpression X_eq", "domain D"]),
112.1229 -   08          ("#Pre"  , ["(rhs X_eq) is_continuous_in D"]),
112.1230 -   09          ("#Find" , ["stepResponse n_eq"]),
112.1231 -   10        rew_ord  erls
112.1232 -   11        srls  prls  nrls
112.1233 -   12        errpats 
112.1234 -   13        program);
112.1235 -   14 *}
112.1236 -\end{verbatim}}
112.1237 -
112.1238 -\noindent The above code stores the whole structure analogously to a
112.1239 -specification as described above:
112.1240 -\begin{description}
112.1241 -\item[01..06] are identical to those for the example specification on
112.1242 -p.\pageref{exp-spec}.
112.1243 -
112.1244 -\item[07..09] show something looking like the specification; this is a
112.1245 -{\em guard}: as long as not all \textit{Given} items are present and
112.1246 -the \textit{Pre}-conditions is not true, interpretation of the program
112.1247 -is not started.
112.1248 -
112.1249 -\item[10..11] all concern rewriting (the respective data are defined elsewhere): \textit{rew\_ord} is the rewrite order~\cite{nipk:rew-all-that} in case
112.1250 -\textit{program} contains a \textit{Rewrite} tactic; and in case the respective rule is a conditional rewrite-rule, \textit{erls} features evaluating the conditions. The rule-sets 
112.1251 -\textit{srls, prls, nrls} feature evaluating (a) the ML-functions in the program (e.g.
112.1252 -\textit{lhs, argument\_in, rhs} in the program on p.\pageref{s:impl}, (b) the pre-condition analogous to the specification in line 11 on p.\pageref{exp-spec}
112.1253 -and (c) is required for the derivation-machinery checking user-input formulas.
112.1254 -
112.1255 -\item[12..13] \textit{errpats} are error-patterns~\cite{gdaroczy-EP-13} for this method and \textit{program} is the variable holding the example from p.\pageref {s:impl}.
112.1256 -\end{description}
112.1257 -The many rule-sets above cause considerable efforts for the
112.1258 -programmers, in particular, because there are no tools for checking
112.1259 -essential features of rule-sets.
112.1260 -
112.1261 -% is again very technical and goes hard in detail. Unfortunataly
112.1262 -% most declerations are not essential for a basic programm but leads us to a huge
112.1263 -% range of powerful possibilities.
112.1264 -% 
112.1265 -% \begin{description}
112.1266 -% \item[01..02] stores the method with the given name into the system under a global
112.1267 -% reference.
112.1268 -% \item[03] specifies the topic within which context the method can be found.
112.1269 -% \item[04..05] as the requirements for different methods can be deviant we 
112.1270 -% declare what is \emph{given} and and what to \emph{find} for this specific method.
112.1271 -% The code again helds on the topic of the case studie, where the inverse 
112.1272 -% z-transformation does a switch between a term describing a electrical filter into
112.1273 -% its step response. Also the datatype has to be declared (bool - due the fact that 
112.1274 -% we handle equations).
112.1275 -% \item[06] \emph{rewrite order} is the order of this rls (ruleset), where one 
112.1276 -% theorem of it is used for rewriting one single step.
112.1277 -% \item[07] \texttt{rls} is the currently used ruleset for this method. This set
112.1278 -% has already been defined before.
112.1279 -% \item[08] we would have the possiblitiy to add this method to a predefined tree of
112.1280 -% calculations, i.eg. if it would be a sub of a bigger problem, here we leave it
112.1281 -% independend.
112.1282 -% \item[09] The \emph{source ruleset}, can be used to evaluate list expressions in 
112.1283 -% the source.
112.1284 -% \item[10] \emph{predicates ruleset} can be used to indicates predicates within 
112.1285 -% model patterns.
112.1286 -% \item[11] The \emph{check ruleset} summarizes rules for checking formulas 
112.1287 -% elementwise.
112.1288 -% \item[12] \emph{error patterns} which are expected in this kind of method can be
112.1289 -% pre-specified to recognize them during the method.
112.1290 -% \item[13] finally the \emph{canonical ruleset}, declares the canonical simplifier 
112.1291 -% of the specific method.
112.1292 -% \item[14] for this code snipset we don't specify the programm itself and keep it 
112.1293 -% empty. Follow up \S\ref{progr} for informations on how to implement this
112.1294 -% \textit{main} part.
112.1295 -% \end{description}
112.1296 -
112.1297 -\subsection{Implementation of the TP-based Program}\label{progr} 
112.1298 -So finally all the prerequisites are described and the final task can
112.1299 -be addressed. The program below comes back to the running example: it
112.1300 -computes a solution for the problem from Fig.\ref{fig-interactive} on
112.1301 -p.\pageref{fig-interactive}. The reader is reminded of
112.1302 -\S\ref{PL-isab}, the introduction of the programming language:
112.1303 -
112.1304 -{\footnotesize\it\label{s:impl}
112.1305 -\begin{tabbing}
112.1306 -123l\=123\=123\=123\=123\=123\=123\=((x\=123\=(x \=123\=123\=\kill
112.1307 -\>{\rm 00}\>ML \{*\\
112.1308 -\>{\rm 00}\>val program =\\
112.1309 -\>{\rm 01}\>  "{\tt Program} InverseZTransform (X\_eq::bool) =   \\
112.1310 -\>{\rm 02}\>\>  {\tt let}                                       \\
112.1311 -\>{\rm 03}\>\>\>  X\_eq = {\tt Take} X\_eq ;   \\
112.1312 -\>{\rm 04}\>\>\>  X\_eq = {\tt Rewrite} prep\_for\_part\_frac X\_eq ; \\
112.1313 -\>{\rm 05}\>\>\>  (X\_z::real) = lhs X\_eq ;       \\ %no inside-out evaluation
112.1314 -\>{\rm 06}\>\>\>  (z::real) = argument\_in X\_z; \\
112.1315 -\>{\rm 07}\>\>\>  (part\_frac::real) = {\tt SubProblem} \\
112.1316 -\>{\rm 08}\>\>\>\>\>\>\>\>  ( Isac, [partial\_fraction, rational, simplification], [] )\\
112.1317 -%\>{\rm 10}\>\>\>\>\>\>\>\>\>  [simplification, of\_rationals, to\_partial\_fraction] ) \\
112.1318 -\>{\rm 09}\>\>\>\>\>\>\>\>  [ (rhs X\_eq)::real, z::real ]; \\
112.1319 -\>{\rm 10}\>\>\>  (X'\_eq::bool) = {\tt Take} ((X'::real =$>$ bool) z = ZZ\_1 part\_frac) ; \\
112.1320 -\>{\rm 11}\>\>\>  X'\_eq = (({\tt Rewrite\_Set} prep\_for\_inverse\_z) @@   \\
112.1321 -\>{\rm 12}\>\>\>\>\>  $\;\;$ ({\tt Rewrite\_Set} inverse\_z)) X'\_eq \\
112.1322 -\>{\rm 13}\>\>  {\tt in } \\
112.1323 -\>{\rm 14}\>\>\>  X'\_eq"\\
112.1324 -\>{\rm 15}\>*\}
112.1325 -\end{tabbing}}
112.1326 -% ORIGINAL FROM Inverse_Z_Transform.thy
112.1327 -% "Script InverseZTransform (X_eq::bool) =            "^(*([], Frm), Problem (Isac, [Inverse, Z_Transform, SignalProcessing])*)
112.1328 -% "(let X = Take X_eq;                                "^(*([1], Frm), X z = 3 / (z - 1 / 4 + -1 / 8 * (1 / z))*)
112.1329 -% "  X' = Rewrite ruleZY False X;                     "^(*([1], Res), ?X' z = 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
112.1330 -% "  (X'_z::real) = lhs X';                           "^(*            ?X' z*)
112.1331 -% "  (zzz::real) = argument_in X'_z;                  "^(*            z *)
112.1332 -% "  (funterm::real) = rhs X';                        "^(*            3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
112.1333 -%
112.1334 -% "  (pbz::real) = (SubProblem (Isac',                "^(**)
112.1335 -% "    [partial_fraction,rational,simplification],    "^
112.1336 -% "    [simplification,of_rationals,to_partial_fraction]) "^
112.1337 -% "    [REAL funterm, REAL zzz]);                     "^(*([2], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
112.1338 -%
112.1339 -% "  (pbz_eq::bool) = Take (X'_z = pbz);              "^(*([3], Frm), ?X' z = 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
112.1340 -% "  pbz_eq = Rewrite ruleYZ False pbz_eq;            "^(*([3], Res), ?X' z = 4 * (?z / (z - 1 / 2)) + -4 * (?z / (z - -1 / 4))*)
112.1341 -% "  pbz_eq = drop_questionmarks pbz_eq;              "^(*               4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
112.1342 -% "  (X_zeq::bool) = Take (X_z = rhs pbz_eq);         "^(*([4], Frm), X_z = 4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
112.1343 -% "  n_eq = (Rewrite_Set inverse_z False) X_zeq;      "^(*([4], Res), X_z = 4 * (1 / 2) ^^^ ?n * ?u [?n] + -4 * (-1 / 4) ^^^ ?n * ?u [?n]*)
112.1344 -% "  n_eq = drop_questionmarks n_eq                   "^(*            X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
112.1345 -% "in n_eq)"                                            (*([], Res), X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
112.1346 -The program is represented as a string and part of the method in
112.1347 -\S\ref{meth}.  As mentioned in \S\ref{PL} the program is purely
112.1348 -functional and lacks any input statements and output statements. So
112.1349 -the steps of calculation towards a solution (and interactive tutoring
112.1350 -in step-wise problem solving) are created as a side-effect by
112.1351 -Lucas-Interpretation.  The side-effects are triggered by the tactics
112.1352 -\texttt{Take}, \texttt{Rewrite}, \texttt{SubProblem} and
112.1353 -\texttt{Rewrite\_Set} in the above lines {\rm 03, 04, 07, 10, 11} and
112.1354 -{\rm 12} respectively. These tactics produce the respective lines in the
112.1355 -calculation on p.\pageref{flow-impl}.
112.1356 -
112.1357 -The above lines {\rm 05, 06} do not contain a tactics, so they do not
112.1358 -immediately contribute to the calculation on p.\pageref{flow-impl};
112.1359 -rather, they compute actual arguments for the \texttt{SubProblem} in
112.1360 -line {\rm 09}~\footnote{The tactics also are break-points for the
112.1361 -interpreter, where control is handed over to the user in interactive
112.1362 -tutoring.}. Line {\rm 11} contains tactical \textit{@@}.
112.1363 -
112.1364 -\medskip The above program also indicates the dominant role of interactive
112.1365 -selection of knowledge in the three-dimensional universe of
112.1366 -mathematics. The \texttt{SubProblem} in the above lines
112.1367 -{\rm 07..09} is more than a function call with the actual arguments
112.1368 -\textit{[ (rhs X\_eq)::real, z::real ]}. The programmer has to determine
112.1369 -three items:
112.1370 -
112.1371 -\begin{enumerate}
112.1372 -\item the theory, in the example \textit{Isac} because different
112.1373 -methods can be selected in Pt.3 below, which are defined in different
112.1374 -theories with \textit{Isac} collecting them.
112.1375 -\item the specification identified by \textit{[partial\_fraction,
112.1376 -rational, simplification]} in the tree of specifications; this
112.1377 -specification is analogous to the specification of the main program
112.1378 -described in \S\ref{spec}; the problem is to find a ``partial fraction
112.1379 -decomposition'' for a univariate rational polynomial.
112.1380 -\item the method in the above example is \textit{[ ]}, i.e. empty,
112.1381 -which supposes the interpreter to select one of the methods predefined
112.1382 -in the specification, for instance in line {\rm 13} in the running
112.1383 -example's specification on p.\pageref{exp-spec}~\footnote{The freedom
112.1384 -(or obligation) for selection carries over to the student in
112.1385 -interactive tutoring.}.
112.1386 -\end{enumerate}
112.1387 -
112.1388 -The program code, above presented as a string, is parsed by Isabelle's
112.1389 -parser --- the program is an Isabelle term. This fact is expected to
112.1390 -simplify verification tasks in the future; on the other hand, this
112.1391 -fact causes troubles in error detection which are discussed as part
112.1392 -of the work-flow in the subsequent section.
112.1393 -
112.1394 -\section{Work-flow of Programming in the Prototype}\label{workflow}
112.1395 -The new prover IDE Isabelle/jEdit~\cite{makar-jedit-12} is a great
112.1396 -step forward for interactive theory and proof development. The
112.1397 -{\sisac}-prototype re-uses this IDE as a programming environment.  The
112.1398 -experiences from this re-use show, that the essential components are
112.1399 -available from Isabelle/jEdit. However, additional tools and features
112.1400 -are required to achieve acceptable usability.
112.1401 -
112.1402 -So notable experiences are reported here, also as a requirement
112.1403 -capture for further development of TP-based languages and respective
112.1404 -IDEs.
112.1405 -
112.1406 -\subsection{Preparations and Trials}\label{flow-prep}
112.1407 -The many sub-tasks to be accomplished {\em before} the first line of
112.1408 -program code can be written and tested suggest an approach which
112.1409 -step-wise establishes the prerequisites. The case study underlying
112.1410 -this paper~\cite{jrocnik-bakk} documents the approach in a separate
112.1411 -Isabelle theory,
112.1412 -\textit{Build\_Inverse\_Z\_Transform.thy}~\footnote{http://www.ist.tugraz.at/projects/isac/publ/Build\_Inverse\_Z\_Transform.thy}. Part
112.1413 -II in the study comprises this theory, \LaTeX ed from the theory by
112.1414 -use of Isabelle's document preparation system. This paper resembles
112.1415 -the approach in \S\ref{isabisac} to \S\ref{meth}, which in actual
112.1416 -implementation work involves several iterations.
112.1417 -
112.1418 -\bigskip For instance, only the last step, implementing the program
112.1419 -described in \S\ref{meth}, reveals details required. Let us assume,
112.1420 -this is the ML-function \textit{argument\_in} required in line {\rm 06}
112.1421 -of the example program on p.\pageref{s:impl}; how this function needs
112.1422 -to be implemented in the prototype has been discussed in \S\ref{funs}
112.1423 -already.
112.1424 -
112.1425 -Now let us assume, that calling this function from the program code
112.1426 -does not work; so testing this function is required in order to find out
112.1427 -the reason: type errors, a missing entry of the function somewhere or
112.1428 -even more nasty technicalities \dots
112.1429 -
112.1430 -{\footnotesize
112.1431 -\begin{verbatim}
112.1432 -01   ML {*
112.1433 -02     val SOME t = parseNEW ctxt "argument_in (X (z::real))";
112.1434 -03     val SOME (str, t') = eval_argument_in "" 
112.1435 -04       "Build_Inverse_Z_Transform.argument'_in" t 0;
112.1436 -05     term2str t';
112.1437 -06   *}
112.1438 -07   val it = "(argument_in X z) = z": string\end{verbatim}}
112.1439 -
112.1440 -\noindent So, this works: we get an ad-hoc theorem, which used in
112.1441 -rewriting would reduce \texttt{argument\_in X z} to \texttt{z}. Now we check this
112.1442 -reduction and create a rule-set \texttt{rls} for that purpose:
112.1443 -
112.1444 -{\footnotesize
112.1445 -\begin{verbatim}
112.1446 -01   ML {*
112.1447 -02     val rls = append_rls "test" e_rls 
112.1448 -03       [Calc ("Build_Inverse_Z_Transform.argument'_in", eval_argument_in "")]
112.1449 -04     val SOME (t', asm) = rewrite_set_ @{theory} rls t;
112.1450 -05   *}
112.1451 -06   val t' = Free ("z", "RealDef.real"): term
112.1452 -07   val asm = []: term list\end{verbatim}}
112.1453 -
112.1454 -\noindent The resulting term \texttt{t'} is \texttt{Free ("z",
112.1455 -"RealDef.real")}, i.e the variable \texttt{z}, so all is
112.1456 -perfect. Probably we have forgotten to store this function correctly~?
112.1457 -We review the respective \texttt{calclist} (again an
112.1458 -\textit{Unsynchronized.ref} to be removed in order to adjust to
112.1459 -Isabelle/Isar's asynchronous document model):
112.1460 -
112.1461 -{\footnotesize
112.1462 -\begin{verbatim}
112.1463 -01   calclist:= overwritel (! calclist, 
112.1464 -02    [("argument_in",
112.1465 -03     ("Build_Inverse_Z_Transform.argument'_in", eval_argument_in "")),
112.1466 -04       ...
112.1467 -05    ]);\end{verbatim}}
112.1468 -
112.1469 -\noindent The entry is perfect. So what is the reason~? Ah, probably there
112.1470 -is something messed up with the many rule-sets in the method, see \S\ref{meth} ---
112.1471 -right, the function \texttt{argument\_in} is not contained in the respective
112.1472 -rule-set \textit{srls} \dots this just as an example of the intricacies in
112.1473 -debugging a program in the present state of the prototype.
112.1474 -
112.1475 -\subsection{Implementation in Isabelle/{\isac}}\label{flow-impl}
112.1476 -Given all the prerequisites from \S\ref{isabisac} to \S\ref{meth},
112.1477 -usually developed within several iterations, the program can be
112.1478 -assembled; on p.\pageref{s:impl} there is the complete program of the
112.1479 -running example.
112.1480 -
112.1481 -The completion of this program required efforts for several weeks
112.1482 -(after some months of familiarisation with {\sisac}), caused by the
112.1483 -abundance of intricacies indicated above. Also writing the program is
112.1484 -not pleasant, given Isabelle/Isar/ without add-ons for
112.1485 -programming. Already writing and parsing a few lines of program code
112.1486 -is a challenge: the program is an Isabelle term; Isabelle's parser,
112.1487 -however, is not meant for huge terms like the program of the running
112.1488 -example. So reading out the specific error (usually type errors) from
112.1489 -Isabelle's message is difficult.
112.1490 -
112.1491 -\medskip Testing the evaluation of the program has to rely on very
112.1492 -simple tools. Step-wise execution is modeled by a function
112.1493 -\texttt{me}, short for mathematics-engine~\footnote{The interface used
112.1494 -by the front-end which created the calculation on
112.1495 -p.\pageref{fig-interactive} is different from this function}:
112.1496 -%the following is a simplification of the actual function 
112.1497 -
112.1498 -{\footnotesize
112.1499 -\begin{verbatim}
112.1500 -01   ML {* me; *}
112.1501 -02   val it = tac -> ctree * pos -> mout * tac * ctree * pos\end{verbatim}} 
112.1502 -
112.1503 -\noindent This function takes as arguments a tactic \texttt{tac} which
112.1504 -determines the next step, the step applied to the interpreter-state
112.1505 -\texttt{ctree * pos} as last argument taken. The interpreter-state is
112.1506 -a pair of a tree \texttt{ctree} representing the calculation created
112.1507 -(see the example below) and a position \texttt{pos} in the
112.1508 -calculation. The function delivers a quadruple, beginning with the new
112.1509 -formula \texttt{mout} and the next tactic followed by the new
112.1510 -interpreter-state.
112.1511 -
112.1512 -This function allows to stepwise check the program:
112.1513 -
112.1514 -{\footnotesize\label{ml-check-program}
112.1515 -\begin{verbatim}
112.1516 -01   ML {*
112.1517 -02     val fmz =
112.1518 -03       ["filterExpression (X z = 3 / ((z::real) + 1/10 - 1/50*(1/z)))",
112.1519 -04        "stepResponse (x[n::real]::bool)"];     
112.1520 -05     val (dI,pI,mI) =
112.1521 -06       ("Isac", 
112.1522 -07        ["Inverse", "Z_Transform", "SignalProcessing"], 
112.1523 -08        ["SignalProcessing","Z_Transform","Inverse"]);
112.1524 -09     val (mout, tac, ctree, pos)  = CalcTreeTEST [(fmz, (dI, pI, mI))];
112.1525 -10     val (mout, tac, ctree, pos)  = me tac (ctree, pos);
112.1526 -11     val (mout, tac, ctree, pos)  = me tac (ctree, pos);
112.1527 -12     val (mout, tac, ctree, pos)  = me tac (ctree, pos);
112.1528 -13     ...
112.1529 -\end{verbatim}} 
112.1530 -
112.1531 -\noindent Several dozens of calls for \texttt{me} are required to
112.1532 -create the lines in the calculation below (including the sub-problems
112.1533 -not shown). When an error occurs, the reason might be located
112.1534 -many steps before: if evaluation by rewriting, as done by the prototype,
112.1535 -fails, then first nothing happens --- the effects come later and
112.1536 -cause unpleasant checks.
112.1537 -
112.1538 -The checks comprise watching the rewrite-engine for many different
112.1539 -kinds of rule-sets (see \S\ref{meth}), the interpreter-state, in
112.1540 -particular the environment and the context at the states position ---
112.1541 -all checks have to rely on simple functions accessing the
112.1542 -\texttt{ctree}. So getting the calculation below (which resembles the
112.1543 -calculation in Fig.\ref{fig-interactive} on p.\pageref{fig-interactive})
112.1544 -is the result of several weeks of development:
112.1545 -
112.1546 -{\small\it\label{exp-calc}
112.1547 -\begin{tabbing}
112.1548 -123l\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=\kill
112.1549 -\>{\rm 01}\> $\bullet$  \> {\tt Problem } (Inverse\_Z\_Transform, [Inverse, Z\_Transform, SignalProcessing])       \`\\
112.1550 -\>{\rm 02}\>\> $\vdash\;\;X z = \frac{3}{z - \frac{1}{4} - \frac{1}{8} \cdot z^{-1}}$       \`{\footnotesize {\tt Take} X\_eq}\\
112.1551 -\>{\rm 03}\>\> $X z = \frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}$          \`{\footnotesize {\tt Rewrite} prep\_for\_part\_frac X\_eq}\\
112.1552 -\>{\rm 04}\>\> $\bullet$\> {\tt Problem } [partial\_fraction,rational,simplification]        \`{\footnotesize {\tt SubProblem} \dots}\\
112.1553 -\>{\rm 05}\>\>\>  $\vdash\;\;\frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}=$    \`- - -\\
112.1554 -\>{\rm 06}\>\>\>  $\frac{24}{-1 + -2 \cdot z + 8 \cdot z^2}$                                   \`- - -\\
112.1555 -\>{\rm 07}\>\>\>  $\bullet$\> solve ($-1 + -2 \cdot z + 8 \cdot z^2,\;z$ )                      \`- - -\\
112.1556 -\>{\rm 08}\>\>\>\>   $\vdash$ \> $\frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}=0$ \`- - -\\
112.1557 -\>{\rm 09}\>\>\>\>   $z = \frac{2+\sqrt{-4+8}}{16}\;\lor\;z = \frac{2-\sqrt{-4+8}}{16}$           \`- - -\\
112.1558 -\>{\rm 10}\>\>\>\>   $z = \frac{1}{2}\;\lor\;z =$ \_\_\_                                           \`- - -\\
112.1559 -\>        \>\>\>\>   \_\_\_                                                                        \`- - -\\
112.1560 -\>{\rm 11}\>\> \dots\> $\frac{4}{z - \frac{1}{2}} + \frac{-4}{z - \frac{-1}{4}}$                   \`\\
112.1561 -\>{\rm 12}\>\> $X^\prime z = {\cal z}^{-1} (\frac{4}{z - \frac{1}{2}} + \frac{-4}{z - \frac{-1}{4}})$ \`{\footnotesize {\tt Take} ((X'::real =$>$ bool) z = ZZ\_1 part\_frac)}\\
112.1562 -\>{\rm 13}\>\> $X^\prime z = {\cal z}^{-1} (4\cdot\frac{z}{z - \frac{1}{2}} + -4\cdot\frac{z}{z - \frac{-1}{4}})$ \`{\footnotesize{\tt Rewrite\_Set} prep\_for\_inverse\_z X'\_eq }\\
112.1563 -\>{\rm 14}\>\> $X^\prime z = 4\cdot(\frac{1}{2})^n \cdot u [n] + -4\cdot(\frac{-1}{4})^n \cdot u [n]$  \`{\footnotesize {\tt Rewrite\_Set} inverse\_z X'\_eq}\\
112.1564 -\>{\rm 15}\> \dots\> $X^\prime z = 4\cdot(\frac{1}{2})^n \cdot u [n] + -4\cdot(\frac{-1}{4})^n \cdot u [n]$ \`{\footnotesize {\tt Check\_Postcond}}
112.1565 -\end{tabbing}}
112.1566 -The tactics on the right margin of the above calculation are those in
112.1567 -the program on p.\pageref{s:impl} which create the respective formulas
112.1568 -on the left.
112.1569 -% ORIGINAL FROM Inverse_Z_Transform.thy
112.1570 -%    "Script InverseZTransform (X_eq::bool) =            "^(*([], Frm), Problem (Isac, [Inverse, Z_Transform, SignalProcessing])*)
112.1571 -%    "(let X = Take X_eq;                                "^(*([1], Frm), X z = 3 / (z - 1 / 4 + -1 / 8 * (1 / z))*)
112.1572 -%    "  X' = Rewrite ruleZY False X;                     "^(*([1], Res), ?X' z = 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
112.1573 -%    "  (X'_z::real) = lhs X';                           "^(*            ?X' z*)
112.1574 -%    "  (zzz::real) = argument_in X'_z;                  "^(*            z *)
112.1575 -%    "  (funterm::real) = rhs X';                        "^(*            3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
112.1576 -% 
112.1577 -%    "  (pbz::real) = (SubProblem (Isac',                "^(**)
112.1578 -%    "    [partial_fraction,rational,simplification],    "^
112.1579 -%    "    [simplification,of_rationals,to_partial_fraction]) "^
112.1580 -%    "    [REAL funterm, REAL zzz]);                     "^(*([2], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
112.1581 -% 
112.1582 -%    "  (pbz_eq::bool) = Take (X'_z = pbz);              "^(*([3], Frm), ?X' z = 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
112.1583 -%    "  pbz_eq = Rewrite ruleYZ False pbz_eq;            "^(*([3], Res), ?X' z = 4 * (?z / (z - 1 / 2)) + -4 * (?z / (z - -1 / 4))*)
112.1584 -%    "  pbz_eq = drop_questionmarks pbz_eq;              "^(*               4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
112.1585 -%    "  (X_zeq::bool) = Take (X_z = rhs pbz_eq);         "^(*([4], Frm), X_z = 4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
112.1586 -%    "  n_eq = (Rewrite_Set inverse_z False) X_zeq;      "^(*([4], Res), X_z = 4 * (1 / 2) ^^^ ?n * ?u [?n] + -4 * (-1 / 4) ^^^ ?n * ?u [?n]*)
112.1587 -%    "  n_eq = drop_questionmarks n_eq                   "^(*            X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
112.1588 -%    "in n_eq)"                                            (*([], Res), X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
112.1589 -
112.1590 -\subsection{Transfer into the Isabelle/{\isac} Knowledge}\label{flow-trans}
112.1591 -Finally \textit{Build\_Inverse\_Z\_Transform.thy} has got the job done
112.1592 -and the knowledge accumulated in it can be distributed to appropriate
112.1593 -theories: the program to \textit{Inverse\_Z\_Transform.thy}, the
112.1594 -sub-problem accomplishing the partial fraction decomposition to
112.1595 -\textit{Partial\_Fractions.thy}. Since there are hacks into Isabelle's
112.1596 -internals, this kind of distribution is not trivial. For instance, the
112.1597 -function \texttt{argument\_in} in \S\ref{funs} explicitly contains a
112.1598 -string with the theory it has been defined in, so this string needs to
112.1599 -be updated from \texttt{Build\_Inverse\_Z\_Transform} to
112.1600 -\texttt{Atools} if that function is transferred to theory
112.1601 -\textit{Atools.thy}.
112.1602 -
112.1603 -In order to obtain the functionality presented in Fig.\ref{fig-interactive} on p.\pageref{fig-interactive} data must be exported from SML-structures to XML.
112.1604 -This process is also rather bare-bones without authoring tools and is
112.1605 -described in detail in the {\sisac} wiki~\footnote{http://www.ist.tugraz.at/isac/index.php/Generate\_representations\_for\_ISAC\_Knowledge}.
112.1606 -
112.1607 -% \newpage
112.1608 -% -------------------------------------------------------------------
112.1609 -% 
112.1610 -% Material, falls noch Platz bleibt ...
112.1611 -% 
112.1612 -% -------------------------------------------------------------------
112.1613 -% 
112.1614 -% 
112.1615 -% \subsubsection{Trials on Notation and Termination}
112.1616 -% 
112.1617 -% \paragraph{Technical notations} are a big problem for our piece of software,
112.1618 -% but the reason for that isn't a fault of the software itself, one of the
112.1619 -% troubles comes out of the fact that different technical subtopics use different
112.1620 -% symbols and notations for a different purpose. The most famous example for such
112.1621 -% a symbol is the complex number $i$ (in cassique math) or $j$ (in technical
112.1622 -% math). In the specific part of signal processing one of this notation issues is
112.1623 -% the use of brackets --- we use round brackets for analoge signals and squared
112.1624 -% brackets for digital samples. Also if there is no problem for us to handle this
112.1625 -% fact, we have to tell the machine what notation leads to wich meaning and that
112.1626 -% this purpose seperation is only valid for this special topic - signal
112.1627 -% processing.
112.1628 -% \subparagraph{In the programming language} itself it is not possible to declare
112.1629 -% fractions, exponents, absolutes and other operators or remarks in a way to make
112.1630 -% them pretty to read; our only posssiblilty were ASCII characters and a handfull
112.1631 -% greek symbols like: $\alpha, \beta, \gamma, \phi,\ldots$.
112.1632 -% \par
112.1633 -% With the upper collected knowledge it is possible to check if we were able to
112.1634 -% donate all required terms and expressions.
112.1635 -% 
112.1636 -% \subsubsection{Definition and Usage of Rules}
112.1637 -% 
112.1638 -% \paragraph{The core} of our implemented problem is the Z-Transformation, due
112.1639 -% the fact that the transformation itself would require higher math which isn't
112.1640 -% yet avaible in our system we decided to choose the way like it is applied in
112.1641 -% labratory and problem classes at our university - by applying transformation
112.1642 -% rules (collected in transformation tables).
112.1643 -% \paragraph{Rules,} in {\sisac{}}'s programming language can be designed by the
112.1644 -% use of axiomatizations like shown in Example~\ref{eg:ruledef}
112.1645 -% 
112.1646 -% \begin{example}
112.1647 -%   \label{eg:ruledef}
112.1648 -%   \hfill\\
112.1649 -%   \begin{verbatim}
112.1650 -%   axiomatization where
112.1651 -%     rule1: ``1 = $\delta$[n]'' and
112.1652 -%     rule2: ``|| z || > 1 ==> z / (z - 1) = u [n]'' and
112.1653 -%     rule3: ``|| z || < 1 ==> z / (z - 1) = -u [-n - 1]''
112.1654 -%   \end{verbatim}
112.1655 -% \end{example}
112.1656 -% 
112.1657 -% This rules can be collected in a ruleset and applied to a given expression as
112.1658 -% follows in Example~\ref{eg:ruleapp}.
112.1659 -% 
112.1660 -% \begin{example}
112.1661 -%   \hfill\\
112.1662 -%   \label{eg:ruleapp}
112.1663 -%   \begin{enumerate}
112.1664 -%   \item Store rules in ruleset:
112.1665 -%   \begin{verbatim}
112.1666 -%   val inverse_Z = append_rls "inverse_Z" e_rls
112.1667 -%     [ Thm ("rule1",num_str @{thm rule1}),
112.1668 -%       Thm ("rule2",num_str @{thm rule2}),
112.1669 -%       Thm ("rule3",num_str @{thm rule3})
112.1670 -%     ];\end{verbatim}
112.1671 -%   \item Define exression:
112.1672 -%   \begin{verbatim}
112.1673 -%   val sample_term = str2term "z/(z-1)+z/(z-</delta>)+1";\end{verbatim}
112.1674 -%   \item Apply ruleset:
112.1675 -%   \begin{verbatim}
112.1676 -%   val SOME (sample_term', asm) = 
112.1677 -%     rewrite_set_ thy true inverse_Z sample_term;\end{verbatim}
112.1678 -%   \end{enumerate}
112.1679 -% \end{example}
112.1680 -% 
112.1681 -% The use of rulesets makes it much easier to develop our designated applications,
112.1682 -% but the programmer has to be careful and patient. When applying rulesets
112.1683 -% two important issues have to be mentionend:
112.1684 -% \subparagraph{How often} the rules have to be applied? In case of
112.1685 -% transformations it is quite clear that we use them once but other fields
112.1686 -% reuqire to apply rules until a special condition is reached (e.g.
112.1687 -% a simplification is finished when there is nothing to be done left).
112.1688 -% \subparagraph{The order} in which rules are applied often takes a big effect
112.1689 -% and has to be evaluated for each purpose once again.
112.1690 -% \par
112.1691 -% In our special case of Signal Processing and the rules defined in
112.1692 -% Example~\ref{eg:ruledef} we have to apply rule~1 first of all to transform all
112.1693 -% constants. After this step has been done it no mather which rule fit's next.
112.1694 -% 
112.1695 -% \subsubsection{Helping Functions}
112.1696 -% 
112.1697 -% \paragraph{New Programms require,} often new ways to get through. This new ways
112.1698 -% means that we handle functions that have not been in use yet, they can be 
112.1699 -% something special and unique for a programm or something famous but unneeded in
112.1700 -% the system yet. In our dedicated example it was for example neccessary to split
112.1701 -% a fraction into numerator and denominator; the creation of such function and
112.1702 -% even others is described in upper Sections~\ref{simp} and \ref{funs}.
112.1703 -% 
112.1704 -% \subsubsection{Trials on equation solving}
112.1705 -% %simple eq and problem with double fractions/negative exponents
112.1706 -% \paragraph{The Inverse Z-Transformation} makes it neccessary to solve
112.1707 -% equations degree one and two. Solving equations in the first degree is no 
112.1708 -% problem, wether for a student nor for our machine; but even second degree
112.1709 -% equations can lead to big troubles. The origin of this troubles leads from
112.1710 -% the build up process of our equation solving functions; they have been
112.1711 -% implemented some time ago and of course they are not as good as we want them to
112.1712 -% be. Wether or not following we only want to show how cruel it is to build up new
112.1713 -% work on not well fundamentials.
112.1714 -% \subparagraph{A simple equation solving,} can be set up as shown in the next
112.1715 -% example:
112.1716 -% 
112.1717 -% \begin{example}
112.1718 -% \begin{verbatim}
112.1719 -%   
112.1720 -%   val fmz =
112.1721 -%     ["equality (-1 + -2 * z + 8 * z ^^^ 2 = (0::real))",
112.1722 -%      "solveFor z",
112.1723 -%      "solutions L"];                                    
112.1724 -% 
112.1725 -%   val (dI',pI',mI') =
112.1726 -%     ("Isac", 
112.1727 -%       ["abcFormula","degree_2","polynomial","univariate","equation"],
112.1728 -%       ["no_met"]);\end{verbatim}
112.1729 -% \end{example}
112.1730 -% 
112.1731 -% Here we want to solve the equation: $-1+-2\cdot z+8\cdot z^{2}=0$. (To give
112.1732 -% a short overview on the commands; at first we set up the equation and tell the
112.1733 -% machine what's the bound variable and where to store the solution. Second step 
112.1734 -% is to define the equation type and determine if we want to use a special method
112.1735 -% to solve this type.) Simple checks tell us that the we will get two results for
112.1736 -% this equation and this results will be real.
112.1737 -% So far it is easy for us and for our machine to solve, but
112.1738 -% mentioned that a unvariate equation second order can have three different types
112.1739 -% of solutions it is getting worth.
112.1740 -% \subparagraph{The solving of} all this types of solutions is not yet supported.
112.1741 -% Luckily it was needed for us; but something which has been needed in this 
112.1742 -% context, would have been the solving of an euation looking like:
112.1743 -% $-z^{-2}+-2\cdot z^{-1}+8=0$ which is basically the same equation as mentioned
112.1744 -% before (remember that befor it was no problem to handle for the machine) but
112.1745 -% now, after a simple equivalent transformation, we are not able to solve
112.1746 -% it anymore.
112.1747 -% \subparagraph{Error messages} we get when we try to solve something like upside
112.1748 -% were very confusing and also leads us to no special hint about a problem.
112.1749 -% \par The fault behind is, that we have no well error handling on one side and
112.1750 -% no sufficient formed equation solving on the other side. This two facts are
112.1751 -% making the implemention of new material very difficult.
112.1752 -% 
112.1753 -% \subsection{Formalization of missing knowledge in Isabelle}
112.1754 -% 
112.1755 -% \paragraph{A problem} behind is the mechanization of mathematic
112.1756 -% theories in TP-bases languages. There is still a huge gap between
112.1757 -% these algorithms and this what we want as a solution - in Example
112.1758 -% Signal Processing. 
112.1759 -% 
112.1760 -% \vbox{
112.1761 -%   \begin{example}
112.1762 -%     \label{eg:gap}
112.1763 -%     \[
112.1764 -%       X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY
112.1765 -%     \]
112.1766 -%     {\small\textit{
112.1767 -%       \noindent A very simple example on this what we call gap is the
112.1768 -% simplification above. It is needles to say that it is correct and also
112.1769 -% Isabelle for fills it correct - \emph{always}. But sometimes we don't
112.1770 -% want expand such terms, sometimes we want another structure of
112.1771 -% them. Think of a problem were we now would need only the coefficients
112.1772 -% of $X$ and $Y$. This is what we call the gap between mechanical
112.1773 -% simplification and the solution.
112.1774 -%     }}
112.1775 -%   \end{example}
112.1776 -% }
112.1777 -% 
112.1778 -% \paragraph{We are not able to fill this gap,} until we have to live
112.1779 -% with it but first have a look on the meaning of this statement:
112.1780 -% Mechanized math starts from mathematical models and \emph{hopefully}
112.1781 -% proceeds to match physics. Academic engineering starts from physics
112.1782 -% (experimentation, measurement) and then proceeds to mathematical
112.1783 -% modeling and formalization. The process from a physical observance to
112.1784 -% a mathematical theory is unavoidable bound of setting up a big
112.1785 -% collection of standards, rules, definition but also exceptions. These
112.1786 -% are the things making mechanization that difficult.
112.1787 -% 
112.1788 -% \vbox{
112.1789 -%   \begin{example}
112.1790 -%     \label{eg:units}
112.1791 -%     \[
112.1792 -%       m,\ kg,\ s,\ldots
112.1793 -%     \]
112.1794 -%     {\small\textit{
112.1795 -%       \noindent Think about some units like that one's above. Behind
112.1796 -% each unit there is a discerning and very accurate definition: One
112.1797 -% Meter is the distance the light travels, in a vacuum, through the time
112.1798 -% of 1 / 299.792.458 second; one kilogram is the weight of a
112.1799 -% platinum-iridium cylinder in paris; and so on. But are these
112.1800 -% definitions usable in a computer mechanized world?!
112.1801 -%     }}
112.1802 -%   \end{example}
112.1803 -% }
112.1804 -% 
112.1805 -% \paragraph{A computer} or a TP-System builds on programs with
112.1806 -% predefined logical rules and does not know any mathematical trick
112.1807 -% (follow up example \ref{eg:trick}) or recipe to walk around difficult
112.1808 -% expressions. 
112.1809 -% 
112.1810 -% \vbox{
112.1811 -%   \begin{example}
112.1812 -%     \label{eg:trick}
112.1813 -%   \[ \frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)= \]
112.1814 -%   \[ \frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=
112.1815 -%      \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}= \]
112.1816 -%   \[ \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} \]
112.1817 -%     {\small\textit{
112.1818 -%       \noindent Sometimes it is also useful to be able to apply some
112.1819 -% \emph{tricks} to get a beautiful and particularly meaningful result,
112.1820 -% which we are able to interpret. But as seen in this example it can be
112.1821 -% hard to find out what operations have to be done to transform a result
112.1822 -% into a meaningful one.
112.1823 -%     }}
112.1824 -%   \end{example}
112.1825 -% }
112.1826 -% 
112.1827 -% \paragraph{The only possibility,} for such a system, is to work
112.1828 -% through its known definitions and stops if none of these
112.1829 -% fits. Specified on Signal Processing or any other application it is
112.1830 -% often possible to walk through by doing simple creases. This creases
112.1831 -% are in general based on simple math operational but the challenge is
112.1832 -% to teach the machine \emph{all}\footnote{Its pride to call it
112.1833 -% \emph{all}.} of them. Unfortunately the goal of TP Isabelle is to
112.1834 -% reach a high level of \emph{all} but it in real it will still be a
112.1835 -% survey of knowledge which links to other knowledge and {{\sisac}{}} a
112.1836 -% trainer and helper but no human compensating calculator. 
112.1837 -% \par
112.1838 -% {{{\sisac}{}}} itself aims to adds \emph{Algorithmic Knowledge} (formal
112.1839 -% specifications of problems out of topics from Signal Processing, etc.)
112.1840 -% and \emph{Application-oriented Knowledge} to the \emph{deductive} axis of
112.1841 -% physical knowledge. The result is a three-dimensional universe of
112.1842 -% mathematics seen in Figure~\ref{fig:mathuni}.
112.1843 -% 
112.1844 -% \begin{figure}
112.1845 -%   \begin{center}
112.1846 -%     \includegraphics{fig/universe}
112.1847 -%     \caption{Didactic ``Math-Universe'': Algorithmic Knowledge (Programs) is
112.1848 -%              combined with Application-oriented Knowledge (Specifications) and Deductive Knowledge (Axioms, Definitions, Theorems). The Result
112.1849 -%              leads to a three dimensional math universe.\label{fig:mathuni}}
112.1850 -%   \end{center}
112.1851 -% \end{figure}
112.1852 -% 
112.1853 -% %WN Deine aktuelle Benennung oben wird Dir kein Fachmann abnehmen;
112.1854 -% %WN bitte folgende Bezeichnungen nehmen:
112.1855 -% %WN 
112.1856 -% %WN axis 1: Algorithmic Knowledge (Programs)
112.1857 -% %WN axis 2: Application-oriented Knowledge (Specifications)
112.1858 -% %WN axis 3: Deductive Knowledge (Axioms, Definitions, Theorems)
112.1859 -% %WN 
112.1860 -% %WN und bitte die R"ander von der Grafik wegschneiden (was ich f"ur *.pdf
112.1861 -% %WN nicht hinkriege --- weshalb ich auch die eJMT-Forderung nicht ganz
112.1862 -% %WN verstehe, separierte PDFs zu schicken; ich w"urde *.png schicken)
112.1863 -% 
112.1864 -% %JR Ränder und beschriftung geändert. Keine Ahnung warum eJMT sich pdf's
112.1865 -% %JR wünschen, würde ebenfalls png oder ähnliches verwenden, aber wenn pdf's
112.1866 -% %JR gefordert werden WN2...
112.1867 -% %WN2 meiner Meinung nach hat sich eJMT unklar ausgedr"uckt (z.B. kann
112.1868 -% %WN2 man meines Wissens pdf-figures nicht auf eine bestimmte Gr"osse
112.1869 -% %WN2 zusammenschneiden um die R"ander weg zu bekommen)
112.1870 -% %WN2 Mein Vorschlag ist, in umserem tex-file bei *.png zu bleiben und
112.1871 -% %WN2 png + pdf figures mitzuschicken.
112.1872 -% 
112.1873 -% \subsection{Notes on Problems with Traditional Notation}
112.1874 -% 
112.1875 -% \paragraph{During research} on these topic severely problems on
112.1876 -% traditional notations have been discovered. Some of them have been
112.1877 -% known in computer science for many years now and are still unsolved,
112.1878 -% one of them aggregates with the so called \emph{Lambda Calculus},
112.1879 -% Example~\ref{eg:lamda} provides a look on the problem that embarrassed
112.1880 -% us.
112.1881 -% 
112.1882 -% \vbox{
112.1883 -%   \begin{example}
112.1884 -%     \label{eg:lamda}
112.1885 -% 
112.1886 -%   \[ f(x)=\ldots\;  \quad R \rightarrow \quad R \]
112.1887 -% 
112.1888 -% 
112.1889 -%   \[ f(p)=\ldots\;  p \in \quad R \]
112.1890 -% 
112.1891 -%     {\small\textit{
112.1892 -%       \noindent Above we see two equations. The first equation aims to
112.1893 -% be a mapping of an function from the reel range to the reel one, but
112.1894 -% when we change only one letter we get the second equation which
112.1895 -% usually aims to insert a reel point $p$ into the reel function. In
112.1896 -% computer science now we have the problem to tell the machine (TP) the
112.1897 -% difference between this two notations. This Problem is called
112.1898 -% \emph{Lambda Calculus}.
112.1899 -%     }}
112.1900 -%   \end{example}
112.1901 -% }
112.1902 -% 
112.1903 -% \paragraph{An other problem} is that terms are not full simplified in
112.1904 -% traditional notations, in {{\sisac}} we have to simplify them complete
112.1905 -% to check weather results are compatible or not. in e.g. the solutions
112.1906 -% of an second order linear equation is an rational in {{\sisac}} but in
112.1907 -% tradition we keep fractions as long as possible and as long as they
112.1908 -% aim to be \textit{beautiful} (1/8, 5/16,...).
112.1909 -% \subparagraph{The math} which should be mechanized in Computer Theorem
112.1910 -% Provers (\emph{TP}) has (almost) a problem with traditional notations
112.1911 -% (predicate calculus) for axioms, definitions, lemmas, theorems as a
112.1912 -% computer program or script is not able to interpret every Greek or
112.1913 -% Latin letter and every Greek, Latin or whatever calculations
112.1914 -% symbol. Also if we would be able to handle these symbols we still have
112.1915 -% a problem to interpret them at all. (Follow up \hbox{Example
112.1916 -% \ref{eg:symbint1}})
112.1917 -% 
112.1918 -% \vbox{
112.1919 -%   \begin{example}
112.1920 -%     \label{eg:symbint1}
112.1921 -%     \[
112.1922 -%       u\left[n\right] \ \ldots \ unitstep
112.1923 -%     \]
112.1924 -%     {\small\textit{
112.1925 -%       \noindent The unitstep is something we need to solve Signal
112.1926 -% Processing problem classes. But in {{{\sisac}{}}} the rectangular
112.1927 -% brackets have a different meaning. So we abuse them for our
112.1928 -% requirements. We get something which is not defined, but usable. The
112.1929 -% Result is syntax only without semantic.
112.1930 -%     }}
112.1931 -%   \end{example}
112.1932 -% }
112.1933 -% 
112.1934 -% In different problems, symbols and letters have different meanings and
112.1935 -% ask for different ways to get through. (Follow up \hbox{Example
112.1936 -% \ref{eg:symbint2}}) 
112.1937 -% 
112.1938 -% \vbox{
112.1939 -%   \begin{example}
112.1940 -%     \label{eg:symbint2}
112.1941 -%     \[
112.1942 -%       \widehat{\ }\ \widehat{\ }\ \widehat{\ } \  \ldots \  exponent
112.1943 -%     \]
112.1944 -%     {\small\textit{
112.1945 -%     \noindent For using exponents the three \texttt{widehat} symbols
112.1946 -% are required. The reason for that is due the development of
112.1947 -% {{{\sisac}{}}} the single \texttt{widehat} and also the double were
112.1948 -% already in use for different operations.
112.1949 -%     }}
112.1950 -%   \end{example}
112.1951 -% }
112.1952 -% 
112.1953 -% \paragraph{Also the output} can be a problem. We are familiar with a
112.1954 -% specified notations and style taught in university but a computer
112.1955 -% program has no knowledge of the form proved by a professor and the
112.1956 -% machines themselves also have not yet the possibilities to print every
112.1957 -% symbol (correct) Recent developments provide proofs in a human
112.1958 -% readable format but according to the fact that there is no money for
112.1959 -% good working formal editors yet, the style is one thing we have to
112.1960 -% live with.
112.1961 -% 
112.1962 -% \section{Problems rising out of the Development Environment}
112.1963 -% 
112.1964 -% fehlermeldungen! TODO
112.1965 -
112.1966 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\end{verbatim}
112.1967 -
112.1968 -\section{Summary and Conclusions}\label{conclusion}
112.1969 -
112.1970 -%JR obvious
112.1971 -
112.1972 -%This paper gives a first experience report about programming with a
112.1973 -%TP-based programming language.
112.1974 -
112.1975 -A brief re-introduction of the novel kind of programming
112.1976 -language by example of the {\sisac}-prototype makes the paper
112.1977 -self-contained. The main section describes all the main concepts
112.1978 -involved in TP-based programming and all the sub-tasks concerning
112.1979 -respective implementation in the {\sisac} prototype: mechanisation of mathematics and domain
112.1980 -modeling, implementation of term rewriting systems for the
112.1981 -rewriting-engine, formal (implicit) specification of the problem to be
112.1982 -(explicitly) described by the program, implementation of the many components
112.1983 -required for Lucas-Interpretation and finally implementation of the
112.1984 -program itself.
112.1985 -
112.1986 -The many concepts and sub-tasks involved in programming require a
112.1987 -comprehensive work-flow; first experiences with the work-flow as
112.1988 -supported by the present prototype are described as well: Isabelle +
112.1989 -Isar + jEdit provide appropriate components for establishing an
112.1990 -efficient development environment integrating computation and
112.1991 -deduction. However, the present state of the prototype is far off a
112.1992 -state appropriate for wide-spread use: the prototype of the program
112.1993 -language lacks expressiveness and elegance, the prototype of the
112.1994 -development environment is hardly usable: error messages still address
112.1995 -the developer of the prototype's interpreter rather than the
112.1996 -application programmer, implementation of the many settings for the
112.1997 -Lucas-Interpreter is cumbersome. 
112.1998 -
112.1999 -\subsection{Conclusions for Future Development}
112.2000 -From the above mentioned experiences a successful proof of concept can be concluded:
112.2001 -programming arbitrary problems from engineering sciences is possible,
112.2002 -in principle even in the prototype. Furthermore the experiences allow
112.2003 -to conclude detailed requirements for further development:
112.2004 -\begin{enumerate}
112.2005 -\item Clarify underlying logics such that programming is smoothly
112.2006 -integrated with verification of the program; the post-condition should
112.2007 -be proved more or less automatically, otherwise working engineers
112.2008 -would not encounter such programming.
112.2009 -\item Combine the prototype's programming language with Isabelle's
112.2010 -powerful function package and probably with more of SML's
112.2011 -pattern-matching features; include parallel execution on multi-core
112.2012 -machines into the language design.
112.2013 -\item Extend the prototype's Lucas-Interpreter such that it also
112.2014 -handles functions defined by use of Isabelle's functions package; and
112.2015 -generalize Isabelle's code generator such that efficient code for the
112.2016 -whole definition of the programming language can be generated (for
112.2017 -multi-core machines).
112.2018 -\item Develop an efficient development environment with
112.2019 -integration of programming and proving, with management not only of
112.2020 -Isabelle theories, but also of large collections of specifications and
112.2021 -of programs.
112.2022 -\item\label{CAS} Extend Isabelle's computational features in direction of
112.2023 -\textit{verfied} Computer Algebra: simplification extended by
112.2024 -algorithms beyond rewriting (cancellation of multivariate rationals,
112.2025 -factorisation, partial fraction decomposition, etc), equation solving
112.2026 -, integration, etc.
112.2027 -\end{enumerate} 
112.2028 -Provided successful accomplishment, these points provide distinguished
112.2029 -components for virtual workbenches appealing to practitioners of
112.2030 -engineering in the near future.
112.2031 -
112.2032 -\subsection{Preview to Development of Course Material}
112.2033 -Interactive course material, as addressed by the title,
112.2034 -can comprise step-wise problem solving created as a side-effect of a
112.2035 -TP-based program: The introduction \S\ref{intro} briefly shows that Lucas-Interpretation not only provides an
112.2036 -interactive programming environment, Lucas-Interpretation also can
112.2037 -provide TP-based services for a flexible dialogue component with
112.2038 -adaptive user guidance for independent and inquiry-based learning.
112.2039 -
112.2040 -However, the {\sisac} prototype is not ready for use in field-tests,
112.2041 -not only due to the above five requirements not sufficiently
112.2042 -accomplished, but also due to usability of the fron-end, in particular
112.2043 -the lack of an editor for formulas in 2-dimension representation.
112.2044 -
112.2045 -Nevertheless, the experiences from the case study described in this
112.2046 -paper, allow to give a preview to the development of course material,
112.2047 -if based on Lucas-Interpretation:
112.2048 -
112.2049 -\paragraph{Development of material from scratch} is too much effort
112.2050 -just for e-learning; this has become clear with the case study.  For
112.2051 -getting support for stepwise problem solving just in {\em one} example
112.2052 -class, the one presented in this paper, involved the following tasks:
112.2053 -\begin{itemize}
112.2054 -\item Adapt the equation solver; since that was too laborous, the
112.2055 -program has been adapted in an unelegant way.
112.2056 -\item Implement an algorithms for partial fraction decomposition,
112.2057 -which is considered a standard normal form in Computer Algebra.
112.2058 -\item Implement a specification for partial fraction decomposition and
112.2059 -locate it appropriately in the hierarchy of specification.
112.2060 -\item Declare definitions and theorems within the theory of
112.2061 -${\cal Z}$-transform, and prove the theorems (which was not done in the
112.2062 -case study).
112.2063 -\end{itemize}
112.2064 -On the other hand, for the one the class of problems implemented,
112.2065 -adding an arbitrary number of examples within this class requires a
112.2066 -few minutes~\footnote{As shown in Fig.\ref{fig-interactive}, an
112.2067 -example is called from an HTML-file by an URL, which addresses an
112.2068 -XML-structure holding the respective data as shown on
112.2069 -p.\pageref{ml-check-program}.} and the support for individual stepwise
112.2070 -problem solving comes for free.
112.2071 -
112.2072 -\paragraph{E-learning benefits from Formal Domain Engineering} which can be
112.2073 -expected for various domains in the near future. In order to cope with
112.2074 -increasing complexity in domain of technology, specific domain
112.2075 -knowledge is beeing mechanised, not only for software technology
112.2076 -\footnote{For instance, the Archive of Formal Proofs
112.2077 -http://afp.sourceforge.net/} but also for other engineering domains
112.2078 -\cite{Dehbonei&94,Hansen94b,db:dom-eng}.  This fairly new part of
112.2079 -engineering sciences is called ``domain engineering'' in
112.2080 -\cite{db:SW-engIII}.
112.2081 -
112.2082 -Given this kind of mechanised knowledge including mathematical
112.2083 -theories, domain specific definitions, specifications and algorithms,
112.2084 -theorems and proofs, then e-learning with support for individual
112.2085 -stepwise problem solving will not be much ado anymore; then e-learning
112.2086 -media in technology education can be derived from this knowledge with
112.2087 -reasonable effort.
112.2088 -
112.2089 -\paragraph{Development differentiates into tasks} more separated than
112.2090 -without Lucas-Interpretation and more challenginging in specific
112.2091 -expertise. These are the kinds of experts expected to cooperate in
112.2092 -development of
112.2093 -\begin{itemize}
112.2094 -\item ``Domain engineers'', who accomplish fairly novel tasks
112.2095 -described in this paper.
112.2096 -\item Course designers, who provide the instructional design according
112.2097 -to curricula, together with usability experts and media designers, are
112.2098 -indispensable in production of e-learning media at the state-of-the
112.2099 -art.
112.2100 -\item ``Dialog designers'', whose part of development is clearly
112.2101 -separated from the part of domain engineers as a consequence of
112.2102 -Lucas-Interpretation: TP-based programs are functional, as mentioned,
112.2103 -and are only concerned with describing mathematics --- and not at all
112.2104 -concerned with interaction, psychology, learning theory and the like,
112.2105 -because there are no in/output statements. Dialog designers can expect
112.2106 -a high-level rule-based language~\cite{gdaroczy-EP-13} for describing
112.2107 -their part.
112.2108 -\end{itemize}
112.2109 -
112.2110 -% response-to-referees:
112.2111 -% (2.1) details of novel technology in order to estimate the impact
112.2112 -% (2.2) which kinds of expertise are required for production of e-learning media (instructional design, math authoring, dialog authoring, media design)
112.2113 -% (2.3) what in particular is required for programming new exercises supported by next-step-guidance (expertise / efforts)
112.2114 -% (2.4) estimation of break-even points for development of next-step-guidance
112.2115 -% (2.5) usability of ISAC prototype at the present state
112.2116 -% 
112.2117 -% The points (1.*) seem to be well covered in the paper, the points (2.*) are not. So I decided to address the points (2.*) in a separate section §5.1."".
112.2118 -
112.2119 -\bigskip\noindent For this decade there seems to be a window of opportunity opening from
112.2120 -one side inreasing demand for formal domain engineering and from the
112.2121 -other side from TP more and more gaining industrial relevance. Within
112.2122 -this window, development of TP-based educational software can take
112.2123 -benefit from the fact, that the TPs leading in Europe, Coq~\cite{coq-team-10} and
112.2124 -Isabelle are still open source together with the major part of
112.2125 -mechanised knowledge.%~\footnote{NICTA}.
112.2126 -
112.2127 -\bibliographystyle{alpha}
112.2128 -{\small\bibliography{references}}
112.2129 -
112.2130 -\end{document}
112.2131 -% LocalWords:  TP IST SPSC Telematics Dialogues dialogue HOL bool nat Hindley
112.2132 -% LocalWords:  Milner tt Subproblem Formulae ruleset generalisation initialised
112.2133 -% LocalWords:  axiomatization LCF Simplifiers simplifiers Isar rew Thm Calc SML
112.2134 -% LocalWords:  recognised hoc Trueprop redexes Unsynchronized pre rhs ord erls
112.2135 -% LocalWords:  srls prls nrls lhs errpats InverseZTransform SubProblem IDE IDEs
112.2136 -% LocalWords:  univariate jEdit rls RealDef calclist familiarisation ons pos eq
112.2137 -% LocalWords:  mout ctree SignalProcessing frac ZZ Postcond Atools wiki SML's
112.2138 -% LocalWords:  mechanisation multi
   113.1 --- a/src/Doc/isac/jrocnik/eJMT-paper/references.bib	Mon Sep 16 12:27:20 2013 +0200
   113.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   113.3 @@ -1,343 +0,0 @@
   113.4 -@Misc{coq-team-10,
   113.5 -  author = 	 {Coq development team},
   113.6 -  title = 	 {Coq 8.3 Reference Manual},
   113.7 -  howpublished = {http://coq.inria.fr/reman},
   113.8 -  year = 	 {2010},
   113.9 -  note = 	 {INRIA}
  113.10 -}
  113.11 -
  113.12 -@Book{db:dom-eng,
  113.13 -  author = 	 {Bj{\o}rner, Dines},
  113.14 -  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
  113.15 -  publisher = 	 {JAIST Press},
  113.16 -  year = 	 {2009},
  113.17 -  month = 	 {Feb},
  113.18 -  series = 	 {COE Research Monograph Series},
  113.19 -  volume = 	 {4},
  113.20 -  address = 	 {Nomi, Japan}
  113.21 -}
  113.22 -
  113.23 -@INPROCEEDINGS{Hansen94b,
  113.24 -  KEY           = "Hansen94",
  113.25 -  AUTHOR        = "Kirsten Mark Hansen",
  113.26 -  EDITOR        = "M. Naftalin, T. Denvir, M. Bertran",
  113.27 -  TITLE         = "Validation of a Railway Interlocking Model",
  113.28 -  BOOKTITLE     = "FME'94: Industrial Benefit of Formal Methods",
  113.29 -  PUBLISHER     = "Springer-Verlag",
  113.30 -  YEAR          = "1994",
  113.31 -  MONTH         = "October",
  113.32 -  PAGES         = "582-601",
  113.33 -  ANNOTE        = "",
  113.34 -  COMMENT       = "PGL has got the proceedings. ADN"
  113.35 -}
  113.36 -
  113.37 -@INPROCEEDINGS{Dehbonei&94,
  113.38 -  KEY           = "Dehbonei\&94",
  113.39 -  AUTHOR        = "Dehbonei, Babak and Mejia, Fernando",
  113.40 -  EDITOR        = "M. Naftalin, T. Denvir, M. Bertran",
  113.41 -  TITLE         = "Formal Methods in the Railways Signalling Industry",
  113.42 -  BOOKTITLE     = "FME'94:Industrial Benefit of Formal Methods",
  113.43 -  PUBLISHER     = "Springer-Verlag",
  113.44 -  YEAR          = "1994",
  113.45 -  MONTH         = "October",
  113.46 -  PAGES         = "26-34",
  113.47 -  ANNOTE        = "",
  113.48 -  COMMENT       = "Peter has got the proceedings. ADN"
  113.49 -}
  113.50 -
  113.51 -@Book{db:SW-engIII,
  113.52 -  author = 	 {Bj{\o}rner, Dines},
  113.53 -  title = 	 {Software Engineering},
  113.54 -  publisher = 	 {Springer},
  113.55 -  year = 	 {2006},
  113.56 -  volume = 	 {3},
  113.57 -  series = 	 {Texts in Theoretical Computer Science},
  113.58 -  address = 	 {Berlin, Heidelberg}
  113.59 -}
  113.60 -
  113.61 -@Book{pl:milner97,
  113.62 -  author = 	 {Robin Milner and Mads Tofte and Robert Harper and David MacQueen},
  113.63 -  title = 	 {The Definition of Standard ML (Revised)},
  113.64 -  publisher = 	 {The MIT Press},
  113.65 -  year = 	 1997,
  113.66 -  address =	 {Cambridge, London},
  113.67 -  annote =	 {97bok375}
  113.68 -}
  113.69 -
  113.70 -@book{nipk:rew-all-that,
  113.71 -        title={Term rewriting and all that}, 
  113.72 -        author={Baader, Franz and Nipkow, Tobias },
  113.73 -        publisher={Cambridge University Press},year={1998}, 
  113.74 -	volume={},series={},address={},edition={},month={}, 
  113.75 -	note={},status={},source={},location={IST} 
  113.76 -        }
  113.77 -
  113.78 -@Misc{jrocnik-bakk,
  113.79 -  author = 	 {Jan Rocnik},
  113.80 -  title = 	 {Interactive Course Material for Signal Processing based on Isabelle/{\isac}},
  113.81 -  howpublished = {Bakkalaureate Thesis},
  113.82 -  year = 	 {2012},
  113.83 -  note = 	 {IST, Graz University of Technology, http://www.ist.tugraz.at/projects/isac/publ/jrocnik\_bakk.pdf}
  113.84 -}
  113.85 -
  113.86 -@book{proakis2004contemporary,
  113.87 -  title={Contemporary communication systems using MATLAB and Simulink},
  113.88 -  author={Proakis, J.G. and Salehi, M. and Bauch, G.},
  113.89 -  isbn={9780534406172},
  113.90 -  lccn={31054410},
  113.91 -  series={BookWare companion series},
  113.92 -  url={http://books.google.at/books?id=5mXGQgAACAAJ},
  113.93 -  year={2004},
  113.94 -  publisher={Thomson--Brooks/Cole}
  113.95 -}
  113.96 -@book{oppenheim2010discrete,
  113.97 -  title={Discrete-time signal processing},
  113.98 -  author={Oppenheim, A.V. and Schafer, R.W.},
  113.99 -  isbn={9780131988422},
 113.100 -  series={Prentice-Hall signal processing series},
 113.101 -  url={http://books.google.at/books?id=mYsoAQAAMAAJ},
 113.102 -  year={2010},
 113.103 -  publisher={Prentice Hall}
 113.104 -}
 113.105 -@manual{wenzel2011system,
 113.106 -	title={The Isabelle System Manual},
 113.107 -	author={Wenzel, M. and Berghofer, S.},
 113.108 -	organization={TU Muenchen},
 113.109 -	year={2011},
 113.110 -	month={January}
 113.111 -}
 113.112 -@Book{Nipkow-Paulson-Wenzel:2002,
 113.113 -  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
 113.114 -  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
 113.115 -  publisher	= {Springer},
 113.116 -  series	= {LNCS},
 113.117 -  volume	= 2283,
 113.118 -  year		= 2002}
 113.119 -@Book{progr-mathematica,
 113.120 -  author = 	 {Maeder, Roman E.},
 113.121 -  title = 	 {Programming in Mathematica},
 113.122 -  publisher = 	 {Addison-Wesley},
 113.123 -  address = 	 {Reading, Mass.},
 113.124 -  year = 	 {1997}
 113.125 -}
 113.126 -@Book{prog-maple06,
 113.127 -  author = 	 {Aladjav, Victor and Bogdevicius, Marijonas},
 113.128 -  title = 	 {Maple: Programming, Physical and Engineering Problems},
 113.129 -  publisher = 	 {Fultus Corporation},
 113.130 -  year = 	 {2006},
 113.131 -  month = 	 {February 27},
 113.132 -  annote = 	 {ISBN: 1596820802}
 113.133 -}
 113.134 -@Article{plmms10,
 113.135 -  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
 113.136 -  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
 113.137 -  journal = 	 {ACM Communications in Computer Algebra},
 113.138 -  year = 	 {2010},
 113.139 -  volume = 	 {44},
 113.140 -  number = 	 {1/2},
 113.141 -  pages = 	 {27-41},
 113.142 -  month = 	 {March/June}
 113.143 -}
 113.144 -@inproceedings{casproto,
 113.145 -  author    = {Cezary Kaliszyk and
 113.146 -               Freek Wiedijk},
 113.147 -  title     = {Certified Computer Algebra on Top of an Interactive Theorem
 113.148 -               Prover},
 113.149 -  booktitle = {Calculemus},
 113.150 -  year      = {2007},
 113.151 -  pages     = {94-105},
 113.152 -  ee        = {http://dx.doi.org/10.1007/978-3-540-73086-6_8},
 113.153 -  crossref  = {DBLP:conf/mkm/2007},
 113.154 -  bibsource = {DBLP, http://dblp.uni-trier.de}
 113.155 -}
 113.156 -@InProceedings{wn:lucas-interp-12,
 113.157 -  author = 	 {Neuper, Walther},
 113.158 -  title = 	 {Automated Generation of User Guidance by Combining Computation and Deduction},
 113.159 -  booktitle = {THedu'11: CTP-compontents for educational software},
 113.160 -  year = 	 {2012},
 113.161 -  editor = 	 {Quaresma, Pedro},
 113.162 -  publisher = {EPTCS},
 113.163 -  note = {To appear}
 113.164 -}
 113.165 -@Manual{Huet_all:94,
 113.166 -  author = 	 {Huet, G. and Kahn, G. and  Paulin-Mohring, C.},
 113.167 -  title = 	 {The Coq Proof Assistant},
 113.168 -  institution =  {INRIA-Rocquencourt},
 113.169 -  year = 	 {1994},
 113.170 -  type = 	 {Tutorial},
 113.171 -  number = 	 {Version 5.10},
 113.172 -  address = 	 {CNRS-ENS Lyon},
 113.173 -  status={},source={Theorema},location={-}
 113.174 -}
 113.175 -@TECHREPORT{Back-SD09,
 113.176 -  author = {Back, Ralph-Johan},
 113.177 -  title = {Structured Derivations as a Unified Proof Style for Teaching Mathematics},
 113.178 -  institution = {TUCS - Turku Centre for Computer Science},
 113.179 -  year = {2009},
 113.180 -  type = {TUCS Technical Report},
 113.181 -  number = {949},
 113.182 -  address = {Turku, Finland},
 113.183 -  month = {July}
 113.184 -}
 113.185 -@InProceedings{ActiveMath-MAIN11,
 113.186 -  author = 	 {Melis, Erica and Siekmann, Jörg},
 113.187 -  title = 	 {An Intelligent Tutoring System for Mathematics},
 113.188 -  booktitle = {Seventh International Conference Artificial Intelligence and Soft Computing (ICAISC)},
 113.189 -  pages = 	 {91-101},
 113.190 -  year = 	 {2004},
 113.191 -  editor = 	 {Rutkowski, L. and Siekmann, J. and Tadeusiewicz, R. and Zadeh, L.A.},
 113.192 -  number = 	 {3070,},
 113.193 -  series = 	 {LNAI},
 113.194 -  publisher = {Springer-Verlag},
 113.195 -  doi =          {doi:10.1007/978-3-540-24844-6\_12}}
 113.196 -@TechReport{mat-tutor-cmu-MAIN11,
 113.197 -  author = 	 {John R. Anderson},
 113.198 -  title = 	 {Intelligent Tutoring and High School Mathematics},
 113.199 -  institution =  {Carnegie Mellon University, Department of Psychology},
 113.200 -  year = 	 {2008},
 113.201 -  type = 	 {Technical Report},
 113.202 -  number = 	 {20},
 113.203 -  note = 	 {http://repository.cmu.edu/psychology/20}
 113.204 -}
 113.205 -@PhdThesis{proof-strategies-11,
 113.206 -  author = 	 {Dietrich, Dominik},
 113.207 -  title = 	 {Proof Planning with Compiled Strategies},
 113.208 -  school = 	 {FR 6.2 Informatik, Saarland University},
 113.209 -  year = 	 {2011}
 113.210 -}
 113.211 -@proceedings{DBLP:conf/mkm/2007,
 113.212 -  editor    = {Manuel Kauers and
 113.213 -               Manfred Kerber and
 113.214 -               Robert Miner and
 113.215 -               Wolfgang Windsteiger},
 113.216 -  title     = {Towards Mechanized Mathematical Assistants, 14th Symposium,
 113.217 -               Calculemus 2007, 6th International Conference, MKM 2007,
 113.218 -               Hagenberg, Austria, June 27-30, 2007, Proceedings},
 113.219 -  booktitle = {Calculemus/MKM},
 113.220 -  publisher = {Springer},
 113.221 -  series    = {Lecture Notes in Computer Science},
 113.222 -  volume    = {4573},
 113.223 -  year      = {2007},
 113.224 -  isbn      = {978-3-540-73083-5},
 113.225 -  bibsource = {DBLP, http://dblp.uni-trier.de}
 113.226 -}
 113.227 -
 113.228 -@InProceedings{gdaroczy-EP-13,
 113.229 -  author = 	 {Gabriella Dar\'{o}czy and Walther Neuper},
 113.230 -  booktitle = {unknown},
 113.231 -  title = 	 {Error-Patterns within ``Next-Step-Guidance'' in TP-based Educational Systems},
 113.232 -  OPTpages = 	 {TODO-TODO},
 113.233 -  crossref =  {eduTPS-12},
 113.234 -  note = {to appear in this publication}
 113.235 -}
 113.236 -
 113.237 -
 113.238 -@Proceedings{eduTPS-12,
 113.239 -  title = 	 {Theorem-Prover based Systems for Education (eduTPS)},
 113.240 -  year = 	 {2013},
 113.241 -  OPTkey = 	 {},
 113.242 -  OPTbooktitle = {},
 113.243 -  OPTeditor = 	 {},
 113.244 -  OPTvolume = 	 {},
 113.245 -  OPTnumber = 	 {},
 113.246 -  OPTseries = 	 {},
 113.247 -  OPTaddress = 	 {},
 113.248 -  OPTmonth = 	 {},
 113.249 -  OPTorganization = {},
 113.250 -  publisher = {The Electronic Journal of Mathematics and Technology},
 113.251 -  note = 	 {to appear},
 113.252 -  OPTannote = 	 {}
 113.253 -}
 113.254 -
 113.255 -@Misc{nipkow-prog-prove,
 113.256 -  author = 	 {Nipkow, Tobias},
 113.257 -  title = 	 {Programming and Proving in {Isabelle/HOL}},
 113.258 -  howpublished = {contained in the Isabelle distribution},
 113.259 -  month = 	 {May 22},
 113.260 -  year = 	 {2012}
 113.261 -}
 113.262 -
 113.263 -@Book{pl:hind97,
 113.264 -  author = 	 {J. Roger Hindley},
 113.265 -  title = 	 {Basic Simple Type Theory},
 113.266 -  publisher = 	 {Cambridge University Press},
 113.267 -  year = 	 1997,
 113.268 -  editor =	 {S. Abramsky and P. H. Aczel and others},
 113.269 -  number =	 42,
 113.270 -  series =	 {Cambridge Tracts in Theoretical Computer Science},
 113.271 -  address =	 {Cambridge},
 113.272 -  annote =	 {97bok308}
 113.273 -}
 113.274 -
 113.275 -@Article{Milner-78,
 113.276 -  author = 	 {Milner, R.},
 113.277 -  title = 	 {A Theory of Type Polymorphism in Programming},
 113.278 -  journal = 	 {Journal of Computer and System Science (JCSS)},
 113.279 -  year = 	 {1978},
 113.280 -  number = 	 {17},
 113.281 -  volume = {0},
 113.282 -  pages = 	 {348-374}
 113.283 -}
 113.284 -
 113.285 -@inproceedings{Wenzel-11:doc-orient,
 113.286 - author = {Wenzel, Makarius},
 113.287 - title = {Isabelle as document-oriented proof assistant},
 113.288 - booktitle = {Proceedings of the 18th Calculemus and 10th international conference on Intelligent computer mathematics},
 113.289 - series = {MKM'11},
 113.290 - year = {2011},
 113.291 - isbn = {978-3-642-22672-4},
 113.292 - location = {Bertinoro, Italy},
 113.293 - pages = {244--259},
 113.294 - numpages = {16},
 113.295 - url = {http://dl.acm.org/citation.cfm?id=2032713.2032732},
 113.296 - acmid = {2032732},
 113.297 - publisher = {Springer-Verlag},
 113.298 - address = {Berlin, Heidelberg},
 113.299 -} 
 113.300 -@InProceedings{makar-jedit-12,
 113.301 -  author = 	 {Makarius Wenzel},
 113.302 -  title = 	 {Isabelle/{jEdit} — a Prover IDE within the {PIDE} framework},
 113.303 -  booktitle = {Conference on Intelligent Computer Mathematics (CICM 2012)},
 113.304 -  year = 	 {2012},
 113.305 -  editor = 	 { J. Jeuring and others},
 113.306 -  number = 	 {7362},
 113.307 -  series = 	 {LNAI},
 113.308 -  publisher = {Springer}
 113.309 -}
 113.310 -
 113.311 -@InProceedings{Makarius-09:parall-proof,
 113.312 -  author = 	 {Wenzel, Makarius},
 113.313 -  title = 	 {Parallel Proof Checking in {Isabelle/Isar}},
 113.314 -  booktitle = {ACM SIGSAM 2009 International Workshop on Programming Languages for Mechanized Mathematics Systems (PLMMS)},
 113.315 -  year = 	 {2009},
 113.316 -  editor = 	 {Dos Reis and L. Th\'ery},
 113.317 -  address = 	 {Munich},
 113.318 -  month = 	 {August},
 113.319 -  publisher = {ACM Digital library}
 113.320 -}
 113.321 -
 113.322 -@Book{fm-03,
 113.323 -  author = 	 {Jean Francois Monin and Michael G. Hinchey},
 113.324 -  title = 	 {Understanding formal methods},
 113.325 -  publisher = 	 {Springer},
 113.326 -  year = 	 {2003}
 113.327 -}
 113.328 -
 113.329 -@misc{wiki:1,
 113.330 -   author = {Wikipedia},
 113.331 -   Title = {Table of common Z-transform pairs},
 113.332 -   year = {2012},
 113.333 -   url = {http://en.wikipedia.org/wiki/Z-transform#Table_of_common_Z-transform_pairs},
 113.334 -   note = {[Online; accessed 31-Oct-2012]}
 113.335 - }
 113.336 -
 113.337 -@InProceedings{kremp.np:assess,
 113.338 -  author = 	 {Krempler, Alan and Neuper, Walther},
 113.339 -  title = 	 {Formative Assessment for User Guidance in Single Stepping Systems},
 113.340 -  booktitle = {Interactive Computer Aided Learning, Proceedings of ICL08},
 113.341 -  year = 	 {2008},
 113.342 -  editor = 	 {Aucher, Michael E.},
 113.343 -  address = 	 {Villach, Austria},
 113.344 -  note = 	 {$\,$\\http://www.ist.tugraz.at/projects/isac/publ/icl08.pdf}
 113.345 -}
 113.346 -
   114.1 --- a/src/Doc/isac/jrocnik/final/jrocnik_bakk.tex	Mon Sep 16 12:27:20 2013 +0200
   114.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   114.3 @@ -1,688 +0,0 @@
   114.4 -%   Title:  bakkarbeit_jrocnik.tex
   114.5 -%   Author: Jan Rocnik
   114.6 -%   (c) copyright due to lincense terms.
   114.7 -%2345678901234567890123456789012345678901234567890123456789012345678901234567890
   114.8 -%       10        20        30        40        50        60        70        80
   114.9 -
  114.10 -%define document class
  114.11 -\documentclass[a4paper, 12pt]{article}
  114.12 -
  114.13 -%packages for language and input
  114.14 -\usepackage[english]{babel} 
  114.15 -\usepackage[T1]{fontenc}
  114.16 -\usepackage[latin1]{inputenc}
  114.17 -
  114.18 -%generel packages
  114.19 -\usepackage{url}
  114.20 -\usepackage{endnotes}
  114.21 -\usepackage{trfsigns}
  114.22 -\usepackage{setspace}
  114.23 -\usepackage[pdfpagelabels]{hyperref}
  114.24 -\usepackage{longtable}
  114.25 -
  114.26 -\usepackage{float} %For restylefloat
  114.27 -\newfloat{example}{ht}{} %self made floats
  114.28 -\floatname{example}{Example} %name for float
  114.29 -\restylefloat{table} %float tables
  114.30 -\floatstyle{ruled} %boxes around floats
  114.31 -\restylefloat{example} %float examples --> boxes
  114.32 -\restylefloat{figure}
  114.33 -
  114.34 -%colors and graphics
  114.35 -\usepackage{graphicx}
  114.36 -\usepackage{color}
  114.37 -\definecolor{lgray}{RGB}{238,238,238}
  114.38 -
  114.39 -%isabelle relevant packages
  114.40 -\usepackage{isabelle,isabellesym}
  114.41 -%\isabellestyle{it}
  114.42 -
  114.43 -%define isac logos
  114.44 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  114.45 -\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  114.46 -
  114.47 -\newcommand{\HRule}{\rule{\linewidth}{0.2mm}}
  114.48 -
  114.49 -%start new even page
  114.50 -\usepackage{ifthen}
  114.51 -\newcommand{\newevenside}{
  114.52 -        \ifthenelse{\isodd{\thepage}}{\newpage}{
  114.53 -        \newpage
  114.54 -        \phantom{placeholder} % doesn't appear on page
  114.55 -        \thispagestyle{empty} % if want no header/footer
  114.56 -        \newpage
  114.57 -        }
  114.58 -}
  114.59 -
  114.60 -%this should be the last package used
  114.61 -%\usepackage{pdfsetup}
  114.62 -
  114.63 -%----------// BEGIN DOCUMENT \\----------%
  114.64 -
  114.65 -\begin{document}
  114.66 -
  114.67 -%----------// TITLE PAGE \\----------%1
  114.68 -
  114.69 -\input{./bakkarbeit_titlepage.tex}
  114.70 -\newpage
  114.71 -
  114.72 -%----------// EMPTY PAGE \\----------%2
  114.73 -
  114.74 -\setcounter{page}{2}
  114.75 -\thispagestyle{empty}\mbox{}\newpage
  114.76 -
  114.77 -%----------// THANKS \\----------%3
  114.78 -
  114.79 -\setcounter{page}{3}
  114.80 -\begin{center}
  114.81 -	Special Thanks to\\
  114.82 -	\hfill \\
  114.83 -	\emph{Dr.techn. Walther Neuper}\\
  114.84 -	\emph{Dipl.-Ing. Bernhard Geiger}
  114.85 -\end{center}
  114.86 -\thispagestyle{empty}
  114.87 -\newpage
  114.88 -
  114.89 -%----------// EMPTY PAGE \\----------%4
  114.90 -
  114.91 -%the following command was replaced by \newevenside
  114.92 -%\thispagestyle{empty}\mbox{}\newpage
  114.93 -
  114.94 -%----------// ABSTRACT \\----------%5
  114.95 -
  114.96 -\newevenside
  114.97 -\begin{abstract}
  114.98 -The Baccalaureate Thesis creates interactivee course material for Signal Processing (SP) based on the experimental educational math assistant Isabelle/{\sisac} ({\em Isa}belle for Transparent {\em C}alculations in Applied Mathematics).
  114.99 -\par The content of the course material is defined together with the Institute for Signal Processing and Speech Communication (SPSC) of Graz University of Technology (TUG). The content is planned to be used in specific lectures and labs of the SPSC and thus is thoroughly concerned with underlying mathematical and physical theory.
 114.100 -One challenge of this thesis is, that much theory required for SPSC is not yet mechanized in Computer Theorem Provers (TP); so this thesis will provide preliminary definitions  and theorems (without proofs~!) implemented in Isabelle \emph{theories}.
 114.101 -\par Another challenge is the implementation of interactivee courses: this is done within the educational math assistant Isabelle/{\sisac}, which is under development at Austrian Universities, one of them TU Graz. The present state of {\sisac{}} happens to provide the {\em first} occasion for authoring by a non-member of the {\sisac}-developer team. So this challenge involves  alpha-testing of the underlying \emph{TP-based programing language}, because error messages are still not user-friendly and need frequent contact with {\sisac}-developers.
 114.102 -So the practical outcome of this thesis is twofold:
 114.103 -\begin{enumerate}
 114.104 -\item Interactive course material hopefully useful in education within the SPSC and within \emph{STEOP}\footnote{German: "`Studieneingangs- und Orientierungsphase"'}, the introductory orientation phase at TUG, as a preview for students in Telematics on later application of math knowledge introduced in the first semester and
 114.105 -\item A detailed description of technicalities in programing implemented as an interactivee Isabelle/Isar theory, providing future programers with guidelines and {\sisac}-developers with feedback in usability of the CTP-based program language. 
 114.106 -\end{enumerate}
 114.107 -\end{abstract}
 114.108 -\clearpage
 114.109 -
 114.110 -%----------// EMPTY PAGE \\----------%6
 114.111 -
 114.112 -%the following command was replaced by \newevenside
 114.113 -%\thispagestyle{empty}\mbox{}\newpage
 114.114 -
 114.115 -%----------// T O C \\----------%7-9
 114.116 -
 114.117 -\newevenside
 114.118 -
 114.119 -\pagenumbering{Roman}
 114.120 -%This thesis is structured into a fundamental part introducing the motivation, the basic notions concerning the thesis aswell as the {\sisac{}} project and describing the mathematic base. Further a automatically generated practical part representing the work on {\sisac{}} which can be extended.
 114.121 -\tableofcontents
 114.122 -\clearpage
 114.123 -\pagenumbering{arabic}
 114.124 -\setcounter{page}{10}
 114.125 -
 114.126 -%----------// PART-1 \\----------%
 114.127 -
 114.128 -\newevenside
 114.129 -
 114.130 -\part{Project Fundamentals}
 114.131 -
 114.132 -\section{Introduction}
 114.133 -Didactics of mathematics faces a specific issue, a gap between (1) introduction of math concepts and skills and (2) application of these concepts and skills, which usually are separated into different units in curricula (for good reasons). For instance, (1) teaching partial fraction decomposition is separated from (2) application for inverse Z-transform in signal processing.
 114.134 -
 114.135 -This gap is an obstacle for applying math as an fundamental thinking technology in engineering: In (1) motivation is lacking because the question ``What is this stuff good for~?'' cannot be treated sufficiently, and in (2) the ``stuff'' is not available to students in higher semesters as widespread experience shows.
 114.136 -
 114.137 -\medskip
 114.138 -Motivated by this didactical issue on the one hand, and ongoing R\&D on a novel kind of educational mathematics assistant at Graz University of Technology~\footnote{http://www.ist.tugraz.at/isac/} promising to cope with this issue on the other hand, several institutes are planning to join their expertise: the Institutes for Institute for Information Systems and Computer Media (IICM), the Institute for Software Technology (IST), the Institutes for Mathematics, the Signal Processing and Speech Communication Institute (SPSC), the Institute for Structural Analysis and the Institute of Electrical Measurement and Measurement Signal Processing.
 114.139 -\par This thesis is the first attempt to tackle the above mentioned issue, it focuses on Telematics, because these specific studies focus on mathematics in \emph{STEOP}, the introductory orientation phase. \emph{STEOP} is considered an opportunity to investigate the impact of {\sisac}'s prototype on the issue and others.
 114.140 -
 114.141 -\medskip
 114.142 -The thesis is structured as follows: Part~I concerns theory and project controlling, Part~II the implementation work, where the latter is the main work, Part~III the resume including summary, open questions and conclusion and the appendixes in Part~IV.
 114.143 -\par In part I, Section~\ref{isabisac} gives a brief description of the state-of-the-art for educational math assistants (Section~\ref{emas}) and introduces the notions required for the implementation work (Section~\ref{math-auth}). In particular, Section~\ref{user-guid} explains, why math authoring in {\sisac{}} is {\em not} concerned with interaction (and thus not with user guidance etc at all~!). So a concise description of the thesis' goals needs to be postponed to Section~\ref{sec:goals}.
 114.144 -\par Section~\ref{sp} analyzes a problems defined by the SPSC for the knowledge already provided (Section~\ref{know-isab}, Section~\ref{know-isac}), discusses the selection of problems for implementation (Section~\ref{know-missing}) TODO: further structure ?
 114.145 -%(\S\ref{})
 114.146 -
 114.147 -\section{Mechanization of Math in Isabelle/ISAC\label{isabisac}}
 114.148 -
 114.149 -%\subsubsection*{Notes on Mechanization of Mathematics}
 114.150 -%This thesis tries to \emph{connect} these two worlds and is one of the first guidelines to implement problem classes in {\sisac}. As we are still in a eary part of development, this is the first thesis dealing within this topic and there is \emph{no} related work to guid through. A more detailed description about this fact can be found in Section \ref{sec:related}.
 114.151 -%The major challenge of the practical part, of this thesis, is, that "connecting the two worlds" involves programing in a CTP-based programing language which is in a very early state of prototyping. There is no concrete experience data ready to grep.
 114.152 -%
 114.153 -As mentioned in the introduction, a prototype of an educational math assistant called {\sisac}\footnote{{\sisac}=\textbf{Isa}belle \cite{Nipkow-Paulson-Wenzel:2002} for \textbf{C}alculations, see http://www.ist.tugraz.at/isac/.} bridges the gap between (1) introducation and (2) application of mathematics: {\sisac} is based on Computer Theorem Proving (TP), a technology which requires each fact and each action justified by formal logic, so {{\sisac{}}} makes justifications transparent to students in interactivee step-wise problem solving. By that way {\sisac} already can serve both:
 114.154 -\begin{enumerate}
 114.155 -\item Introduction of math stuff (in e.g. partial fraction decomposition) by stepwise explaining and exercising respective symbolic calculations with ``next step guidance (NSG)'' and rigorously checking steps freely input by students  --- this also in context with advanced applications (where the stuff to be taught in higher semesters can be skimmed through by NSG), and
 114.156 -\item Application of math stuff in advanced engineering courses (e.g. problems to be solved by inverse Z-transform in a Signal Processing Lab) --- and now without much ado about basic math techniques (like partial fraction decomposition): ``next step guidance'' supports students in independently (re-)adopting such techniques.
 114.157 -\end{enumerate}
 114.158 -Before the question is answers, how {\sisac} accomplishes this task from a technical point of view, some remarks on the state-of-the-art is given, therefor follow up Section~\ref{emas}.
 114.159 -
 114.160 -\subsection{Educational Mathematics Assistants (EMAs)}\label{emas}
 114.161 -Educational software in mathematics is, if at all, based on Computer Algebra Systems (CAS, for instance \cite{progr-mathematica,prog-maple06}), Dynamic Geometry Systems (DGS, for instance \footnote{GeoGebra http://www.geogebra.org, Cinderella http://www.cinderella.de/, GCLC http://poincare.matf.bg.ac.rs/~janicic/gclc/}) or spread-sheets. These base technologies are used to program math lessons and sometimes even exercises. The latter are cumbersome: the steps towards a solution of such an interactivee exercise need to be provided with feedback, where at each step a wide variety of possible input has to be foreseen by the programer --- so such interactivee exercises either require high development efforts or the exercises constrain possible inputs.
 114.162 -
 114.163 -A new generation of educational math assistants (EMAs) is emerging presently, which is based on Theorem Proving (TP). TP, for instance Isabelle \cite{Nipkow-Paulson-Wenzel:2002} and Coq \cite{Huet_all:94}, is a technology which requires each fact and each action justified by formal logic. Pushed by demands for \textit{proven} correctness of safety-critical software TP advances into software engineering; from these advancements computer mathematics benefits in general, and math education in particular. Two features of TP are immediately beneficial for learning:
 114.164 -
 114.165 -\paragraph{TP have knowledge in human readable format,} that is in standard predicate calculus. TP following the LCF-tradition have that knowledge down to the basic definitions of set, equality, etc~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL.html}; following the typical deductive development of math, natural numbers are defined and their properties proven~\footnote{http://isabelle.in.tum.de/dist/library/HOL/Number\_Theory/Primes.html}, etc. Present knowledge mechanized in TP exceeds high-school mathematics by far, however by knowledge required in software technology, and not in other engineering sciences.
 114.166 -
 114.167 -\paragraph{TP can model the whole problem solving process} in mathematical problem solving {\em within} a coherent logical framework. This is already being done by three projects, by Ralph-Johan Back \cite{Back-SD09}, by ActiveMath \cite{ActiveMath-MAIN11} and by Carnegie Mellon Tutor \cite{mat-tutor-cmu-MAIN11}.
 114.168 -
 114.169 -Having the whole problem solving process within a logical coherent system, such a design guarantees correctness of intermediate steps and of the result (which seems essential for math software); and the second advantage is that TP provides a wealth of theories which can be exploited for mechanizing other features essential for educational software.
 114.170 -
 114.171 -\subsection{Generation of User Guidance in EMAs}\label{user-guid}
 114.172 -One essential feature for educational software is feedback to user input and assistance in coming to a solution.
 114.173 -
 114.174 -\paragraph{Checking user input} by ATP during stepwise problem solving is being accomplished by the three projects mentioned above \cite{Back-SD09,ActiveMath-MAIN11,mat-tutor-cmu-MAIN11} exclusively. They model the whole problem solving process as mentioned above, so all what happens between formalized assumptions (or formal specification) and goal (or fulfilled postcondition) can be mechanized. Such mechanization promises to greatly extend the scope of educational software in stepwise problem solving.
 114.175 -
 114.176 -\paragraph{Next step guidance (NSG)} comprises the system's ability to propose a next step; this is a challenge for TP: either a radical restriction of the search space by restriction to very specific problem classes is required, or much care and effort is required in designing possible variants in the process of problem solving \cite{proof-strategies-11}.
 114.177 -
 114.178 -Another approach is restricted to problem solving in engineering domains, where a problem is specified by input, precondition, output and postcondition, and where the postcondition is proven by ATP behind the scenes \cite{wn:lucas-interp-12}: Here the possible variants in the process of problem solving are provided with feedback {\em automatically}, if the problem is described in a TP-based programing language~\cite{plmms10}: the programer only describes the math algorithm without caring about interaction (the respective program is functional and even has no in/output statements~!); interaction is generated as a side-effect by the interpreter --- an efficient separation of concern between math programers and dialog designers promising application all over engineering disciplines.
 114.179 -
 114.180 -
 114.181 -\subsection{Math Authoring in Isabelle/ISAC\label{math-auth}}
 114.182 -Authoring new mathematics knowledge in {\sisac} can be compared with ``application programing'' of engineering problems; most of such programing uses CAS-based programing languages (CAS = Computer Algebra Systems; e.g. Mathematica's \cite{progr-mathematica} or Maple's programing language \cite{prog-maple06}).
 114.183 -
 114.184 -{\sisac}, however, uses a novel type of TP-based language \cite{plmms10} for describing how to construct a solution to an engineering problem and for calling equation solvers, integration, etc~\footnote{Implementation of CAS-like functionality in TP is not primarily concerned with efficiency, but with a didactic question: What to decide for: for high-brow algorithms at the state-of-the-art or for elementary algorithms comprehensible for students~?} within TP; TP can ensure ``systems that never make a mistake'' \cite{casproto} --- are impossible for CAS which have no logics underlying.
 114.185 -
 114.186 -With writing such TP-based programs authoring is perfect, the application programer is not concerned with interaction or with user guidance: this is concern of a novel kind of program interpreter called Lucas-Interpreter \cite{wn:lucas-interp-12}. This interpreter hands over control to a dialog component at each step of calculation (like a debugger at breakpoints) and calls automated TP to check user input following personalized strategies according to a feedback module.
 114.187 -
 114.188 -\medskip
 114.189 -However ``application programing with TP'' is not done with writing a program: according to the principles of TP, each step must be justified. Such justifications are given by theorems. So all steps must be related to some theorem, if there is no such theorem it must be added to the existing knowledge, which is organized in so-called \textbf{theories} in  Isabelle. A theorem must be proven; fortunately Isabelle comprises a mechanism (called ``axiomatization''), which allows to omit proofs. Such a theorem is shown in Example~\ref{eg:neuper1}.
 114.190 -
 114.191 -\begin{example}
 114.192 -{\small\begin{tabbing}
 114.193 -123\=123\=123\=123\=\kill
 114.194 -\hfill \\
 114.195 -\>axiomatization where \\
 114.196 -\>\>  rule1: "1 = $\delta$ [n]" and\\
 114.197 -\>\>  rule2: "|| z || > 1 ==> z / (z - 1) = u [n]" and\\
 114.198 -\>\>  rule3: "|| z || < 1 ==> z / (z - 1) = -u [-n - 1]" and \\
 114.199 -\>\>  rule4: "|| z || > || $\alpha$ || ==> z / (z - $\alpha$) = $\alpha^n$ * u [n]" and\\
 114.200 -\>\>  rule5: "|| z || < || $\alpha$ || ==> z / (z - $\alpha$) = -($\alpha^n$) * u [-n - 1]" and\\
 114.201 -\>\>  rule6: "|| z || > 1 ==> z/(z - 1)$^2$ = n $\cdot$ u [n]"
 114.202 -\end{tabbing}
 114.203 -}
 114.204 -\caption{Axiomatization in Isabelle\label{eg:neuper1}}
 114.205 -\end{example}
 114.206 -
 114.207 -In order to provide TP with logical facts for checking user input, the Lucas-Interpreter requires a \textbf{specification}. Such a specification is shown in Example~\ref{eg:neuper2}.
 114.208 -
 114.209 -\begin{example}
 114.210 -{\small\begin{tabbing}
 114.211 -123,\=postcond \=: \= $\forall \,A^\prime\, u^\prime \,v^\prime.\,$\=\kill
 114.212 -\hfill \\
 114.213 -Specification no.1:\\
 114.214 -%\>input\>: $\{\;r={\it arbitraryFix}\;\}$  \\
 114.215 -\>input    \>: $\{\;r\;\}$  \\
 114.216 -\>precond  \>: $0 < r$   \\
 114.217 -\>output   \>: $\{\;A,\; u,v\;\}$ \\
 114.218 -\>postcond \>:{\small  $\;A=2uv-u^2 \;\land\; (\frac{u}{2})^2+(\frac{v}{2})^2=r^2 \;\land$}\\
 114.219 -\>     \>\>{\small $\;\forall \;A^\prime\; u^\prime \;v^\prime.\;(A^\prime=2u^\prime v^\prime-(u^\prime)^2 \land
 114.220 -(\frac{u^\prime}{2})^2+(\frac{v^\prime}{2})^2=r^2) \Longrightarrow A^\prime \leq A$} \\
 114.221 -\>props\>: $\{\;A=2uv-u^2,\;(\frac{u}{2})^2+(\frac{v}{2})^2=r^2\;\}$
 114.222 -\end{tabbing}
 114.223 -}
 114.224 -\caption{Specification for the Lucas-Interpreter\label{eg:neuper2}}
 114.225 -\end{example}
 114.226 -
 114.227 -Such a specification is checked before the execution of a program is started, the same applies for sub-programs. In the following example program (Example~\ref{eg:subprob}) the sub-programs are designated by \ttfamily SubProblem \normalfont:
 114.228 -
 114.229 -\begin{example}
 114.230 -\hfill \\
 114.231 -{\ttfamily \begin{tabbing}
 114.232 -``(L\_L::bool list) = (\=SubProblem (\=Test','' \\
 114.233 -``\>\>[linear,univariate,equation,test],'' \\
 114.234 -``\>\>[Test,solve\_linear])'' \\
 114.235 -``\>[BOOL equ, REAL z])'' \\
 114.236 -\end{tabbing}
 114.237 -}
 114.238 -{\small\textit{
 114.239 -	\noindent If a program requires a result which has to be calculated first we can use a subproblem to do so. In our specific case we wanted to calculate the zeros of a fraction and used a subproblem to calculate the zeros of the denominator polynom.
 114.240 -	}}
 114.241 -\caption{Usage of Subproblems in Programs\label{eg:subprob}}
 114.242 -\end{example}
 114.243 -
 114.244 -
 114.245 -\subsection{Goals of the Thesis}\label{sec:goals}
 114.246 -Imagine a piece of software would be able to support you by understanding every problem class, upcoming in the first years attending university - wouldn't it be great?
 114.247 -\par {{\sisac{}}} tries to do that, but the current state of the art is miles away from this goal and a single implementation of a problem is not enough to change this circumstance. Through this fact it is all the more essential to try, test, research and document the implementation of problem classes from "`real world"' applications. Responding to the abstract at the begin of this document the thesis has two folds; on the one hand certainly to provide interactivee course material for Signal Processing (which means to implement a single problem provided by the Institute of Signal Processing and Speech Communication (SPSC); follow up Calulcations), and to extract experience data respectively help the {{\sisac{}}}-team by setting up a detailed description of technicalities hacking {\sisac{}} on the other hand.
 114.248 -
 114.249 -All the notions are in place to describe the task ``Interactive Course Material for Signal Processing based on Isabelle/{\sisac}'', the main task of this thesis, appropriately by the following points:
 114.250 -\begin{enumerate}
 114.251 -\item Analyze the problems given by the SPSC Lab for mathematics \textbf{knowledge required}, search the knowledge already available in Isabelle/{\sisac}, estimate efforts required to fill the gap between knowledge required and knowledge available, and finally select problems for implementation accordingly.
 114.252 -\item Implement the selected problems in Isabelle/{\sisac}, which means, in appropriate Isabelle theories \textbf{for each problem} implement:
 114.253 -  \begin{enumerate}
 114.254 -  \item \textbf{Definitions and theorems} required within the specification (including ``descriptions'' for input variables and output variables) and the program (proofs omitted via ``axiomatization'')
 114.255 -  \item \textbf{A specification} which describes the input variables, the preconditions on the input (a challenge for rigorously exact mathematics~!), the output variables and the postcondition, which relates input to output such that the problem is characterized formally (another challenge for rigorously exact mathematics~!)
 114.256 -  \item \textbf{A program} describing the algorithm which solves the problem, i.e. which constructs output meeting the postcondition. Programming involves identifying the steps (tactics~!) which create the calculation and calling CAS-functions (simplification, equation solvers, etc) appropriately. Modularization of programs into {\tt SubProblems} has to prepare for re-use of code.
 114.257 -  \end{enumerate}
 114.258 -\item Add \textbf{multimedia explanations} to each problem (i.e. to specific definitions, theorems, the specification and the program) such that non-expert students (e.g. within \emph{STEOP}, the introductory orientation phase at TUG) get an idea the problem is about.
 114.259 -\item \textbf{Document the implementation} such that
 114.260 -  \begin{enumerate}
 114.261 -  \item Interactive course material hopefully useful in education within the SPSC and within \emph{STEOP}, the introductory orientation phase at TUG, as a preview for students in Telematics on later application of math knowledge introduced in the first semester and
 114.262 -  \item A detailed description of technicalities in programing implemented as an interactivee Isabelle/Isar theory, providing future programers with guidelines and {\sisac}-developers with feedback in usability of the TP-based program language. 
 114.263 -  \item subsequent application programers have guidelines for further implementation of interactivee course material in SPSC and other engineering sciences
 114.264 -  \item {\sisac{}} developers get feedback for ongoing improvement of the TP-based programing language, the respective development environment and the respective program interpreter (called Lucas-Interpreter)
 114.265 -  \item development of knowledge for engineering sciences is being motivated in the Isabelle community.
 114.266 -  \end{enumerate}
 114.267 -\end{enumerate}
 114.268 -
 114.269 -
 114.270 -\section{Mechanization of Signal Processing Problems}\label{sp}
 114.271 -\subsection{Relevant Knowledge available in Isabelle}\label{know-isab}
 114.272 -Isabelle is developed now for a long time and so we are able to access a huge range of theories and useful snippets. The main problem according this snip sets is that isabelle still is a theorem proofer and not an algebra system. But due the work of the {\sisac}-development team there are already also many calculation examples provided.
 114.273 -\par The SPSC provided a list of problems which are often done wrong or are misunderstood by students in term of the problem classes. Out of these tasks we tried to extract the core operations and looked up which parts are already implemented or useful. The provided problem classes are:
 114.274 -\begin{itemize}
 114.275 -	\item Fourier-Transformation
 114.276 -	\item Convolution
 114.277 -	\item Inverse Z-Transformation and partial fraction decomposition
 114.278 -	\item Index transformation
 114.279 -\end{itemize}
 114.280 -
 114.281 -A survey of these selected Problems on their "`correct"' solution can be found in Appendix~\ref{app:calc}. After manually solving this problems we started checking which of them are able to realizable. As already remarked above, isabelle is just a theorem proover due this fact isabelle only provides some theories which are useful for the provided problem classes.
 114.282 -\par Yet, isabelle also has some problems on traditional notation. For example a theory called FFT is already implemented this theory does not provide methods for solving fourier transformation tasks, it only defines the basic condition a fast Fourier transformed expression has to fulfill.
 114.283 -\par For the problems we had a look-on isabelle did not provide specific theories which can be implemented one by one, so a look at the mechanized knowledge in {\sisac} is the next step, therefore follow up Section~\ref{know-isac}.
 114.284 -
 114.285 -\subsection{Relevant Knowledge available in ISAC}\label{know-isac}
 114.286 -{\sisac} already provides a small registry of useful programs and surveys on using isabelle as for solving problems. These snip sets are things like norming rational numbers, solving variate and univariate equations, substitutions, some simple integrals and so on. For a detailed review on the currently implemented theories a look at the {\sisac} project web-page\footnote{http://www.ist.tugraz.at/projects/isac/www/kbase/pbl/index\_pbl.html} is strongly recommended, as the appreciation for this thesis is no describing all parts of {\sisac} in detail. This would also not be possible as {\sisac} is permanently growing.
 114.287 -\par After we differenced {\sisac} and isabelle we are able to introduce two axes in the project. This axes are the specifications (``application axis'' represented as isabelle) and methods (``algorithmic axis'' represented as {\sisac}).
 114.288 -\par During the first weeks of work on this thesis we decided on implementing the Z-Transformation and particullary the included partial fraction decomposion first. The algoritmix axis therefor already provides the knowledge for the following parts:
 114.289 -\begin{description}
 114.290 -\item[Partial Fractions] We now how to handle them and we are able to illustrate them.
 114.291 -\item[Cancellation of multivariate rational terms] Simplification is possible.
 114.292 -\item[Equations] The possibility of solving linear and second order equations is provided, also the possibility to get the left or right hand side of an equation.
 114.293 -\item[Substitution] We are able to substitute given variables in terms, we are also able to subsitude a list of variables in terms.
 114.294 -\end{description}
 114.295 -
 114.296 -\subsection{Survey on Required Knowledge}\label{know-missing}
 114.297 -Following tables (Table~\ref{tab:eff-four},~\ref{tab:eff-conv},~\ref{tab:eff-ztrans}) are showing the expected development effort for specific problems. The values are only very inaccurately approximations of the real work, but needed as a basis for descieding with which problem to start:
 114.298 -
 114.299 -\begin{table}
 114.300 -	\centering
 114.301 -	\begin{tabular}{p{4cm}|p{5cm}|rp{2.5cm}}
 114.302 -		\textbf{Requirements}   & \textbf{Comments}    &\textbf{Effort}\\ \hline\hline
 114.303 -		solving Integrals		    & simple via properties table     &     20\\
 114.304 -		                        & \emph{real}          &    MT\\ \hline
 114.305 -		transformation table    & simple transform     &    20\\ \hline
 114.306 -		visualisation						& backend							 &    10\\ \hline
 114.307 -		example collection      & with explanations    &    20\\ \hline\hline
 114.308 -		\multicolumn{2}{c|}{}                          & 70-80\\
 114.309 -	\end{tabular}
 114.310 -	
 114.311 -	\caption{Fourier-Transformation development effort\label{tab:eff-four}}
 114.312 -\end{table}
 114.313 -	
 114.314 -
 114.315 -\begin{table}
 114.316 -	\centering
 114.317 -	\begin{tabular}{p{4cm}|p{5cm}|rp{2.5cm}}
 114.318 -		\textbf{Requirements}   & \textbf{Comments}    &\textbf{Effort}\\ \hline\hline
 114.319 -		simplify rationals      & {\sisac}             &     0\\ \hline
 114.320 -		define $\sum\limits_{i=0}^{n}i$ & partly {\sisac}  &    10\\ \hline
 114.321 -		simplify sum			      & termorder            &    10\\
 114.322 -		                        & simplify rules       &    20\\
 114.323 -		                        & use simplify rationals&     0\\ \hline
 114.324 -		index adjustments       & with unit step       &      10\\ \hline
 114.325 -		example collection      & with explanations    &    20\\ \hline\hline
 114.326 -		\multicolumn{2}{c|}{}                      & 70-90\\
 114.327 -	\end{tabular}
 114.328 -
 114.329 -	\caption{Convolution Operations development effort\label{tab:eff-conv}}
 114.330 -\end{table}
 114.331 -
 114.332 -\begin{table}
 114.333 -	\centering
 114.334 -	\begin{tabular}{p{4cm}|p{5cm}|rp{2.5cm}}
 114.335 -		\textbf{Requirements}   & \textbf{Comments}    &\textbf{Effort}\\ \hline\hline
 114.336 -		solve for part.fract.   & {\sisac}: degree 2   &     0\\
 114.337 -		                        & complex nomminators  &    30\\
 114.338 -		                        & degree > 2           &    MT\\ \hline
 114.339 -		simplify polynomial     & {\sisac}             &     0\\
 114.340 -		simplify rational       & {\sisac}             &     0\\ \hline
 114.341 -		partial fraction        & degree 2,            &    20\\
 114.342 -		decomposition           & specification, method&    30\\ \hline
 114.343 -		${\cal Z}^{-1}$ table   & explanations, figures&    20\\ \hline
 114.344 -		example collection      & with explanations    &    20\\ \hline\hline
 114.345 -		\multicolumn{2}{c|}{}                          & 90-120\\
 114.346 -	\end{tabular}
 114.347 -
 114.348 -\caption{Z-Transformation development effort\label{tab:eff-ztrans}}
 114.349 -\end{table}
 114.350 -
 114.351 -As conclusion of the summarized efforts it is evident that only one topic can be tried to realized as a baccalaureate thesis. In accord with Dr. Neuper we decided after some practical tests to start with the implementation of the (Inverse) Z-Transformation. The Reason is that this topic can mostly be done with knowledge which was already tried to be mechanized in {\sisac}.
 114.352 -
 114.353 -\subsection{Formalization of missing knowledge in Isabelle}
 114.354 -
 114.355 -A problem behind is the mechanization of mathematic theories in TP-bases languages. There is still a huge gap between these algorithms and this what we want as a solution - in Example Signal Processing. 
 114.356 -\begin{example}
 114.357 -	\[
 114.358 -		X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY
 114.359 -  \]
 114.360 -	{\small\textit{
 114.361 -		\noindent A very simple example on this what we call gap is the simplification above. It is needles to say that it is correct and also Isabelle for fills it correct - \emph{always}. But sometimes we don't want expand such terms, sometimes we want another structure of them. Think of a problem were we now would need only the coefficients of $X$ and $Y$. This is what we call the gap between mechanical simplification and the solution.
 114.362 -	}}
 114.363 -	\caption{Correct but not useful}\label{eg:gap}
 114.364 -\end{example}
 114.365 -Until we are not able to fill this gap we have to live with it but first have a look on the meaning of this statement:
 114.366 -\par Mechanized math starts from mathematical models and \emph{hopefully} proceeds to match physics. Academic engineering starts from physics (experimentation, measurement) and then proceeds to mathematical modeling and formalization. The process from a physical observance to a mathematical theory is unavoidable bound of setting up a big collection of standards, rules, definition but also exceptions. These are the things making mechanization that difficult.
 114.367 -\begin{example}
 114.368 -	\[
 114.369 -		m,\ kg,\ s,\ldots
 114.370 -  \]
 114.371 -	{\small\textit{
 114.372 -		\noindent Think about some units like that one's above. Behind each unit there is a discerning and very accurate definition: One Meter is the distance the light travels, in a vacuum, through the time of 1 / 299.792.458 second; one kilogram is the weight of a platinum-iridium cylinder in paris; and so on. But are these definitions usable in a computer mechanized world?!
 114.373 -	}}
 114.374 -	\caption{Units in measurement}\label{eg:units}
 114.375 -\end{example}
 114.376 -\par A computer or a TP-System builds on programs with predefined logical rules and does not know any mathematical trick (follow up example \ref{eg:trick}) or recipe to walk around difficult expressions. 
 114.377 -\begin{example}
 114.378 -\[ \frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)= \]
 114.379 -\[ \frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=
 114.380 -	 \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}= \]
 114.381 -\[ \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} \]
 114.382 -	{\small\textit{
 114.383 -		\noindent Sometimes it is also useful to be able to apply some \emph{tricks} to get a beautiful and particularly meaningful result, which we are able to interpret. But as seen in this example it can be hard to find out what operations have to be done to transform a result into a meaningful one.
 114.384 -	}}
 114.385 -	\caption{Mathematic tricks}\label{eg:trick}
 114.386 -\end{example}
 114.387 -For such a system the only possibility is to work through its known definitions and stops if none of these fits. Specified on Signal Processing or any other application it is often possible to walk through by doing simple creases. This creases are in generell based on simple math operatiopms but the challenge is to teach the machine \emph{all}\footnote{Its pride to call it \emph{all}.} of them. Unfortunately the goal of TP Isabelle is to reach a high level of \emph{all} but it in real it will still be a survey of knowledge which links to other knowledge and {\sisac{}} a trainer and helper but no human compensating calculator. 
 114.388 -\par {{\sisac{}}} itself aims to adds an \emph{application} axis (formal specifications of problems out of topics from Signal Processing, etc.) and an \emph{algorithmic} axis to the \emph{deductive} axis of physical knowledge. The result is a three-dimensional universe of mathematics seen in Figure~\ref{fig:mathuni}.
 114.389 -
 114.390 -\begin{figure}
 114.391 -\hfill \\
 114.392 -  \begin{center}
 114.393 -    \includegraphics[scale=0.7]{math-universe}
 114.394 -  \end{center}
 114.395 -  \caption{Three-dimensional universe of mathematics\label{fig:mathuni}}
 114.396 -\end{figure}
 114.397 -
 114.398 -\subsection{Notes on Problems with Traditional Notation}
 114.399 -Due the thesis work we discovers sever ell problems of traditional notations. Some of them have been known in computer science for many years now and are still unsolved, one of them aggregates with the so called \emph{Lambda Calculus}, Example~\ref{eg:lamda} provides a look on the problem that embarrassed us.
 114.400 -
 114.401 -\begin{example}
 114.402 -
 114.403 -\[ f(x)=\ldots\;	\quad R \rightarrow \quad R \]
 114.404 -
 114.405 -
 114.406 -\[ f(p)=\ldots\;	p \in \quad R \]
 114.407 -
 114.408 -	{\small\textit{
 114.409 -		\noindent Above we see two equations. The first equation aims to be a mapping of an function from the reell range to the reell one, but when we change only one letter we get the second equation which usually aims to insert a reel point $p$ into the reell function. In computer science now we have the problem to tell the machine (TP) the difference between this two notations. This Problem is called Lambda Calculus.
 114.410 -	}}
 114.411 -	\caption{Towards the Lambda Calculus\label{eg:lamda}}
 114.412 -\end{example}
 114.413 -
 114.414 -An other problem is that terms are not full simplified in traditional notations, in {\sisac} we have to simplify them complete to check weather results are compatible or not. in e.g. the solutions of an second order linear equation is an rational in {\sisac} but in tradition we keep fractions as long as possible and as long as they aim to be 'beautiful' (1/8, 5/16,...).
 114.415 -
 114.416 -The math which should be mechanized in Computer Theorem Provers (\emph{TP}) has (almost) a problem with traditional notations (predicate calculus) for axioms, definitions, lemmas, theorems as a computer program or script is not able to interpret every Greek or Latin letter and every Greek, Latin or whatever calculations symbol. Also if we would be able to handle these symbols we still have a problem to interpret them at all. (Follow up \hbox{Example \ref{eg:symbint1}})
 114.417 -
 114.418 -\begin{example}
 114.419 -	\[
 114.420 -		u\left[n\right] \ \ldots \ unitstep
 114.421 -	\]
 114.422 -	{\small\textit{
 114.423 -		\noindent The unitstep is something we need to solve Signal Processing problem classes. But in {{\sisac{}}} the 	rectangular brackets have a different meaning. So we abuse them for our requirements. We get something which is not defined, but usable. The Result is syntax only without semantic.
 114.424 -	}}
 114.425 -	\caption{Expression Interpretation}\label{eg:symbint1}
 114.426 -\end{example}
 114.427 -
 114.428 -\noindent In different problems, symbols and letters have different meanings and ask for different ways to get through. (Follow up \hbox{Example \ref{eg:symbint2}}) 
 114.429 -\begin{example}
 114.430 -	\[
 114.431 -		\widehat{\ }\ \widehat{\ }\ \widehat{\ } \  \ldots \  exponent
 114.432 -	\]
 114.433 -	{\small\textit{
 114.434 -	\noindent For using exponents the three widehat symbols are required. The reason for that is due the development of {{\sisac{}}} the single widehat and also the double were already in use for different operations.
 114.435 -	}}
 114.436 -	\caption{Symbol Interpretation}\label{eg:symbint2}
 114.437 -\end{example}
 114.438 -Exclusive from the input, also the output can be a problem. We are familiar with a specified notations and style taught in university but a computer program has no knowledge of the form proved by a professor and the machines themselves also have not yet the possibilities to print every symbol (correct) Recent developments provide proofs in a human readable format but according to the fact that there is no money for good working formel editors yet, the style is one thing we have to live with.
 114.439 -
 114.440 -\section{Project Controlling}
 114.441 -We decided to split the thesis into five Iteration defined in Section~\ref{sec:milesurv}. As there is also a lot of work to do outer the thesis we accord on an increased contact by mail. For the coordination of the whole  {\sisac} files i got access to the mercurial repository. We also appointed on periodic team meetings.
 114.442 -
 114.443 -\subsection{Survey on Milestones\label{sec:milesurv}}
 114.444 -Doing something completely new requires a good controlling, the thesis itself also needs it. After the first meetings and the definition of the intrinsic work we decided on splitting the thesis into the following iterations.
 114.445 -\begin{description}
 114.446 -	\item[1st Iteration] Information Collection
 114.447 -	\item[2nd Iteration] Problem Selection
 114.448 -	\item[3rd Iteration] Implementation
 114.449 -	\item[4th Iteration] Thesis Writing
 114.450 -	\item[5th Iteration] Finalization
 114.451 -\end{description}
 114.452 -A more detailed description of this milestones can be found in Section~\ref{sec:detmile}.
 114.453 -
 114.454 -\subsection{Milestone Details\label{sec:detmile}}
 114.455 -\begin{description}
 114.456 -	\item[Information Collection] The first iteration starts by an introduction to the {\sisac} System and ends up with the first presentation. Listeners of the first presentation were \em Dr. Walther Neuper \normalfont and \em DI Bernhard Geiger\normalfont. We talked about common SPSC problems and the possibilities of realize them in the {\sisac} System. In preparation of the Presentation \em DI Geiger \normalfont sent us a few example problems and we had a experimental survey about the realization effort.
 114.457 -	\item[Problem Selection] In the second iteration we collected informations about the knowledge mechanized in {\sisac} (cf. Section~\ref{know-isab}). After the first iteration it was clear that implementing of problems in {\sisac} requires a higher effort than originally expected due this fact the second iteration ends up on the decision which of the provided problems is going to be implemented. We wrote and collected a handful of experimental scripts regarding sums, Fourier transformation and partial fraction decomposition.
 114.458 -	\item[Implementation] Unfortunately the biggest and most important part is the implementation. The iteration started with the decision on the problem and ends up by finishing the test Script (seen in Part~\ref{part:impl}) as well as the integration of this work into the {\sisac}-Knowledge. For a better controlling and result of this iteration we had severe ll regular meetings (\em Dr. Neuper \normalfont and \em Jan Ro\v{c}nik\normalfont) and contact over e-mail to assess the state of the {\sisac}-developers work.
 114.459 -	\item[Thesis Writing] One part of this thesis is generated automatically out of \ttfamily Build\_Inverse\_Z\_Transform\normalfont. Maybe this part well be the most important result of the thesis as it will be used as a documentation for the upcoming developers. Due this fact this iteration started also contemporaneous with the implementation but ends up separate after finishing the implementation with describing the needed theory and background.
 114.460 -	\item[Finalization] The work ends up with the last iteration - finalization. It is started by completing the written thesis and the preparation of the second presentation which concludes this project. In the second presentation we will have demonstrated our realized problem embedded in the new {\sisac}-frontend as well as the work, hiding behind. We will also want to give a clear view about the power of {\sisac} and animate the attending agents to go on working within this project.
 114.461 -\end{description}
 114.462 -
 114.463 -%\clearpage
 114.464 -
 114.465 -%----------// PART 2 \\----------%
 114.466 -
 114.467 -\newevenside
 114.468 -
 114.469 -\part{Implementation\label{part:impl}}
 114.470 -\input{./preambleForGeneratedDocuments.tex}
 114.471 -\par Please be aware that this is only a part of the thesis output, also follow up the theories and according tests that have been improved or created by me and are involved to the work on this thesis:
 114.472 -\begin{itemize}
 114.473 -\item \ttfamily Partial\_Fractions.thy \normalfont - \ttfamily partial\_fractions.sml \normalfont
 114.474 -\item \ttfamily Inverse\_Z\_Transformation.thy \normalfont - \ttfamily inverse\_z\_transformation.sml \normalfont
 114.475 -\item \ttfamily Rational.thy \normalfont - \ttfamily rational.sml \normalfont
 114.476 -\end{itemize}
 114.477 -\HRule
 114.478 -%\setcounter{section}{0}
 114.479 -\input{../../../test/Tools/isac/ADDTESTS/course/SignalProcess/document/Build_Inverse_Z_Transform}
 114.480 -
 114.481 -\clearpage
 114.482 -
 114.483 -%----------// PART 3 \\----------%
 114.484 -
 114.485 -\newevenside
 114.486 -\part{Thesis Summary and Review}
 114.487 -\section{Related Work}\label{sec:related}
 114.488 -Unusual for a Baccalaureate Thesis, there is {\em no} related work; this requires explanation.
 114.489 -Of course, this thesis relies on front-of-the wave computer mathematics, on TP. But {{\sisac{}}} uses TP in a very specific way, which is too weakly related to other work: programing in the TP-based language and rigorous formal specification of problems in Signal Processing where the main tasks in the practical part of this thesis. The major challenge for the practical work was given by the fact, that the work concerned alpha-testing of the TP-based programing environment.
 114.490 -\par Another  area of work could be considered as related work: authoring of e-learning content. However, {{\sisac{}}} provides division of concern such that the practical part of this thesis could focus on computer mathematics; this work was not concerned with interaction (the TP-based programing language has neither input statements nor output statements), nor with dialog guidance nor with any kind of learning theory.
 114.491 -\par These two reasons are given for the unusual statement, that there is no related work to be discussed in this thesis. 
 114.492 -
 114.493 -\section{Issues and Open Questions}
 114.494 -At the end of the first Iteration we agreed on a view issues that might have to be accomplished during the thesis. This Issues were:
 114.495 -\begin{itemize}
 114.496 -	\item What knowledge is already mechanized in \emph{Isabelle}?
 114.497 -	\item How can missing theorems and definitions be mechanized?
 114.498 -	\item What is the effort for such mechanization?
 114.499 -	\item How do calculations look like, by using mechanized knowledge?
 114.500 -	\item What problems and subproblems have to be solved?
 114.501 -	\item Which problems are already implemented in {\sisac}?
 114.502 -	\item How are the new problems specified ({\sisac})?
 114.503 -	\item Which variants of programs in {\sisac} solve the problems?
 114.504 -	\item What is the contents of the interactive course material (Figures, etc.)?
 114.505 -\end{itemize}
 114.506 -The significant part of this list was declared during the thesis. Next sections will review the most important items, regardless they where accomplished or not.
 114.507 -
 114.508 -\subsection{Accomplished}
 114.509 -We discovered the process how missing theorems and definitions can be mechanized and used this knowledge to implement new material. Now we ware able to solve partial fractions, we built theorems, specification and program. We completed the background work for interactive solving them. The same thing applies to the inverse Z-transformation with partial fractions; we built theorems, specification and program to step through an amount of exercises. But the most important accomplished part is the Isabelle theory (\ttfamily Build\_Inverse\_Z\_Transform.thy\normalfont) indicating issues for the coming {\sisac}-developers. Until we were not able to fulfill all the things we wanted, this is the most recent work and will be the headstone for the further work on {\sisac}.
 114.510 -\par Expect the necessary theories for solving the mentioned part and the guideline we also put tests for the new theories to the system and added some new methods to existing theories with their according tests. Also we were able to answer the questions about the mechanized knowledge in \emph{isabelle} and {\sisac}. We checked the required effort to add new material to the system and we walked through the question what subproblems have to be solved and how they are declared, when adding new material. Now we also know how problems are declared and which variants exist to solve them. All this can be found in this thesis.
 114.511 -\subsection{Partially Accomplished}
 114.512 -As already told upwards, we accomplished a guideline for upcoming {\sisac}-developers this was a very important and necessary task; but through upcoming changes in the development environment and programing language there is a need for more descriptions and informations. This changes are not yet fulfilled and so it was not possible to include a correct guideline fot them in our example theory or this thesis.
 114.513 -\par Also we were not able to provide a representative count of example problems for partial fractions or the inverse Z-Transformation. We are able to say that our accomplished material can handle one problem each, exactly as we wanted and it is toughed but due to less time we have no more experience data.
 114.514 -\subsection{Not Accomplished}
 114.515 -The properly longest item is the list with the not accomplished issues, but there is no need to count this as a negative aspect due the fact that we collected experience data for following needs:
 114.516 -\par We were not able to put explanations, figures to examples, theorem descriptions and problem description to our course material. The reason for that was the time at one side and the ongoing restructuration of the system on the other side.
 114.517 -\par Only a sufficient number of topics was implemented. There were more problems to solve than we expected. We were only able to implement one from the SPSC given tasks m entered in Appendix~\ref{app:calc}. Due this fact the material we got as an output of the thesis will be no support for labs or lectures at the SPSC and also no material for the STEOP, which also was a big wish at the beginning.
 114.518 -\subsection{Open Questions and Work}
 114.519 -At the end of this thesis there is now part left unattended, but many parts that require beauty corrections and many parts that require a few more manpower. This upcoming open tasks are:
 114.520 -\begin{itemize}
 114.521 -	\item What is the contents of the interactive course material (Figures, etc.)?
 114.522 -	\item What are the pre and post conditions of the problems?
 114.523 -	\item How would a correct implementation of the Z-Transformation look like?
 114.524 -	\item What do students expect of this implementation?
 114.525 -\end{itemize}
 114.526 -To complete the task of creating course material describing the needed steps to do a partial fraction or inverse Z-Transformation in {\sisac} the real effort is not conceivable. But for a first usable version only a few steps are left to do this steps would be:
 114.527 -\begin{enumerate}
 114.528 -	\item Cleanup the\ttfamily InverseZTransformation.thy\normalfont file and put it into the {\sisac} knowledge tree like it was done with\ttfamily PartialFractions.thy\normalfont.
 114.529 -	\item Create a good example program and test it.
 114.530 -	\item Describe the used theories with the mathematic definitions and background.
 114.531 -	\item Add figures and small examples.
 114.532 -\end{enumerate}
 114.533 -There are also needs on finishing other parts to get a complete part of course material but this would be the steps to get a first usable version.
 114.534 -
 114.535 -\section{Conclusion and Personal Experience}
 114.536 -After working on {\sisac} for month, it is hard do find the right words about the system. For sure the system itself is a great idea and it would have been a big relaxation if i would have been able to use this system in the last years for sever ell subjects. But for me the biggest disadvantage of {\sisac} is the frontend until there is no mathematical notation and visualisation of simply fractions i don't think that i or other students would be able to use it for learning. I also think that for learning there is no need of complex examples or complex solutions, examples have to be simple but also have to cover all necessary steps of a calculation. Unfortunately there exist different learning types and I'm a visual one, what is also the explanation for my maybe drastic explanation.
 114.537 -\par About the backend, what finally was my main work there is not much left to say. The programing language requires a long time to work in and to find out how decelerations work and how isabelle and {\sisac} is build up, maybe this period of collecting informations is to long for a Bakk. Thesis. Also it is hard to find informations about the theories until there was no related work and no usable documentation wether for {\sisac} nor for isabelle or ML.
 114.538 -\par When working within the {\sisac} sources you often hung up on problems which would be simple to solve but are hard to discover, therefor it was often necessary to make breaks and define concrete steps on problem solving. Also when having a plan of the upcoming implementation I had to break myself out to do not to much step at once. Often its better to implement small parts and test, write tests and wait then hurrying up. An other aspect is that it was necessary to build {\sisac} from scratch after every change; this and the fact that my finally theories had over 1000 lines often made the development process to a stop and go dilemma.
 114.539 -\par Finally I have to say a big \bfseries thank you \normalfont to Dr.~Neuper who invested a lot of his time in my thesis and the {\sisac} project, I remember some hard and long meetings but finally I look back glad.
 114.540 -
 114.541 -\subsection{Anecdotes}
 114.542 -At the very beginning of the thesis i made some calculations and thoughed of every step more than twice. This calculations were the ground stone of my work, we build every step in the calculation following up the real calculations - when doing them by hand. Time went on and after adding the last commands to the programm for applying the transformation ruleset i compared the results - oh wonder there was a mistake in my calculation :)
 114.543 -\begin{center}
 114.544 -Thank you {\sisac}!
 114.545 -\end{center}
 114.546 -
 114.547 -%----------// BIB \\-----------%
 114.548 -
 114.549 -\renewcommand{\refname}{\section{References}}
 114.550 -\bibliographystyle{alpha}
 114.551 -\bibliography{references}
 114.552 -\clearpage
 114.553 -
 114.554 -%----------// APPENDIX \\-----------%
 114.555 -\newevenside
 114.556 -\part{Appendix}
 114.557 -\appendix
 114.558 -%----------// WORK TIME \\-----------%
 114.559 -
 114.560 -
 114.561 -\section{Record of Working Time}
 114.562 -\begin{footnotesize}
 114.563 -\begin{longtable}{l p{6.5cm} c c r}
 114.564 -{\bf Date} & {\bf Description} & {\bf Begin} & {\bf End} & {\bf Dur.}\\
 114.565 -\hline \hline
 114.566 -\endhead
 114.567 -
 114.568 -\hline 
 114.569 -  \multicolumn{5}{r}{{Continued on next page}} \\
 114.570 -\hline
 114.571 -\endfoot
 114.572 -
 114.573 -\hline 
 114.574 -\hline
 114.575 -\endlastfoot
 114.576 -
 114.577 -\multicolumn{5}{l}{Start 1st Iteration} \\
 114.578 -\hline
 114.579 -29.06.2011 & Meeting Dr. Neuper and DI Geiger & 15:00 & 17:30 & 2,50 \\
 114.580 -02.07.2011 & Working on Examples from DI Geiger & 20:00 & 21:30 & 1,50 \\
 114.581 -03.07.2011 & Working on Examples from DI Geiger & 21:00 & 22:45 & 1,75 \\
 114.582 -05.07.2011 & Meeting Dr. Neuper, Information Exchange & 10:00 & 13:00 & 3,00 \\
 114.583 -06.07.2011 & Installing Isabelle & 20:00 & 22:30 & 2,50 \\
 114.584 -07.07.2011 & Meeting Dr. Neuper, present-1 & 14:45 & 16:15 & 1,50 \\
 114.585 -18.07.2011 & Meeting Dr. Neuper, present-1 Structure & 14:15 & 16:00 & 1,75 \\
 114.586 -19.07.2011 & Meeting Dr. Neuper, present-1 Content & 07:20 & 09:20 & 2,00\\
 114.587 -19.07.2011 & Meeting Dr. Neuper & 10:00 & 12:00 & 2,00\\
 114.588 -21.07.2011 & HG Error Correction, Latex for Thesis & 11:10 & 14:00 & 2,83\\
 114.589 -22.07.2011 & Meeting Dr. Neuper & 10:00 & 12:00 & 2,00\\
 114.590 -23.07.2011 & Latex for Calculations & 13:45 & 16:30 & 2,75\\
 114.591 -24.07.2011 & Meeting Dr. Neuper, present-1 & 20:10 & 20:40 & 0,50\\
 114.592 -25.07.2011 & Meeting Dr. Neuper, present-1 & 15:15 & 17:55 & 2,67\\
 114.593 -26.07.2011 & Work on Test\_Complex.thy & 10:45 & 12:10 & 1,42\\
 114.594 -27.07.2011 & present-1 (Dr. Neuper, DI Geiger) & 10:00 & 12:00 & 2,00\\
 114.595 -\hline
 114.596 -\multicolumn{5}{l}{End 1st Iteration} \\
 114.597 -\multicolumn{5}{l}{Start 2nd Iteration} \\
 114.598 -\hline
 114.599 -02.09.2011 & Meeting Dr. Neuper, Latex for Thesis & 08:30 & 10:20 & 1,83\\
 114.600 -05.09.2011 & Meeting Dr. Neuper, Partial\_Frations.thy & 09:30 & 12:45 & 3,25\\
 114.601 -05.09.2011 & Partial\_Fractions.thy & 17:10 & 18:30 & 1,33\\
 114.602 -06.09.2011 & Documentation Partial\_Fractions.thy & 10:00 & 13:15 & 3,25\\
 114.603 -07.09.2011 & Meeting Dr. Neuper, ML Introduction & 10:00 & 12:50 & 2,83\\
 114.604 -08.09.2011 & Preparing Scripts for Latex Output & 19:00 & 22:45 & 3,75\\
 114.605 -09.09.2011 & Preparing Scripts for Latex Output & 11:40 & 15:00 & 3,33\\
 114.606 -10.09.2011 & Meeting Dr. Neuper, Latex Output, HG Errors & 10:00 & 12:00 & 2,00\\
 114.607 -\hline
 114.608 -\multicolumn{5}{l}{End 2nd Iteration} \\
 114.609 -\multicolumn{5}{l}{Start 3rd and 4th Iteration} \\
 114.610 -\hline
 114.611 -14.09.2011 & Start on Inverse\_Z\_Transf. Script & 09:10 & 12:25 & 3,25\\
 114.612 -16.09.2011 & Information Exchange Sums & 13:15 & 16:00 & 2,75\\
 114.613 -19.09.2011 & Programming on Inverse\_Z\_Transf. & 10:00 & 13:10 & 3,17\\
 114.614 -20.09.2011 & Meeting Dr. Neuper, Inverse\_Z\_Transf. Script & 15:30 & 18:10 & 2,67\\
 114.615 -23.09.2011 & New IsaMakefile for Latex generation & 13:00 & 14:30 & 1,50\\
 114.616 -23.09.2011 & Meeting Dr. Neuper, Inverse\_Z\_Transf. Script & 14:30 & 17:30 & 3,00\\
 114.617 -26.09.2011 & Partial\_Fractions.thy, get\_Argument & 13:30 & 16:15 & 2,75\\
 114.618 -27.09.2011 & Meeting Dr. Neuper, HG Error & 09:00 & 12:20 & 3,33\\
 114.619 -28.09.2011 & Meeting Dr. Neuper, Hierarchy Reconstruction & 10:00 & 12:30 & 2,50\\
 114.620 -01.10.2011 & Some Testing & 10:00 & 11:00 & 1,00\\
 114.621 -02.10.2011 & Inverse\_Z\_Transf. Errors & 15:00 & 16:10 & 1,17\\
 114.622 -06.10.2011 & Meeting Dr. Neuper & 15:00 & 17:50 & 2,83\\
 114.623 -07.10.2011 & Meeting Dr. Neuper, Inverse\_Z\_Transf. Script & 15:00 & 16:50 & 1,83\\
 114.624 -09.10.2011 & Work on Thesis & 16:30 & 18:45 & 2,25\\
 114.625 -11.10.2011 & Meeting Dr. Neuper, Abstract & 14:10 & 17:10 & 3,00\\
 114.626 -13.10.2011 & Work on Thesis, Implemention part & 08:30 & 10:00 & 1,50\\
 114.627 -18.10.2011 & Work on Thesis & 20:30 & 22:50 & 2,33\\
 114.628 -19.10.2011 & Work on Thesis & 21:20 & 23:40 & 2,33\\
 114.629 -20.10.2011 & Work on Thesis & 08:45 & 10:45 & 2,00\\
 114.630 -25.10.2011 & Meeting Dr. Neuper: thesis review & 08:00 & 10:00 & 2,00\\
 114.631 -25.10.2011 & Reorganising after meeting & 20:10 & 23:50 & 3,67\\
 114.632 -26.10.2011 & Reorganising after meeting, examples in thesis & 08:30 & 11:10 & 2,67\\
 114.633 -07.11.2011 & Meeting Preparation & 16:30 & 17:15 & 0,75\\
 114.634 -08.11.2011 & Meeting Dr. Neuper: thesis addons & 16:00 & 17:30 & 1,50\\
 114.635 -12.11.2011 & Reorganization after meeting & 21:10 & 22:30 & 1,33\\
 114.636 -20.11.2011 & Review of Inv\_Z\_Trans & 10:15 & 13:30 & 3,25\\
 114.637 -21.11.2011 & get\_numerator & 12:15 & 14:30 & 2,25\\
 114.638 -23.11.2011 & get\_numerator & 20:30 & 21:15 & 0,75\\
 114.639 -24.11.2011 & get\_numerator final & 14:10 & 15:30 & 1,33\\
 114.640 -28.11.2011 & tried to go on in build\_inverse\_ & 11:00 & 13:10 & 2,17\\
 114.641 -01.12.2012 & Tuning Invers\_Z\_Tansf. Script & 16:15 & 19:30 & 3,25\\
 114.642 -04.12.2012 & Moved Some Tests to Knowledge & 15:30 & 18:15 & 2,75\\
 114.643 -05.12.2012 & Tuning Invers\_Z\_Tansf. Script & 13:10 & 14:15 & 1,08\\
 114.644 -08.12.2012 & Inverse\_Z\_Tansf. Script, Factors from Solution & 14:30 & 16:15 & 1,75\\
 114.645 -10.12.2012 & Moved Some Tests to Knowledge & 20:10 & 23:00 & 2,83\\
 114.646 -11.12.2012 & Inverse\_Z\_Tansf. Script, PBZ Ansatz & 10:10 & 12:30 & 2,33\\
 114.647 -12.12.2012 & Inverse\_Z\_Tansf. Script, Subsitution & 09:00 & 11:30 & 2,50\\
 114.648 -16.12.2012 & Tuning Invers\_Z\_Tansf. Script & 17:15 & 18:45 & 1,50\\
 114.649 -19.12.2012 & Tuning Invers\_Z\_Tansf. Script & 19:00 & 20:30 & 1,50\\
 114.650 -14.01.2012 & Inverse\_Z\_Tansf. Script, Substitution & 18:45 & 20:30 & 1,75\\
 114.651 -22.01.2012 & Inverse\_Z\_Transf. Script, Calc Coeff. & 20:10 & 21:45 & 1,58\\
 114.652 -12.02.2012 & Inverse\_Z\_Transf. Script & 17:30 & 19:00 & 1,50\\
 114.653 -13.02.2012 & Finished Work on Inverse\_Z\_Transf. Script & 19:30 & 22:10 & 2,67\\
 114.654 -14.02.2012 & Formatting for Latex output & 09:00 & 14:45 & 5,75\\
 114.655 -15.02.2012 & Formatting for Latex output & 10:00 & 15:30 & 5,50\\
 114.656 -16.02.2012 & Going on Work on Thesis & 14:45 & 18:30 & 3,75\\
 114.657 -17.02.2012 & Tuning Invers\_Z\_Tansf. Script & 18:30 & 19:45 & 1,25\\
 114.658 -19.02.2012 & Meeting Dr. Neuper, present-2 & 09:00 & 13:30 & 4,50\\
 114.659 -19.02.2012 & Meeting Dr. Neuper, Integration of work to Isac & 15:00 & 19:10 & 4,17\\
 114.660 -20.02.2012 & Meeting Dr. Neuper, Integration of work to Isac & 09:00 & 12:45 & 3,75\\
 114.661 -20.02.2012 & Meeting Dr. Neuper, Integration of work to Isac & 14:10 & 18:30 & 4,33\\
 114.662 -\hline
 114.663 -\multicolumn{5}{l}{End 3rd Iteration}\\
 114.664 -\hline
 114.665 -20.02.2012 & Finishing Thesis & 20:30 & 22:50 & 2,33\\
 114.666 -21.02.2012 & Finishing Thesis & 13:30 & 14:45 & 1,25\\
 114.667 -02.03.2012 & Finishing Thesis & 15:45 & 19:00 & 3,25\\
 114.668 -06.03.2012 & Finishing Thesis & 09:15 & 10:30 & 1,25\\
 114.669 -07.03.2012 & Finishing Thesis & 13:15 & 16:00 & 2,75\\
 114.670 -\hline
 114.671 -\multicolumn{5}{l}{End 4th Iteration} \\
 114.672 -\multicolumn{5}{l}{Start 5th Iteration} \\
 114.673 -\hline
 114.674 -26.02.2012 & Preparing present-2 & 09:30 & 13:00 & 3,5 \\
 114.675 -20.03.2012 & Preparing present-2 & 14:00 & 16:30 & 2,5 \\
 114.676 -08.05.2012 & Meeting Dr. Neuper, present-2, work on isac & 08:00 & 12:00 & 4,0 \\
 114.677 -08.05.2012 & present-2 & 14:00 & 15:00 & 1,0 \\
 114.678 -\hline
 114.679 -\multicolumn{5}{l}{End 5th Iteration} \\
 114.680 -\hline
 114.681 -\multicolumn{4}{l}{Total working time:} & 203 \\
 114.682 -\end{longtable}
 114.683 -\end{footnotesize}
 114.684 -
 114.685 -%----------// CALCULATIONS \\-----------%
 114.686 -
 114.687 -\newevenside
 114.688 -\section{Calculations\label{app:calc}}
 114.689 -\input{calulations}
 114.690 -\end{document}
 114.691 -
   115.1 --- a/src/Doc/isac/jrocnik/final/jrocnik_present1.tex	Mon Sep 16 12:27:20 2013 +0200
   115.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   115.3 @@ -1,434 +0,0 @@
   115.4 -
   115.5 -\documentclass{beamer}
   115.6 -
   115.7 -
   115.8 -\mode<presentation>
   115.9 -{
  115.10 -  \usetheme{Hannover}
  115.11 -  \setbeamercovered{transparent}
  115.12 -}
  115.13 -
  115.14 -\usepackage[english]{babel}
  115.15 -\usepackage[utf8]{inputenc}
  115.16 -\usepackage{times}
  115.17 -\usepackage[T1]{fontenc}
  115.18 -
  115.19 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  115.20 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  115.21 -
  115.22 -\title[SPSC in \isac] % (optional, use only with long paper titles)
  115.23 -{Interactive Course Material\\ for Signal Processing\\ based on Isabelle/\isac}
  115.24 -
  115.25 -\subtitle{Baccalaureate Thesis}
  115.26 -
  115.27 -\author[Ro\v{c}nik]
  115.28 -{Jan Rocnik}
  115.29 -
  115.30 -\institute % (optional, but mostly needed)
  115.31 -{
  115.32 -  Technische Universit\"at Graz\\
  115.33 -  Institut f\"ur TODO
  115.34 -}
  115.35 -
  115.36 -% If you have a file called "university-logo-filename.xxx", where xxx
  115.37 -% is a graphic format that can be processed by latex or pdflatex,
  115.38 -% resp., then you can add a logo as follows:
  115.39 -
  115.40 -% \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename}
  115.41 -% \logo{\pgfuseimage{university-logo}}
  115.42 -
  115.43 -
  115.44 -
  115.45 -% Delete this, if you do not want the table of contents to pop up at
  115.46 -% the beginning of each subsection:
  115.47 -\AtBeginSubsection[]
  115.48 -{
  115.49 -  \begin{frame}<beamer>{Outline}
  115.50 -    \tableofcontents[currentsection,currentsubsection]
  115.51 -  \end{frame}
  115.52 -}
  115.53 -
  115.54 -\begin{document}
  115.55 -
  115.56 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.57 -%%												Title Page                             %%
  115.58 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.59 -
  115.60 -\begin{frame}
  115.61 -  \titlepage
  115.62 -\end{frame}
  115.63 -
  115.64 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.65 -%%												Table of Contents                      %%
  115.66 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.67 -
  115.68 -\begin{frame}{Outline}
  115.69 -  \tableofcontents
  115.70 -  % You might wish to add the option [pausesections]
  115.71 -\end{frame}
  115.72 -
  115.73 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.74 -%%---------------------------------------------------------------%%
  115.75 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.76 -
  115.77 -\section[Intro]{Introduction}
  115.78 -
  115.79 -\begin{frame}{Issues to be Accomplished}
  115.80 -
  115.81 -\begin{itemize}
  115.82 -
  115.83 -\item What knowledge is already mechanised in \emph{Isabelle}?
  115.84 -\item How can missing theorems and definitions be mechanised?
  115.85 -\item What is the effort for such mechanisation?
  115.86 -\item How do calculations look like, by using mechanised knowledge?
  115.87 -\item What problems and subproblems have to be solved?
  115.88 -\item Which problems are already implemented in \sisac?
  115.89 -\item How are the new problems specified (\sisac)?
  115.90 -\item Which variantes of programms in \sisac\ solve the problems?
  115.91 -\item What is the contents of the interactiv course material (Figures, etc.)?
  115.92 -
  115.93 -\end{itemize}
  115.94 -\end{frame}
  115.95 -
  115.96 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.97 -%%---------------------------------------------------------------%%
  115.98 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115.99 -
 115.100 -\section[Fourier]{Fourier transformation}
 115.101 -\subsection[Fourier]{Fourier transform}
 115.102 -
 115.103 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.104 -%%												Fourier INTRO                          %%
 115.105 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.106 -
 115.107 -\begin{frame}\frametitle{Fourier Transformation: Introduction}
 115.108 -Possibilities:
 115.109 -\begin{itemize}
 115.110 -\item Transform operation by using property-tables
 115.111 -\item Transform operation by using integral
 115.112 -\end{itemize}
 115.113 -Also Important:
 115.114 -\begin{itemize}
 115.115 -\item Visualisation?!
 115.116 -\end{itemize}
 115.117 -\end{frame}
 115.118 -
 115.119 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.120 -%%										Transform expl   SPEC                      %%
 115.121 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.122 -
 115.123 -\begin{frame}\frametitle{Fourier Transformation: Specification}
 115.124 -{\footnotesize
 115.125 -
 115.126 -Determine the fourier transform for the given rectangular impulse:
 115.127 -
 115.128 -\begin{center}
 115.129 -$x(t)= \left\{
 115.130 -     \begin{array}{lr}
 115.131 -       1 & -1\leq t\leq1\\
 115.132 -       0 & else
 115.133 -     \end{array}
 115.134 -   \right.$
 115.135 -\end{center}
 115.136 -
 115.137 -\hrulefill
 115.138 -
 115.139 -\begin{tabbing}
 115.140 -1\=postcond \=: \= \= $\;\;\;\;$\=\kill
 115.141 -\>given    \>:\>  piecewise\_function \\
 115.142 -\>         \> \>  \>$fun (x (t::real),\ x=1\ ((t>=-1)\ \&\ (t<=1)),\ x=0)$\\
 115.143 -\>precond  \>:\>  TODO\\
 115.144 -\>find     \>:\>  $X(j\cdot\omega)$\\
 115.145 -\>postcond \>:\>  TODO\\
 115.146 -\end{tabbing}
 115.147 -
 115.148 -}
 115.149 -\end{frame}
 115.150 -
 115.151 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.152 -%%												Transform expl   REQ                   %%
 115.153 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.154 -
 115.155 -\begin{frame}\frametitle{Fourier Transform: Development effort}
 115.156 -{\small
 115.157 -\begin{center}
 115.158 -\begin{tabular}{l|l|r}
 115.159 -requirements            & comments             &effort\\ \hline\hline
 115.160 -solving Intrgrals		    & simple via propertie table     &     20\\
 115.161 -                        & \emph{real}          &    MT\\ \hline
 115.162 -transformation table    & simple transform     &    20\\ \hline
 115.163 -visualisation						& backend							 &    10\\ \hline
 115.164 -example collection      & with explanations    &    20\\ \hline\hline
 115.165 -                        &                      & 70-80\\
 115.166 -\end{tabular}
 115.167 -\end{center}
 115.168 -effort --- in 45min units\\
 115.169 -MT --- thesis ``Integrals'' (mathematics)
 115.170 -}
 115.171 -\end{frame}
 115.172 -
 115.173 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.174 -%%--------------------FOURIER---Conclusion-----------------------%%
 115.175 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.176 -
 115.177 -\begin{frame}{Fourier Transformation: Summary}
 115.178 -\begin{itemize}
 115.179 -
 115.180 -\item Standard integrals can be solved with tables
 115.181 -\item No real integration (yet avaible)
 115.182 -\item Math \emph{tricks} difficult to implement
 115.183 -
 115.184 -
 115.185 -\end{itemize}
 115.186 -\end{frame}
 115.187 -
 115.188 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.189 -%-----------------------------------------------------------------%
 115.190 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.191 -
 115.192 -\section[LTI Systems]{LTI systems}
 115.193 -\subsection[Convolution]{Convolution (Faltung)}
 115.194 -
 115.195 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.196 -%%												LTI INTRO				                       %%
 115.197 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.198 -
 115.199 -\begin{frame}\frametitle{Convolution: Introduction}
 115.200 -\begin{itemize}
 115.201 -\item Calculation include sums
 115.202 -\item Demonstrative examples
 115.203 -\item Visualisation is important
 115.204 -\end{itemize}
 115.205 -\end{frame}
 115.206 -
 115.207 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.208 -%%												LTI SPEC				                       %%
 115.209 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.210 -
 115.211 -\begin{frame}\frametitle{Convolution: Specification}
 115.212 -{\footnotesize
 115.213 -
 115.214 -Consider the two discrete-time, linear and time-invariant (LTI) systems with the following impulse response:
 115.215 -
 115.216 -\begin{center}
 115.217 -$h_1[n]=\left(\frac{3}{5}\right)^n\cdot u[n]$\\
 115.218 -$h_1[n]=\left(-\frac{2}{3}\right)^n\cdot u[n]$
 115.219 -\end{center}
 115.220 -
 115.221 -The two systems are cascaded seriell. Derive the impulse respinse of the overall system $h_c[n]$.
 115.222 -
 115.223 -\hrulefill
 115.224 -
 115.225 -\begin{tabbing}
 115.226 -1\=postcond \=: \= \= $\;\;\;\;$\=\kill
 115.227 -\>given    \>:\>  Signals h1[n], h2[n] \\
 115.228 -\>         \> \>  \>((h1[n]=(3/5)\textasciicircum{}n*u[n]),\,h2[n]=(-2/3)\textasciicircum{}n*u[n]))\\
 115.229 -                        
 115.230 -\>precond  \>:\>  TODO\\
 115.231 -\>find     \>:\>  $h1[n]\,*\,h2[n]$\\
 115.232 -\>postcond \>:\>  TODO\\
 115.233 -\end{tabbing}
 115.234 -
 115.235 -}
 115.236 -\end{frame}
 115.237 -
 115.238 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.239 -%%												LTI REQ  				                       %%
 115.240 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.241 -
 115.242 -\begin{frame}\frametitle{Convolution: Development effort}
 115.243 -{\small
 115.244 -\begin{center}
 115.245 -\begin{tabular}{l|l|r}
 115.246 -requirements            & comments             &effort\\ \hline\hline
 115.247 -simplify rationals      & \sisac               &     0\\ \hline
 115.248 -define $\sum\limits_{i=0}^{n}i$ & partly \sisac  &    10\\ \hline
 115.249 -simplify sum			      & termorder            &    10\\
 115.250 -                        & simplify rules       &    20\\
 115.251 -                        & use simplify rationals&     0\\ \hline
 115.252 -index adjustments       & with unit step       &      10\\ \hline
 115.253 -example collection      & with explanations    &    20\\ \hline\hline
 115.254 -                        &                      & 70-90\\
 115.255 -\end{tabular}
 115.256 -\end{center}
 115.257 -effort --- in 45min units\\
 115.258 -}
 115.259 -\end{frame}
 115.260 -
 115.261 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.262 -%%--------------------LTI-------Conclusion-----------------------%%
 115.263 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.264 -
 115.265 -\begin{frame}{Convolution: Summary}
 115.266 -\begin{itemize}
 115.267 -
 115.268 -\item Standard example
 115.269 -\item Straight forward
 115.270 -\item Challenge are sum limits
 115.271 -
 115.272 -\end{itemize}
 115.273 -\end{frame}
 115.274 -
 115.275 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.276 -%-----------------------------------------------------------------%
 115.277 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.278 -
 115.279 -\section[Z-transform]{Z-Transform}
 115.280 -\subsection[(Inverse) Z-Transform]{(Inverse) Z-Transform}
 115.281 -
 115.282 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.283 -%%												Z-Transform  INTRO                     %%
 115.284 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.285 -
 115.286 -\begin{frame}\frametitle{(Inverse) ${\cal Z}$-Transformation: Introduction}
 115.287 -\begin{itemize}
 115.288 -\item Pure Transformation is simple to realise with Z-Transform Properties (Table)
 115.289 -\item Partial Fraction are just math simplifications
 115.290 -\end{itemize}
 115.291 -\end{frame}
 115.292 -
 115.293 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.294 -%%												Z-Transform  SPEC                      %%
 115.295 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.296 -
 115.297 -\begin{frame}\frametitle{(Inverse) Z-Transformation: Specification}
 115.298 -{\footnotesize
 115.299 -
 115.300 -Determine the inverse z transform of the following expression. Hint: applay the partial fraction expansion.
 115.301 -
 115.302 -\begin{center}
 115.303 -$X(z)=\frac{3}{z-\frac{1}{4}-\frac{1}{8}z^{-1}},\ \ x[n]$ is absolute summable
 115.304 -\end{center}
 115.305 -
 115.306 -
 115.307 -\hrulefill
 115.308 -
 115.309 -\begin{tabbing}
 115.310 -1\=postcond \=: \= \= $\;\;\;\;$\=\kill
 115.311 -\>given    \>:\>  Expression of z \\
 115.312 -\>         \> \>  \>(X (z::complex),3/(z-1/4-1/8\,z\textasciicircum{}(-1)))\\
 115.313 -\>precond  \>:\>  TODO\\
 115.314 -\>find     \>:\>  Expression of n\\
 115.315 -\>         \> \>  \>$h[n]$\\
 115.316 -\>postcond \>:\>  TODO\\
 115.317 -\end{tabbing}
 115.318 -
 115.319 -}
 115.320 -\end{frame}
 115.321 -
 115.322 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.323 -%%												Z expl		REQ	                         %%
 115.324 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.325 -
 115.326 -
 115.327 -\begin{frame}\frametitle{(Inverse) Z-Transformation: Development effort}
 115.328 -{\small
 115.329 -\begin{center}
 115.330 -\begin{tabular}{l|l|r}
 115.331 -requirements            & comments             &effort\\ \hline\hline
 115.332 -solve for part.fract.   & \sisac: degree 2     &     0\\
 115.333 -                        & complex nomminators  &    30\\
 115.334 -                        & degree > 2           &    MT\\ \hline
 115.335 -simplify polynomial     & \sisac               &     0\\
 115.336 -simplify rational       & \sisac               &     0\\ \hline
 115.337 -part.fract.decomposition& degree 2             &      \\
 115.338 -                        & specification, method&    30\\ \hline
 115.339 -${\cal Z}^{-1}$ table    &                       &   20\\
 115.340 -                        & explanations, figures&    20\\ \hline
 115.341 -example collection      & with explanations    &    20\\ \hline\hline
 115.342 -                        &                      & 90-120\\
 115.343 -%                        &                      & 1 MT
 115.344 -\end{tabular}
 115.345 -\end{center}
 115.346 -effort --- in 45min units\\
 115.347 -MT --- thesis ``factorization'' (mathematics)
 115.348 -}
 115.349 -\end{frame}
 115.350 -
 115.351 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.352 -%%--------------------Z-TRANS---Conclusion-----------------------%%
 115.353 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.354 -
 115.355 -\begin{frame}{(Inverse) Z-Transformation: Summary}
 115.356 -\begin{itemize}
 115.357 -
 115.358 -\item No \emph{higher} math operations
 115.359 -\item Different subproblems of math (equation systems, etc.)
 115.360 -\item Both directions have the same effort
 115.361 -
 115.362 -\end{itemize}
 115.363 -\end{frame}
 115.364 -
 115.365 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.366 -%-----------------------------------------------------------------%
 115.367 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.368 -
 115.369 -\section[Conclusions]{Conclusions}
 115.370 -
 115.371 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.372 -%--------------------------DEMONSTRATION--------------------------%
 115.373 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.374 -
 115.375 -\begin{frame}{Demonstration}
 115.376 -
 115.377 -\centering{Demonstration}
 115.378 -
 115.379 -\end{frame}
 115.380 -
 115.381 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.382 -%--------------------------CONCLUSION-----------------------------%
 115.383 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.384 -
 115.385 -\begin{frame}{Conclusions}
 115.386 -
 115.387 -Design Challanges:
 115.388 -
 115.389 -{\small
 115.390 -\begin{itemize}
 115.391 -
 115.392 -\item Pre and Post conditions
 115.393 -\item Exact mathematic behind functions
 115.394 -\item Accurate mathematic notation
 115.395 -
 115.396 -\end{itemize}
 115.397 -}
 115.398 -
 115.399 -Goals:
 115.400 -{\small
 115.401 -\begin{itemize}
 115.402 -
 115.403 -\item Spot the power of \sisac
 115.404 -\item Implementation of generell but simple math problems
 115.405 -\item Setting up a good first guideline (documentation) for furher problem implemenations
 115.406 -
 115.407 -\end{itemize}
 115.408 -
 115.409 -\centering{Efforts are only approximations, due we have no \emph{real} experience data!}
 115.410 -}
 115.411 -
 115.412 -\end{frame}
 115.413 -
 115.414 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.415 -%--------------------------TIME LINE------------------------------%
 115.416 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 115.417 -
 115.418 -\begin{frame}{Comming up}
 115.419 -
 115.420 -{\small
 115.421 -\begin{tabular}{l r}
 115.422 -
 115.423 -Juli 2011 & project startup\\
 115.424 -Juli 2011 & information collection, 1st presentation\\
 115.425 -August 2011 & extern traineeship\\
 115.426 -September 2011 & main work\\
 115.427 -after Oktober & finishing, documentation\\
 115.428 -
 115.429 -\end{tabular}
 115.430 -}
 115.431 -
 115.432 -\end{frame}
 115.433 -
 115.434 -
 115.435 -\end{document}
 115.436 -
 115.437 -
   116.1 --- a/src/Doc/isac/jrocnik/final/jrocnik_present2.tex	Mon Sep 16 12:27:20 2013 +0200
   116.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   116.3 @@ -1,299 +0,0 @@
   116.4 -\documentclass[%
   116.5 -%handout, % prints handouts (=no animations, for printed version)
   116.6 -%mathserif
   116.7 -%xcolor=pst,
   116.8 -14pt
   116.9 -% fleqn
  116.10 -]{beamer}
  116.11 -
  116.12 -\usepackage{beamerthemedefault}
  116.13 -
  116.14 -\usepackage{color}
  116.15 -\definecolor{lgray}{RGB}{238,238,238}
  116.16 -
  116.17 -\useoutertheme[subsection=false]{smoothbars}
  116.18 -\useinnertheme{circles}
  116.19 -
  116.20 -\setbeamercolor{block title}{fg=black,bg=gray}
  116.21 -\setbeamercolor{block title alerted}{use=alerted text,fg=black,bg=alerted text.fg!75!bg}
  116.22 -\setbeamercolor{block title example}{use=example text,fg=black,bg=example text.fg!75!bg}
  116.23 -\setbeamercolor{block body}{parent=normal text,use=block title,bg=block title.bg!25!bg}
  116.24 -\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!25!bg}
  116.25 -\setbeamercolor{block body example}{parent=normal text,use=block title example,bg=block title example.bg!25!bg}
  116.26 -
  116.27 -%activate hyperlinks at the end
  116.28 -%\usepackage{hyperref}
  116.29 -
  116.30 -\usepackage[english]{babel}
  116.31 -\usepackage[utf8]{inputenc}
  116.32 -\usepackage{array}
  116.33 -\usepackage{setspace}
  116.34 -
  116.35 -\definecolor{tug}{rgb}{0.96862,0.14509,0.27450}
  116.36 -
  116.37 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  116.38 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  116.39 -
  116.40 -\setbeamertemplate{headline}[text line]{
  116.41 -	\begin{beamercolorbox}[wd=\paperwidth,ht=8ex,dp=4ex]{}
  116.42 -		\insertnavigation{0.85\paperwidth} 
  116.43 -		\raisebox{-10pt}{\includegraphics[width=15mm]{tuglogo}}\vskip2pt
  116.44 -		\hskip-1pt\rule{\paperwidth}{0.3pt}
  116.45 -	\end{beamercolorbox}
  116.46 -}
  116.47 -
  116.48 -\setbeamertemplate{navigation symbols}{}
  116.49 -
  116.50 -\definecolor{gray}{rgb}{0.8,0.8,0.8}
  116.51 -\setbeamercolor{footline}{fg=black,bg=gray}
  116.52 -
  116.53 -% Fusszeile mit Autor, Titel und Foliennummer / Gesamtfolienzahl
  116.54 -\setbeamertemplate{footline}[text line]{
  116.55 -	\hskip-1pt
  116.56 -	\begin{beamercolorbox}[wd=\paperwidth]{footline}
  116.57 -			\rule{\paperwidth}{0.3pt}
  116.58 -			\colorbox{tug}{\rule{3pt}{0pt}\rule{0pt}{3pt}}
  116.59 -			\textbf{\rule{0pt}{5pt}\insertshortauthor\hfill\insertshortinstitute\hfill%
  116.60 -					\insertshorttitle\rule{1em}{0pt}}
  116.61 -			\rule{\paperwidth}{0.3pt}
  116.62 -	\end{beamercolorbox}
  116.63 -	\begin{beamercolorbox}[wd=\paperwidth,ht=2ex,dp=2ex]{white}
  116.64 -	\end{beamercolorbox}
  116.65 -}%
  116.66 -
  116.67 -%% Titelblatt-Einstellungen
  116.68 -\institute[IST, SPSC]{Institute for Software Technology\\Institute of Signal Processing and Speech Communication\\Graz University of Technology}
  116.69 -\title[ISAC for Signal Processing]{Interactive Course Material for\\ Signal Processing based on\\ Isabelle/\isac}
  116.70 -\subtitle{Baccalaureate Thesis}
  116.71 -\author{Jan Rocnik}
  116.72 -\date{\today}
  116.73 -
  116.74 -% Subject and Keywords for PDF
  116.75 -\subject{Final presentation of Baccalaureate Thesis}
  116.76 -\keywords{Isac, Isabelle, ist, spsc, thesis, course material}
  116.77 -
  116.78 -\titlegraphic{\includegraphics[width=20mm]{tuglogo}}
  116.79 -
  116.80 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  116.81 -\begin{document}
  116.82 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  116.83 -
  116.84 -\begin{frame}[plain]
  116.85 -  \frametitle{}
  116.86 -  \titlepage
  116.87 -\end{frame}
  116.88 -
  116.89 -
  116.90 -
  116.91 -\begin{frame}
  116.92 -  \frametitle{Contents}
  116.93 -  \begin{spacing}{0.3}
  116.94 -        \tableofcontents[hideallsubsections %
  116.95 -                        % ,pausesections
  116.96 -                        ] % erzeugt Inhaltsverzeichnis
  116.97 -  \end{spacing}
  116.98 -\end{frame}
  116.99 -
 116.100 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.101 -\section{Introduction}
 116.102 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.103 -
 116.104 -\subsection{isabelle}
 116.105 -\begin{frame}
 116.106 -	\frametitle{What is Isabelle?}
 116.107 -	\begin{spacing}{1.5}
 116.108 -		\begin{itemize}
 116.109 -			\item Generic Proof Assistant
 116.110 -			\item Formula proofing in logical calculus
 116.111 -			\item Developed in Cambridge, Muenchen and Paris
 116.112 -		\end{itemize}
 116.113 -	\end{spacing}
 116.114 -\end{frame}
 116.115 -
 116.116 -\subsection{isac}
 116.117 -\begin{frame}
 116.118 -	\frametitle{What is {\isac}?}
 116.119 -	\begin{spacing}{1.5}
 116.120 -		\begin{itemize}
 116.121 -			\item \textcolor{tug}{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal A}$}belle for~{}\textcolor{tug}{${\cal C}$}alculations
 116.122 -			\item Interactive Course Material
 116.123 -			\item Learning Coach
 116.124 -			\item Developed at Austrian Universities
 116.125 -		\end{itemize}
 116.126 -	\end{spacing}
 116.127 -\end{frame}
 116.128 -
 116.129 -\subsection{motivation}
 116.130 -\begin{frame}
 116.131 -	\frametitle{Motivation - {\isac{}}'s~Potential}
 116.132 -	\begin{itemize}
 116.133 -		\item Stepwise solving of engineering problems\\
 116.134 -					{\small $\rightarrow$ \textcolor{tug}{Consistent Framework}}
 116.135 -		\item Explaining underlying knowledge\\
 116.136 -					{\small $\rightarrow$  \textcolor{tug}{Transparent Content, Access to Multimedia Content}}
 116.137 -		\item Checking steps input by the student\\
 116.138 -					{\small $\rightarrow$ \textcolor{tug}{Proof Situation}}
 116.139 -		\item Assessing stepwise problem solving\\
 116.140 -					{\small $\rightarrow$ \textcolor{tug}{One system for tutoring and assessment}}
 116.141 -	\end{itemize}
 116.142 -\end{frame}
 116.143 -
 116.144 -
 116.145 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.146 -\section{Thesis Definition}
 116.147 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.148 -
 116.149 -\begin{frame}
 116.150 -	\frametitle{Thesis Definition}
 116.151 -	%---> Follow up thesis abstract! <---%
 116.152 -	\begin{spacing}{1.2}
 116.153 -		\begin{itemize}
 116.154 -			\item Creation of interactive course material\\
 116.155 -						{\small Based on problems given by SPSC}
 116.156 -			\item Content should be usable\ldots
 116.157 -			\begin{itemize}
 116.158 -				\item in Signalprocessing Problem Classes
 116.159 -				\item in \emph{STEOP}
 116.160 -			\end{itemize}
 116.161 -			\item Guideline for upcoming TP-Programmers.
 116.162 -			\item Feedback of usability\\
 116.163 -			      {\small (TP-Programming-Language)}
 116.164 -		\end{itemize}
 116.165 -	\end{spacing}
 116.166 -\end{frame}
 116.167 -
 116.168 -\subsection{issues}
 116.169 -\begin{frame}
 116.170 -	\frametitle{Issues to Accomplish I}
 116.171 -	\begin{spacing}{1.4}
 116.172 -		\begin{itemize}
 116.173 -			\item What knowledge is mechanized in Isabelle?\\
 116.174 -						{\small How about new?}
 116.175 -			\item What problems are implemented in {\sisac{}}?\\
 116.176 -						{\small How about new?}
 116.177 -			\item What is the effort?
 116.178 -		\end{itemize}
 116.179 -	\end{spacing}
 116.180 -\end{frame}
 116.181 -
 116.182 -\begin{frame}
 116.183 -	\frametitle{Issues to Accomplish II}
 116.184 -\begin{spacing}{1.4}
 116.185 -\begin{itemize}
 116.186 -	\item How look calculations like?\\
 116.187 -				{\small Ansatzs, Subproblems?}
 116.188 -	\item How are problems specified?\\
 116.189 -				{\small Given, Pre-/Postcondition, Find?}
 116.190 -	\item What is the contents of the interactive course material?\\
 116.191 -				{\small Figures, Explanations,\ldots}
 116.192 -\end{itemize}
 116.193 -\end{spacing}
 116.194 -\end{frame}
 116.195 -
 116.196 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.197 -\section{Details}
 116.198 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.199 -
 116.200 -\subsection{Technical Survey}
 116.201 -\begin{frame}
 116.202 -	\frametitle{Technical Survey I {\normalsize Mechanizing Knowledge}}
 116.203 -	\begin{spacing}{1.5}
 116.204 -		\begin{itemize}
 116.205 -			\item Not enough knowledge is mechanized\\
 116.206 -						{\small Equation Solving, Integrals,\ldots}
 116.207 -			\item Computer Mathematicians required!\\
 116.208 -						{\small Mathematics: Equation solving, Engineer: Z-Transform}
 116.209 -			\item RISC Linz, Mathematics TU Graz
 116.210 -		\end{itemize}
 116.211 -	\end{spacing}
 116.212 -\end{frame}
 116.213 -
 116.214 -\begin{frame}
 116.215 -	\frametitle{Technical Survey II {\normalsize Notation Problems} }
 116.216 -	\begin{spacing}{1.5}
 116.217 -		\begin{itemize}
 116.218 -			\item Different brackets have different meanings\\
 116.219 -						{\small $u[n] \neq u(n)$\ldots in Math; but also in the source code}
 116.220 -			\item Simplification, tricks and beauty\\
 116.221 -						{\small $X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY$}\\
 116.222 -						{\small $\frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)=\frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=$}\\
 116.223 -						{\small $=\frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}=\frac{1}{\omega}\,e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} $}
 116.224 -		\end{itemize}
 116.225 -	\end{spacing}
 116.226 -\end{frame}
 116.227 -
 116.228 -\subsection{Demonstration}
 116.229 -\begin{frame}
 116.230 -	\frametitle{Demonstration of {\isac}}
 116.231 -	\begin{spacing}{1.5}
 116.232 -		\begin{itemize}
 116.233 -			\item {\Large Development Environment} (Backend)
 116.234 -			\vspace{15mm}
 116.235 -			\item {\Large Math Assistant} (Frontend)
 116.236 -		\end{itemize}
 116.237 -	\end{spacing}
 116.238 -\end{frame}
 116.239 -
 116.240 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.241 -\section{Summary}
 116.242 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.243 -
 116.244 -\subsection{Accomplished Work}
 116.245 -\begin{frame}
 116.246 -	\frametitle{Accomplished Work}
 116.247 -	\begin{itemize}
 116.248 -      \item Partial Fractions\\ {\small Theorems, Specification, Program}
 116.249 -      \item Inverse Z-Transform with Partial Fractions\\ {\small Theorems, Specification, Program}
 116.250 -      \item Isabelle Theory indicating issues\\ {\small Preparation for {\sisac{}}-developers}
 116.251 -	\end{itemize}
 116.252 -\end{frame}
 116.253 -
 116.254 -\subsection{Partially Accomplished}
 116.255 -\begin{frame}
 116.256 -	\frametitle{Partially Accomplished}
 116.257 -	\begin{spacing}{1.4}
 116.258 -		\begin{itemize}
 116.259 -	     \item Guidelines for Upcoming TP-Programmers\\
 116.260 -	           {\small \textbf{Note:} Development environment and languages changes} 
 116.261 -	     \item Examples
 116.262 -		\end{itemize}
 116.263 -	\end{spacing}
 116.264 -\end{frame}
 116.265 -
 116.266 -\subsection{Not Accomplished}
 116.267 -\begin{frame}
 116.268 -	\frametitle{Not Accomplished}
 116.269 -	\begin{spacing}{1.2}
 116.270 -		\begin{itemize}
 116.271 -	    \item Content of interactive course material\\
 116.272 -	    			{\small Figures, Explanations,\ldots}
 116.273 -	    \item A sufficient count of implementations
 116.274 -	    \item No support of labs and lectures atm
 116.275 -	    \item No material for \emph{STEOP} atm
 116.276 -		\end{itemize}
 116.277 -	\end{spacing}
 116.278 -\end{frame}
 116.279 -
 116.280 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.281 -\section{Conclusion}
 116.282 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.283 -
 116.284 -\begin{frame}
 116.285 -	\frametitle{Conclusion}
 116.286 -	\begin{spacing}{1.2}
 116.287 -	    \begin{itemize}
 116.288 -				\item TP-based language not ready
 116.289 -				\item Programming guideline not yet sufficient
 116.290 -				\item Hope for usability in enginieering studies
 116.291 -				\vspace{5mm}
 116.292 -				\item Hard to spend 200h on 1 programm
 116.293 -				\item \isac{} pointed at my own error
 116.294 -			\end{itemize}
 116.295 -		\end{spacing}
 116.296 -\end{frame}
 116.297 -
 116.298 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.299 -\end{document}
 116.300 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 116.301 -
 116.302 -%% EOF
 116.303 \ No newline at end of file
   117.1 --- a/src/Doc/isac/jrocnik/fixbookmarks.pl	Mon Sep 16 12:27:20 2013 +0200
   117.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   117.3 @@ -1,4 +0,0 @@
   117.4 -
   117.5 -s/\\([a-zA-Z]+)\s*/$1/g;
   117.6 -s/\$//g;
   117.7 -s/^BOOKMARK/\\BOOKMARK/g;
   118.1 --- a/src/Doc/isac/jrocnik/isabelle.sty	Mon Sep 16 12:27:20 2013 +0200
   118.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   118.3 @@ -1,218 +0,0 @@
   118.4 -%%
   118.5 -%% macros for Isabelle generated LaTeX output
   118.6 -%%
   118.7 -
   118.8 -%%% Simple document preparation (based on theory token language and symbols)
   118.9 -
  118.10 -% isabelle environments
  118.11 -
  118.12 -\newcommand{\isabellecontext}{UNKNOWN}
  118.13 -
  118.14 -\newcommand{\isastyle}{\UNDEF}
  118.15 -\newcommand{\isastyleminor}{\UNDEF}
  118.16 -\newcommand{\isastylescript}{\UNDEF}
  118.17 -\newcommand{\isastyletext}{\normalsize\rm}
  118.18 -\newcommand{\isastyletxt}{\rm}
  118.19 -\newcommand{\isastylecmt}{\rm}
  118.20 -
  118.21 -%symbol markup -- \emph achieves decent spacing via italic corrections
  118.22 -\newcommand{\isamath}[1]{\emph{$#1$}}
  118.23 -\newcommand{\isatext}[1]{\emph{#1}}
  118.24 -\DeclareRobustCommand{\isascriptstyle}{\def\isamath##1{##1}\def\isatext##1{\mbox{\isastylescript##1}}}
  118.25 -\newcommand{\isactrlsub}[1]{\emph{\isascriptstyle${}\sb{#1}$}}
  118.26 -\newcommand{\isactrlsup}[1]{\emph{\isascriptstyle${}\sp{#1}$}}
  118.27 -\newcommand{\isactrlisub}[1]{\emph{\isascriptstyle${}\sb{#1}$}}
  118.28 -\newcommand{\isactrlisup}[1]{\emph{\isascriptstyle${}\sp{#1}$}}
  118.29 -\DeclareRobustCommand{\isactrlbsub}{\emph\bgroup\math{}\sb\bgroup\mbox\bgroup\isastylescript}
  118.30 -\DeclareRobustCommand{\isactrlesub}{\egroup\egroup\endmath\egroup}
  118.31 -\DeclareRobustCommand{\isactrlbsup}{\emph\bgroup\math{}\sp\bgroup\mbox\bgroup\isastylescript}
  118.32 -\DeclareRobustCommand{\isactrlesup}{\egroup\egroup\endmath\egroup}
  118.33 -\newcommand{\isactrlbold}[1]{{\bfseries\upshape\boldmath#1}}
  118.34 -\newcommand{\isactrlloc}[1]{{\bfseries\upshape\boldmath#1}}
  118.35 -
  118.36 -\newenvironment{isaantiq}{{\isacharat\isacharbraceleft}}{{\isacharbraceright}}
  118.37 -\newcommand{\isaantiqopen}{\isakeyword{\isacharbraceleft}}
  118.38 -\newcommand{\isaantiqclose}{\isakeyword{\isacharbraceright}}
  118.39 -
  118.40 -\newdimen\isa@parindent\newdimen\isa@parskip
  118.41 -
  118.42 -\newenvironment{isabellebody}{%
  118.43 -\isamarkuptrue\par%
  118.44 -\isa@parindent\parindent\parindent0pt%
  118.45 -\isa@parskip\parskip\parskip0pt%
  118.46 -\isastyle}{\par}
  118.47 -
  118.48 -\newenvironment{isabelle}
  118.49 -{\begin{trivlist}\begin{isabellebody}\item\relax}
  118.50 -{\end{isabellebody}\end{trivlist}}
  118.51 -
  118.52 -\newcommand{\isa}[1]{\emph{\isastyleminor #1}}
  118.53 -
  118.54 -\newcommand{\isaindent}[1]{\hphantom{#1}}
  118.55 -\newcommand{\isanewline}{\mbox{}\par\mbox{}}
  118.56 -\newcommand{\isasep}{}
  118.57 -\newcommand{\isadigit}[1]{#1}
  118.58 -
  118.59 -\newcommand{\isachardefaults}{%
  118.60 -\chardef\isacharbang=`\!%
  118.61 -\chardef\isachardoublequote=`\"%
  118.62 -\chardef\isachardoublequoteopen=`\"%
  118.63 -\chardef\isachardoublequoteclose=`\"%
  118.64 -\chardef\isacharhash=`\#%
  118.65 -\chardef\isachardollar=`\$%
  118.66 -\chardef\isacharpercent=`\%%
  118.67 -\chardef\isacharampersand=`\&%
  118.68 -\chardef\isacharprime=`\'%
  118.69 -\chardef\isacharparenleft=`\(%
  118.70 -\chardef\isacharparenright=`\)%
  118.71 -\chardef\isacharasterisk=`\*%
  118.72 -\chardef\isacharplus=`\+%
  118.73 -\chardef\isacharcomma=`\,%
  118.74 -\chardef\isacharminus=`\-%
  118.75 -\chardef\isachardot=`\.%
  118.76 -\chardef\isacharslash=`\/%
  118.77 -\chardef\isacharcolon=`\:%
  118.78 -\chardef\isacharsemicolon=`\;%
  118.79 -\chardef\isacharless=`\<%
  118.80 -\chardef\isacharequal=`\=%
  118.81 -\chardef\isachargreater=`\>%
  118.82 -\chardef\isacharquery=`\?%
  118.83 -\chardef\isacharat=`\@%
  118.84 -\chardef\isacharbrackleft=`\[%
  118.85 -\chardef\isacharbackslash=`\\%
  118.86 -\chardef\isacharbrackright=`\]%
  118.87 -\chardef\isacharcircum=`\^%
  118.88 -\chardef\isacharunderscore=`\_%
  118.89 -\def\isacharunderscorekeyword{\_}%
  118.90 -\chardef\isacharbackquote=`\`%
  118.91 -\chardef\isacharbackquoteopen=`\`%
  118.92 -\chardef\isacharbackquoteclose=`\`%
  118.93 -\chardef\isacharbraceleft=`\{%
  118.94 -\chardef\isacharbar=`\|%
  118.95 -\chardef\isacharbraceright=`\}%
  118.96 -\chardef\isachartilde=`\~%
  118.97 -\def\isacharverbatimopen{\isacharbraceleft\isacharasterisk}%
  118.98 -\def\isacharverbatimclose{\isacharasterisk\isacharbraceright}%
  118.99 -}
 118.100 -
 118.101 -\newcommand{\isaliteral}[2]{#2}
 118.102 -\newcommand{\isanil}{}
 118.103 -
 118.104 -
 118.105 -% keyword and section markup
 118.106 -
 118.107 -\newcommand{\isakeyword}[1]
 118.108 -{\emph{\bf\def\isachardot{.}\def\isacharunderscore{\isacharunderscorekeyword}%
 118.109 -\def\isacharbraceleft{\{}\def\isacharbraceright{\}}#1}}
 118.110 -\newcommand{\isacommand}[1]{\isakeyword{#1}}
 118.111 -
 118.112 -\newcommand{\isamarkupheader}[1]{\section{#1}}
 118.113 -\newcommand{\isamarkupchapter}[1]{\chapter{#1}}
 118.114 -\newcommand{\isamarkupsection}[1]{\section{#1}}
 118.115 -\newcommand{\isamarkupsubsection}[1]{\subsection{#1}}
 118.116 -\newcommand{\isamarkupsubsubsection}[1]{\subsubsection{#1}}
 118.117 -\newcommand{\isamarkupsect}[1]{\section{#1}}
 118.118 -\newcommand{\isamarkupsubsect}[1]{\subsection{#1}}
 118.119 -\newcommand{\isamarkupsubsubsect}[1]{\subsubsection{#1}}
 118.120 -
 118.121 -\newif\ifisamarkup
 118.122 -\newcommand{\isabeginpar}{\par\ifisamarkup\relax\else\medskip\fi}
 118.123 -\newcommand{\isaendpar}{\par\medskip}
 118.124 -\newenvironment{isapar}{\parindent\isa@parindent\parskip\isa@parskip\isabeginpar}{\isaendpar}
 118.125 -\newenvironment{isamarkuptext}{\par\isastyletext\begin{isapar}}{\end{isapar}}
 118.126 -\newenvironment{isamarkuptxt}{\par\isastyletxt\begin{isapar}}{\end{isapar}}
 118.127 -\newcommand{\isamarkupcmt}[1]{{\isastylecmt--- #1}}
 118.128 -
 118.129 -
 118.130 -% styles
 118.131 -
 118.132 -\def\isabellestyle#1{\csname isabellestyle#1\endcsname}
 118.133 -
 118.134 -\newcommand{\isabellestyledefault}{%
 118.135 -\renewcommand{\isastyle}{\small\tt\slshape}%
 118.136 -\renewcommand{\isastyleminor}{\small\tt\slshape}%
 118.137 -\renewcommand{\isastylescript}{\footnotesize\tt\slshape}%
 118.138 -\isachardefaults%
 118.139 -}
 118.140 -\isabellestyledefault
 118.141 -
 118.142 -\newcommand{\isabellestylett}{%
 118.143 -\renewcommand{\isastyle}{\small\tt}%
 118.144 -\renewcommand{\isastyleminor}{\small\tt}%
 118.145 -\renewcommand{\isastylescript}{\footnotesize\tt}%
 118.146 -\isachardefaults%
 118.147 -}
 118.148 -
 118.149 -\newcommand{\isabellestyleit}{%
 118.150 -\renewcommand{\isastyle}{\small\it}%
 118.151 -\renewcommand{\isastyleminor}{\it}%
 118.152 -\renewcommand{\isastylescript}{\footnotesize\it}%
 118.153 -\renewcommand{\isacharunderscorekeyword}{\mbox{-}}%
 118.154 -\renewcommand{\isacharbang}{\isamath{!}}%
 118.155 -\renewcommand{\isachardoublequote}{\isanil}%
 118.156 -\renewcommand{\isachardoublequoteopen}{\isanil}%
 118.157 -\renewcommand{\isachardoublequoteclose}{\isanil}%
 118.158 -\renewcommand{\isacharhash}{\isamath{\#}}%
 118.159 -\renewcommand{\isachardollar}{\isamath{\$}}%
 118.160 -\renewcommand{\isacharpercent}{\isamath{\%}}%
 118.161 -\renewcommand{\isacharampersand}{\isamath{\&}}%
 118.162 -\renewcommand{\isacharprime}{\isamath{\mskip2mu{'}\mskip-2mu}}%
 118.163 -\renewcommand{\isacharparenleft}{\isamath{(}}%
 118.164 -\renewcommand{\isacharparenright}{\isamath{)}}%
 118.165 -\renewcommand{\isacharasterisk}{\isamath{*}}%
 118.166 -\renewcommand{\isacharplus}{\isamath{+}}%
 118.167 -\renewcommand{\isacharcomma}{\isamath{\mathord,}}%
 118.168 -\renewcommand{\isacharminus}{\isamath{-}}%
 118.169 -\renewcommand{\isachardot}{\isamath{\mathord.}}%
 118.170 -\renewcommand{\isacharslash}{\isamath{/}}%
 118.171 -\renewcommand{\isacharcolon}{\isamath{\mathord:}}%
 118.172 -\renewcommand{\isacharsemicolon}{\isamath{\mathord;}}%
 118.173 -\renewcommand{\isacharless}{\isamath{<}}%
 118.174 -\renewcommand{\isacharequal}{\isamath{=}}%
 118.175 -\renewcommand{\isachargreater}{\isamath{>}}%
 118.176 -\renewcommand{\isacharat}{\isamath{@}}%
 118.177 -\renewcommand{\isacharbrackleft}{\isamath{[}}%
 118.178 -\renewcommand{\isacharbackslash}{\isamath{\backslash}}%
 118.179 -\renewcommand{\isacharbrackright}{\isamath{]}}%
 118.180 -\renewcommand{\isacharunderscore}{\mbox{-}}%
 118.181 -\renewcommand{\isacharbraceleft}{\isamath{\{}}%
 118.182 -\renewcommand{\isacharbar}{\isamath{\mid}}%
 118.183 -\renewcommand{\isacharbraceright}{\isamath{\}}}%
 118.184 -\renewcommand{\isachartilde}{\isamath{{}\sp{\sim}}}%
 118.185 -\renewcommand{\isacharbackquoteopen}{\isatext{\raise.3ex\hbox{$\scriptscriptstyle\langle$}}}%
 118.186 -\renewcommand{\isacharbackquoteclose}{\isatext{\raise.3ex\hbox{$\scriptscriptstyle\rangle$}}}%
 118.187 -\renewcommand{\isacharverbatimopen}{\isamath{\langle\!\langle}}%
 118.188 -\renewcommand{\isacharverbatimclose}{\isamath{\rangle\!\rangle}}%
 118.189 -}
 118.190 -
 118.191 -\newcommand{\isabellestylesl}{%
 118.192 -\isabellestyleit%
 118.193 -\renewcommand{\isastyle}{\small\sl}%
 118.194 -\renewcommand{\isastyleminor}{\sl}%
 118.195 -\renewcommand{\isastylescript}{\footnotesize\sl}%
 118.196 -}
 118.197 -
 118.198 -
 118.199 -% tagged regions
 118.200 -
 118.201 -%plain TeX version of comment package -- much faster!
 118.202 -\let\isafmtname\fmtname\def\fmtname{plain}
 118.203 -\usepackage{comment}
 118.204 -\let\fmtname\isafmtname
 118.205 -
 118.206 -\newcommand{\isafold}[1]{\emph{$\langle\mathord{\mathit{#1}}\rangle$}}
 118.207 -
 118.208 -\newcommand{\isakeeptag}[1]%
 118.209 -{\includecomment{isadelim#1}\includecomment{isatag#1}\csarg\def{isafold#1}{}}
 118.210 -\newcommand{\isadroptag}[1]%
 118.211 -{\excludecomment{isadelim#1}\excludecomment{isatag#1}\csarg\def{isafold#1}{}}
 118.212 -\newcommand{\isafoldtag}[1]%
 118.213 -{\includecomment{isadelim#1}\excludecomment{isatag#1}\csarg\def{isafold#1}{\isafold{#1}}}
 118.214 -
 118.215 -\isakeeptag{theory}
 118.216 -\isakeeptag{proof}
 118.217 -\isakeeptag{ML}
 118.218 -\isakeeptag{visible}
 118.219 -\isadroptag{invisible}
 118.220 -
 118.221 -\IfFileExists{isabelletags.sty}{\usepackage{isabelletags}}{}
   119.1 --- a/src/Doc/isac/jrocnik/isabellesym.sty	Mon Sep 16 12:27:20 2013 +0200
   119.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   119.3 @@ -1,358 +0,0 @@
   119.4 -%%
   119.5 -%% definitions of standard Isabelle symbols
   119.6 -%%
   119.7 -
   119.8 -\newcommand{\isasymzero}{\isamath{\mathbf{0}}}  %requires amssymb
   119.9 -\newcommand{\isasymone}{\isamath{\mathbf{1}}}  %requires amssymb
  119.10 -\newcommand{\isasymtwo}{\isamath{\mathbf{2}}}  %requires amssymb
  119.11 -\newcommand{\isasymthree}{\isamath{\mathbf{3}}}  %requires amssymb
  119.12 -\newcommand{\isasymfour}{\isamath{\mathbf{4}}}  %requires amssymb
  119.13 -\newcommand{\isasymfive}{\isamath{\mathbf{5}}}  %requires amssymb
  119.14 -\newcommand{\isasymsix}{\isamath{\mathbf{6}}}  %requires amssymb
  119.15 -\newcommand{\isasymseven}{\isamath{\mathbf{7}}}  %requires amssymb
  119.16 -\newcommand{\isasymeight}{\isamath{\mathbf{8}}}  %requires amssymb
  119.17 -\newcommand{\isasymnine}{\isamath{\mathbf{9}}}  %requires amssymb
  119.18 -\newcommand{\isasymA}{\isamath{\mathcal{A}}}
  119.19 -\newcommand{\isasymB}{\isamath{\mathcal{B}}}
  119.20 -\newcommand{\isasymC}{\isamath{\mathcal{C}}}
  119.21 -\newcommand{\isasymD}{\isamath{\mathcal{D}}}
  119.22 -\newcommand{\isasymE}{\isamath{\mathcal{E}}}
  119.23 -\newcommand{\isasymF}{\isamath{\mathcal{F}}}
  119.24 -\newcommand{\isasymG}{\isamath{\mathcal{G}}}
  119.25 -\newcommand{\isasymH}{\isamath{\mathcal{H}}}
  119.26 -\newcommand{\isasymI}{\isamath{\mathcal{I}}}
  119.27 -\newcommand{\isasymJ}{\isamath{\mathcal{J}}}
  119.28 -\newcommand{\isasymK}{\isamath{\mathcal{K}}}
  119.29 -\newcommand{\isasymL}{\isamath{\mathcal{L}}}
  119.30 -\newcommand{\isasymM}{\isamath{\mathcal{M}}}
  119.31 -\newcommand{\isasymN}{\isamath{\mathcal{N}}}
  119.32 -\newcommand{\isasymO}{\isamath{\mathcal{O}}}
  119.33 -\newcommand{\isasymP}{\isamath{\mathcal{P}}}
  119.34 -\newcommand{\isasymQ}{\isamath{\mathcal{Q}}}
  119.35 -\newcommand{\isasymR}{\isamath{\mathcal{R}}}
  119.36 -\newcommand{\isasymS}{\isamath{\mathcal{S}}}
  119.37 -\newcommand{\isasymT}{\isamath{\mathcal{T}}}
  119.38 -\newcommand{\isasymU}{\isamath{\mathcal{U}}}
  119.39 -\newcommand{\isasymV}{\isamath{\mathcal{V}}}
  119.40 -\newcommand{\isasymW}{\isamath{\mathcal{W}}}
  119.41 -\newcommand{\isasymX}{\isamath{\mathcal{X}}}
  119.42 -\newcommand{\isasymY}{\isamath{\mathcal{Y}}}
  119.43 -\newcommand{\isasymZ}{\isamath{\mathcal{Z}}}
  119.44 -\newcommand{\isasyma}{\isamath{\mathrm{a}}}
  119.45 -\newcommand{\isasymb}{\isamath{\mathrm{b}}}
  119.46 -\newcommand{\isasymc}{\isamath{\mathrm{c}}}
  119.47 -\newcommand{\isasymd}{\isamath{\mathrm{d}}}
  119.48 -\newcommand{\isasyme}{\isamath{\mathrm{e}}}
  119.49 -\newcommand{\isasymf}{\isamath{\mathrm{f}}}
  119.50 -\newcommand{\isasymg}{\isamath{\mathrm{g}}}
  119.51 -\newcommand{\isasymh}{\isamath{\mathrm{h}}}
  119.52 -\newcommand{\isasymi}{\isamath{\mathrm{i}}}
  119.53 -\newcommand{\isasymj}{\isamath{\mathrm{j}}}
  119.54 -\newcommand{\isasymk}{\isamath{\mathrm{k}}}
  119.55 -\newcommand{\isasyml}{\isamath{\mathrm{l}}}
  119.56 -\newcommand{\isasymm}{\isamath{\mathrm{m}}}
  119.57 -\newcommand{\isasymn}{\isamath{\mathrm{n}}}
  119.58 -\newcommand{\isasymo}{\isamath{\mathrm{o}}}
  119.59 -\newcommand{\isasymp}{\isamath{\mathrm{p}}}
  119.60 -\newcommand{\isasymq}{\isamath{\mathrm{q}}}
  119.61 -\newcommand{\isasymr}{\isamath{\mathrm{r}}}
  119.62 -\newcommand{\isasyms}{\isamath{\mathrm{s}}}
  119.63 -\newcommand{\isasymt}{\isamath{\mathrm{t}}}
  119.64 -\newcommand{\isasymu}{\isamath{\mathrm{u}}}
  119.65 -\newcommand{\isasymv}{\isamath{\mathrm{v}}}
  119.66 -\newcommand{\isasymw}{\isamath{\mathrm{w}}}
  119.67 -\newcommand{\isasymx}{\isamath{\mathrm{x}}}
  119.68 -\newcommand{\isasymy}{\isamath{\mathrm{y}}}
  119.69 -\newcommand{\isasymz}{\isamath{\mathrm{z}}}
  119.70 -\newcommand{\isasymAA}{\isamath{\mathfrak{A}}}  %requires eufrak
  119.71 -\newcommand{\isasymBB}{\isamath{\mathfrak{B}}}  %requires eufrak
  119.72 -\newcommand{\isasymCC}{\isamath{\mathfrak{C}}}  %requires eufrak
  119.73 -\newcommand{\isasymDD}{\isamath{\mathfrak{D}}}  %requires eufrak
  119.74 -\newcommand{\isasymEE}{\isamath{\mathfrak{E}}}  %requires eufrak
  119.75 -\newcommand{\isasymFF}{\isamath{\mathfrak{F}}}  %requires eufrak
  119.76 -\newcommand{\isasymGG}{\isamath{\mathfrak{G}}}  %requires eufrak
  119.77 -\newcommand{\isasymHH}{\isamath{\mathfrak{H}}}  %requires eufrak
  119.78 -\newcommand{\isasymII}{\isamath{\mathfrak{I}}}  %requires eufrak
  119.79 -\newcommand{\isasymJJ}{\isamath{\mathfrak{J}}}  %requires eufrak
  119.80 -\newcommand{\isasymKK}{\isamath{\mathfrak{K}}}  %requires eufrak
  119.81 -\newcommand{\isasymLL}{\isamath{\mathfrak{L}}}  %requires eufrak
  119.82 -\newcommand{\isasymMM}{\isamath{\mathfrak{M}}}  %requires eufrak
  119.83 -\newcommand{\isasymNN}{\isamath{\mathfrak{N}}}  %requires eufrak
  119.84 -\newcommand{\isasymOO}{\isamath{\mathfrak{O}}}  %requires eufrak
  119.85 -\newcommand{\isasymPP}{\isamath{\mathfrak{P}}}  %requires eufrak
  119.86 -\newcommand{\isasymQQ}{\isamath{\mathfrak{Q}}}  %requires eufrak
  119.87 -\newcommand{\isasymRR}{\isamath{\mathfrak{R}}}  %requires eufrak
  119.88 -\newcommand{\isasymSS}{\isamath{\mathfrak{S}}}  %requires eufrak
  119.89 -\newcommand{\isasymTT}{\isamath{\mathfrak{T}}}  %requires eufrak
  119.90 -\newcommand{\isasymUU}{\isamath{\mathfrak{U}}}  %requires eufrak
  119.91 -\newcommand{\isasymVV}{\isamath{\mathfrak{V}}}  %requires eufrak
  119.92 -\newcommand{\isasymWW}{\isamath{\mathfrak{W}}}  %requires eufrak
  119.93 -\newcommand{\isasymXX}{\isamath{\mathfrak{X}}}  %requires eufrak
  119.94 -\newcommand{\isasymYY}{\isamath{\mathfrak{Y}}}  %requires eufrak
  119.95 -\newcommand{\isasymZZ}{\isamath{\mathfrak{Z}}}  %requires eufrak
  119.96 -\newcommand{\isasymaa}{\isamath{\mathfrak{a}}}  %requires eufrak
  119.97 -\newcommand{\isasymbb}{\isamath{\mathfrak{b}}}  %requires eufrak
  119.98 -\newcommand{\isasymcc}{\isamath{\mathfrak{c}}}  %requires eufrak
  119.99 -\newcommand{\isasymdd}{\isamath{\mathfrak{d}}}  %requires eufrak
 119.100 -\newcommand{\isasymee}{\isamath{\mathfrak{e}}}  %requires eufrak
 119.101 -\newcommand{\isasymff}{\isamath{\mathfrak{f}}}  %requires eufrak
 119.102 -\newcommand{\isasymgg}{\isamath{\mathfrak{g}}}  %requires eufrak
 119.103 -\newcommand{\isasymhh}{\isamath{\mathfrak{h}}}  %requires eufrak
 119.104 -\newcommand{\isasymii}{\isamath{\mathfrak{i}}}  %requires eufrak
 119.105 -\newcommand{\isasymjj}{\isamath{\mathfrak{j}}}  %requires eufrak
 119.106 -\newcommand{\isasymkk}{\isamath{\mathfrak{k}}}  %requires eufrak
 119.107 -\newcommand{\isasymll}{\isamath{\mathfrak{l}}}  %requires eufrak
 119.108 -\newcommand{\isasymmm}{\isamath{\mathfrak{m}}}  %requires eufrak
 119.109 -\newcommand{\isasymnn}{\isamath{\mathfrak{n}}}  %requires eufrak
 119.110 -\newcommand{\isasymoo}{\isamath{\mathfrak{o}}}  %requires eufrak
 119.111 -\newcommand{\isasympp}{\isamath{\mathfrak{p}}}  %requires eufrak
 119.112 -\newcommand{\isasymqq}{\isamath{\mathfrak{q}}}  %requires eufrak
 119.113 -\newcommand{\isasymrr}{\isamath{\mathfrak{r}}}  %requires eufrak
 119.114 -\newcommand{\isasymss}{\isamath{\mathfrak{s}}}  %requires eufrak
 119.115 -\newcommand{\isasymtt}{\isamath{\mathfrak{t}}}  %requires eufrak
 119.116 -\newcommand{\isasymuu}{\isamath{\mathfrak{u}}}  %requires eufrak
 119.117 -\newcommand{\isasymvv}{\isamath{\mathfrak{v}}}  %requires eufrak
 119.118 -\newcommand{\isasymww}{\isamath{\mathfrak{w}}}  %requires eufrak
 119.119 -\newcommand{\isasymxx}{\isamath{\mathfrak{x}}}  %requires eufrak
 119.120 -\newcommand{\isasymyy}{\isamath{\mathfrak{y}}}  %requires eufrak
 119.121 -\newcommand{\isasymzz}{\isamath{\mathfrak{z}}}  %requires eufrak
 119.122 -\newcommand{\isasymalpha}{\isamath{\alpha}}
 119.123 -\newcommand{\isasymbeta}{\isamath{\beta}}
 119.124 -\newcommand{\isasymgamma}{\isamath{\gamma}}
 119.125 -\newcommand{\isasymdelta}{\isamath{\delta}}
 119.126 -\newcommand{\isasymepsilon}{\isamath{\varepsilon}}
 119.127 -\newcommand{\isasymzeta}{\isamath{\zeta}}
 119.128 -\newcommand{\isasymeta}{\isamath{\eta}}
 119.129 -\newcommand{\isasymtheta}{\isamath{\vartheta}}
 119.130 -\newcommand{\isasymiota}{\isamath{\iota}}
 119.131 -\newcommand{\isasymkappa}{\isamath{\kappa}}
 119.132 -\newcommand{\isasymlambda}{\isamath{\lambda}}
 119.133 -\newcommand{\isasymmu}{\isamath{\mu}}
 119.134 -\newcommand{\isasymnu}{\isamath{\nu}}
 119.135 -\newcommand{\isasymxi}{\isamath{\xi}}
 119.136 -\newcommand{\isasympi}{\isamath{\pi}}
 119.137 -\newcommand{\isasymrho}{\isamath{\varrho}}
 119.138 -\newcommand{\isasymsigma}{\isamath{\sigma}}
 119.139 -\newcommand{\isasymtau}{\isamath{\tau}}
 119.140 -\newcommand{\isasymupsilon}{\isamath{\upsilon}}
 119.141 -\newcommand{\isasymphi}{\isamath{\varphi}}
 119.142 -\newcommand{\isasymchi}{\isamath{\chi}}
 119.143 -\newcommand{\isasympsi}{\isamath{\psi}}
 119.144 -\newcommand{\isasymomega}{\isamath{\omega}}
 119.145 -\newcommand{\isasymGamma}{\isamath{\Gamma}}
 119.146 -\newcommand{\isasymDelta}{\isamath{\Delta}}
 119.147 -\newcommand{\isasymTheta}{\isamath{\Theta}}
 119.148 -\newcommand{\isasymLambda}{\isamath{\Lambda}}
 119.149 -\newcommand{\isasymXi}{\isamath{\Xi}}
 119.150 -\newcommand{\isasymPi}{\isamath{\Pi}}
 119.151 -\newcommand{\isasymSigma}{\isamath{\Sigma}}
 119.152 -\newcommand{\isasymUpsilon}{\isamath{\Upsilon}}
 119.153 -\newcommand{\isasymPhi}{\isamath{\Phi}}
 119.154 -\newcommand{\isasymPsi}{\isamath{\Psi}}
 119.155 -\newcommand{\isasymOmega}{\isamath{\Omega}}
 119.156 -\newcommand{\isasymbool}{\isamath{\mathrm{I}\mkern-3.8mu\mathrm{B}}}
 119.157 -\newcommand{\isasymcomplex}{\isamath{\mathrm{C}\mkern-15mu{\phantom{\mathrm{t}}\vrule}\mkern9mu}}
 119.158 -\newcommand{\isasymnat}{\isamath{\mathrm{I}\mkern-3.8mu\mathrm{N}}}
 119.159 -\newcommand{\isasymrat}{\isamath{\mathrm{Q}\mkern-16mu{\phantom{\mathrm{t}}\vrule}\mkern10mu}}
 119.160 -\newcommand{\isasymreal}{\isamath{\mathrm{I}\mkern-3.8mu\mathrm{R}}}
 119.161 -\newcommand{\isasymint}{\isamath{\mathsf{Z}\mkern-7.5mu\mathsf{Z}}}
 119.162 -\newcommand{\isasymleftarrow}{\isamath{\leftarrow}}
 119.163 -\newcommand{\isasymlongleftarrow}{\isamath{\longleftarrow}}
 119.164 -\newcommand{\isasymrightarrow}{\isamath{\rightarrow}}
 119.165 -\newcommand{\isasymlongrightarrow}{\isamath{\longrightarrow}}
 119.166 -\newcommand{\isasymLeftarrow}{\isamath{\Leftarrow}}
 119.167 -\newcommand{\isasymLongleftarrow}{\isamath{\Longleftarrow}}
 119.168 -\newcommand{\isasymRightarrow}{\isamath{\Rightarrow}}
 119.169 -\newcommand{\isasymLongrightarrow}{\isamath{\Longrightarrow}}
 119.170 -\newcommand{\isasymleftrightarrow}{\isamath{\leftrightarrow}}
 119.171 -\newcommand{\isasymlongleftrightarrow}{\isamath{\longleftrightarrow}}
 119.172 -\newcommand{\isasymLeftrightarrow}{\isamath{\Leftrightarrow}}
 119.173 -\newcommand{\isasymLongleftrightarrow}{\isamath{\Longleftrightarrow}}
 119.174 -\newcommand{\isasymmapsto}{\isamath{\mapsto}}
 119.175 -\newcommand{\isasymlongmapsto}{\isamath{\longmapsto}}
 119.176 -\newcommand{\isasymmidarrow}{\isamath{\relbar}}
 119.177 -\newcommand{\isasymMidarrow}{\isamath{\Relbar}}
 119.178 -\newcommand{\isasymhookleftarrow}{\isamath{\hookleftarrow}}
 119.179 -\newcommand{\isasymhookrightarrow}{\isamath{\hookrightarrow}}
 119.180 -\newcommand{\isasymleftharpoondown}{\isamath{\leftharpoondown}}
 119.181 -\newcommand{\isasymrightharpoondown}{\isamath{\rightharpoondown}}
 119.182 -\newcommand{\isasymleftharpoonup}{\isamath{\leftharpoonup}}
 119.183 -\newcommand{\isasymrightharpoonup}{\isamath{\rightharpoonup}}
 119.184 -\newcommand{\isasymrightleftharpoons}{\isamath{\rightleftharpoons}}
 119.185 -\newcommand{\isasymleadsto}{\isamath{\leadsto}}  %requires amssymb
 119.186 -\newcommand{\isasymdownharpoonleft}{\isamath{\downharpoonleft}}  %requires amssymb
 119.187 -\newcommand{\isasymdownharpoonright}{\isamath{\downharpoonright}}  %requires amssymb
 119.188 -\newcommand{\isasymupharpoonleft}{\isamath{\upharpoonleft}}  %requires amssymb
 119.189 -\newcommand{\isasymupharpoonright}{\isamath{\upharpoonright}}  %requires amssymb
 119.190 -\newcommand{\isasymrestriction}{\isamath{\restriction}}  %requires amssymb
 119.191 -\newcommand{\isasymColon}{\isamath{\mathrel{::}}}
 119.192 -\newcommand{\isasymup}{\isamath{\uparrow}}
 119.193 -\newcommand{\isasymUp}{\isamath{\Uparrow}}
 119.194 -\newcommand{\isasymdown}{\isamath{\downarrow}}
 119.195 -\newcommand{\isasymDown}{\isamath{\Downarrow}}
 119.196 -\newcommand{\isasymupdown}{\isamath{\updownarrow}}
 119.197 -\newcommand{\isasymUpdown}{\isamath{\Updownarrow}}
 119.198 -\newcommand{\isasymlangle}{\isamath{\langle}}
 119.199 -\newcommand{\isasymrangle}{\isamath{\rangle}}
 119.200 -\newcommand{\isasymlceil}{\isamath{\lceil}}
 119.201 -\newcommand{\isasymrceil}{\isamath{\rceil}}
 119.202 -\newcommand{\isasymlfloor}{\isamath{\lfloor}}
 119.203 -\newcommand{\isasymrfloor}{\isamath{\rfloor}}
 119.204 -\newcommand{\isasymlparr}{\isamath{\mathopen{(\mkern-3mu\mid}}}
 119.205 -\newcommand{\isasymrparr}{\isamath{\mathclose{\mid\mkern-3mu)}}}
 119.206 -\newcommand{\isasymlbrakk}{\isamath{\mathopen{\lbrack\mkern-3mu\lbrack}}}
 119.207 -\newcommand{\isasymrbrakk}{\isamath{\mathclose{\rbrack\mkern-3mu\rbrack}}}
 119.208 -\newcommand{\isasymlbrace}{\isamath{\mathopen{\lbrace\mkern-4.5mu\mid}}}
 119.209 -\newcommand{\isasymrbrace}{\isamath{\mathclose{\mid\mkern-4.5mu\rbrace}}}
 119.210 -\newcommand{\isasymguillemotleft}{\isatext{\flqq}}  %requires babel
 119.211 -\newcommand{\isasymguillemotright}{\isatext{\frqq}}  %requires babel
 119.212 -\newcommand{\isasymbottom}{\isamath{\bot}}
 119.213 -\newcommand{\isasymtop}{\isamath{\top}}
 119.214 -\newcommand{\isasymand}{\isamath{\wedge}}
 119.215 -\newcommand{\isasymAnd}{\isamath{\bigwedge}}
 119.216 -\newcommand{\isasymor}{\isamath{\vee}}
 119.217 -\newcommand{\isasymOr}{\isamath{\bigvee}}
 119.218 -\newcommand{\isasymforall}{\isamath{\forall\,}}
 119.219 -\newcommand{\isasymexists}{\isamath{\exists\,}}
 119.220 -\newcommand{\isasymnexists}{\isamath{\nexists\,}}  %requires amssymb
 119.221 -\newcommand{\isasymnot}{\isamath{\neg}}
 119.222 -\newcommand{\isasymbox}{\isamath{\Box}}  %requires amssymb
 119.223 -\newcommand{\isasymdiamond}{\isamath{\Diamond}}  %requires amssymb
 119.224 -\newcommand{\isasymturnstile}{\isamath{\vdash}}
 119.225 -\newcommand{\isasymTurnstile}{\isamath{\models}}
 119.226 -\newcommand{\isasymtturnstile}{\isamath{\vdash\!\!\!\vdash}}
 119.227 -\newcommand{\isasymTTurnstile}{\isamath{\mid\!\models}}
 119.228 -\newcommand{\isasymstileturn}{\isamath{\dashv}}
 119.229 -\newcommand{\isasymsurd}{\isamath{\surd}}
 119.230 -\newcommand{\isasymle}{\isamath{\le}}
 119.231 -\newcommand{\isasymge}{\isamath{\ge}}
 119.232 -\newcommand{\isasymlless}{\isamath{\ll}}
 119.233 -\newcommand{\isasymggreater}{\isamath{\gg}}
 119.234 -\newcommand{\isasymlesssim}{\isamath{\lesssim}}  %requires amssymb
 119.235 -\newcommand{\isasymgreatersim}{\isamath{\gtrsim}}  %requires amssymb
 119.236 -\newcommand{\isasymlessapprox}{\isamath{\lessapprox}}  %requires amssymb
 119.237 -\newcommand{\isasymgreaterapprox}{\isamath{\gtrapprox}}  %requires amssymb
 119.238 -\newcommand{\isasymin}{\isamath{\in}}
 119.239 -\newcommand{\isasymnotin}{\isamath{\notin}}
 119.240 -\newcommand{\isasymsubset}{\isamath{\subset}}
 119.241 -\newcommand{\isasymsupset}{\isamath{\supset}}
 119.242 -\newcommand{\isasymsubseteq}{\isamath{\subseteq}}
 119.243 -\newcommand{\isasymsupseteq}{\isamath{\supseteq}}
 119.244 -\newcommand{\isasymsqsubset}{\isamath{\sqsubset}}  %requires amssymb
 119.245 -\newcommand{\isasymsqsupset}{\isamath{\sqsupset}}  %requires amssymb
 119.246 -\newcommand{\isasymsqsubseteq}{\isamath{\sqsubseteq}}
 119.247 -\newcommand{\isasymsqsupseteq}{\isamath{\sqsupseteq}}
 119.248 -\newcommand{\isasyminter}{\isamath{\cap}}
 119.249 -\newcommand{\isasymInter}{\isamath{\bigcap\,}}
 119.250 -\newcommand{\isasymunion}{\isamath{\cup}}
 119.251 -\newcommand{\isasymUnion}{\isamath{\bigcup\,}}
 119.252 -\newcommand{\isasymsqunion}{\isamath{\sqcup}}
 119.253 -\newcommand{\isasymSqunion}{\isamath{\bigsqcup\,}}
 119.254 -\newcommand{\isasymsqinter}{\isamath{\sqcap}}
 119.255 -\newcommand{\isasymSqinter}{\isamath{\bigsqcap\,}}  %requires stmaryrd
 119.256 -\newcommand{\isasymsetminus}{\isamath{\setminus}}
 119.257 -\newcommand{\isasympropto}{\isamath{\propto}}
 119.258 -\newcommand{\isasymuplus}{\isamath{\uplus}}
 119.259 -\newcommand{\isasymUplus}{\isamath{\biguplus\,}}
 119.260 -\newcommand{\isasymnoteq}{\isamath{\not=}}
 119.261 -\newcommand{\isasymsim}{\isamath{\sim}}
 119.262 -\newcommand{\isasymdoteq}{\isamath{\doteq}}
 119.263 -\newcommand{\isasymsimeq}{\isamath{\simeq}}
 119.264 -\newcommand{\isasymapprox}{\isamath{\approx}}
 119.265 -\newcommand{\isasymasymp}{\isamath{\asymp}}
 119.266 -\newcommand{\isasymcong}{\isamath{\cong}}
 119.267 -\newcommand{\isasymsmile}{\isamath{\smile}}
 119.268 -\newcommand{\isasymequiv}{\isamath{\equiv}}
 119.269 -\newcommand{\isasymfrown}{\isamath{\frown}}
 119.270 -\newcommand{\isasymJoin}{\isamath{\Join}}  %requires amssymb
 119.271 -\newcommand{\isasymbowtie}{\isamath{\bowtie}}
 119.272 -\newcommand{\isasymprec}{\isamath{\prec}}
 119.273 -\newcommand{\isasymsucc}{\isamath{\succ}}
 119.274 -\newcommand{\isasympreceq}{\isamath{\preceq}}
 119.275 -\newcommand{\isasymsucceq}{\isamath{\succeq}}
 119.276 -\newcommand{\isasymparallel}{\isamath{\parallel}}
 119.277 -\newcommand{\isasymbar}{\isamath{\mid}}
 119.278 -\newcommand{\isasymplusminus}{\isamath{\pm}}
 119.279 -\newcommand{\isasymminusplus}{\isamath{\mp}}
 119.280 -\newcommand{\isasymtimes}{\isamath{\times}}
 119.281 -\newcommand{\isasymdiv}{\isamath{\div}}
 119.282 -\newcommand{\isasymcdot}{\isamath{\cdot}}
 119.283 -\newcommand{\isasymstar}{\isamath{\star}}
 119.284 -\newcommand{\isasymbullet}{\boldmath\isamath{\mathchoice{\displaystyle{\cdot}}{\textstyle{\cdot}}{\scriptstyle{\bullet}}{\scriptscriptstyle{\bullet}}}}
 119.285 -\newcommand{\isasymcirc}{\isamath{\circ}}
 119.286 -\newcommand{\isasymdagger}{\isamath{\dagger}}
 119.287 -\newcommand{\isasymddagger}{\isamath{\ddagger}}
 119.288 -\newcommand{\isasymlhd}{\isamath{\lhd}}  %requires amssymb
 119.289 -\newcommand{\isasymrhd}{\isamath{\rhd}}  %requires amssymb
 119.290 -\newcommand{\isasymunlhd}{\isamath{\unlhd}}  %requires amssymb
 119.291 -\newcommand{\isasymunrhd}{\isamath{\unrhd}}  %requires amssymb
 119.292 -\newcommand{\isasymtriangleleft}{\isamath{\triangleleft}}
 119.293 -\newcommand{\isasymtriangleright}{\isamath{\triangleright}}
 119.294 -\newcommand{\isasymtriangle}{\isamath{\triangle}}
 119.295 -\newcommand{\isasymtriangleq}{\isamath{\triangleq}}  %requires amssymb
 119.296 -\newcommand{\isasymoplus}{\isamath{\oplus}}
 119.297 -\newcommand{\isasymOplus}{\isamath{\bigoplus\,}}
 119.298 -\newcommand{\isasymotimes}{\isamath{\otimes}}
 119.299 -\newcommand{\isasymOtimes}{\isamath{\bigotimes\,}}
 119.300 -\newcommand{\isasymodot}{\isamath{\odot}}
 119.301 -\newcommand{\isasymOdot}{\isamath{\bigodot\,}}
 119.302 -\newcommand{\isasymominus}{\isamath{\ominus}}
 119.303 -\newcommand{\isasymoslash}{\isamath{\oslash}}
 119.304 -\newcommand{\isasymdots}{\isamath{\dots}}
 119.305 -\newcommand{\isasymcdots}{\isamath{\cdots}}
 119.306 -\newcommand{\isasymSum}{\isamath{\sum\,}}
 119.307 -\newcommand{\isasymProd}{\isamath{\prod\,}}
 119.308 -\newcommand{\isasymCoprod}{\isamath{\coprod\,}}
 119.309 -\newcommand{\isasyminfinity}{\isamath{\infty}}
 119.310 -\newcommand{\isasymintegral}{\isamath{\int\,}}
 119.311 -\newcommand{\isasymointegral}{\isamath{\oint\,}}
 119.312 -\newcommand{\isasymclubsuit}{\isamath{\clubsuit}}
 119.313 -\newcommand{\isasymdiamondsuit}{\isamath{\diamondsuit}}
 119.314 -\newcommand{\isasymheartsuit}{\isamath{\heartsuit}}
 119.315 -\newcommand{\isasymspadesuit}{\isamath{\spadesuit}}
 119.316 -\newcommand{\isasymaleph}{\isamath{\aleph}}
 119.317 -\newcommand{\isasymemptyset}{\isamath{\emptyset}}
 119.318 -\newcommand{\isasymnabla}{\isamath{\nabla}}
 119.319 -\newcommand{\isasympartial}{\isamath{\partial}}
 119.320 -\newcommand{\isasymRe}{\isamath{\Re}}
 119.321 -\newcommand{\isasymIm}{\isamath{\Im}}
 119.322 -\newcommand{\isasymflat}{\isamath{\flat}}
 119.323 -\newcommand{\isasymnatural}{\isamath{\natural}}
 119.324 -\newcommand{\isasymsharp}{\isamath{\sharp}}
 119.325 -\newcommand{\isasymangle}{\isamath{\angle}}
 119.326 -\newcommand{\isasymcopyright}{\isatext{\rm\copyright}}
 119.327 -\newcommand{\isasymregistered}{\isatext{\rm\textregistered}}
 119.328 -\newcommand{\isasymhyphen}{\isatext{\rm-}}
 119.329 -\newcommand{\isasyminverse}{\isamath{{}^{-1}}}
 119.330 -\newcommand{\isasymonesuperior}{\isamath{{}^1}}
 119.331 -\newcommand{\isasymonequarter}{\isatext{\rm\textonequarter}}  %requires textcomp
 119.332 -\newcommand{\isasymtwosuperior}{\isamath{{}^2}}
 119.333 -\newcommand{\isasymonehalf}{\isatext{\rm\textonehalf}}  %requires textcomp
 119.334 -\newcommand{\isasymthreesuperior}{\isamath{{}^3}}
 119.335 -\newcommand{\isasymthreequarters}{\isatext{\rm\textthreequarters}}  %requires textcomp
 119.336 -\newcommand{\isasymordfeminine}{\isatext{\rm\textordfeminine}}
 119.337 -\newcommand{\isasymordmasculine}{\isatext{\rm\textordmasculine}}
 119.338 -\newcommand{\isasymsection}{\isatext{\rm\S}}
 119.339 -\newcommand{\isasymparagraph}{\isatext{\rm\P}}
 119.340 -\newcommand{\isasymexclamdown}{\isatext{\rm\textexclamdown}}
 119.341 -\newcommand{\isasymquestiondown}{\isatext{\rm\textquestiondown}}
 119.342 -\newcommand{\isasymeuro}{\isatext{\textgreek{\euro}}}  %requires greek babel
 119.343 -\newcommand{\isasympounds}{\isamath{\pounds}}
 119.344 -\newcommand{\isasymyen}{\isatext{\yen}}  %requires amssymb
 119.345 -\newcommand{\isasymcent}{\isatext{\textcent}}  %requires textcomp
 119.346 -\newcommand{\isasymcurrency}{\isatext{\textcurrency}} %requires textcomp
 119.347 -\newcommand{\isasymdegree}{\isatext{\rm\textdegree}}  %requires textcomp
 119.348 -\newcommand{\isasymamalg}{\isamath{\amalg}}
 119.349 -\newcommand{\isasymmho}{\isamath{\mho}}  %requires amssymb
 119.350 -\newcommand{\isasymlozenge}{\isamath{\lozenge}}  %requires amssymb
 119.351 -\newcommand{\isasymwp}{\isamath{\wp}}
 119.352 -\newcommand{\isasymwrong}{\isamath{\wr}}
 119.353 -\newcommand{\isasymstruct}{\isamath{\diamond}}
 119.354 -\newcommand{\isasymacute}{\isatext{\'\relax}}
 119.355 -\newcommand{\isasymindex}{\isatext{\i}}
 119.356 -\newcommand{\isasymdieresis}{\isatext{\"\relax}}
 119.357 -\newcommand{\isasymcedilla}{\isatext{\c\relax}}
 119.358 -\newcommand{\isasymhungarumlaut}{\isatext{\H\relax}}
 119.359 -\newcommand{\isasymspacespace}{\isamath{~~}}
 119.360 -\newcommand{\isasymmodule}{\isamath{\langle}\isakeyword{module}\isamath{\rangle}}
 119.361 -\newcommand{\isasymsome}{\isamath{\epsilon\,}}
   120.1 --- a/src/Doc/isac/jrocnik/jrocnik_cadgme.tex	Mon Sep 16 12:27:20 2013 +0200
   120.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   120.3 @@ -1,281 +0,0 @@
   120.4 -\documentclass[%
   120.5 -%handout, % prints handouts (=no animations, for printed version)
   120.6 -%mathserif
   120.7 -%xcolor=pst,
   120.8 -14pt
   120.9 -% fleqn
  120.10 -]{beamer}
  120.11 -
  120.12 -\usepackage{beamerthemedefault}
  120.13 -
  120.14 -\usepackage{color}
  120.15 -\definecolor{lgray}{RGB}{238,238,238}
  120.16 -\definecolor{gray}{rgb}{0.8,0.8,0.8}
  120.17 -
  120.18 -\useoutertheme[subsection=false]{smoothbars}
  120.19 -%\useinnertheme{circles}
  120.20 -
  120.21 -\setbeamercolor{block title}{fg=black,bg=gray}
  120.22 -\setbeamercolor{block title alerted}{use=alerted text,fg=black,bg=alerted text.fg!75!bg}
  120.23 -\setbeamercolor{block title example}{use=example text,fg=black,bg=example text.fg!75!bg}
  120.24 -\setbeamercolor{block body}{parent=normal text,use=block title,bg=block title.bg!25!bg}
  120.25 -\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!25!bg}
  120.26 -\setbeamercolor{block body example}{parent=normal text,use=block title example,bg=block title example.bg!25!bg}
  120.27 -
  120.28 -%activate hyperlinks at the end
  120.29 -%\usepackage{hyperref}
  120.30 -
  120.31 -\usepackage[english]{babel}
  120.32 -\usepackage[utf8]{inputenc}
  120.33 -\usepackage{array}
  120.34 -\usepackage{setspace}
  120.35 -\usepackage{url}
  120.36 -
  120.37 -\definecolor{tug}{rgb}{0.96862,0.14509,0.27450}
  120.38 -
  120.39 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  120.40 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  120.41 -
  120.42 -\setbeamertemplate{headline}[text line]{
  120.43 -	\begin{beamercolorbox}[wd=\paperwidth,ht=8ex,dp=4ex]{}
  120.44 -		\insertnavigation{0.85\paperwidth} 
  120.45 -		\raisebox{-10pt}{\includegraphics[width=15mm]{tuglogo}}\vskip2pt
  120.46 -		\hskip-1pt\rule{\paperwidth}{0.3pt}
  120.47 -	\end{beamercolorbox}
  120.48 -}
  120.49 -
  120.50 -\setbeamertemplate{navigation symbols}{}
  120.51 -\setbeamercolor{footline}{fg=black,bg=gray}
  120.52 -
  120.53 -% Fusszeile mit Autor, Titel und Foliennummer / Gesamtfolienzahl
  120.54 -\setbeamertemplate{footline}[text line]{
  120.55 -	\hskip-1pt
  120.56 -	\begin{beamercolorbox}[wd=\paperwidth]{footline}
  120.57 -			\rule{\paperwidth}{0.3pt}
  120.58 -			\colorbox{tug}{\rule{3pt}{0pt}\rule{0pt}{3pt}}
  120.59 -			\textbf{\rule{0pt}{5pt}\insertshortauthor\hfill\insertshortinstitute\hfill%
  120.60 -					\insertshorttitle\rule{1em}{0pt}}
  120.61 -			\rule{\paperwidth}{0.3pt}
  120.62 -	\end{beamercolorbox}
  120.63 -	\begin{beamercolorbox}[wd=\paperwidth,ht=2ex,dp=2ex]{white}
  120.64 -	\end{beamercolorbox}
  120.65 -}%
  120.66 -
  120.67 -%% Titelblatt-Einstellungen
  120.68 -\institute[IST]{Institute for Software Technology\\Graz University of Technology}
  120.69 -\title[ISAC for Signal Processing]{Interactive Course Material by TP-based Programming}
  120.70 -\subtitle{A Case Study}
  120.71 -\author{Jan Ro\v{c}nik}
  120.72 -\date{24. June 2012}
  120.73 -
  120.74 -% Subject and Keywords for PDF
  120.75 -\subject{CADGME Presentation}
  120.76 -\keywords{interactive course material, signal processing, z transform, TP-based programming
  120.77 -language, Lucas-Interpreter, Theorem Proving}
  120.78 -
  120.79 -\titlegraphic{\includegraphics[width=20mm]{tuglogo}}
  120.80 -
  120.81 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  120.82 -\begin{document}
  120.83 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  120.84 -
  120.85 -\begin{frame}[plain]
  120.86 -  \frametitle{}
  120.87 -  \titlepage
  120.88 -\end{frame}
  120.89 -
  120.90 -
  120.91 -
  120.92 -%\begin{frame}
  120.93 -%  \frametitle{Contents}
  120.94 -%  \begin{spacing}{0.3}
  120.95 -%        \tableofcontents[hideallsubsections %
  120.96 -%                        % ,pausesections
  120.97 -%                        ] % erzeugt Inhaltsverzeichnis
  120.98 -%  \end{spacing}
  120.99 -%\end{frame}
 120.100 -
 120.101 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.102 -\section{Introduction}
 120.103 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.104 -
 120.105 -\subsection{isabelle}
 120.106 -\begin{frame}
 120.107 -	\frametitle{What is Isabelle?}
 120.108 -	\begin{spacing}{2}
 120.109 -		\begin{itemize}
 120.110 -			\item Interactive Theorem Prover (Interactice TP)
 120.111 -			\item Large body of mechanized math knowledge
 120.112 -			\item Developed in Cambridge, Munich and Paris
 120.113 -		\end{itemize}
 120.114 -	\end{spacing}
 120.115 -\end{frame}
 120.116 -
 120.117 -\subsection{isac}
 120.118 -\begin{frame}
 120.119 -	\frametitle{What is {\isac}?}
 120.120 -	\begin{spacing}{1.7}
 120.121 -		\begin{itemize}
 120.122 -			\item \textcolor{tug}{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal A}$}belle for~{}\textcolor{tug}{${\cal C}$}alculations
 120.123 -			\item Interactive Course Material
 120.124 -			\item Learning Coach
 120.125 -			\item Developed at Austrian Universities
 120.126 -		\end{itemize}
 120.127 -	\end{spacing}
 120.128 -\end{frame}
 120.129 -
 120.130 -\subsection{motivation}
 120.131 -\begin{frame}
 120.132 -	\frametitle{{\isac{}} for Interactive Course Material}
 120.133 -	\begin{itemize}
 120.134 -		\item Stepwise solving of engineering problems\\
 120.135 -					{\small $\rightarrow$ \textcolor{tug}{One Framework for all phases of problem solving}}
 120.136 -		\item Explaining underlying knowledge\\
 120.137 -					{\small $\rightarrow$  \textcolor{tug}{Transparent Content, Access to Multimedia Content}}
 120.138 -		\item Checking steps input by the student\\
 120.139 -					{\small $\rightarrow$ \textcolor{tug}{Proof Situation}}
 120.140 -		\item Assessing stepwise problem solving\\
 120.141 -					{\small $\rightarrow$ \textcolor{tug}{One system for tutoring and assessment}}
 120.142 -	\end{itemize}
 120.143 -\end{frame}
 120.144 -
 120.145 -
 120.146 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.147 -\section{Material Creation}
 120.148 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.149 -
 120.150 -\subsection{steps}
 120.151 -\begin{frame}
 120.152 -	\frametitle{Course Material Creation {\normalsize Iterations}} %tasks? work flow?
 120.153 -	\begin{spacing}{1.3}
 120.154 -		\begin{enumerate}
 120.155 -			\item Problem Analysis\\
 120.156 -				{\small Variants of problem solving steps} %example partial fractions
 120.157 -			\item \textbf{Analysis of mechanized knowledge}\\
 120.158 -				{\small Existing and missing knowledge}
 120.159 -			\item \textbf{Programming in a TP based language (TP-PL)}			
 120.160 -			\item Additional Content\\
 120.161 -				{\small Multimedia explanations for underlying knowledge}
 120.162 -		\end{enumerate}
 120.163 -	\end{spacing}
 120.164 -\end{frame}
 120.165 -
 120.166 -\subsection{issues}
 120.167 -\begin{frame}
 120.168 -	\frametitle{Issues to Accomplish {\normalsize Information Collection}}
 120.169 -	\begin{spacing}{1.3}
 120.170 -		\begin{itemize}
 120.171 -			\item What knowledge is mechanized in Isabelle?\\
 120.172 -						{\small Theorems, Definitions, Numbers,\ldots}
 120.173 -			\item What knowledge is mechanized in {\isac{}}?\\
 120.174 -						{\small Problem specifications, Programs,\ldots}
 120.175 -			\item What additional explanations are required?\\
 120.176 -				{\small Figures, Examples,\ldots}
 120.177 -		\end{itemize}
 120.178 -	\end{spacing}
 120.179 -\end{frame}
 120.180 -
 120.181 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.182 -\section{Details}
 120.183 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.184 -
 120.185 -\subsection{Technical Survey}
 120.186 -%\begin{frame}
 120.187 -%	\frametitle{Technical Survey I {\normalsize Mechanizing Knowledge}}
 120.188 -%	\begin{spacing}{1.5}
 120.189 -%		\begin{itemize}
 120.190 -%			\item Not enough knowledge is mechanized\\
 120.191 -%						{\small Equation Solving, Integrals,\ldots}
 120.192 -%			\item Computer Mathematicians required!\\
 120.193 -%						{\small Mathematics: Equation solving, Engineer: Z-Transform}
 120.194 -%			\item RISC Linz, Mathematics TU Graz
 120.195 -%		\end{itemize}
 120.196 -%	\end{spacing}
 120.197 -%\end{frame}
 120.198 -
 120.199 -%\begin{frame}
 120.200 -%	\frametitle{Technical Survey II {\normalsize Representation Problems} }
 120.201 -%	\begin{spacing}{1.9}
 120.202 -%		\begin{itemize}
 120.203 -%			\item Different brackets have different meanings\\
 120.204 -%						{\small $u[n]$ is a specific function application :) }
 120.205 -%			\item We need Symbols, Indizes and Hochzahlen
 120.206 -%			\item Different Representations for different purpos %winkel in polar oder kartesischen koordinaten usw.
 120.207 -%		\end{itemize}
 120.208 -%	\end{spacing}
 120.209 -%\end{frame}
 120.210 -
 120.211 -\begin{frame}
 120.212 -	\frametitle{Representation Problems}
 120.213 -	\begin{spacing}{1.4}
 120.214 -		\begin{center}
 120.215 -			
 120.216 -			  \begin{itemize}
 120.217 -			  		\item Can meaning of symbols be varied?\\
 120.218 -							{\small $u[n]$ is a specific function in Signal Processing}
 120.219 -						\item Simplification, tricks and beauty
 120.220 -				\end{itemize}
 120.221 -				
 120.222 -				{\small $X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY$}\\
 120.223 -				\vspace{3mm}
 120.224 -				{\small $\frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)=\frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=$}\\
 120.225 -				{\small $=\frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}=\frac{1}{\omega}\,e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} $}
 120.226 -		
 120.227 -		
 120.228 -		\end{center}
 120.229 -	\end{spacing}
 120.230 -\end{frame}
 120.231 -
 120.232 -\subsection{Demonstration}
 120.233 -\begin{frame}
 120.234 -	\frametitle{Demonstration}
 120.235 -	\begin{spacing}{1.5}
 120.236 -		\begin{itemize}
 120.237 -			\item Backend
 120.238 -			\begin{itemize}
 120.239 -				\item Equation solving
 120.240 -				\item Notation problems, Working with Rulesets
 120.241 -				\item Framework expansion
 120.242 -				\item My Work
 120.243 -			\end{itemize}
 120.244 -		\end{itemize}
 120.245 -	\end{spacing}
 120.246 -\end{frame}
 120.247 -
 120.248 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.249 -\section{Summary}
 120.250 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.251 -
 120.252 -\subsection{conclusion}
 120.253 -\begin{frame}
 120.254 -	\frametitle{Conclusion}
 120.255 -	\begin{spacing}{1.2}
 120.256 -	    \begin{itemize}
 120.257 -	    	\item Proof of concept for TP-PL succesfull
 120.258 -				\item Usability of TP-PL not sufficient
 120.259 -				\item Requirements for improved usability clarified
 120.260 -				\vspace{5mm}
 120.261 -				\item Unacceptable to spend 200h on 1 program
 120.262 -				\item \isac{} pointed at my own error
 120.263 -			\end{itemize}
 120.264 -		\end{spacing}
 120.265 -\end{frame}
 120.266 -
 120.267 -\subsection{contact}
 120.268 -\begin{frame}
 120.269 -	\frametitle{Contact}
 120.270 -	\begin{spacing}{1.7}
 120.271 -	    \begin{tabular}{lr}
 120.272 -				Isabelle & \small \texttt{\href{isabelle.in.tum.de}{isabelle.in.tum.de}}\\
 120.273 -				The {\isac}-Project & \small \texttt{\href{www.ist.tugraz.at/isac}{www.ist.tugraz.at/isac}}\\
 120.274 -				Project leader & \small \texttt{\href{mailto:wneuper@ist.tugraz.at}{wneuper@ist.tugraz.at}}\\
 120.275 -				Jan Rocnik & \small \texttt{\href{mailto:jan.rocnik@student.tugraz.at}{jan.rocnik@student.tugraz.at}}
 120.276 -			\end{tabular}
 120.277 -		\end{spacing}
 120.278 -\end{frame}
 120.279 -
 120.280 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.281 -\end{document}
 120.282 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 120.283 -
 120.284 -%% EOF
 120.285 \ No newline at end of file
   121.1 Binary file src/Doc/isac/jrocnik/math-universe.png has changed
   122.1 --- a/src/Doc/isac/jrocnik/pdfsetup.sty	Mon Sep 16 12:27:20 2013 +0200
   122.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   122.3 @@ -1,7 +0,0 @@
   122.4 -%%
   122.5 -%% default hyperref setup (both for pdf and dvi output)
   122.6 -%%
   122.7 -
   122.8 -\usepackage{color}
   122.9 -\definecolor{linkcolor}{rgb}{0,0,0.5}
  122.10 -\usepackage[colorlinks=true,linkcolor=linkcolor,citecolor=linkcolor,filecolor=linkcolor,pagecolor=linkcolor,urlcolor=linkcolor]{hyperref}
   123.1 --- a/src/Doc/isac/jrocnik/preambleForGeneratedDocuments.tex	Mon Sep 16 12:27:20 2013 +0200
   123.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   123.3 @@ -1,5 +0,0 @@
   123.4 -\section*{Preamble}
   123.5 -This part gives a detailed review on the development and testing process of new programms. All of the following part is automatically generated out of an {\sisac{}}-theory file (\texttt{.thy} - extension). In this case the file is called \texttt{Build\_Inverse\_Z\_Transform} it can be found in the {\sisac{}} directory: 
   123.6 -\begin{center}\texttt{test/Tools/isac/ADDTESTS/course/}\end{center}
   123.7 -{\sisac{}} provides inbuild tools for translating theories into latex documents. To set up such an envoriemt a file  called \texttt{isacmakefile} is needed. Further information about this automatic generation can be found in \cite{wenzel2011system}.
   123.8 -\par The following theory can be modified and used as a guiedline for implementing new material. Everything found here is just a snapshot of the work by \today.
   123.9 \ No newline at end of file
   124.1 --- a/src/Doc/isac/jrocnik/references.bib	Mon Sep 16 12:27:20 2013 +0200
   124.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   124.3 @@ -1,142 +0,0 @@
   124.4 -@book{proakis2004contemporary,
   124.5 -  title={Contemporary communication systems using MATLAB and Simulink},
   124.6 -  author={Proakis, J.G. and Salehi, M. and Bauch, G.},
   124.7 -  isbn={9780534406172},
   124.8 -  lccn={31054410},
   124.9 -  series={BookWare companion series},
  124.10 -  url={http://books.google.at/books?id=5mXGQgAACAAJ},
  124.11 -  year={2004},
  124.12 -  publisher={Thomson--Brooks/Cole}
  124.13 -}
  124.14 -@book{oppenheim2010discrete,
  124.15 -  title={Discrete-time signal processing},
  124.16 -  author={Oppenheim, A.V. and Schafer, R.W.},
  124.17 -  isbn={9780131988422},
  124.18 -  series={Prentice-Hall signal processing series},
  124.19 -  url={http://books.google.at/books?id=mYsoAQAAMAAJ},
  124.20 -  year={2010},
  124.21 -  publisher={Prentice Hall}
  124.22 -}
  124.23 -@manual{wenzel2011system,
  124.24 -	title={The Isabelle System Manual},
  124.25 -	author={Wenzel, M. and Berghofer, S.},
  124.26 -	organization={TU Muenchen},
  124.27 -	year={2011},
  124.28 -	month={January}
  124.29 -}
  124.30 -@Book{Nipkow-Paulson-Wenzel:2002,
  124.31 -  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
  124.32 -  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
  124.33 -  publisher	= {Springer},
  124.34 -  series	= {LNCS},
  124.35 -  volume	= 2283,
  124.36 -  year		= 2002}
  124.37 -@Book{progr-mathematica,
  124.38 -  author = 	 {Maeder, Roman E.},
  124.39 -  title = 	 {Programming in Mathematica},
  124.40 -  publisher = 	 {Addison-Wesley},
  124.41 -  address = 	 {Reading, Mass.},
  124.42 -  year = 	 {1997}
  124.43 -}
  124.44 -@Book{prog-maple06,
  124.45 -  author = 	 {Aladjav, Victor and Bogdevicius, Marijonas},
  124.46 -  title = 	 {Maple: Programming, Physical and Engineering Problems},
  124.47 -  publisher = 	 {Fultus Corporation},
  124.48 -  year = 	 {2006},
  124.49 -  month = 	 {February 27},
  124.50 -  annote = 	 {ISBN: 1596820802}
  124.51 -}
  124.52 -@Article{plmms10,
  124.53 -  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
  124.54 -  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
  124.55 -  journal = 	 {ACM Communications in Computer Algebra},
  124.56 -  year = 	 {2010},
  124.57 -  volume = 	 {44},
  124.58 -  number = 	 {1/2},
  124.59 -  pages = 	 {27-41} %,
  124.60 -  %month = 	 {March/June},
  124.61 -  %note = 	 {http://www.ist.tugraz.at/projects/isac/publ/plmms-10.pdf}
  124.62 -}
  124.63 -@inproceedings{casproto,
  124.64 -  author    = {Cezary Kaliszyk and
  124.65 -               Freek Wiedijk},
  124.66 -  title     = {Certified Computer Algebra on Top of an Interactive Theorem
  124.67 -               Prover},
  124.68 -  booktitle = {Calculemus},
  124.69 -  year      = {2007},
  124.70 -  pages     = {94-105},
  124.71 -  ee        = {http://dx.doi.org/10.1007/978-3-540-73086-6_8},
  124.72 -  crossref  = {DBLP:conf/mkm/2007},
  124.73 -  bibsource = {DBLP, http://dblp.uni-trier.de}
  124.74 -}
  124.75 -@InProceedings{wn:lucas-interp-12,
  124.76 -  author = 	 {Neuper, Walther},
  124.77 -  title = 	 {Automated Generation of User Guidance by Combining Computation and Deduction},
  124.78 -  booktitle = {THedu'11: CTP-compontents for educational software},
  124.79 -  year = 	 {2012},
  124.80 -  editor = 	 {Quaresma, Pedro},
  124.81 -  publisher = {EPTCS},
  124.82 -  note = {To appear}
  124.83 -}
  124.84 -@Manual{Huet_all:94,
  124.85 -  author = 	 {Huet, G. and Kahn, G. and  Paulin-Mohring, C.},
  124.86 -  title = 	 {The Coq Proof Assistant},
  124.87 -  institution =  {INRIA-Rocquencourt},
  124.88 -  year = 	 {1994},
  124.89 -  type = 	 {Tutorial},
  124.90 -  number = 	 {Version 5.10},
  124.91 -  address = 	 {CNRS-ENS Lyon},
  124.92 -  status={},source={Theorema},location={-}
  124.93 -}
  124.94 -@TECHREPORT{Back-SD09,
  124.95 -  author = {Back, Ralph-Johan},
  124.96 -  title = {Structured Derivations as a Unified Proof Style for Teaching Mathematics},
  124.97 -  institution = {TUCS - Turku Centre for Computer Science},
  124.98 -  year = {2009},
  124.99 -  type = {TUCS Technical Report},
 124.100 -  number = {949},
 124.101 -  address = {Turku, Finland},
 124.102 -  month = {July}
 124.103 -}
 124.104 -@InProceedings{ActiveMath-MAIN11,
 124.105 -  author = 	 {Melis, Erica and Siekmann, Jrg},
 124.106 -  title = 	 {An Intelligent Tutoring System for Mathematics},
 124.107 -  booktitle = {Seventh International Conference Artificial Intelligence and Soft Computing (ICAISC)},
 124.108 -  pages = 	 {91-101},
 124.109 -  year = 	 {2004},
 124.110 -  editor = 	 {Rutkowski, L. and Siekmann, J. and Tadeusiewicz, R. and Zadeh, L.A.},
 124.111 -  number = 	 {3070,},
 124.112 -  series = 	 {LNAI},
 124.113 -  publisher = {Springer-Verlag},
 124.114 -  doi =          {doi:10.1007/978-3-540-24844-6\_12}}
 124.115 -@TechReport{mat-tutor-cmu-MAIN11,
 124.116 -  author = 	 {John R. Anderson},
 124.117 -  title = 	 {Intelligent Tutoring and High School Mathematics},
 124.118 -  institution =  {Carnegie Mellon University, Department of Psychology},
 124.119 -  year = 	 {2008},
 124.120 -  type = 	 {Technical Report},
 124.121 -  number = 	 {20},
 124.122 -  note = 	 {http://repository.cmu.edu/psychology/20}
 124.123 -}
 124.124 -@PhdThesis{proof-strategies-11,
 124.125 -  author = 	 {Dietrich, Dominik},
 124.126 -  title = 	 {Proof Planning with Compiled Strategies},
 124.127 -  school = 	 {FR 6.2 Informatik, Saarland University},
 124.128 -  year = 	 {2011}
 124.129 -}
 124.130 -@proceedings{DBLP:conf/mkm/2007,
 124.131 -  editor    = {Manuel Kauers and
 124.132 -               Manfred Kerber and
 124.133 -               Robert Miner and
 124.134 -               Wolfgang Windsteiger},
 124.135 -  title     = {Towards Mechanized Mathematical Assistants, 14th Symposium,
 124.136 -               Calculemus 2007, 6th International Conference, MKM 2007,
 124.137 -               Hagenberg, Austria, June 27-30, 2007, Proceedings},
 124.138 -  booktitle = {Calculemus/MKM},
 124.139 -  publisher = {Springer},
 124.140 -  series    = {Lecture Notes in Computer Science},
 124.141 -  volume    = {4573},
 124.142 -  year      = {2007},
 124.143 -  isbn      = {978-3-540-73083-5},
 124.144 -  bibsource = {DBLP, http://dblp.uni-trier.de}
 124.145 -}
   125.1 --- a/src/Doc/isac/jrocnik/sedindex	Mon Sep 16 12:27:20 2013 +0200
   125.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   125.3 @@ -1,21 +0,0 @@
   125.4 -#! /bin/sh
   125.5 -#
   125.6 -#sedindex - shell script to create indexes, preprocessing LaTeX's .idx file
   125.7 -#
   125.8 -#  puts strings prefixed by * into \tt font
   125.9 -#    terminator characters for strings are |!@{}
  125.10 -#
  125.11 -# a space terminates the \tt part to allow \index{*NE theorem}, etc.
  125.12 -#
  125.13 -# change *"X"Y"Z"W  to  "X"Y"Z"W@{\tt "X"Y"Z"W}
  125.14 -# change *"X"Y"Z    to  "X"Y"Z@{\tt "X"Y"Z}
  125.15 -# change *"X"Y      to  "X"Y@{\tt "X"Y}
  125.16 -# change *"X        to  "X@{\tt "X}
  125.17 -# change *IDENT  to  IDENT@{\tt IDENT}  
  125.18 -#    where IDENT is any string not containing | ! or @
  125.19 -# FOUR backslashes: to escape the shell AND sed
  125.20 -sed -e "s~\*\(\".\".\".\".\)~\1@{\\\\tt \1}~g
  125.21 -s~\*\(\".\".\".\)~\1@{\\\\tt \1}~g
  125.22 -s~\*\(\".\".\)~\1@{\\\\tt \1}~g
  125.23 -s~\*\(\".\)~\1@{\\\\tt \1}~g
  125.24 -s~\*\([^ |!@{}][^ |!@{}]*\)~\1@{\\\\tt \1}~g" $1.idx | makeindex -c -q -o $1.ind
   126.1 --- a/src/Doc/isac/jrocnik/wn-notes.txt	Mon Sep 16 12:27:20 2013 +0200
   126.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   126.3 @@ -1,76 +0,0 @@
   126.4 -WN110711
   126.5 -HOL/Multivariate_Analysis/
   126.6 -######################### _multi_variate ... nothing else found
   126.7 -
   126.8 -src$ grep -r "interior " *
   126.9 -==========================
  126.10 -HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy
  126.11 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  126.12 -definition "interior S = {x. \<exists>T. open T \<and> x \<in> T \<and> T \<subseteq> S}"
  126.13 -
  126.14 -grep -r "definition \"interval" *
  126.15 -=================================
  126.16 -HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy
  126.17 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  126.18 -definition "interval_bij = (\<lambda> (a::'a,b::'a) (u::'a,v::'a) (x::'a::ordered_euclidean_space).
  126.19 -    (\<chi>\<chi> i. u$$i + (x$$i - a$$i) / (b$$i - a$$i) * (v$$i - u$$i))::'a)"
  126.20 -
  126.21 -
  126.22 -??? "{a<..<b} \<subseteq> {c..d} \<union> s" ?definition interval?
  126.23 -
  126.24 -src$ grep -r ".nti.eriv" *
  126.25 -=========================
  126.26 -1 file except isac:
  126.27 -# HOL/Multivariate_Analysis/Derivative.thy
  126.28 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  126.29 -header {* Kurzweil-Henstock Gauge Integration in many dimensions. *}
  126.30 -definition differentiable :: "('a::real_normed_vector \<Rightarrow> 'b::real_normed_vector) \<Rightarrow> 'a net \<Rightarrow> bool" (infixr "differentiable" 30) where
  126.31 -  "f differentiable net \<equiv> (\<exists>f'. (f has_derivative f') net)"
  126.32 -
  126.33 -definition differentiable_on :: "('a::real_normed_vector \<Rightarrow> 'b::real_normed_vector) \<Rightarrow> 'a set \<Rightarrow> bool" (infixr "differentiable'_on" 30) where
  126.34 -  "f differentiable_on s \<equiv> (\<forall>x\<in>s. f differentiable (at x within s))"
  126.35 -
  126.36 -definition "frechet_derivative f net = (SOME f'. (f has_derivative f') net)"
  126.37 -
  126.38 -/
  126.39 -=========================
  126.40 -HOL/Multivariate_Analysis/Integration.thy
  126.41 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  126.42 -header {* Kurzweil-Henstock Gauge Integration in many dimensions. *}
  126.43 -definition "integral i f \<equiv> SOME y. (f has_integral y) i"
  126.44 -
  126.45 -/
  126.46 -=========================
  126.47 -HOL/Multivariate_Analysis/Real_Integration.thy
  126.48 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  126.49 -text{*We follow John Harrison in formalizing the Gauge integral.*}
  126.50 -
  126.51 -definition Integral :: "real set \<Rightarrow> (real \<Rightarrow> real) \<Rightarrow> real \<Rightarrow> bool" where
  126.52 -  "Integral s f k = (f o dest_vec1 has_integral k) (vec1 ` s)"
  126.53 -
  126.54 -Multivariate_Analysis/L2_Norm.thy:header {* Square root of sum of squares *}
  126.55 -
  126.56 -
  126.57 -################################################################################
  126.58 -### sum
  126.59 -################################################################################
  126.60 -src/HOL$ grep -r " sum " *
  126.61 -==========================
  126.62 -ex/Summation.thy:text {* The formal sum operator. *}
  126.63 -ex/Termination.thy:function sum :: "nat \<Rightarrow> nat \<Rightarrow> nat"
  126.64 -ex/Termination.thy:  "sum i N = (if i > N then 0 else i + sum (Suc i) N)"
  126.65 -Isar_Examples/Summation.thy
  126.66 -~~~~~~~~~~~~~~~~~~~~~~~~~~~
  126.67 -text {* The sum of natural numbers $0 + \cdots + n$ equals $n \times
  126.68 -
  126.69 -Series.thy
  126.70 -~~~~~~~~~~
  126.71 -header{*Finite Summation and Infinite Series*}
  126.72 -
  126.73 -Deriv.thy
  126.74 -~~~~~~~~~
  126.75 -definition
  126.76 -  deriv :: "['a::real_normed_field \<Rightarrow> 'a, 'a, 'a] \<Rightarrow> bool"
  126.77 -    --{*Differentiation: D is derivative of function f at x*}
  126.78 -          ("(DERIV (_)/ (_)/ :> (_))" [1000, 1000, 60] 60) where
  126.79 -  "DERIV f x :> D = ((%h. (f(x + h) - f x) / h) -- 0 --> D)"
   127.1 --- a/src/Doc/isac/mat-eng-de.lot	Mon Sep 16 12:27:20 2013 +0200
   127.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   127.3 @@ -1,12 +0,0 @@
   127.4 -\addvspace {10\p@ }
   127.5 -\addvspace {10\p@ }
   127.6 -\addvspace {10\p@ }
   127.7 -\addvspace {10\p@ }
   127.8 -\addvspace {10\p@ }
   127.9 -\addvspace {10\p@ }
  127.10 -\addvspace {10\p@ }
  127.11 -\addvspace {10\p@ }
  127.12 -\contentsline {table}{\numberline {8.1}{\ignorespaces Kleinste Teilchen des KB}}{37}
  127.13 -\contentsline {table}{\numberline {8.2}{\ignorespaces Welche tactics verwenden die Teile des KB\nobreakspace {}?}}{38}
  127.14 -\contentsline {table}{\numberline {8.3}{\ignorespaces theory von der ersten Version von ${\cal I}\mkern -2mu{\cal S}\mkern -5mu{\cal AC}$}}{39}
  127.15 -\contentsline {table}{\numberline {8.4}{\ignorespaces Daten in {\tt *.thy}- und {\tt *.ML}-files}}{40}
   128.1 Binary file src/Doc/isac/mat-eng-de.pdf has changed
   129.1 --- a/src/Doc/isac/mat-eng-de.tex	Mon Sep 16 12:27:20 2013 +0200
   129.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   129.3 @@ -1,1354 +0,0 @@
   129.4 -\documentclass[11pt,a4paper,headline,headcount,towside,nocenter]{report}
   129.5 -\usepackage{latexsym} 
   129.6 -
   129.7 -%\usepackage{ngerman}
   129.8 -%\grmn@dq@error ...and \dq \string #1 is undefined}
   129.9 -%l.989 ...tch the problem type \\{\tt["squareroot",
  129.10 -%                                                  "univ
  129.11 -\bibliographystyle{alpha}
  129.12 -
  129.13 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  129.14 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  129.15 -
  129.16 -\title{\isac \\
  129.17 -  Experimente zur Computermathematik\\[1.0ex]
  129.18 -  und\\[1.0ex]
  129.19 -  Handbuch f\"ur Autoren der\\
  129.20 -  Mathematik-Wissensbasis\\[1.0ex]}
  129.21 -\author{Alexandra Hirn und Eva Rott\\
  129.22 -  \tt isac-users@ist.tugraz.at\\[1.0ex]}
  129.23 -\date{\today}
  129.24 -
  129.25 -\begin{document}
  129.26 -\maketitle
  129.27 -\newpage
  129.28 -\tableofcontents
  129.29 -\newpage
  129.30 -\listoftables
  129.31 -\newpage
  129.32 -
  129.33 -\chapter{Einleitung}
  129.34 -Dies ist die \"Ubersetzung der dersten Kapitel einer englischen Version \footnote{http://www.ist.tugraz.at/projects/isac/publ/mat-eng.pdf}, auf den Stand von \sisac{} 2008 gebracht. Die \"Ubersetzung und Anpassung erfolgte durch die Autorinnen im Rahmen einer Ferialpraxis am Institut f\"ur Softwaretechnologie der TU Graz.
  129.35 -
  129.36 -Diese Version zeichnet sich dadurch aus, dass sie von ``Nicht-Computer-Freaks''  f\"ur ``Nicht-Computer-Freaks'' geschrieben wurde.
  129.37 -
  129.38 -\section{``Authoring'' und ``Tutoring''}
  129.39 -\paragraph{TO DO} Mathematik lernen -- verschiedene Autoren -- Isabelle
  129.40 -Die Grundlage f\"ur \isac{} bildet Isabelle. Dies ist ein ``theorem prover'', der von L. Paulson und T. Nipkow entwickelt wird und Hard- und Software pr\"uft.
  129.41 -\section{Der Inhalt des Dokuments}
  129.42 -\paragraph{TO DO} {Als Anleitung:} Dieses Dokument beschreibt das Kerngebiet (KE) von \isac{}, das Gebiet der mathematics engine (ME) im Kerngebiet und die verschiedenen Funktionen wie das Umschreiben und der Vergleich.
  129.43 -
  129.44 -\isac{} und KE wurden in SML geschrieben, die Sprache in Verbindung mit dem Vorg\"anger des theorem Provers Isabelle entwickelt. So kam es, dass in diesem Dokument die Ebene ASCII als SML Code pr\"asentiert wird. Der Leser wird vermutlich erkennen, dass der \isac{} Benutzer eine vollkommen andere Sichtweise auf eine grafische Benutzeroberfl\"ache bekommt.
  129.45 -
  129.46 -Das Dokument ist eigenst\"andig; Basiswissen \"uber SML (f\"ur eine Einf\"uhrung siehe \cite{Paulson:91}), Terme und Umschreibung wird vorrausgesetzt.
  129.47 -
  129.48 -%The interfaces will be moderately exended during the first phase of development of the mathematics knowledge. The work on the subprojects defined should {\em not} create interfaces of any interest to a user or another author of knowledge except identifiers (of type string) for theorems, rulesets etc.
  129.49 -
  129.50 -Hinweis: SML Code, Verzeichnis, Dateien sind {\tt in 'tt' geschrieben}; besonders in {\tt ML>} ist das Kerngebiet schnell.
  129.51 -
  129.52 -\paragraph{Versuchen Sie es!}  Ein weiteres Anliegen dieses Textes ist, dem Leser Tipps f\"ur Versuche mit den Anwendungen zu geben.
  129.53 -
  129.54 -\section{Gleich am Computer ausprobieren!}\label{get-started}
  129.55 -\paragraph{TO DO screenshot} Bevor Sie mit Ihren Versuchen beginnen, m\"ochten wir Ihnen noch einige Hinweise geben:
  129.56 -\begin{itemize}
  129.57 - \item System starten
  129.58 - \item Shell aufmachen und die Datei mat-eng-de.sml \"offnen.
  129.59 - \item $>$  :  Hinter diesem Zeichen (``Prompt'') stehen jene, die Sie selbst eingeben bzw. mit Copy und Paste aus der Datei kopieren.
  129.60 - \item Die Eingabe wird mit ``;'' und ``Enter'' abgeschlossen.
  129.61 - \item Zeilen, die nicht mit Prompt beginnen, werden vom Computer ausgegeben.
  129.62 - 
  129.63 -\end{itemize}
  129.64 -
  129.65 -\part{Experimentelle Ann\"aherung}
  129.66 -
  129.67 -\chapter{Terme und Theorien}
  129.68 -Wie bereits erw\"ahnt, geht es um Computer-Mathematik. In den letzten Jahren hat die ``computer science'' grosse Fortschritte darin gemacht, Mathematik auf dem Computer verst\"andlich darzustellen. Dies gilt f\"ur mathematische Formeln, f\"ur die Beschreibung von Problemen, f\"ur L\"osungsmethoden etc. Wir beginnen mit mathematischen Formeln.
  129.69 -
  129.70 -\section{Von der Formel zum Term}
  129.71 -Um ein Beispiel zu nennen: Die Formel $a+b\cdot 3$ l\"asst sich in lesbarer Form so eingeben:
  129.72 -{\footnotesize\begin{verbatim}
  129.73 -   > "a + b * 3";
  129.74 -      val it = "a + b * 3" : string
  129.75 -\end{verbatim}}
  129.76 -\noindent ``a + b * 3'' ist also ein string (eine Zeichenfolge). In dieser Form weiss der Computer nicht, dass z.B. eine Multiplikation {\em vor} einer Addition zu rechnen ist. Isabelle braucht dazu eine andere Darstellung f\"ur Formeln. In diese kann man mit der Funktion {\tt str2term} (string to term) umrechnen:
  129.77 -{\footnotesize\begin{verbatim}
  129.78 -   > str2term "a + b * 3";
  129.79 -      val it =
  129.80 -         Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
  129.81 -               Free ("a", "RealDef.real") $
  129.82 -            (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
  129.83 -               ...) : Term.term
  129.84 -\end{verbatim}}
  129.85 -\noindent Diese Form heisst {\tt term} und ist nicht f\"ur den Menschen zum lesen gedacht. Isabelle braucht sie aber intern zum Rechnen. Wir wollen sie mit Hilfe von {\tt val} (value) auf der Variable {\tt t} speichern:
  129.86 -{\footnotesize\begin{verbatim}
  129.87 -   > val t = str2term "a + b * 3";
  129.88 -      val t =  
  129.89 -         Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
  129.90 -               Free ("a", "RealDef.real") $
  129.91 -            (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
  129.92 -               ...) : Term.term
  129.93 -\end{verbatim}}
  129.94 -Von dieser Variablen {\tt t} kann man den Wert jederzeit abrufen:
  129.95 -{\footnotesize\begin{verbatim}
  129.96 -   > t;
  129.97 -      val it =
  129.98 -         Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
  129.99 -               Free ("a", "RealDef.real") $
 129.100 -            (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
 129.101 -               ...) : Term.term
 129.102 -\end{verbatim}}
 129.103 -Der auf {\tt t} gespeicherte Term kann einer Funktion {\tt atomty} \"ubergeben werden, die diesen in einer dritten Form zeigt:
 129.104 -{\footnotesize\begin{verbatim}
 129.105 -   > atomty term;
 129.106 - 
 129.107 -   ***
 129.108 -   *** Const (op +, [real, real] => real)
 129.109 -   *** . Free (a, real)
 129.110 -   *** . Const (op *, [real, real] => real)
 129.111 -   *** . . Free (b, real)
 129.112 -   *** . . Free (3, real)
 129.113 -   ***
 129.114 - 
 129.115 -   val it = () : unit
 129.116 -\end{verbatim}}
 129.117 -Diese Darstellung nennt man ``abstract syntax'' und macht unmittelbar klar, dass man a und b nicht addieren kann, weil ein Mal vorhanden ist.
 129.118 -\newline Es gibt noch eine vierte Art von Term, den cterm. Er wird weiter unten verwendet, weil er sich als string lesbar darstellt.
 129.119 -
 129.120 -\section{``Theory'' und ``Parsing``}
 129.121 -Der Unterschied zwischen \isac{} und bisheriger Mathematiksoftware (GeoGebra, Mathematica, Maple, Derive etc.) ist, dass das mathematische Wissen nicht im Programmcode steht, sondern in sogenannten theories (Theorien).
 129.122 -Dort wird das Mathematikwissen in einer f\"ur nicht Programmierer lesbaren Form geschrieben. Das Wissen von \isac{} ist in folgenden Theorien entahlten:
 129.123 -{\footnotesize\begin{verbatim}
 129.124 -   > Isac.thy;
 129.125 -      val it =
 129.126 -         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
 129.127 -         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
 129.128 -         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
 129.129 -         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
 129.130 -         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
 129.131 -         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
 129.132 -         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
 129.133 -         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
 129.134 -         Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
 129.135 -         Float, ComplexI, Descript, Atools, Simplify, Poly, Rational, PolyMinus,
 129.136 -         Equation, LinEq, Root, RootEq, RatEq, RootRat, RootRatEq, PolyEq, Vect,
 129.137 -         Calculus, Trig, LogExp, Diff, DiffApp, Integrate, EqSystem, Biegelinie,
 129.138 -         AlgEin, Test, Isac} : Theory.theory
 129.139 -\end{verbatim}}
 129.140 -{\tt ProtoPure} und {\tt CPure} enthalten diese logischen Grundlagen, die in {\tt HOL} und den nachfolgenden Theorien erweitert werden. \isac{} als letzte Theorie beinhaltet das gesamte Wissen.
 129.141 -Dass das Mal vor dem Plus berechnet wird, ist so festgelegt:
 129.142 -{\footnotesize\begin{verbatim}
 129.143 -   class plus =
 129.144 -   fixes plus :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" (infixl "+" 65)
 129.145 -
 129.146 -   class minus =
 129.147 -   fixes minus :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" (infixl "-" 65)
 129.148 -
 129.149 -   class uminus =
 129.150 -   fixes uminus :: "'a \<Rightarrow> 'a" ("- _" [81] 80)
 129.151 -
 129.152 -   class times =
 129.153 -   fixes times :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" (infixl "*" 70) 
 129.154 -\end{verbatim}}
 129.155 -{\tt infix} gibt an, dass der Operator zwischen den Zahlen steht und nicht, wie in ''abstract syntax``, vorne oben.
 129.156 -Die Zahlen rechts davon legen die Priorit\"at fest. 70 f\"ur Mal ist gr\"osser als 65 f\"ur Plus und wird daher zuerst berechnet.
 129.157 -
 129.158 -Wollen Sie wissen, wie die einzelnen Rechengesetze aussehen, k\"onnen Sie im Internet folgenden Link ansehen: http://isabelle.in.tum.de/dist/library/HOL/Groups.html
 129.159 -
 129.160 -\paragraph{} Der Vorgang, bei dem aus einem {\tt string} ein Term entsteht, nennt man Parsing. Dazu wird Wissen aus der Theorie ben\"otigt, denn {\tt str2term} nimmt intern eine parse-Funktion, bei der immer das gesamte \isac{}-Wissen verwendet wird. Bei dieser Funktion wird weiters festgelegt, aus welcher Theorie das Wissen genommen werden soll.
 129.161 -{\footnotesize\begin{verbatim}
 129.162 -   > parse Isac.thy "a + b";
 129.163 -      val it = Some "a + b" : Thm.cterm Library.option
 129.164 -\end{verbatim}}
 129.165 -Um sich das Weiterrechnen zu erleichtern, kann das Ergebnis vom Parsing auf eine Variable, wie zum Beispiel {\tt t} gespeichert werden:
 129.166 -{\footnotesize\begin{verbatim}
 129.167 -   > val t = parse Isac.thy "a + b";
 129.168 -      val t = Some "a + b" : Thm.cterm Library.option
 129.169 -\end{verbatim}}
 129.170 -{\tt Some} bedeutet, dass das n\"otige Wissen vorhanden ist, um die Rechnung durchzuf\"uhren. {\tt None} zeigt uns, dass das Wissen fehlt oder ein Fehler aufgetreten ist. Daher sieht man im folgenden Beispiel, dass {\tt HOL.thy} nicht ausreichend Wissen enth\"alt:
 129.171 -{\footnotesize\begin{verbatim}
 129.172 -   > parse HOL.thy "a + b";
 129.173 -      val it = None : Thm.cterm Library.option
 129.174 -\end{verbatim}}
 129.175 -Anschliessend zeigen wir Ihnen noch ein zweites Beispiel, bei dem sowohl ein Fehler aufgetreten ist, als auch das Wissen fehlt:
 129.176 -{\footnotesize\begin{verbatim}
 129.177 -   > parse Isac.thy "a + ";
 129.178 -      *** Inner syntax error: unexpected end of input
 129.179 -      *** Expected tokens: "contains_root" "is_root_free" "q_" "M_b" "M_b'"
 129.180 -      *** "Integral" "differentiate" "E_" "some_of" "||" "|||" "argument_in"
 129.181 -      *** "filter_sameFunId" "I__" "letpar" "Rewrite_Inst" "Rewrite_Set"
 129.182 -      *** "Rewrite_Set_Inst" "Check_elementwise" "Or_to_List" "While" "Script"
 129.183 -      *** "\\" "\\" "\\" "CHR" "xstr" "SOME" "\\" "@"
 129.184 -      *** "GREATEST" "[" "[]" "num" "\\" "{)" "{.." "\\" "(|"
 129.185 -      *** "\\" "SIGMA" "()" "\\" "PI" "\\" "\\" "{" "INT"
 129.186 -      *** "UN" "{}" "LEAST" "\\" "0" "1" "-" "!" "?" "?!" "\\"
 129.187 -      *** "\\" "\\" "\\!" "THE" "let" "case" "~" "if" "ALL"
 129.188 -      *** "EX" "EX!" "!!" "_" "\\" "\\" "PROP" "[|" "OFCLASS"
 129.189 -      *** "\\" "op" "\\" "%" "TYPE" "id" "longid" "var" "..."
 129.190 -      *** "\\" "("
 129.191 -      val it = None : Thm.cterm Library.option
 129.192 -\end{verbatim}}
 129.193 -
 129.194 -Das mathematische Wissen w\"achst mit jeder Theorie von ProtoPure bis Isac. In den folgenden Beispielen wird gezeigt, wie das Wissen w\"achst.
 129.195 -
 129.196 -{\footnotesize\begin{verbatim}
 129.197 -   > (*-1-*);
 129.198 -   > parse HOL.thy "2^^^3";
 129.199 -      *** Inner lexical error at: "^^^3"
 129.200 -      val it = None : Thm.cterm Library.option         
 129.201 -\end{verbatim}}
 129.202 -''Inner lexical error`` und ''None`` bedeuten, dass ein Fehler aufgetreten ist, denn das Wissen \"uber {\tt *} findet sich erst in der {\tt theorie group}.
 129.203 -
 129.204 -{\footnotesize\begin{verbatim}
 129.205 -   > (*-2-*);
 129.206 -   > parse HOL.thy "d_d x (a + x)";
 129.207 -      val it = None : Thm.cterm Library.option               
 129.208 -\end{verbatim}}
 129.209 -Hier wiederum ist noch kein Wissen \"uber das Differenzieren vorhanden.
 129.210 -
 129.211 -{\footnotesize\begin{verbatim}
 129.212 -   > (*-3-*);
 129.213 -   > parse Rational.thy "2^^^3";
 129.214 -      val it = Some "2 ^^^ 3" : Thm.cterm Library.option               
 129.215 -\end{verbatim}}
 129.216 -
 129.217 -{\footnotesize\begin{verbatim}
 129.218 -   > (*-4-*);
 129.219 -   > val Some t4 = parse Rational.thy "d_d x (a + x)";
 129.220 -      val t4 = "d_d x (a + x)" : Thm.cterm              
 129.221 -\end{verbatim}}
 129.222 -
 129.223 -{\footnotesize\begin{verbatim}
 129.224 -   > (*-5-*);
 129.225 -   > val Some t5 = parse Diff.thy  "d_d x (a + x)";
 129.226 -      val t5 = "d_d x (a + x)" : Thm.cterm             
 129.227 -\end{verbatim}}
 129.228 -Die letzen drei Aufgaben k\"onnen schon gel\"ost werden, da {\tt Rational.thy} \"uber das n\"otige Wissen verf\"ugt.
 129.229 -
 129.230 -\section{Details von Termen}
 129.231 -Mit Hilfe der darunterliegenden Darstellung sieht man, dass ein cterm in einen Term umgewandelt werden kann.
 129.232 -{\footnotesize\begin{verbatim}
 129.233 -   > term_of;
 129.234 -      val it = fn : Thm.cterm -> Term.term
 129.235 -\end{verbatim}}
 129.236 -Durch die Umwandlung eines cterms in einen Term sieht man die einzelnen Teile des Terms. ''Free`` bedeutet, dass man die Variable \"andern kann.
 129.237 -{\footnotesize\begin{verbatim}
 129.238 -   > term_of t4;
 129.239 -      val it =
 129.240 -         Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
 129.241 -         ...: Term.term
 129.242 -
 129.243 -\end{verbatim}}
 129.244 -In diesem Fall sagt uns das ''Const``, dass die Variable eine Konstante ist, also ein Fixwert, der immer die selbe Funktion hat.
 129.245 -{\footnotesize\begin{verbatim}
 129.246 -   > term_of t5;
 129.247 -      val it =
 129.248 -         Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
 129.249 -         ... : Term.term
 129.250 -\end{verbatim}}
 129.251 -Sollten verschiedene Teile des ''output`` (= das vom Computer Ausgegebene) nicht sichtbar sein, kann man mit einem bestimmten Befehl alles angezeigt werden.
 129.252 -{\footnotesize\begin{verbatim}
 129.253 -   > print_depth;
 129.254 -      val it = fn : int -> unit
 129.255 - \end{verbatim}}
 129.256 -Zuerst gibt man den Befehl ein, danach den Term, der gr\"osser werden soll. Dabei kann man selbst einen Wert f\"ur die L\"ange bestimmen.
 129.257 -{\footnotesize\begin{verbatim}
 129.258 -   > print_depth 10;
 129.259 -      val it = () : unit
 129.260 -   > term_of t4;
 129.261 -         val it =
 129.262 -            Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
 129.263 -                Free ("x", "RealDef.real") $
 129.264 -            (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
 129.265 -                Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
 129.266 -         : Term.term
 129.267 -
 129.268 -   > print_depth 10;
 129.269 -         val it = () : unit
 129.270 -   > term_of t5;
 129.271 -         val it =
 129.272 -            Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
 129.273 -                Free ("x", "RealDef.real") $
 129.274 -            (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
 129.275 -                Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
 129.276 -         : Term.term
 129.277 -\end{verbatim}}
 129.278 -\paragraph{Versuchen Sie es!}
 129.279 -Eine andere Variante um den Unterschied der beiden Terme zu sehen ist folgende: 
 129.280 -{\footnotesize\begin{verbatim}
 129.281 -   > (*-4-*) val thy = Rational.thy;
 129.282 -      val thy =
 129.283 -         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
 129.284 -         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
 129.285 -         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
 129.286 -         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
 129.287 -         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
 129.288 -         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
 129.289 -         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
 129.290 -         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
 129.291 -         Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
 129.292 -         Float, ComplexI, Descript, Atools, Simplify, Poly, Rational}
 129.293 -     : Theory.theory
 129.294 -   > ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
 129.295 - 
 129.296 -      ***
 129.297 -      *** Free (d_d, [real, real] => real)
 129.298 -      *** . Free (x, real)
 129.299 -      *** . Const (op +, [real, real] => real)
 129.300 -      *** . . Free (a, real)
 129.301 -      *** . . Free (x, real)
 129.302 -      ***
 129.303 - 
 129.304 -      val it = () : unit
 129.305 -
 129.306 -
 129.307 -   > (*-5-*) val thy = Diff.thy;
 129.308 -      val thy =
 129.309 -         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
 129.310 -         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
 129.311 -         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
 129.312 -         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
 129.313 -         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
 129.314 -         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
 129.315 -         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
 129.316 -         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
 129.317 -         Ring_and_Field, Complex_Numbers, Real, Calculus, Trig, ListG, Tools,
 129.318 -         Script, Typefix, Float, ComplexI, Descript, Atools, Simplify, Poly,
 129.319 -         Equation, LinEq, Root, RootEq, Rational, RatEq, RootRat, RootRatEq,
 129.320 -         PolyEq, LogExp, Diff} : Theory.theory
 129.321 - 
 129.322 -   > ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
 129.323 - 
 129.324 -      ***
 129.325 -      *** Const (Diff.d_d, [real, real] => real)
 129.326 -      *** . Free (x, real)
 129.327 -      *** . Const (op +, [real, real] => real)
 129.328 -      *** . . Free (a, real)
 129.329 -      *** . . Free (x, real)
 129.330 -      ***
 129.331 - 
 129.332 -      val it = () : unit
 129.333 -\end{verbatim}}
 129.334 -
 129.335 -
 129.336 -\chapter{''Rewriting``}
 129.337 -\section{Was ist Rewriting?}
 129.338 -Bei Rewriting handelt es sich um das Umformen von Termen nach vorgegebenen Regeln. Folgende zwei Funktionen sind notwendig:
 129.339 -{\footnotesize\begin{verbatim}
 129.340 -   > rewrite;
 129.341 -      val it = fn
 129.342 -      :
 129.343 -      theory' ->
 129.344 -      rew_ord' ->
 129.345 -      rls' -> bool -> thm' -> cterm' -> (string * string list) Library.option
 129.346 -\end{verbatim}}
 129.347 -Die Funktion hat zwei Argumente, die mitgeschickt werden m\"ussen, damit die Funktion arbeiten kann. Das letzte Element {\tt (cterm' * cterm' list) Library.option} im unteren Term ist das Ergebnis, das die Funktionen {\tt rewrite} zur\"uckgeben und die zwei vorhergehenden Argumente, {\tt theorem} und {\tt cterm}, sind die f\"ur uns wichtigen. {\tt Theorem} ist die Rechenregel und {\tt cterm} jene Formel auf die die Rechenregel angewendet wird.
 129.348 -{\footnotesize\begin{verbatim}
 129.349 -   > rewrite_inst;
 129.350 -      val it = fn
 129.351 -      :
 129.352 -      theory' ->
 129.353 -      rew_ord' ->
 129.354 -      rls' ->bool -> 'a -> thm' -> cterm' -> (cterm' * cterm' list) Library.option
 129.355 -\end{verbatim}}
 129.356 -Die Funktion {\tt rewrite\_inst} wird ben\"otigt, um Gleichungen, Rechnungen zum Differenzieren etc. zu l\"osen. Dabei wird die gebundene Variable (bdv) instanziiert, d.h. es wird die Variable angegeben, nach der man differenzieren will, bzw. f\"ur die ein Wert bei einer Gleichung herauskommen soll.
 129.357 -Um zu sehen wie der Computer vorgeht nehmen wir folgendes Beispiel, dessen Ergebnis offenbar 0 ist, was der Computer jedoch erst nach einer Reihe von Schritten herausfindet.
 129.358 -Im Beispiel wird differenziert, wobei \isac's Schreibweise jene von Computer Algebra Systemen (CAS) anzugleichen: in CAS wird differenziert mit $\frac{d}{dx}\; x^2 + 3 \cdot x + 4$, in \isac{} mit {\tt d\_d x (x \^{ }\^{ }\^{ } 2 + 3 * x + 4)}.
 129.359 -Zuerst werden die einzelnen Werte als Variablen gespeichert:
 129.360 -{\footnotesize\begin{verbatim}
 129.361 -   > val thy' = "Diff.thy";
 129.362 -      val thy' = "Diff.thy" : string
 129.363 -   > val ro = "tless_true";
 129.364 -      val ro = "tless_true" : string
 129.365 -   > val er = "eval_rls";
 129.366 -      val er = "eval_rls" : string
 129.367 -   > val inst = [("bdv","x::real")];
 129.368 -      val inst = [("bdv", "x::real")] : (string * string) list
 129.369 -   > val ct = "d_d x (a + a * (2 + b))";
 129.370 -      val ct = "d_d x (a + a * (2 + b))" : string
 129.371 -\end{verbatim}}
 129.372 -Nun wird die Rechnung nach den Regeln ausgerechnet, wobei am Ende mehrere Dinge zugleich gemacht werden.
 129.373 -Folgende Regeln werden ben\"otigt: Summenregel, Produktregel, Multiplikationsregel mit einem konstanten Faktor und zum Schluss die Additionsregel.
 129.374 -{\footnotesize\begin{verbatim}
 129.375 -   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_sum","") ct;
 129.376 -      val ct = "d_d x a + d_d x (a * (2 + b))" : cterm'
 129.377 -   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_prod","") ct;
 129.378 -      val ct = "d_d x a + (d_d x a * (2 + b) + a * d_d x (2 + b))" : cterm'
 129.379 -   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_const","") ct;
 129.380 -      val ct = "d_d x a + (d_d x a * (2 + b) + a * 0) " : cterm'
 129.381 -   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_const","") ct;
 129.382 -      val ct = "d_d x a + (0 * (2 + b) + a * 0)" : cterm'
 129.383 -   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_const","") ct;
 129.384 -      val ct = "0 + (0 * (2 + b) + a * 0)" : cterm'
 129.385 -   > val Some (ct,_) = rewrite_set thy' true "make_polynomial" ct;
 129.386 -      val ct = "0" : string
 129.387 -\end{verbatim}}
 129.388 -Was {\tt rewrite\_set} genau macht, finden Sie im n\"achsten Kapitel.
 129.389 -
 129.390 -Dies w\"are ein etwas ernsthafteres Beispiel zum Differenzieren:
 129.391 -{\footnotesize\begin{verbatim}
 129.392 -   > val ct = "d_d x (x ^^^ 2 + 3 * x + 4)";
 129.393 -   > val Some (ct,_) = rewrite_inst thy' ro er true inst ("diff_sum","") ct;
 129.394 -\end{verbatim}}
 129.395 -\paragraph{Versuchen Sie es,} diese Beispiel zu Ende zu f\"uhren! Die Regeln, die \isac{} kennt und zum Umformen verwenden kann, finden Sie im Internet \footnote{{\tiny\tt http://www.ist.tugraz.at/projects/isac/www/kbase/thy/browser\_info/HOL/HOL-Real/Isac/Diff.html}}.
 129.396 -
 129.397 -\section{Welche W\"unsche kann man an Rewriting stellen?}
 129.398 -Es gibt verschiedene Varianten von Rewriting, die alle eine bestimmte Bedeutung haben.
 129.399 -{\tt rewrite\_ set} wandelt Terme in ein ganzes rule set um, die normalerweise nur mit einem Theorem vereinfacht dargestellt werden.
 129.400 -Hierbei werden auch folgende Argumente verwendet:\\
 129.401 -\tabcolsep=4mm
 129.402 -\def\arraystretch{1.5}
 129.403 -\begin{tabular}{lp{11.0cm}}
 129.404 -{\tt theory} & Die Theory von Isabelle, die alle n\"otigen Informationen f\"ur das Parsing {\tt term} enth\"alt. \\
 129.405 -{\tt rew\_ord}& die Ordnung f\"ur das geordnete Rewriting. F\"ur {\em no} ben\"otigt das geordnete Rewriting {\tt tless\_true}, eine Ordnung, die f\"ur alle nachgiebigen Argumente true ist \\
 129.406 -{\tt rls} & Das rule set; zur Auswertung von bestimmten Bedingungen in {\tt thm} falls {\tt thm} eine conditional rule ist \\
 129.407 -{\tt bool} & ein Bitschalter, der die Berechnungen der m\"oglichen condition in {\tt thm} ausl\"ost: wenn sie {\tt false} ist, dann wird die condition bewertet und auf Grund des Resultats wendet man {\tt thm} an, oder nicht; wenn {\tt true} dann wird die condition nicht ausgewertet, aber man gibt sie in eine Menge von Hypothesen \\
 129.408 -{\tt thm} & das theorem versucht den {\tt term} zu \"uberschreiben \\
 129.409 -{\tt term} & {\tt thm} wendet Rewriting m\"oglicherweise auf den Term an \\
 129.410 -\end{tabular}\\
 129.411 -
 129.412 -{\footnotesize\begin{verbatim}
 129.413 -   > rewrite_set;
 129.414 -      val it = fn : theory' -> bool -> rls' -> ...
 129.415 -\end{verbatim}}
 129.416 -{\footnotesize\begin{verbatim}
 129.417 -   > rewrite_set_inst;
 129.418 -      val it = fn : theory' -> bool -> subs' -> .
 129.419 -\end{verbatim}}
 129.420 -Wenn man sehen m\"ochte wie Rewriting bei den einzelnen theorems funktioniert kann man dies mit {\tt trace\_rewrite} versuchen.
 129.421 -{\footnotesize\begin{verbatim}
 129.422 -   > trace_rewrite := true;
 129.423 -      val it = () : unit
 129.424 -\end{verbatim}}
 129.425 -
 129.426 -
 129.427 -\section{Rule sets}
 129.428 -Einige der oben genannten Varianten von Rewriting beziehen sich nicht nur auf einen theorem, sondern auf einen ganzen Block von theorems, die man als rule set bezeichnet.
 129.429 -Dieser wird so lange angewendet, bis ein Element davon f\"ur Rewriting verwendet werden kann. Sollte der Begriff ''terminate`` fehlen, wird das Rule set nicht beendet und l\"auft weiter.
 129.430 -Ein Beispiel f\"ur einen rule set ist folgendes:
 129.431 -{\footnotesize\begin{verbatim}
 129.432 -???????????
 129.433 -\end{verbatim}}
 129.434 -
 129.435 -{\footnotesize\begin{verbatim}
 129.436 -   > sym;
 129.437 -      val it = "?s = ?t ==> ?t = ?s" : Thm.thm
 129.438 -   > rearrange_assoc;
 129.439 -      val it =
 129.440 -         Rls
 129.441 -            {id = "rearrange_assoc",
 129.442 -               scr = Script (Free ("empty_script", "RealDef.real")),
 129.443 -               calc = [],
 129.444 -               erls =
 129.445 -               Rls
 129.446 -                  {id = "e_rls",
 129.447 -                     scr = EmptyScr,
 129.448 -                     calc = [],
 129.449 -                     erls = Erls,
 129.450 -                     srls = Erls,
 129.451 -                     rules = [],
 129.452 -                     rew_ord = ("dummy_ord", fn),
 129.453 -                     preconds = []},
 129.454 -               srls =
 129.455 -               Rls
 129.456 -                  {id = "e_rls",
 129.457 -                     scr = EmptyScr,
 129.458 -                     calc = [],
 129.459 -                     erls = Erls,
 129.460 -                     srls = Erls,
 129.461 -                     rules = [],
 129.462 -                     rew_ord = ("dummy_ord", fn),
 129.463 -                     preconds = []},
 129.464 -               rules =
 129.465 -               [Thm ("sym_radd_assoc", "?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1"  [.]),
 129.466 -                  Thm
 129.467 -                     ("sym_rmult_assoc",
 129.468 -                        "?m1 * (?n1 * ?k1) = ?m1 * ?n1 * ?k1"  [.])],
 129.469 -               rew_ord = ("e_rew_ord", fn),
 129.470 -               preconds = []} : rls
 129.471 -\end{verbatim}}
 129.472 -
 129.473 -
 129.474 -\section{Berechnung von Konstanten}
 129.475 -Sobald Konstanten in dem Bereich des Subterms sind, k\"onnen sie von einer Funktion berechnet werden:
 129.476 -{\footnotesize\begin{verbatim}
 129.477 -   > calculate;
 129.478 -      val it = fn
 129.479 -      :
 129.480 -         theory' ->
 129.481 -         string *
 129.482 -         (
 129.483 -         string ->
 129.484 -         Term.term -> Theory.theory -> (string * Term.term) Library.option) ->
 129.485 -         cterm' -> (string * thm') Library.option
 129.486 -
 129.487 -   > calculate_;
 129.488 -      val it = fn
 129.489 -      :
 129.490 -         Theory.theory ->
 129.491 -         string *
 129.492 -         (
 129.493 -         string ->
 129.494 -         Term.term -> Theory.theory -> (string * Term.term) Library.option) ->
 129.495 -         Term.term -> (Term.term * (string * Thm.thm)) Library.option
 129.496 -\end{verbatim}}
 129.497 -Man bekommt das Ergebnis und das theorem bezieht sich darauf. Daher sind die folgenden mathematischen Rechnungen m\"oglich:
 129.498 -{\footnotesize\begin{verbatim}
 129.499 -   > calclist;
 129.500 -      val it =
 129.501 -         [("Vars", ("Tools.Vars", fn)), ("matches", ("Tools.matches", fn)),
 129.502 -            ("lhs", ("Tools.lhs", fn)), ("plus", ("op +", fn)),
 129.503 -            ("times", ("op *", fn)), ("divide_", ("HOL.divide", fn)),
 129.504 -            ("power_", ("Atools.pow", fn)), ("is_const", ("Atools.is'_const", fn)),
 129.505 -            ("le", ("op <", fn)), ("leq", ("op <=", fn)),
 129.506 -            ("ident", ("Atools.ident", fn)), ("sqrt", ("Root.sqrt", fn)),
 129.507 -            ("Test.is_root_free", ("is'_root'_free", fn)),
 129.508 -            ("Test.contains_root", ("contains'_root", fn))]
 129.509 -      :
 129.510 -         (
 129.511 -         string *
 129.512 -         (
 129.513 -         string *
 129.514 -         (
 129.515 -         string ->
 129.516 -         Term.term -> Theory.theory -> (string * Term.term) Library.option))) list
 129.517 -\end{verbatim}}
 129.518 -
 129.519 -
 129.520 -
 129.521 -
 129.522 -\chapter{Termordnung}
 129.523 -Die Anordnungen der Begriffe sind unverzichtbar f\"ur den Gebrauch des Umschreibens von normalen Funktionen und von normalen Formeln, die n\"otig sind um passende Modelle f\"ur Probleme zu finden.
 129.524 -
 129.525 -\section{Beispiel f\"ur Termordnungen}
 129.526 -Es ist nicht unbedeutend, eine Verbindung zu Termen herzustellen, die wirklich eine Ordnung besitzen. Diese Ordnungen sind selbstaufrufende Bahnordnungen:
 129.527 -
 129.528 -{\footnotesize\begin{verbatim}
 129.529 -   > sqrt_right;
 129.530 -      val it = fn : bool -> Theory.theory -> subst -> Term.term * Term.term -> b       ool
 129.531 -   > tless_true;
 129.532 -      val it = fn : subst -> Term.term * Term.term -> bool
 129.533 -\end{verbatim}}
 129.534 -
 129.535 -Das ''bool`` Argument gibt Ihnen die M\"oglichkeit, die Kontrolle zu den zugeh\"origen Unterordunungen zur\"uck zu verfolgen, damit sich die Unterordnungen, die 'true' sind, als strings anzeigen lassen.
 129.536 -
 129.537 -{\section{Geordnetes Rewriting}}
 129.538 -Beim Rewriting entstehen Probleme, die vom ''law of commutativity`` (= Kommutativgesetz) durch '+' und '*' verursacht werden. Diese Probleme k\"onnen nur durch geordnetes Rewriting gel\"ost werden, da hier ein Term nur umgeschrieben wird, wenn ein kleinerer dadurch entsteht.
 129.539 -
 129.540 -
 129.541 -\chapter{Problem hierachy}
 129.542 -\section{''Matching``}
 129.543 -Matching ist eine Technik von Rewriting, die von \isac{} verwendet wird, um ein Problem und den passenden problem type daf\"ur zu finden. Die folgende Funktion \"uberpr\"uft, ob Matching m\"oglich ist:
 129.544 -{\footnotesize\begin{verbatim}
 129.545 -> matches;
 129.546 -val it = fn : Theory.theory -> Term.term -> Term.term -> bool
 129.547 -\end{verbatim}}
 129.548 -Die folgende Gleichung wird in Operatoren und freie Variablen zerlegt.
 129.549 -{\footnotesize\begin{verbatim}
 129.550 -> val t = (term_of o the o (parse thy)) "3 * x^^^2 = 1";
 129.551 -val t =
 129.552 -Const ("op =", "[RealDef.real, RealDef.real] => bool") $
 129.553 -(Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $
 129.554 -Free ("3", "RealDef.real") $
 129.555 -(Const
 129.556 -("Atools.pow",
 129.557 -"[RealDef.real, RealDef.real] => RealDef.real") $
 129.558 -Free ("x", "RealDef.real") $ Free ("2", " RealDef.real"))) $
 129.559 -Free ("1", "RealDef.real") : Term.term
 129.560 -\end{verbatim}}
 129.561 -Nun wird ein Modell erstellt, das sich nicht auf bestimmte Zahlen bezieht, sondern nur eine generelle Zerlegung durchf\"uhrt.
 129.562 -{\footnotesize\begin{verbatim}
 129.563 -> val p = (term_of o the o (parse thy)) "a * b^^^2 = c";
 129.564 -val p =
 129.565 -Const ("op =", "[RealDef.real, RealDef.real] => bool") $
 129.566 -(Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $
 129.567 -Free ("a", "RealDef.real") $
 129.568 -(Const
 129.569 -("Atools.pow",
 129.570 -"[RealDef.real, RealDef.real] => RealDef.real") $
 129.571 -Free ("b", "RealDef.real") $ Free ("2", "RealDef.real"))) $
 129.572 -Free ("c", "RealDef.real") : Term.term
 129.573 -\end{verbatim}}
 129.574 -Dieses Modell enth\"alt sogenannte \textit{scheme variables}.
 129.575 -{\footnotesize\begin{verbatim}
 129.576 -> atomt p;
 129.577 -"*** -------------"
 129.578 -"*** Const (op =)"
 129.579 -"*** . Const (op *)""*** . . Free (a, )"
 129.580 -"*** . . Const (Atools.pow)"
 129.581 -"*** . . . Free (b, )"
 129.582 -"*** . . . Free (2, )"
 129.583 -"*** . Free (c, )"
 129.584 -"\n"
 129.585 -val it = "\n" : string
 129.586 -\end{verbatim}}
 129.587 -Das Modell wird durch den Befehl \textit{free2var} erstellt.
 129.588 -{\footnotesize\begin{verbatim}
 129.589 -> free2var;
 129.590 -val it = fn : Term.term -> Term.term
 129.591 -> val pat = free2var p;
 129.592 -val pat =
 129.593 -Const ("op =", "[RealDef.real, RealDef.real] => bool") $
 129.594 -(Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $
 129.595 -Var (("a", 0), "RealDef.real") $
 129.596 -(Const
 129.597 -("Atools.pow",
 129.598 -"[RealDef.real, RealDef.real] => RealDef.real") $
 129.599 -Var (("b", 0), "RealDef.real") $
 129.600 -Free ("2", "RealDef.real"))) $ Var (("c", 0), "RealDef.real")
 129.601 -: Term.term
 129.602 -> Sign.string_of_term (sign_of thy) pat;
 129.603 -val it = "?a * ?b ^^^ 2 = ?c" : string
 129.604 -\end{verbatim}}
 129.605 -Durch \textit{atomt pat} wird der Term aufgespalten und in eine Form gebracht, die f\"ur die weiteren Schritte ben\"otigt wird.
 129.606 -{\footnotesize\begin{verbatim}
 129.607 -> atomt pat;
 129.608 -"*** -------------"
 129.609 -"*** Const (op =)"
 129.610 -"*** . Const (op *)"
 129.611 -"*** . . Var ((a, 0), )"
 129.612 -"*** . . Const (Atools.pow)"
 129.613 -"*** . . . Var ((b, 0), )"
 129.614 -"*** . . . Free (2, )"
 129.615 -"*** . Var ((c, 0), )"
 129.616 -"\n"
 129.617 -val it = "\n" : string
 129.618 -\end{verbatim}}
 129.619 -Jetzt kann das Matching an den beiden vorigen Terme angewendet werden.
 129.620 -{\footnotesize\begin{verbatim}
 129.621 -> matches thy t pat;
 129.622 -val it = true : bool
 129.623 -> val t2 = (term_of o the o (parse thy)) "x^^^2 = 1";
 129.624 -val t2 =
 129.625 -Const ("op =", "[RealDef.real, RealDef.real] => bool") $
 129.626 -(Const
 129.627 -("Atools.pow",
 129.628 -"[RealDef.real, RealDef.real] => RealDef.real") $
 129.629 -Free ("x", "RealDef.real") $ Free ("2", "RealDef.real")) $
 129.630 -Free ("1", "RealDef.real") : Term.term
 129.631 -> matches thy t2 pat;
 129.632 -val it = false : bool
 129.633 -> val pat2 = (term_of o the o (parse thy)) "?u^^^2 = ?v";
 129.634 -val pat2 =
 129.635 -Const ("op =", "[RealDef.real, RealDef.real] => bool") $
 129.636 -(Const
 129.637 -("Atools.pow",
 129.638 -"[RealDef.real, RealDef.real] => RealDef.real") $
 129.639 -Var (("u", 0), "RealDef.real") $ Free ("2", "RealDef.real")) $
 129.640 -Var (("v", 0), "RealDef.real") : Term.term
 129.641 -> matches thy t2 pat2;
 129.642 -val it = true : bool
 129.643 -\end{verbatim}}
 129.644 -
 129.645 -\section{Zugriff auf die hierachy}
 129.646 -Man verwendet folgenden Befehl, um sich Zugang zur hierachy von problem type zu verschaffen.
 129.647 -{\footnotesize\begin{verbatim}
 129.648 -> show_ptyps;
 129.649 -val it = fn : unit -> unit
 129.650 -> show_ptyps();
 129.651 -[
 129.652 -["e_pblID"],
 129.653 -["simplification", "polynomial"],
 129.654 -["simplification", "rational"],
 129.655 -["vereinfachen", "polynom", "plus_minus"],
 129.656 -["vereinfachen", "polynom", "klammer"],
 129.657 -["vereinfachen", "polynom", "binom_klammer"],
 129.658 -["probe", "polynom"],
 129.659 -["probe", "bruch"],
 129.660 -["equation", "univariate", "linear"],
 129.661 -["equation", "univariate", "root", "sq", "rat"],
 129.662 -["equation", "univariate", "root", "normalize"],
 129.663 -["equation", "univariate", "rational"],
 129.664 -["equation", "univariate", "polynomial", "degree_0"],
 129.665 -["equation", "univariate", "polynomial", "degree_1"],
 129.666 -["equation", "univariate", "polynomial", "degree_2", "sq_only"],
 129.667 -["equation", "univariate", "polynomial", " 
 129.668 - degree_2", "bdv_only"],
 129.669 -["equation", "univariate", "polynomial", "degree_2", "pqFormula"],
 129.670 -["equation", "univariate", "polynomial", "degree_2", "abcFormula"],
 129.671 -["equation", "univariate", "polynomial", "degree_3"],
 129.672 -["equation", "univariate", "polynomial", "degree_4"],
 129.673 -["equation", "univariate", "polynomial", "normalize"],
 129.674 -["equation", "univariate", "expanded", "degree_2"],
 129.675 -["equation", "makeFunctionTo"],
 129.676 -["function", "derivative_of", "named"],
 129.677 -["function", "maximum_of", "on_interval"],
 129.678 -["function", "make", "by_explicit"],
 129.679 -["function", "make", "by_new_variable"],
 129.680 -["function", "integrate", "named"],
 129.681 -["tool", "find_values"],
 129.682 -["system", "linear", "2x2", "triangular"],
 129.683 -["system", "linear", "2x2", "normalize"],
 129.684 -["system", "linear", "3x3"],
 129.685 -["system", "linear", "4x4", "triangular"],
 129.686 -["system", "linear", "4x4", "normalize"],
 129.687 -["Biegelinien", "
 129.688 -MomentBestimmte"],
 129.689 -["Biegelinien", "MomentGegebene"],
 129.690 -["Biegelinien", "einfache"],
 129.691 -["Biegelinien", "QuerkraftUndMomentBestimmte"],
 129.692 -["Biegelinien", "vonBelastungZu"],
 129.693 -["Biegelinien", "setzeRandbedingungen"],
 129.694 -["Berechnung", "numerischSymbolische"],
 129.695 -["test", "equation", "univariate", "linear"],
 129.696 -["test", "equation", "univariate", "plain_square"],
 129.697 -["test", "equation", "univariate", "polynomial", "degree_two", "pq_formula"],
 129.698 -["test", "equation", "univariate", "polynomial", "degree_two", "abc_formula"],
 129.699 -["test", "equation", "univariate", "squareroot"],
 129.700 -["test", "equation", "univariate", "normalize"],
 129.701 -["test", "equation", "univariate", "sqroot-test"]
 129.702 -]
 129.703 -val it = () : unit
 129.704 -\end{verbatim}}
 129.705 -
 129.706 -\section{Die passende ''formalization`` f\"ur den problem type}
 129.707 -Eine andere Art des Matching ist es die richtige ''formalization`` zum jeweiligen problem type zu finden. Wenn eine solche vorhanden ist, kann \isac{} selbstst\"andig die Probleme l\"osen.
 129.708 -
 129.709 -\section{''problem-refinement``}
 129.710 -Will man die problem hierachy (= ) aufstellen, so ist darauf zu achten, dass man die verschiedenen Branches so konstruiert, dass das problem-refinement automatisch durchgef\"uhrt werden kann.
 129.711 -{\footnotesize\begin{verbatim}
 129.712 -> refine;
 129.713 -val it = fn : fmz_ -> pblID -> SpecifyTools.match list
 129.714 -> val fmz = ["equality (sqrt(9 + 4 * x)=sqrt x 
 129.715 -+ sqrt (5 + x))",
 129.716 -# "soleFor x","errorBound (eps=0)",
 129.717 -# "solutions L"];
 129.718 -val fmz =
 129.719 -["equality (sqrt(9 + 4 * x)=sqrt x + sqrt (5 + x))", "soleFor x",
 129.720 -"errorBound (eps=0)", ...] : string list
 129.721 -> refine fmz ["univariate","equation"];
 129.722 -*** pass ["equation","univariate"]
 129.723 -*** comp_dts: ??.empty $ soleFor x
 129.724 -Exception- ERROR raised
 129.725 -\end{verbatim}}
 129.726 -Wenn die ersten zwei Regeln nicht angewendet werden k\"onnen, kommt die dritte zum Einsatz:
 129.727 -{\footnotesize\begin{verbatim}
 129.728 -> val fmz = ["equality (x + 1 = 2)",
 129.729 -# "solveFor x","errorBound (eps=0)",
 129.730 -# "solutions L"];
 129.731 -val fmz = ["equality (x + 1 = 2)", "solveFor x", "errorBound (eps=0)", ...]
 129.732 -: string list
 129.733 -> refine fmz ["univariate","equation"];
 129.734 -*** pass ["equation","univariate"]
 129.735 -*** pass ["equation","univariate","linear"]
 129.736 -*** pass ["equation","univariate","root"]
 129.737 -*** pass ["equation","univariate","rational"]
 129.738 -*** pass ["equation","univariate","polynomial" ]
 129.739 -*** pass ["equation","univariate","polynomial","degree_0"]
 129.740 -*** pass ["equation","univariate","polynomial","degree_1"]
 129.741 -*** pass ["equation","univariate","polynomial","degree_2"]
 129.742 -*** pass ["equation","univariate","polynomial","degree_3"]
 129.743 -*** pass ["equation","univariate","polynomial","degree_4"]
 129.744 -*** pass ["equation","univariate","polynomial","normalize"]
 129.745 -val it =
 129.746 -[Matches
 129.747 -(["univariate", "equation"],
 129.748 -{Find = [Correct "solutions L"], With = [...], ...}),
 129.749 -NoMatch (["linear", "univariate", ...], {Find = [...], ...}),
 129.750 -NoMatch (["root", ...], ...), ...] : SpecifyTools.match list
 129.751 -\end{verbatim}}
 129.752 -Der problem type wandelt $x + 1 = 2$ in die normale Form $-1 + x = 0$ um. Diese Suche nach der jeweiligen problem hierachy kann mit Hilfe eines ''proof state`` durchgef\"uhrt werden (siehe n\"achstes Kapitel).
 129.753 -
 129.754 -
 129.755 -\chapter{''Methods``}
 129.756 -Methods werden dazu verwendet, Probleme von type zu l\"osen. Sie sind in einer anderen Programmiersprache beschrieben. Die Sprache sieht einfach aus, betreibt aber im Hintergrund einen enormen Pr\"ufaufwand. So muss sich der Programmierer nicht mit technischen Details befassen, gleichzeitig k\"onnen aber auch keine falschen Anweisungen eingegeben werden.
 129.757 -\section{Der ''Syntax`` des script}
 129.758 -Syntax beschreibt den Zusammenhang der einzelnen Zeichen und Zeichenfolgen mit den Theorien.
 129.759 -Er kann so definiert werden:
 129.760 -\begin{tabbing}
 129.761 -123\=123\=expr ::=\=$|\;\;$\=\kill
 129.762 -\>script ::= {\tt Script} id arg$\,^*$ = body\\
 129.763 -\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
 129.764 -\>\>body ::= expr\\
 129.765 -\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
 129.766 -\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
 129.767 -\>\>\>$|\;$\>listexpr\\
 129.768 -\>\>\>$|\;$\>id\\
 129.769 -\>\>\>$|\;$\>seqex id\\
 129.770 -\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
 129.771 -\>\>\>$|\;$\>{\tt Repeat} seqex\\
 129.772 -\>\>\>$|\;$\>{\tt Try} seqex\\
 129.773 -\>\>\>$|\;$\>seqex {\tt Or} seqex\\
 129.774 -\>\>\>$|\;$\>seqex {\tt @@} seqex\\
 129.775 -\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
 129.776 -\>\>type ::= id\\
 129.777 -\>\>tac ::= id
 129.778 -\end{tabbing}
 129.779 -
 129.780 -\section{\"Uberpr\"ufung der Auswertung}
 129.781 -Das Kontrollsystem arbeitet mit den folgenden Script-Ausdr\"ucken, die {\it tacticals} genannt werden:
 129.782 -\begin{description}
 129.783 -\item{{\tt while} prop {\tt Do} expr id} 
 129.784 -\item{{\tt if} prop {\tt then} expr {\tt else} expr}
 129.785 -\end{description}
 129.786 -W\"ahrend die genannten Befehle das Kontrollsystem durch Auswertung der Formeln ausl\"osen, h\"angen die anderen von der Anwendbarkeit der Formel in den entsprechenden Unterbegriffen ab:
 129.787 -\begin{description}
 129.788 -\item{{\tt Repeat} expr id}
 129.789 -\item{{\tt Try} expr id}
 129.790 -\item{expr {\tt Or} expr id}
 129.791 -\item{expr {\tt @@} expr id}
 129.792 -\item xxx
 129.793 -\end{description}
 129.794 -
 129.795 -
 129.796 -
 129.797 -\chapter{Befehle von \isac{}}
 129.798 -In diesem Kapitel werden alle schon zur Verf\"ugung stehenden Schritte aufgelistet. Diese Liste kann sich auf Grund von weiteren Entwicklungen von \isac{} noch \"andern.\
 129.799 -\newline\linebreak \textbf{Init\_Proof\_Hid (dialogmode, formalization, specifictaion)} gibt die eingegebenen Befehle an die mathematic engine weiter, wobei die beiden letzten Begriffe die Beispiele automatisch speichern. Es ist nicht vorgesehen, dass der Sch\"uler tactic verwendet.\
 129.800 -\newline\linebreak \textbf{Init\_Proof} bildet mit einem ''proof tree`` ein leeres Modell.\
 129.801 -\newline\linebreak \textbf{Model\_Problem problem} bestimmt ein problemtype, das wom\"oglich in der ''hierachy`` gefunden wurde, und verwendet es f\"ur das Umformen.\
 129.802 -\newline\linebreak \textbf{Add\_Given, Add\_Find, Add\_Relation formula} f\"ugt eine Formel in ein bestimmtes Feld eines Modells ein. Dies ist notwendig, solange noch kein Objekt f\"ur den Benutzer vorhanden ist, in dem man die Formel eingeben kann, und nicht die gew\"unschte tactic und Formel von einer Liste w\"ahlen will.\
 129.803 -\newline\linebreak \textbf{Specify\_Theorie theory, Specify\_Problem proble, Specify\_Method method} gibt das entsprechende Element des Basiswissens an.\
 129.804 -\newline\linebreak \textbf{Refine\_Problem problem} sucht nach einem Problem in der hierachy, das auf das vorhandene zutrifft.\
 129.805 -\newline\linebreak \textbf{Apply\_Method method} beendet das Modell und die Beschreibung. Danach wird die L\"osungmeldung ge\"offnet.\
 129.806 -\newline\linebreak \textbf{Free\_Solve} beginnt eine L\"osungsmeldung ohne die Hilfe einer method.\
 129.807 -\newline\linebreak \textbf{Rewrite theorem} bef\"ordert ein theorem in die aktuelle Formel und wandelt es demenetsprechend um. Wenn dies nicht m\"oglich ist, kommt eine Meldung mit ''error``.\
 129.808 -\newline\linebreak \textbf{Rewrite\_Asm theorem} hat die gleiche Funktion wie Rewrite, speichert jedoch eine endg\"ultige Vorraussetzung des theorems, anstatt diese zu sch\"atzen.\
 129.809 -\newline\linebreak \textbf{Rewrite\_Set ruleset} hat \"ahnliche Funktionen wie Rewrite, gilt aber f\"ur einen ganzen Satz von theorems, dem rule set.\
 129.810 -\newline\linebreak \textbf{Rewrite\_Inst (substitution, theorem), Rewrite\_Set\_Inst (substitution, rule set)} ist vergleichbar mit besonderen tactics, ersetzt aber Konstanten im theorem, bevor es zu einer Anwendung kommt.\
 129.811 -\newline\linebreak \textbf{Calculate operation} berechnet das Ergebnis der Eingabe mit der aktuellen Formel (plus, minus, times, cancel, pow, sqrt).\
 129.812 -\newline\linebreak \textbf{Substitute substitution} f\"ugt der momentanen Formel {\tt substitution} hinzu und wandelt es um.\
 129.813 -\newline\linebreak \textbf{Take formula} startet eine neue Reihe von Rechnungen in den Formeln, wo sich schon eine andere Rechnung befindet.\
 129.814 -\newline\linebreak \textbf{Subproblem (theory, problem)} beginnt ein subproblem innerhalb einer Rechnung.\
 129.815 -\newline\linebreak \textbf{Function formula} ruft eine Funktion auf, in der der Name in der Formel enthalten ist. ???????\
 129.816 -\newline\linebreak \textbf{Split\_And, Conclude\_And, Split\_Or, Conclude\_Or, Begin\_Trans, End\_Trans, Begin\_Sequ, End\_Sequ, Split\_Intersect, End\_Intersect} betreffen den Bau einzelner branches des proof trees. Normalerweise werden sie vom dialog guide verdr\"angt.\
 129.817 -\newline\linebreak \textbf{Check\_elementwise assumption} wird in Bezug auf die aktuelle Formel verwendet, die Elemente in einer Liste enth\"alt.\
 129.818 -\newline\linebreak \textbf{Or\_to\_List} wandelt eine Verbindung von Gleichungen in eine Liste von Gleichungen um.\
 129.819 -\newline\linebreak \textbf{Check\_postcond} \"uberpr\"uft die momentane Formel im Bezug auf die Nachbedinung beim Beenden des subproblem.\
 129.820 -\newline\linebreak \textbf{End\_Proof} beendet eine \"Uberpr\"ufung und gibt erst dann ein Ergebnis aus, wenn Check\_postcond erfolgreich abgeschlossen wurde.
 129.821 -
 129.822 -\section{Die Funktionsweise der mathematic engine}
 129.823 -Ein proof (= Beweis) wird in der mathematic engine me von der tactic {\tt Init\_Proof} gestartet und wird wechselwirkend mit anderen tactics vorangebracht. Auf den input (= das, was eingegeben wurde) einzelner tactics folgt eine Formel, die von der me ausgegeben wird, und die darauf folgende tactic gilt. Der proof ist beendet, sobald die me {\tt End\_Proof} als n\"achste tactic vorschl\"agt.
 129.824 -\newline Im Anschluss werden Sie einen Rechenbeweis sehen, der von der L\"osung einer Gleichung (= equation) handelt, bei der diese automatisch differenziert wird. 
 129.825 -{\footnotesize\begin{verbatim}
 129.826 -??????????????????????????????????????????????????????????????????????????????????   
 129.827 -
 129.828 -ML> val fmz = ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x",
 129.829 -                  "errorBound (eps=#0)","solutions L"];
 129.830 -   val fmz =
 129.831 -     ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
 129.832 -      "solutions L"] : string list
 129.833 -   ML>
 129.834 -   ML> val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
 129.835 -                                 ("SqRoot.thy","no_met"));
 129.836 -   val dom = "SqRoot.thy" : string
 129.837 -   val pbt = ["univariate","equation"] : string list
 129.838 -   val met = ("SqRoot.thy","no_met") : string * string
 129.839 -\end{verbatim}}
 129.840 -
 129.841 -\section{Der Beginn einer Rechnung}
 129.842 -
 129.843 -Der proof state wird von einem proof tree und einer position ausgegeben. Beide sind zu Beginn leer. Die tactic {\tt Init\_Proof} ist, wie alle anderen tactics auch, an einen string gekoppelt. Um einen neuen proof beginnen zu k\"onnen, werden folgende Schritte durchgef\"uhrt:
 129.844 -{\footnotesize\begin{verbatim}
 129.845 -???????????????????????????????????????????????????????????????????????????????????????????? 
 129.846 -ML>  val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
 129.847 -   val mID = "Init_Proof" : string
 129.848 -   val m =
 129.849 -     Init_Proof
 129.850 -       (["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
 129.851 -         "solutions L"],("SqRoot.thy",[#,#],(#,#))) : mstep
 129.852 -   ML>
 129.853 -   ML>  val (p,_,f,nxt,_,pt) = me (mID,m) e_pos' c EmptyPtree;
 129.854 -   val p = ([],Pbl) : pos'
 129.855 -   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
 129.856 -   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
 129.857 -     : string * mstep
 129.858 -   val pt =
 129.859 -     Nd
 129.860 -       (PblObj
 129.861 -          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
 129.862 -           result=#,spec=#},[]) : ptree
 129.863 -\end{verbatim}}
 129.864 -Die mathematics engine gibt etwas mit dem type {\tt mout} aus, was in unserem Fall ein Problem darstellt. Sobald mehr angezeigt wird, m\"usste dieses jedoch gel\"ost sein.
 129.865 -{\footnotesize\begin{verbatim}
 129.866 -?????????????????????????????????????????????????????????????????????????????????????????????
 129.867 -   ML> Compiler.Control.Print.printDepth:=8; (*4 default*)
 129.868 -   val it = () : unit
 129.869 -   ML>
 129.870 -   ML> f;
 129.871 -   val it =
 129.872 -     Form'
 129.873 -       (PpcKF
 129.874 -          (0,EdUndef,0,Nundef,
 129.875 -           (Problem [],
 129.876 -            {Find=[Incompl "solutions []"],
 129.877 -             Given=[Incompl "equality",Incompl "solveFor"],Relate=[],
 129.878 -             Where=[False "matches (?a = ?b) e_"],With=[]}))) : mout
 129.879 -\end{verbatim}}
 129.880 -{\footnotesize\begin{verbatim}
 129.881 -?????????????????????????????????????????????????????????????????????????????????????????????
 129.882 -   ML>  nxt;
 129.883 -   val it = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
 129.884 -     : string * mstep
 129.885 -   ML>
 129.886 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.887 -   val nxt = ("Model_Problem",Model_Problem ["normalize","univariate","equation"])
 129.888 -     : string * mstep
 129.889 -   ML>
 129.890 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.891 -\end{verbatim}}
 129.892 -
 129.893 -\section{The phase of modeling}
 129.894 -Dieses Kapitel besch\"aftigt sich mit dem input der Einzelheiten bei einem Problem. Die me kann dabei helfen, wenn man die formalization durch {\tt Init\_Proof} darauf hinweist. Normalerweise weiss die mathematics engine die n\"achste gute tactic.
 129.895 -{\footnotesize\begin{verbatim}
 129.896 -?????????????????????????????????????????????????????????????????????????????????????????????
 129.897 -   ML>  nxt;
 129.898 -   val it =
 129.899 -     ("Add_Given",Add_Given "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)")
 129.900 -     : string * mstep
 129.901 -   ML>
 129.902 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.903 -   val nxt = ("Add_Given",Add_Given "solveFor x") : string * mstep
 129.904 -   ML>
 129.905 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.906 -   val nxt = ("Add_Find",Add_Find "solutions L") : string * mstep
 129.907 -   ML>
 129.908 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt; 
 129.909 -   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
 129.910 -\end{verbatim}}
 129.911 -{\footnotesize\begin{verbatim}
 129.912 -?????????????????????????????????????????????????????????????????????????????????????????????
 129.913 -   ML>  Compiler.Control.Print.printDepth:=8;
 129.914 -   ML>  f;
 129.915 -   val it =
 129.916 -     Form'
 129.917 -       (PpcKF
 129.918 -          (0,EdUndef,0,Nundef,
 129.919 -           (Problem [],
 129.920 -            {Find=[Correct "solutions L"],
 129.921 -             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 129.922 -                    Correct "solveFor x"],Relate=[],Where=[],With=[]}))) : mout
 129.923 -\end{verbatim}}
 129.924 -
 129.925 -
 129.926 -\section{The phase of specification}
 129.927 -Diese phase liefert eindeutige Bestimmungen einer domain, den problem type und die method damit man sie verwenden kann. F\"ur gew\"ohnlich wird die Suche nach dem richtigen problem type unterst\"utzt. Dazu sind zwei tactics verwendbar: {\tt Specify\_Problem} entwickelt ein Feedback, wie ein problem type bei dem jetzigen problem zusammenpasst und {\tt Refine\_Problem} stellt Hilfe durch das System bereit, falls der Benutzer die \"Ubersicht verliert.
 129.928 -{\footnotesize\begin{verbatim}
 129.929 -??????????????????????????????????????????????????????????????????????????????????????????
 129.930 -   ML> nxt;
 129.931 -   val it = ("Specify_Domain",Specify_Domain "SqRoot.thy") : string * mstep
 129.932 -   ML>
 129.933 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.934 -   val nxt =
 129.935 -     ("Specify_Problem",Specify_Problem ["normalize","univariate","equation"])
 129.936 -     : string * mstep
 129.937 -   val pt =
 129.938 -     Nd
 129.939 -       (PblObj
 129.940 -          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
 129.941 -              result=#,spec=#},[]) : ptree
 129.942 -\end{verbatim}}
 129.943 -Die me erkennt den richtigen Problem type und arbeitet so weiter:
 129.944 -{\footnotesize\begin{verbatim}
 129.945 -?????????????????????????????????????????????????????????????????????????????????????????
 129.946 -   ML> val nxt = ("Specify_Problem",
 129.947 -               Specify_Problem ["polynomial","univariate","equation"]);
 129.948 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.949 -   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
 129.950 -   val nxt =
 129.951 -     ("Refine_Problem",Refine_Problem ["normalize","univariate","equation"])
 129.952 -     : string * mstep
 129.953 -   ML>
 129.954 -   ML> val nxt = ("Specify_Problem",
 129.955 -               Specify_Problem ["linear","univariate","equation"]);
 129.956 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.957 -   val f =
 129.958 -     Form'
 129.959 -       (PpcKF
 129.960 -          (0,EdUndef,0,Nundef,
 129.961 -           (Problem ["linear","univariate","equation"],
 129.962 -            {Find=[Correct "solutions L"],
 129.963 -             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 129.964 -                    Correct "solveFor x"],Relate=[],
 129.965 -             Where=[False
 129.966 -                    "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
 129.967 -             With=[]}))) : mout 
 129.968 -\end{verbatim}}
 129.969 -Wir nehmen wieder an, dass der dialog guide die n\"achsten tactics, veranlasst von der mathematic engine, versteckt und der Sch\"uler Hilfe ben\"otigt. Dann muss {\tt Refine\_Problem} angewandt werden. Dieser Befehl findet immer den richtigen Weg, wenn man es auf den problem type bezieht [''univariate``, ''equation``].
 129.970 -{\footnotesize\begin{verbatim}
 129.971 -????????????????????????????????????????????????????????????????????????????????????????????
 129.972 -   ML> val nxt = ("Refine_Problem",
 129.973 -                  Refine_Problem ["linear","univariate","equation
 129.974 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.975 -   val f = Problems (RefinedKF [NoMatch #]) : mout
 129.976 -   ML>
 129.977 -   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
 129.978 -   val f =
 129.979 -     Problems
 129.980 -       (RefinedKF
 129.981 -          [NoMatch
 129.982 -             (["linear","univariate","equation"],
 129.983 -              {Find=[Correct "solutions L"],
 129.984 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
 129.985 -                      Correct "solveFor x"],Relate=[],
 129.986 -               Where=[False
 129.987 -                     "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
 129.988 -               With=[]})]) : mout
 129.989 -   ML>
 129.990 -   ML> val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
 129.991 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 129.992 -   val f =
 129.993 -     Problems
 129.994 -       (RefinedKF [Matches #,NoMatch #,NoMatch #,NoMatch #,NoMatch #,Matches #])
 129.995 -     : mout
 129.996 -   ML>
 129.997 -   ML>
 129.998 -   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
 129.999 -   val f =
129.1000 -     Problems
129.1001 -       (RefinedKF
129.1002 -          [Matches
129.1003 -             (["univariate","equation"],
129.1004 -              {Find=[Correct "solutions L"],
129.1005 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
129.1006 -                      Correct "solveFor x"],Relate=[],
129.1007 -               Where=[Correct
129.1008 -               With=[]}),
129.1009 -           NoMatch
129.1010 -             (["linear","univariate","equation"],
129.1011 -              {Find=[Correct "solutions L"],
129.1012 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
129.1013 -                      Correct "solveFor x"],Relate=[],
129.1014 -               Where=[False
129.1015 -                      "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
129.1016 -                  With=[]}),
129.1017 -           NoMatch
129.1018 -             ...
129.1019 -             ...   
129.1020 -           Matches
129.1021 -             (["normalize","univariate","equation"],
129.1022 -              {Find=[Correct "solutions L"],
129.1023 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
129.1024 -                      Correct "solveFor x"],Relate=[],Where=[],With=[]})]) : mout
129.1025 -\end{verbatim}}
129.1026 -Die tactic {\tt Refine\_Problem} wandelt alle matches wieder in problem types um und sucht in der problem hierachy weiter.
129.1027 -
129.1028 -
129.1029 -\section{The phase of solving}
129.1030 -Diese phase beginnt mit dem Aufruf einer method, die eine normale form innerhalb einer tactic ausf\"uhrt: {\tt Rewrite rnorm\_equation\_add} und {\tt Rewrite\_Set SqRoot\_simplify}:
129.1031 -{\footnotesize\begin{verbatim} 
129.1032 -   ML> nxt;
129.1033 -   val it = ("Apply_Method",Apply_Method ("SqRoot.thy","norm_univar_equation"))
129.1034 -     : string * mstep
129.1035 -   ML>
129.1036 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
129.1037 -   val f =
129.1038 -     Form' (FormKF (~1,EdUndef,1,Nundef,"(x + #1) * (x + #2) = x ^^^ #2 + #8"))
129.1039 -   val nxt =
129.1040 -     ("Rewrite", Rewrite
129.1041 -        ("rnorm_equation_add","~ ?b =!= #0 ==> (?a = ?b) = (?a + #-1 * ?b = #0)"))
129.1042 -   ML>
129.1043 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
129.1044 -   val f =
129.1045 -     Form' (FormKF (~1,EdUndef,1,Nundef,
129.1046 -           "(x + #1) * (x + #2) + #-1 * (x ^^^ #2 + #8) = #0")) : mout
129.1047 -   val nxt = ("Rewrite_Set",Rewrite_Set "SqRoot_simplify") : string * mstep
129.1048 -   ML>
129.1049 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
129.1050 -   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"#-6 + #3 * x = #0")) : mout
129.1051 -   val nxt = ("Subproblem",Subproblem ("SqRoot.thy",[#,#])) : string * mstep
129.1052 -\end{verbatim}}
129.1053 -Die Formel $-6 + 3\cdot x = 0$ ist die Eingabe eine subproblems, das wiederum gebraucht wird, um die Gleichungsart zu erkennen und die entsprechende method auszuf\"uhren:
129.1054 -{\footnotesize\begin{verbatim}
129.1055 -   ML> nxt;
129.1056 -   val it = ("Subproblem",Subproblem ("SqRoot.thy",["univariate","equation"]))
129.1057 -   ML>   
129.1058 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
129.1059 -   val f =
129.1060 -     Form' (FormKF
129.1061 -          (~1,EdUndef,1,Nundef,"Subproblem (SqRoot.thy, [univariate, equation])"))
129.1062 -     : mout
129.1063 -   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
129.1064 -   ML>
129.1065 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
129.1066 -   val nxt = ("Model_Problem",Model_Problem ["linear","univariate","equation"])
129.1067 -\end{verbatim}}
129.1068 -{\tt Refine [''univariate``, ''equation``]} sucht die passende Gleichungsart aus der problem hierachy heraus, welche man mit {\tt Model\_Problem [''linear``, ''univariate``, ''equation``]} \"uber das System ansehen kann.
129.1069 -Nun folgt erneut die phase of modeling und die phase of specification.
129.1070 -
129.1071 -\section{The final phase: \"Uberpr\"ufung der ''post-condition``}
129.1072 -Die gezeigten problems, die durch \isac{} gel\"ost wurden, sind so genannte 'example construction problems'. Das massivste Merkmal solcher problems ist die post-condition. Im Umgang mit dieser gibt es noch offene Fragen.
129.1073 -Dadurch wird die post-condition im folgenden Beispiel als problem und subproblem erw\"ahnt.
129.1074 -{\footnotesize\begin{verbatim}
129.1075 -   ML> nxt;
129.1076 -   val it = ("Check_Postcond",Check_Postcond ["linear","univariate","equation"])
129.1077 -   ML>
129.1078 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
129.1079 -   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"[x = #2]")) : mout
129.1080 -   val nxt =
129.1081 -     ("Check_Postcond",Check_Postcond ["normalize","univariate","equation"])
129.1082 -   ML>
129.1083 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
129.1084 -   val f = Form' (FormKF (~1,EdUndef,0,Nundef,"[x = #2]")) : mout
129.1085 -   val nxt = ("End_Proof'",End_Proof') : string * mstep
129.1086 -\end{verbatim}}
129.1087 -Die tactic {\tt End\_Proof'} bedeutet, dass der proof erflogreich beendet wurde.\\
129.1088 -
129.1089 -\paragraph{Versuchen Sie es!} Die tactics, die vom System vorgeschlagen werden, m\"ussen vom Benutzer nicht angewendet werden. Er kann selbstverst\"andlich auch andere tactics verwenden und das System wird melden, ob dieser Befehl zutreffend ist oder nicht.
129.1090 -
129.1091 -
129.1092 -\part{Handbuch f\"ur Autoren}
129.1093 -
129.1094 -\chapter{Die Struktur des Grundlagenwissens}
129.1095 -
129.1096 -\section{''tactics`` und Daten}
129.1097 -Zuerst betrachten wir die me von aussen. Wir sehen uns tactics und an und verbinden sie mit unserem Grundwissen (KB). Im Bezug auf das KB befassen wir uns mit den kleinsten Teilchen, die von den Autoren des KB sehr genau durchgef\"uhrt werden m\"ussen.
129.1098 -Diese Teile sind in alphabetischer Anordnung in Tab.\ref{kb-items} auf Seite \pageref{kb-items} aufgelistet.
129.1099 -
129.1100 -{\begin{table}[h]
129.1101 -\caption{Kleinste Teilchen des KB} \label{kb-items}
129.1102 -%\tabcolsep=0.3mm
129.1103 -\begin{center}
129.1104 -\def\arraystretch{1.0}
129.1105 -\begin{tabular}{lp{9.0cm}}
129.1106 -Abk\"urzung & Beschreibung \\
129.1107 -\hline
129.1108 -&\\
129.1109 -{\it calc\_list}
129.1110 -& gesammelte Liste von allen ausgewerteten Funktionen\\
129.1111 -{\it eval\_fn}
129.1112 -& ausgewertete Funktionen f\"ur Zahlen und f\"ur Eigenschaften, die in SML kodiert sind\\
129.1113 -{\it eval\_rls }
129.1114 -& rule set {\it rls} f\"ur einfache Ausdr\"ucke mit {\it eval\_fn}s\\
129.1115 -{\it fmz}
129.1116 -& Formalisierung, d.h. eine sehr geringe Darstellung von einem Beispiel \\
129.1117 -{\it met}
129.1118 -& eine method d.h. eine Datenstruktur, die alle Informationen zum L\"osen einer phase enth\"alt ({\it rew\_ord}, {\it scr}, etc.)\\
129.1119 -{\it metID}
129.1120 -& bezieht sich auf {\it met}\\
129.1121 -{\it op}
129.1122 -& ein Operator, der der Schl\"ussel zu {\it eval\_fn} in einer {\it calc\_list} ist \\
129.1123 -{\it pbl}
129.1124 -& Problem d.h. der Knotenpunkt in der problem hierachy\\
129.1125 -{\it pblID}
129.1126 -& bezieht sich auf {\it pbl}\\
129.1127 -{\it rew\_ord}
129.1128 -& Anordnung beim Rewriting\\
129.1129 -{\it rls}
129.1130 -& rule set, d.h. eine Datenstruktur, die theorems {\it thm} und Operatoren {\it op} zur Vereinfachung (mit {\it rew\_ord}) enth\"alt \\
129.1131 -{\it Rrls}
129.1132 -& rule set f\"ur das 'reverse rewriting' (eine \isac-Technik, die schrittweise Rewriting entwickelt, z.B. f\"ur die zur\"uckgenommenen Teile)\\
129.1133 -{\it scr}
129.1134 -& script, das die Algorithmen durch Anwenden von tactics beschreibt und ein Teil von {\it met} ist \\
129.1135 -{\it norm\_rls}
129.1136 -& spezielles Regelwerk zum Berechnen von Normalformen, im Zusammenhang mit {\it thy}\\
129.1137 -{\it spec}
129.1138 -& Spezifikation, z.B, ein Tripel ({\it thyID, pblID, metID})\\
129.1139 -{\it subs}
129.1140 -& Ersatz, z.B. eine Liste von Variablen und ihren jeweiligen Werten\\
129.1141 -{\it Term}
129.1142 -& Term von Isabelle, z.B. eine Formel\\
129.1143 -{\it thm}
129.1144 -& theorem\\
129.1145 -{\it thy}
129.1146 -& theory\\
129.1147 -{\it thyID}
129.1148 -& im Bezug auf {\it thy} \\
129.1149 -\end{tabular}\end{center}\end{table}}
129.1150 -
129.1151 -Die Verbindung zwischen tactics und Daten werden in Tab.\ref{tac-kb} auf Seite \pageref{tac-kb} dargestellt.
129.1152 -
129.1153 -
129.1154 -\begin{table}[h]
129.1155 -\caption{Welche tactics verwenden die Teile des KB~?} \label{tac-kb}
129.1156 -\tabcolsep=0.3mm
129.1157 -\begin{center}
129.1158 -\begin{tabular}{|ll||cccc|ccc|cccc|} \hline
129.1159 -tactic &Eingabe & & & &norm\_& &rew\_&rls &eval\_&eval\_&calc\_& \\
129.1160 -& &thy &scr &Rrls&rls &thm &ord &Rrls&fn &rls &list &dsc\\
129.1161 -\hline\hline
129.1162 -Init\_Proof
129.1163 -&fmz & x & & & x & & & & & & & x \\
129.1164 -&spec & & & & & & & & & & & \\
129.1165 -\hline
129.1166 -\multicolumn{13}{|l|}{model phase}\\
129.1167 -\hline
129.1168 -Add\_*
129.1169 -&Term & x & & & x & & & & & & & x \\
129.1170 -FormFK &model & x & & & x & & & & & & & x \\
129.1171 -\hline
129.1172 -\multicolumn{13}{|l|}{specify phase}\\
129.1173 -\hline
129.1174 -Specify\_Theory
129.1175 -&thyID & x & & & x & & & & x & x & & x \\
129.1176 -Specify\_Problem
129.1177 -&pblID & x & & & x & & & & x & x & & x \\
129.1178 -Refine\_Problem
129.1179 -&pblID & x & & & x & & & & x & x & & x \\
129.1180 -Specify\_Method
129.1181 -&metID & x & & & x & & & & x & x & & x \\
129.1182 -Apply\_Method
129.1183 -&metID & x & x & & x & & & & x & x & & x \\
129.1184 -\hline
129.1185 -\multicolumn{13}{|l|}{solve phase}\\
129.1186 -\hline
129.1187 -Rewrite,\_Inst
129.1188 -&thm & x & x & & & x &met & & x &met & & \\
129.1189 -Rewrite, Detail
129.1190 -&thm & x & x & & & x &rls & & x &rls & & \\
129.1191 -Rewrite, Detail
129.1192 -&thm & x & x & & & x &Rrls & & x &Rrls & & \\
129.1193 -Rewrite\_Set,\_Inst
129.1194 -&rls & x & x & & & & & x & x & x & & \\
129.1195 -Calculate
129.1196 -&op & x & x & & & & & & & & x & \\
129.1197 -Substitute
129.1198 -&subs & x & & & x & & & & & & & \\
129.1199 -& & & & & & & & & & & & \\
129.1200 -SubProblem
129.1201 -&spec & x & x & & x & & & & x & x & & x \\
129.1202 -&fmz & & & & & & & & & & & \\
129.1203 -\hline
129.1204 -\end{tabular}\end{center}\end{table}
129.1205 -
129.1206 -
129.1207 -\section{Die theories von \isac{}}
129.1208 -Die theories von \isac{} basieren auf den theories f\"ur HOL und Real von Isabelle. Diese theories haben eine spezielle Form, die durch die Endung {\tt *.thy} gekennzeichnet sind; normalerweise werden diese theories zusammen mit SML verwendet. Dann haben sie den selben Dateinamen, aber die Endung {\tt *.ML}.
129.1209 -Die theories von \isac{} representieren den Teil vom Basiswissen von \isac{}, die hierachy von den zwei theories ist nach diesen strukturiert. Die {\tt *.ML} Dateien beinhalten {\em alle} Daten von den anderen zwei Hauptlinien des Basiswissens, die problems und methods (ohne ihre jeweilige Struktur, die von den problem Browsern und den method Browsern gemacht wird, zu pr\"asentieren.
129.1210 -Die Tab.\ref{theories} auf Seite \pageref{theories} listet die base theories auf, die geplant sind in der Version \isac{} 1 angewendet zu werden. Wir erwarten, dass die Liste erweitert wird in n\"aherer Zukunft, und wir werden uns auch den theorie Browser genauer ansehen.
129.1211 -Die ersten drei theories auf der Liste geh\"oren {\em nicht} zum Grundwissen von \isac{}; sie besch\"aftigen sich mit der Skriptsprache f\"ur methods und ist hier nur zur Vollst\"andigkeit angef\"uhrt.
129.1212 -
129.1213 -{\begin{table}[h]
129.1214 -\caption{theory von der ersten Version von \isac} \label{theories}
129.1215 -%\tabcolsep=0.3mm
129.1216 -\begin{center}
129.1217 -\def\arraystretch{1.0}
129.1218 -\begin{tabular}{lp{9.0cm}}
129.1219 -theory & Beschreibung \\
129.1220 -\hline
129.1221 -&\\
129.1222 -ListI.thy
129.1223 -& ordnet die Bezeichnungen den Funktionen, die in {\tt Isabelle2002/src/HOL/List.thy} sind, zu und (intermediatly~?) definiert einige weitere Listen von Funktionen\\
129.1224 -ListI.ML
129.1225 -& {\tt eval\_fn} f\"ur die zus\"atzliche Listen von Funktionen\\
129.1226 -Tools.thy
129.1227 -& Funktion, die f\"ur die Auswertung von Skripten ben\"otigt wird\\
129.1228 -Tools.ML
129.1229 -& bezieht sich auf {\tt eval\_fn}s\\
129.1230 -Script.thy
129.1231 -& Vorraussetzung f\"ur script: types, tactics, tacticals\\
129.1232 -Script.ML
129.1233 -& eine Reihe von tactics und Funktionen f\"ur den internen Gebrauch\\
129.1234 -& \\
129.1235 -\hline
129.1236 -& \\
129.1237 -Typefix.thy
129.1238 -& fortgeschrittener Austritt, um den type Fehlern zu entkommen\\
129.1239 -Descript.thy
129.1240 -& {\it Beschreibungen} f\"ur die Formeln von {\it Modellen} und {\it Problemen}\\
129.1241 -Atools
129.1242 -& Neudefinierung von Operatoren; allgemeine Eigenschaften und Funktionen f\"ur Vorraussetzungen; theorems f\"ur {\tt eval\_rls}\\
129.1243 -Float
129.1244 -& Gleitkommerzahlendarstellung\\
129.1245 -Equation
129.1246 -& grunds\"atzliche Vorstellung f\"ur  Gleichungen und Gleichungssysteme\\
129.1247 -Poly
129.1248 -& Polynome\\
129.1249 -PolyEq
129.1250 -& polynomiale Gleichungen und Gleichungssysteme \\
129.1251 -Rational.thy
129.1252 -& zus\"atzliche theorems f\"ur Rationale Zahlen\\
129.1253 -Rational.ML
129.1254 -& abbrechen, hinzuf\"ugen und vereinfachen von Rationalen Zahlen durch Verwenden von (einer allgemeineren Form von) Euclids Algorithmus; die entsprechenden umgekehrten Regels\"atze\\
129.1255 -RatEq
129.1256 -& Gleichung mit rationalen Zahlen\\
129.1257 -Root
129.1258 -& Radikanten; berechnen der Normalform; das betreffende umgekehrte Regelwerk\\
129.1259 -RootEq
129.1260 -& Gleichungen mit Wurzeln\\
129.1261 -RatRootEq
129.1262 -& Gleichungen mit rationalen Zahlen und Wurzeln (z.B. mit Termen, die beide Vorg\"ange enthalten)\\
129.1263 -Vect
129.1264 -& Vektoren Analysis\\
129.1265 -Trig
129.1266 -& Trigonometrie\\
129.1267 -LogExp
129.1268 -& Logarithmus und Exponentialfunktionen\\
129.1269 -Calculus
129.1270 -& nicht der Norm entsprechende Analysis\\
129.1271 -Diff
129.1272 -& Differenzierung\\
129.1273 -DiffApp
129.1274 -& Anwendungen beim Differenzieren (Maximum-Minimum-Probleme)\\
129.1275 -Test
129.1276 -& (alte) Daten f\"ur Testfolgen\\
129.1277 -Isac
129.1278 -& enth\"alt alle Theorien von\isac{}\\
129.1279 -\end{tabular}\end{center}\end{table}}
129.1280 -
129.1281 -
129.1282 -\section{Daten in {\tt *.thy} und {\tt *.ML}}
129.1283 -Wie schon zuvor angesprochen, haben die Arbeiten die theories von *.thy und *.ML zusammen und haben deswegen den selben Dateiname. Wie diese Daten zwischen den zwei Dateien verteilt werden wird in der
129.1284 -Tab.\ref{thy-ML} auf Seite \pageref{thy-ML} gezeigt. Die Ordnung von den Datenteilchen in den theories sollte an der Ordnung von der Liste festhalten.
129.1285 -
129.1286 -{\begin{table}[h]
129.1287 -\caption{Daten in {\tt *.thy}- und {\tt *.ML}-files} \label{thy-ML}
129.1288 -\tabcolsep=2.0mm
129.1289 -\begin{center}
129.1290 -\def\arraystretch{1.0}
129.1291 -\begin{tabular}{llp{7.7cm}}
129.1292 -Datei & Daten & Beschreibung \\
129.1293 -\hline
129.1294 -& &\\
129.1295 -{\tt *.thy}
129.1296 -& consts
129.1297 -& Operatoren, Eigenschaften, Funktionen und Skriptnamen ('{\tt Skript} Name \dots{\tt Argumente}')
129.1298 -\\
129.1299 -& rules
129.1300 -& theorems: \isac{} verwendet theorems von Isabelle, wenn m\"oglich; zus\"atzliche theorems, die jenen von Isabelle entsprechen, bekommen ein {\it I} angeh\"angt
129.1301 -\\& &\\
129.1302 -{\tt *.ML}
129.1303 -& {\tt theory' :=}
129.1304 -& Die theory, die 
129.1305 -abgegrenzt ist von der {\tt *.thy}-Datei, wird durch \isac{} zug\"anglich gemacht
129.1306 -\\
129.1307 -& {\tt eval\_fn}
129.1308 -& die Auswertungsfunktion f\"ur die Operatoren und Eigenschaften, kodiert im meta-Level (SML); die Bezeichnugn von so einer Funktion ist eine Kombination von Schl\"usselw\"ortern {\tt eval\_} und einer Bezeichnung von der Funktion, die in in {\tt *.thy} erkl\"art ist
129.1309 -\\
129.1310 -& {\tt *\_simplify}
129.1311 -& der automatisierte Vereinfacher f\"ur die tats\"achliche Theorie, z.B. die Bezeichnung von diesem Regelwerk ist eine Kombination aus den Theorienbezeichnungen und dem Schl\"usselwort {\tt *\_simplify}
129.1312 -\\
129.1313 -& {\tt norm\_rls :=}
129.1314 -& der automatisierte Vereinfacher {\tt *\_simplify} wird so aufgehoben, dass er \"uber \isac{}  zug\"anglich ist
129.1315 -\\
129.1316 -& {\tt rew\_ord' :=}
129.1317 -& das Gleiche f\"ur die Anordnung des Rewriting, wenn es ausserhalb eines speziellen Regelwerks gebraucht wird
129.1318 -\\
129.1319 -& {\tt ruleset' :=}
129.1320 -& dasselbe wie f\"ur Regels\"atze (gew\"ohnliche Regels\"atze, umgekehrte Regels\"atze, und {\tt eval\_rls})
129.1321 -\\
129.1322 -& {\tt calc\_list :=}
129.1323 -& dasselbe f\"ur {\tt eval\_fn}s, wenn es ausserhalb eines bestimmten Regelwerks gebraucht wird (wenn es ausserhalb eines bestimmten Regelwerks ben\"otigt wird) (z.B. f\"ur eine tactic {\tt Calculate} in einem Skript)
129.1324 -\\
129.1325 -& {\tt store\_pbl}
129.1326 -& Problems, die in {\tt *.ML}-Dateien definiert sind, werden zug\"anglich f\"ur \isac{}
129.1327 -\\
129.1328 -& {\tt methods :=}
129.1329 -& methods, die in {\tt *.ML}-Dateien definiert sind werden zug\"anglich f\"ur \isac{}
129.1330 -\\
129.1331 -\end{tabular}\end{center}\end{table}}
129.1332 -
129.1333 -\section{Formale Beschreibung der Hierarchie von Problemen}
129.1334 -
129.1335 -\section{Skripttaktiken}
129.1336 -Tats\"achlich sind es die tactics, die die Berechnungen vorantreiben: im Hintergrund bauen sie den proof tree und sie \"ubernehmen die wichtigsten Aufgaben w\"ahrend der Auswertung bei der der ''script-interpreter`` zur Steuerung des Benutzers transferiert wird. Hier beschreiben wir nur den Syntax von tactics; die Semantik ist beschrieben etwas weiter unten im Kontext mit tactics, die die Benutzer/Innen dieses Programmes verwenden: Es gibt einen Schriftverkehr zwischen den user-tactics und den script tactics.
129.1337 -
129.1338 -
129.1339 -
129.1340 -\part{Authoring on the knowledge}
129.1341 -
129.1342 -
129.1343 -\section{Add a theorem}
129.1344 -\section{Define and add a problem}
129.1345 -\section{Define and add a predicate}
129.1346 -\section{Define and add a method}
129.1347 -\section{}
129.1348 -\section{}
129.1349 -\section{}
129.1350 -\section{}
129.1351 -
129.1352 -
129.1353 -
129.1354 -\newpage
129.1355 -\bibliography{bib/isac,bib/from-theses}
129.1356 -
129.1357 -\end{document}
   130.1 --- a/src/Doc/isac/mat-eng-en.tex	Mon Sep 16 12:27:20 2013 +0200
   130.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   130.3 @@ -1,1771 +0,0 @@
   130.4 -%WN051006 dropped in code, but interesting for case study 'order a list'
   130.5 -%EqSystem.thy
   130.6 -%---------------------------------------------------------------------------
   130.7 -%
   130.8 -% order'_system      :: "bool list => bool list " ("order'_system _")
   130.9 -%
  130.10 -%EqSystem.ML
  130.11 -%---------------------------------------------------------------------------
  130.12 -%(*("order_system", ("EqSystem.order'_system", 
  130.13 -%                   eval_order_system "#eval_order_system_"))*)
  130.14 -%fun eval_order_system _ "EqSystem.order'_system"
  130.15 -%                         (p as (Const ("EqSystem.order'_system",_) $ ts)) _ =
  130.16 -%    let val ts' = sort (ord_simplify_Integral_ false (assoc_thy"Isac.thy") [])
  130.17 -%                (isalist2list ts)
  130.18 -%       val ts'' = list2isalist HOLogic.boolT ts'
  130.19 -%    in if ts <> ts''
  130.20 -%       then Some (term2str p ^ " = " ^ term2str ts'',
  130.21 -%              Trueprop $ (mk_equality (p,ts'')))
  130.22 -%       else None
  130.23 -%    end
  130.24 -%  | eval_order_system _ _ _ _ = None;
  130.25 -%
  130.26 -%
  130.27 -%"Script Norm2SystemScript (es_::bool list) (vs_::real list) = \
  130.28 -%\  (let es__ = Try (Rewrite_Set simplify_Integral_parenthesized False) es_; \
  130.29 -%\       es__ = (Try (Calculate order_system_) (order_system es__))\
  130.30 -%\in (SubProblem (Biegelinie_,[linear,system],[no_met])\
  130.31 -%\                  [bool_list_ es__, real_list_ vs_]))"
  130.32 -%              ));
  130.33 -%
  130.34 -%eqsystem.sml
  130.35 -%---------------------------------------------------------------------------
  130.36 -%"----------- eval_sort -------------------------------------------";
  130.37 -%"----------- eval_sort -------------------------------------------";
  130.38 -%"----------- eval_sort -------------------------------------------";
  130.39 -%val ts = str2term "[c_2 = 0, -1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0]";
  130.40 -%val ts' = sort (ord_simplify_Integral_ false (assoc_thy"Isac.thy") [])
  130.41 -%              (isalist2list ts);
  130.42 -%terms2str ts';
  130.43 -%val ts'' = list2isalist HOLogic.boolT ts';
  130.44 -%if term2str ts'' = "[-1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0, c_2 = 0]"
  130.45 -%then () else raise error "eqsystem.sml eval_sort 1";
  130.46 -%
  130.47 -%val t = str2term "order_system [c_2 = 0,\
  130.48 -%                \-1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0]";
  130.49 -%val Some (str,_) = eval_order_system "" "EqSystem.order'_system" t "";
  130.50 -%if str = "order_system [c_2 = 0, -1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0] = [-1 * (q_0 * L ^^^ 2) / 2 + (L * c + c_2) = 0, c_2 = 0]" then ()
  130.51 -%else raise error "eqsystem.sml eval_sort 2";
  130.52 -%
  130.53 -%
  130.54 -%
  130.55 -%  calculate_ thy ("EqSystem.order'_system", 
  130.56 -%                 eval_order_system "#eval_order_system_") t;
  130.57 -%
  130.58 -%---------------------------------------------------------------------------
  130.59 -%---------------------------------------------------------------------------
  130.60 -%---------------------------------------------------------------------------
  130.61 -
  130.62 -
  130.63 -%In the following this text is not compatible with isac-code:
  130.64 -%* move termorder to knowledge: FIXXXmat0201a
  130.65 -%
  130.66 -%
  130.67 -
  130.68 -\documentclass[11pt,a4paper,headline,headcount,towside,nocenter]{report}
  130.69 -\usepackage{latexsym}           % recommended by Ch.Schinagl 10.98
  130.70 -\bibliographystyle{alpha}
  130.71 -
  130.72 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  130.73 -
  130.74 -\title{\isac --- Interface for\\
  130.75 -  Developers of Math Knowledge\\[1.0ex]
  130.76 -  and\\[1.0ex]
  130.77 -  Tools for Experiments in\\
  130.78 -  Symbolic Computation\\[1.0ex]}
  130.79 -\author{The \isac-Team\\
  130.80 -  \tt isac-users@ist.tugraz.at\\[1.0ex]}
  130.81 -\date{\today}
  130.82 -
  130.83 -\begin{document}
  130.84 -\maketitle
  130.85 -\newpage
  130.86 -\tableofcontents
  130.87 -\newpage
  130.88 -\listoftables
  130.89 -\newpage
  130.90 -
  130.91 -\chapter{Introduction}
  130.92 -\section{The scope of this document}
  130.93 -\paragraph{As a manual:} This document describes the interface to \isac's kernel (KE), the interface to the mathematics engine (ME) included in the KE, and to the various tools like rewriting, matching etc.
  130.94 -
  130.95 -\isac's KE is written in SML, the language developed in conjunction with predecessors of the theorem prover Isabelle. Thus, in this document we use the plain ASCII representation of SML code. The reader may note that the \isac-user is presented a completely different view on a graphical user interface.
  130.96 -
  130.97 -The document is selfcontained; basic knowledge about SML (as an introduction \cite{Paulson:91} is recommended), terms and rewriting is assumed.
  130.98 -
  130.99 -%The interfaces will be moderately exended during the first phase of development of the mathematics knowledge. The work on the subprojects defined should {\em not} create interfaces of any interest to a user or another author of knowledge except identifiers (of type string) for theorems, rulesets etc.
 130.100 -
 130.101 -Notation: SML code, directories, file names are {\tt written in 'tt'}; in particular {\tt ML>} is the KE prompt.
 130.102 -
 130.103 -\paragraph{Give it a try !} Another aim of this text is to give the reader hints for experiments with the tools introduced.
 130.104 -
 130.105 -\section{Related documents}\label{related-docs}
 130.106 -Isabelle reference manual \cite{Isa-ref}, also contained in the Isabelle distribution under $\sim${\tt /doc/}.
 130.107 -
 130.108 -{\bf The actual locations of files is being recorded in \\{\tt /software/services/isac/README}
 130.109 -\footnote{The KEs current version is {\tt isac.020120-math/} which is based on the version Isabelle99 at {\tt http://isabelle.in.tum.de}.\\
 130.110 -The current locations at IST are\\
 130.111 -{\tt [isabelle]\hspace{3em}      /software/sol26/Isabelle99/}\\
 130.112 -{\tt [isac-src]\hspace{3em}      /software/services/isac/src/ke/}\\ 
 130.113 -{\tt [isac-bin]\hspace{3em}      /software/services/isac/bin/ke/}
 130.114 -} 
 130.115 -and rigorously updated.} In this document we refer to the following directories
 130.116 -\begin{tabbing}
 130.117 -xxx\=Isabelle sources1234 \=\kill
 130.118 -\>Isabelle sources \> {\tt [isabelle]/}\\
 130.119 -\>KE sources       \> {\tt [isac-src]/\dots{version}\dots/}\\
 130.120 -\>KE binary        \> {\tt [isac-bin]/\dots{version}\dots/}
 130.121 -\end{tabbing}
 130.122 -where {\tt\dots version\dots} stands for a directory-name containing information on the version.
 130.123 -
 130.124 -\section{Getting started}
 130.125 -Change to the directory {\tt [isac-bin]} where \isac's binary is located and type to the unix-prompt '$>$' (ask your system administrator where the directory {\tt [isac-bin]} is on your system):
 130.126 -\begin{verbatim}
 130.127 -   > [isac-bin]/sml @SMLload=isac.020120-math
 130.128 -   val it = false : bool
 130.129 -   ML>
 130.130 -\end{verbatim}
 130.131 -yielding the message {\tt val it = false : bool} followed by the prompt of the KE. Having been successful so far, just type in the input presented below -- all of it belongs to {\em one} session~!
 130.132 -
 130.133 -\part{Experimental approach}
 130.134 -
 130.135 -\chapter{Basics, terms and parsing}
 130.136 -Isabelle implements terms of the {\it simply typed lambda calculus} \cite{typed-lambda} defined in $\sim${\tt/src/Pure.ML}. 
 130.137 -\section{The definition of terms}
 130.138 -There are two kinds of terms in Isabelle, 'raw terms' and 'certified terms'. \isac{} works on raw terms, which are efficient but hard to comprehend. 
 130.139 -{\footnotesize\begin{verbatim}
 130.140 -   datatype term = 
 130.141 -       Const of string * typ
 130.142 -     | Free  of string * typ 
 130.143 -     | Var   of indexname * typ
 130.144 -     | Bound of int
 130.145 -     | Abs   of string * typ * term
 130.146 -     | op $  of term * term;
 130.147 -
 130.148 -   datatype typ = Type  of string * typ list
 130.149 -                | TFree of string * sort
 130.150 -                | TVar  of indexname * sort;
 130.151 -\end{verbatim}}%size % $
 130.152 -where the definitions of sort and indexname is not relevant in this context. The {\tt typ}e is being inferred during parsing. Parsing creates the other kind of terms, {\tt cterm}. These {\tt cterm}s are encapsulated records, which cannot be composed without the respective Isabelle functions (checking for type correctness), but which then are conveniently displayed as strings (using SML compiler internals -- see below).
 130.153 -
 130.154 -\section{Theories and parsing}
 130.155 -Parsing uses information contained in Isabelles theories $\sim${\tt /src/HOL}. The currently active theory is held in a global variable {\tt thy}; theories can be accessed individually;
 130.156 -{\footnotesize\begin{verbatim}
 130.157 -   ML> thy;
 130.158 -   val it =
 130.159 -     {ProtoPure, CPure, HOL, Ord, Set, subset, equalities, mono, Vimage, Fun,
 130.160 -       Prod, Lfp, Relation, Trancl, WF, NatDef, Gfp, Sum, Inductive, Nat, Arith,
 130.161 -       Divides, Power, Finite, Equiv, IntDef, Int, Univ, Datatype, Numeral, Bin,
 130.162 -       IntArith, WF_Rel, Recdef, IntDiv, NatBin, List, Option, Map, Record,
 130.163 -       RelPow, Sexp, String, Calculation, SVC_Oracle, Main, Zorn, Filter, PNat,
 130.164 -       PRat, PReal, RealDef, RealOrd, RealInt, RealBin, HyperDef, Descript, ListG,
 130.165 -       Tools, Script, Typefix, Atools, RatArith, SqRoot, Differentiate, DiffAppl,
 130.166 -       InsSort, Isac} : theory                                                    ML>
 130.167 -   ML> HOL.thy;
 130.168 -   val it = {ProtoPure, CPure, HOL} : theory 
 130.169 -   ML>
 130.170 -   ML> parse;
 130.171 -   val it = fn : theory -> string -> cterm option
 130.172 -   ML> parse thy "a + b * #3";
 130.173 -   val it = Some "a + b * #3" : cterm option
 130.174 -   ML>
 130.175 -   ML> val t = (term_of o the) it;
 130.176 -   val t = Const (#,#) $ Free (#,#) $ (Const # $ Free # $ Free (#,#)) : term
 130.177 -\end{verbatim}}%size
 130.178 -where {\tt term\_of} and {\tt the} are explained below. The syntax of the list of characters can be read out of Isabelles theories \cite{Isa-obj} {\tt [isabelle]/src/HOL/}\footnote{Or you may use your internetbrowser to look at the files in {\tt [isabelle]/browser\_info}.} 
 130.179 -and from theories developed with in \isac{} at {\tt [isac-src]/knowledge/}. Note that the syntax of the terms is different from those displayed at \isac's frontend after conversion to MathML.
 130.180 -
 130.181 -
 130.182 -\section{Displaying terms}
 130.183 -The print depth on the SML top-level can be set in order to produce output in the amount of detail desired:
 130.184 -{\footnotesize\begin{verbatim}
 130.185 -   ML> Compiler.Control.Print.printDepth;
 130.186 -   val it = ref 4 : int ref
 130.187 -   ML>
 130.188 -   ML> Compiler.Control.Print.printDepth:= 2;
 130.189 -   val it = () : unit
 130.190 -   ML> t;
 130.191 -   val it = # $ # $ (# $ #) : term
 130.192 -   ML>
 130.193 -   ML> Compiler.Control.Print.printDepth:= 6;
 130.194 -   val it = () : unit
 130.195 -   ML> t;
 130.196 -   val it =
 130.197 -     Const ("op +","[RealDef.real, RealDef.real] => RealDef.real") $
 130.198 -     Free ("a","RealDef.real") $
 130.199 -     (Const ("op *","[RealDef.real, RealDef.real] => RealDef.real") $
 130.200 -      Free ("b","RealDef.real") $ Free ("#3","RealDef.real")) : term
 130.201 -\end{verbatim}}%size % $
 130.202 -A closer look to the latter output shows that {\tt typ} is output as a string like {\tt cterm}. Other useful settings for the output are:
 130.203 -{\footnotesize\begin{verbatim}
 130.204 -   ML> Compiler.Control.Print.printLength;
 130.205 -   val it = ref 8 : int ref
 130.206 -   ML> Compiler.Control.Print.stringDepth;
 130.207 -   val it = ref 250 : int ref
 130.208 -\end{verbatim}}%size
 130.209 -Anyway, the SML output of terms is not very readable; there are functions in the KE to display them:
 130.210 -{\footnotesize\begin{verbatim}
 130.211 -   ML> atomt;
 130.212 -   val it = fn : term -> unit
 130.213 -   ML> atomt t; 
 130.214 -   *** -------------
 130.215 -   *** Const ( op +)
 130.216 -   *** . Free ( a, )
 130.217 -   *** . Const ( op *)
 130.218 -   *** . . Free ( b, )
 130.219 -   *** . . Free ( #3, )
 130.220 -   val it = () : unit
 130.221 -   ML>
 130.222 -   ML> atomty;
 130.223 -   val it = fn : theory -> term -> unit
 130.224 -   ML> atomty thy t;
 130.225 -   *** -------------
 130.226 -   *** Const ( op +, [real, real] => real)
 130.227 -   *** . Free ( a, real)
 130.228 -   *** . Const ( op *, [real, real] => real)
 130.229 -   *** . . Free ( b, real)
 130.230 -   *** . . Free ( #3, real)
 130.231 -   val it = () : unit
 130.232 -\end{verbatim}}%size
 130.233 -where again the {\tt typ}s are rendered as strings, but more elegantly by use of the information contained in {\tt thy}..
 130.234 -
 130.235 -\paragraph{Give it a try !} {\bf The mathematics knowledge grows} as it is defined in Isabelle theory by theory. Have a look by your internet browser to the hierarchy of those theories at {\tt [isabelle]/src/HOL/HOL.thy} and its children available on your system. Or you may use your internetbrowser to look at the files in {\tt [isabelle]/browser\_info}.
 130.236 -{\footnotesize\begin{verbatim}
 130.237 -   ML> (*-1-*) parse HOL.thy "#2^^^#3";
 130.238 -   *** Inner lexical error at: "^^^#3"
 130.239 -   val it = None : cterm option
 130.240 -   ML>
 130.241 -   ML> (*-2-*) parse HOL.thy "d_d x (a + x)";
 130.242 -   val it = None : cterm option
 130.243 -   ML>
 130.244 -   ML>
 130.245 -   ML> (*-3-*) parse RatArith.thy "#2^^^#3";
 130.246 -   val it = Some "#2 ^^^ #3" : cterm option
 130.247 -   ML>
 130.248 -   ML> (*-4-*) parse RatArith.thy "d_d x (a + x)";
 130.249 -   val it = Some "d_d x (a + x)" : cterm option
 130.250 -   ML>
 130.251 -   ML>
 130.252 -   ML> (*-5-*) parse Differentiate.thy "d_d x (a + x)";
 130.253 -   val it = Some "d_d x (a + x)" : cterm option
 130.254 -   ML>
 130.255 -   ML> (*-6-*) parse Differentiate.thy "#2^^^#3";
 130.256 -   val it = Some "#2 ^^^ #3" : cterm option
 130.257 -\end{verbatim}}%size
 130.258 -Don't trust the string representation: if we convert {\tt(*-4-*)} and {\tt(*-6-*)} to terms \dots
 130.259 -{\footnotesize\begin{verbatim}
 130.260 -   ML> (*-4-*) val thy = RatArith.thy;
 130.261 -   ML> ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
 130.262 -   *** -------------
 130.263 -   *** Free ( d_d, [real, real] => real)
 130.264 -   *** . Free ( x, real)
 130.265 -   *** . Const ( op +, [real, real] => real)
 130.266 -   *** . . Free ( a, real)
 130.267 -   *** . . Free ( x, real)
 130.268 -   val it = () : unit
 130.269 -   ML>
 130.270 -   ML> (*-6-*) val thy = Differentiate.thy;
 130.271 -   ML> ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
 130.272 -   *** -------------
 130.273 -   *** Const ( Differentiate.d_d, [real, real] => real)
 130.274 -   *** . Free ( x, real)
 130.275 -   *** . Const ( op +, [real, real] => real)
 130.276 -   *** . . Free ( a, real)
 130.277 -   *** . . Free ( x, real)
 130.278 -   val it = () : unit
 130.279 -\end{verbatim}}%size
 130.280 -\dots we see: in {\tt(*-4-*)} we have an arbitrary function {\tt Free ( d\_d, \_)} and in {\tt(*-6-*)} we have the special function constant {\tt Const ( Differentiate.d\_d, \_)} for differentiation, which is defined in {\tt Differentiate.thy} and presumerably is meant.
 130.281 -
 130.282 -
 130.283 -\section{Converting terms}
 130.284 -The conversion from {\tt cterm} to {\tt term} has been shown above:
 130.285 -{\footnotesize\begin{verbatim}
 130.286 -   ML> term_of;
 130.287 -   val it = fn : cterm -> term
 130.288 -   ML>
 130.289 -   ML> the;
 130.290 -   val it = fn : 'a option -> 'a
 130.291 -   ML>
 130.292 -   ML> val t = (term_of o the o (parse thy)) "a + b * #3";
 130.293 -   val t = Const (#,#) $ Free (#,#) $ (Const # $ Free # $ Free (#,#)) : term
 130.294 -\end{verbatim}}%size
 130.295 -where {\tt the} unwraps the {\tt term option} --- an auxiliary function from Larry Paulsons basic library at {\tt [isabelle]/src/Pure/library.ML}, which is really worthwile to study for any SML programmer.
 130.296 -
 130.297 -The other conversions are the following, some of which use the {\it signature} {\tt sign} of a theory:
 130.298 -{\footnotesize\begin{verbatim}
 130.299 -   ML> sign_of;
 130.300 -   val it = fn : theory -> Sign.sg
 130.301 -   ML>
 130.302 -   ML> cterm_of;
 130.303 -   val it = fn : Sign.sg -> term -> cterm
 130.304 -   ML> val ct = cterm_of (sign_of thy) t;
 130.305 -   val ct = "a + b * #3" : cterm
 130.306 -   ML>
 130.307 -   ML> Sign.string_of_term;
 130.308 -   val it = fn : Sign.sg -> term -> string
 130.309 -   ML> Sign.string_of_term (sign_of thy) t;
 130.310 -   val it = "a + b * #3" : ctem'
 130.311 -   ML>
 130.312 -   ML> string_of_cterm;
 130.313 -   val it = fn : cterm -> string
 130.314 -   ML> string_of_cterm ct;
 130.315 -   val it = "a + b * #3" : ctem'
 130.316 -\end{verbatim}}%size
 130.317 -
 130.318 -\section{Theorems}
 130.319 -Theorems are a type, {\tt thm}, even more protected than {\tt cterms}: they are defined as axioms or proven in Isabelle. These definitions and proofs are contained in theories in the directory {\tt[isac-src]/knowledge/}, e.g. the theorem {\tt diff\_sum} in the theory {\tt[isac-src]/knowledge/Differentiate.thy}. Additionally, each theorem has to be recorded for \isac{} in the respective {\tt *.ML}, e.g. {\tt diff\_sum} in {\tt[isac-src]/knowledge/Differentiate.ML} as follows:
 130.320 -{\footnotesize\begin{verbatim}
 130.321 -   ML> theorem' := overwritel (!theorem',
 130.322 -   [("diff_const",num_str diff_const)
 130.323 -   ]);
 130.324 -\end{verbatim}}%size
 130.325 -The additional recording of theorems and other values will disappear in later versions of \isac.
 130.326 -
 130.327 -\chapter{Rewriting}
 130.328 -\section{The arguments for rewriting}
 130.329 -The type identifiers of the arguments and values of the rewrite-functions in \ref{rewrite} differ only in an apostroph: the apostrohped types are re-named strings in order to maintain readability.
 130.330 -{\footnotesize\begin{verbatim}
 130.331 -   ML> HOL.thy;
 130.332 -   val it = {ProtoPure, CPure, HOL} : theory
 130.333 -   ML> "HOL.thy" : theory';
 130.334 -   val it = "HOL.thy" : theory'
 130.335 -   ML>
 130.336 -   ML> sqrt_right;
 130.337 -   val it = fn : rew_ord (* term * term -> bool *)
 130.338 -   ML> "sqrt_right" : rew_ord';
 130.339 -   val it = "sqrt_right" : rew_ord'
 130.340 -   ML>
 130.341 -   ML> eval_rls;
 130.342 -   val it =
 130.343 -     Rls
 130.344 -       {preconds=[],rew_ord=("sqrt_right",fn),
 130.345 -        rules=[Thm #,Thm #,Thm #,Thm #,Thm #,Thm #,Thm #,Thm #,
 130.346 -               Thm #,Thm #,Thm #,Thm #,Thm #,Calc #,Calc #,...],
 130.347 -        scr=Script (Free #)} : rls
 130.348 -   ML> "eval_rls" : rls';
 130.349 -   val it = "eval_rls" : rls'
 130.350 -   ML>
 130.351 -   ML> diff_sum;
 130.352 -   val it = "d_d ?bdv (?u + ?v) = d_d ?bdv ?u + d_d ?bdv ?v" : thm
 130.353 -   ML> ("diff_sum", "") : thm';
 130.354 -   val it = ("diff_sum","") : thm'
 130.355 -\end{verbatim}}%size
 130.356 -where a {\tt thm'} is a pair, eventually with the string-representation of the respective theorem.
 130.357 - 
 130.358 -\section{The functions for rewriting}\label{rewrite}
 130.359 -Rewriting comes along with two equivalent functions, where the first is being actually used within the KE, and the second one is useful for tests: 
 130.360 -{\footnotesize\begin{verbatim}
 130.361 -   ML> rewrite_;
 130.362 -   val it = fn
 130.363 -     : theory
 130.364 -       -> rew_ord
 130.365 -          -> rls -> bool -> thm -> term -> (term * term list) option
 130.366 -   ML>
 130.367 -   ML> rewrite;
 130.368 -   val it = fn
 130.369 -     : theory'
 130.370 -       -> rew_ord'
 130.371 -          -> rls' -> bool -> thm' -> cterm' -> (cterm' * cterm' list) option
 130.372 -\end{verbatim}}%size
 130.373 -The arguments are the following:\\
 130.374 -\tabcolsep=4mm
 130.375 -\def\arraystretch{1.5}
 130.376 -\begin{tabular}{lp{11.0cm}}
 130.377 -  {\tt theory}  & the Isabelle theory containing the definitions necessary for parsing the {\tt term} \\
 130.378 -  {\tt rew\_ord}& the rewrite order \cite{nipk:rew-all-that} for ordered rewriting -- see the section \ref{term-order} below. For {\em no} ordered rewriting take {\tt tless\_true}, a dummy order yielding true for all arguments \\
 130.379 -  {\tt rls}     & the rule set for evaluating the condition within {\tt thm} in case {\tt thm} is a conditional rule \\
 130.380 -  {\tt bool}    & a flag which triggers the evaluation of the eventual condition in {\tt thm}: if {\tt false} then evaluate the condition and according to the result of the evaluation apply {\tt thm} or not (conditional rewriting \cite{nipk:rew-all-that}), if {\tt true} then don't evaluate the condition, but put it into the set of assumptions \\
 130.381 -  {\tt thm}     & the theorem used to try to rewrite {\tt term} \\
 130.382 -  {\tt term}    & the term eventually rewritten by {\tt thm} \\
 130.383 -\end{tabular}\\
 130.384 -
 130.385 -\noindent The respective values of {\tt rewrite\_} and {\tt rewrite} are an {\tt option} of a pair, i.e. {\tt Some(\_,\_)} in case the {\tt term} can be rewritten by {\tt thm} w.r.t. {\tt rew\_ord} and/or {\tt rls}, or {\tt None} if no rewrite is found:\\
 130.386 -\begin{tabular}{lp{10.4cm}}
 130.387 -  {\tt term}     & the term rewritten \\
 130.388 -  {\tt term list}& the assumptions eventually generated if the {\tt bool} flag is set to {\tt true} and {\tt thm} is applicable. \\
 130.389 -\end{tabular}\\
 130.390 -
 130.391 -\paragraph{Give it a try !} {\bf\dots rewriting is fun~!} many examples can be found in {\tt [isac-src]/tests/\dots}. In {\tt [isac-src]/tests/differentiate.sml} the following can be found:
 130.392 -{\footnotesize\begin{verbatim}
 130.393 -   ML> val thy' = "Differentiate.thy";
 130.394 -   val thy' = "Differentiate.thy" : string
 130.395 -   ML> val ct = "d_d x (x ^^^ #2 + #3 * x + #4)";
 130.396 -   val ct = "d_d x (x ^^^ #2 + #3 * x + #4)" : cterm'
 130.397 -   ML>
 130.398 -   ML> val thm = ("diff_sum","");
 130.399 -   val thm = ("diff_sum","") : thm'
 130.400 -   ML> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
 130.401 -                     [("bdv","x::real")] thm ct;
 130.402 -   val ct = "d_d x (x ^^^ #2 + #3 * x) + d_d x #4" : cterm'
 130.403 -   ML>
 130.404 -   ML> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
 130.405 -                     [("bdv","x::real")] thm ct;
 130.406 -   val ct = "d_d x (x ^^^ #2) + d_d x (#3 * x) + d_d x #4" : cterm'
 130.407 -   ML>
 130.408 -   ML> val thm = ("diff_prod_const","");
 130.409 -   val thm = ("diff_prod_const","") : thm'
 130.410 -   ML> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
 130.411 -                     [("bdv","x::real")] thm ct;
 130.412 -   val ct = "d_d x (x ^^^ #2) + #3 * d_d x x + d_d x #4" : cterm'
 130.413 -\end{verbatim}}%size
 130.414 -You can look up the theorems in {\tt [isac-src]/knowledge/Differentiate.thy} and try to apply them until you get the result you would expect if calculating by hand.
 130.415 -\footnote{Hint: At the end you will need {\tt val (ct,\_) = the (rewrite\_set thy' "eval\_rls" false "SqRoot\_simplify" ct);}}
 130.416 -
 130.417 -\paragraph{Give it a try !}\label{cond-rew} {\bf Conditional rewriting} is a more powerful technique then ordinary rewriting, and is closer to the power of programming languages (see the subsequent 'try it out'~!). The following example expands a term to poynomial form:
 130.418 -{\footnotesize\begin{verbatim}
 130.419 -   ML> val thy' = "Isac.thy";
 130.420 -   val thy' = "Isac.thy" : string
 130.421 -   ML> val ct' = "#3 * a + #2 * (a + #1)";
 130.422 -   val ct' = "#3 * a + #2 * (a + #1)" : cterm'
 130.423 -   ML>
 130.424 -   ML> val thm' = ("radd_mult_distrib2","?k * (?m + ?n) = ?k * ?m + ?k * ?n");
 130.425 -   val thm' = ("radd_mult_distrib2","?k * (?m + ?n) = ?k * ?m + ?k * ?n")
 130.426 -     : thm'
 130.427 -   ML> (*1*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.428 -   val ct' = "#3 * a + (#2 * a + #2 * #1)" : cterm'
 130.429 -   ML>
 130.430 -   ML> val thm' = ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1");
 130.431 -   val thm' = ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1")
 130.432 -     : thm'
 130.433 -   ML> (*2*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.434 -   val ct' = "#3 * a + #2 * a + #2 * #1" : cterm'
 130.435 -   ML>
 130.436 -   ML> val thm' = ("rcollect_right",
 130.437 -     "[| ?l is_const; ?m is_const |] ==> ?l * ?n + ?m * ?n = (?l + ?m) * ?n");
 130.438 -   val thm' =
 130.439 -     ("rcollect_right",
 130.440 -      "[| ?l is_const; ?m is_const |] ==> ?l * ?n + ?m * ?n = (?l + ?m) * ?n")
 130.441 -     : thm'
 130.442 -   ML> (*3*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.443 -   val ct' = "(#3 + #2) * a + #2 * #1" : cterm'
 130.444 -   ML>
 130.445 -   ML> (*4*) val Some (ct',_) = calculate' thy' "plus" ct';
 130.446 -   val ct' = "#5 * a + #2 * #1" : cterm'
 130.447 -   ML>
 130.448 -   ML> (*5*) val Some (ct',_) = calculate' thy' "times" ct';
 130.449 -   val ct' = "#5 * a + #2" : cterm'
 130.450 -\end{verbatim}}%size
 130.451 -Note, that the two rules, {\tt radd\_mult\_distrib2} in {\tt(*1*)} and {\tt rcollect\_right} in {\tt(*3*)} would neutralize each other (i.e. a rule set would not terminate), if there would not be the condition {\tt is\_const}.
 130.452 -
 130.453 -\paragraph{Give it a try !} {\bf Functional programming} can, within a certain range, modeled by rewriting. In {\tt [isac-src]/\dots/tests/InsSort.thy} the following rules can be found, which are able to sort a list ('insertion sort'):
 130.454 -{\footnotesize\begin{verbatim}
 130.455 -   sort_def   "sort ls = foldr ins ls []"
 130.456 -
 130.457 -   ins_base   "ins [] a = [a]"
 130.458 -   ins_rec    "ins (x#xs) a = (if x < a then x#(ins xs a) else a#(x#xs))"  
 130.459 -
 130.460 -   foldr_base "foldr f [] a = a"
 130.461 -   foldr_rec  "foldr f (x#xs) a = foldr f xs (f a x)"
 130.462 -
 130.463 -   if_True    "(if True then ?x else ?y) = ?x"
 130.464 -   if_False   "(if False then ?x else ?y) = ?y"
 130.465 -\end{verbatim}}%size
 130.466 -where {\tt\#} is the list-constructor, {\tt foldr} is the well-known standard function of functional programming, and {\tt if\_True, if\_False} are auxiliary rules. Then the sort may be done by the following rewrites:
 130.467 -{\footnotesize\begin{verbatim}
 130.468 -   ML>  val thy' = "InsSort.thy";
 130.469 -   val thy' = "InsSort.thy" : theory'
 130.470 -   ML>  val ct = "sort [#1,#3,#2]" : cterm';
 130.471 -   val ct = "sort [#1,#3,#2]" : cterm'
 130.472 -   ML>
 130.473 -   ML>  val thm = ("sort_def","");
 130.474 -   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 130.475 -   val ct = "foldr ins [#1, #3, #2] []" : cterm'
 130.476 -   ML>
 130.477 -   ML>  val thm = ("foldr_rec","");
 130.478 -   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 130.479 -   val ct = "foldr ins [#3, #2] (ins [] #1)" : cterm'
 130.480 -   ML>
 130.481 -   ML>  val thm = ("ins_base","");
 130.482 -   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 130.483 -   val ct = "foldr ins [#3, #2] [#1]" : cterm'
 130.484 -   ML>
 130.485 -   ML>  val thm = ("foldr_rec","");
 130.486 -   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 130.487 -   val ct = "foldr ins [#2] (ins [#1] #3)" : cterm'
 130.488 -   ML>
 130.489 -   ML>  val thm = ("ins_rec","");
 130.490 -   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 130.491 -   val ct = "foldr ins [#2] (if #1 < #3 then #1 # ins [] #3 else [#3, #1])"
 130.492 -     : cterm'
 130.493 -   ML>
 130.494 -   ML>  val (ct,_) = the (calculate' thy' "le" ct);
 130.495 -   val ct = "foldr ins [#2] (if True then #1 # ins [] #3 else [#3, #1])" : cterm'
 130.496 -   ML>
 130.497 -   ML>  val thm = ("if_True","(if True then ?x else ?y) = ?x");
 130.498 -   ML>  val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 130.499 -   val ct = "foldr ins [#2] (#1 # ins [] #3)" : cterm'
 130.500 -   ML> 
 130.501 -   ...
 130.502 -   val ct = "sort [#1,#3,#2]" : cterm'
 130.503 -\end{verbatim}}%size
 130.504 -
 130.505 -
 130.506 -\section{Variants of rewriting}
 130.507 -Some of the above examples already used variants of {\tt rewrite} all of which have the same value, and very similar arguments:
 130.508 -{\footnotesize\begin{verbatim}
 130.509 -   ML> rewrite_inst_;
 130.510 -   val it = fn
 130.511 -     : theory
 130.512 -       -> rew_ord
 130.513 -          -> rls
 130.514 -             -> bool
 130.515 -             -> (cterm' * cterm') list
 130.516 -                   -> thm -> term -> (term * term list) option
 130.517 -   ML> rewrite_inst;
 130.518 -   val it = fn
 130.519 -     : theory'
 130.520 -       -> rew_ord'
 130.521 -          -> rls'
 130.522 -             -> bool
 130.523 -                -> (cterm' * cterm') list
 130.524 -                   -> thm' -> cterm' -> (cterm' * cterm' list) option
 130.525 -   ML>
 130.526 -   ML> rewrite_set_;
 130.527 -   val it = fn 
 130.528 -     : theory -> rls -> bool -> rls -> term -> (term * term list) option
 130.529 -   ML> rewrite_set;
 130.530 -   val it = fn
 130.531 -     : theory' -> rls' -> bool -> rls' -> cterm' -> (cterm' * cterm' list) option
 130.532 -   ML>
 130.533 -   ML> rewrite_set_inst_;
 130.534 -   val it = fn
 130.535 -     : theory
 130.536 -       -> rls
 130.537 -          -> bool
 130.538 -             -> (cterm' * cterm') list
 130.539 -                -> rls -> term -> (term * term list) option
 130.540 -   ML> rewrite_set_inst;
 130.541 -   val it = fn
 130.542 -     : theory'
 130.543 -       -> rls'
 130.544 -          -> bool
 130.545 -             -> (cterm' * cterm') list
 130.546 -                -> rls' -> cterm' -> (cterm' * cterm' list) option
 130.547 -\end{verbatim}}%size
 130.548 -
 130.549 -\noindent The variant {\tt rewrite\_inst} substitutes {\tt (term * term) list} in {\tt thm} before rewriting,\\
 130.550 -the variant {\tt rewrite\_set} rewrites with a whole rule set {\tt rls} (instead with a {\tt thm} only),\\
 130.551 -the variant {\tt rewrite\_set\_inst} is a combination of the latter two variants. In order to watch how a term is rewritten theorem by theorem, there is a switch {\tt trace\_rewrite}:
 130.552 -{\footnotesize\begin{verbatim}
 130.553 -   ML> toggle;
 130.554 -   val it = fn : bool ref -> bool
 130.555 -   ML>
 130.556 -   ML> toggle trace_rewrite;
 130.557 -   val it = true : bool
 130.558 -   ML> toggle trace_rewrite;
 130.559 -   val it = false : bool
 130.560 -\end{verbatim}}%size
 130.561 -
 130.562 -\section{Rule sets}
 130.563 -Some of the variants of {\tt rewrite} above do not only apply one theorem, but a whole set of theorems, called a 'rule set'. Such a rule set is applied as long one of its elements can be used for a rewrite (which can go forever, i.e. the rule set eventually does not 'terminate').
 130.564 -
 130.565 -A simple example of a rule set is {\tt rearrange\_assoc} which is defined in {\tt knowledge/RatArith.ML} as:
 130.566 -{\footnotesize\begin{verbatim}
 130.567 -   val rearrange_assoc = 
 130.568 -     Rls{preconds = [], rew_ord = ("tless_true",tless_true), 
 130.569 -         rules = 
 130.570 -         [Thm ("radd_assoc_RS_sym",num_str (radd_assoc RS sym)),
 130.571 -          Thm ("rmult_assoc_RS_sym",num_str (rmult_assoc RS sym))],
 130.572 -         scr = Script ((term_of o the o (parse thy)) 
 130.573 -         "empty_script")
 130.574 -         }:rls;
 130.575 -\end{verbatim}}%size
 130.576 -where 
 130.577 -\begin{description}
 130.578 -\item [\tt preconds] are conditions which must be true in order to make the rule set applicable (the empty list evaluates to {\tt true})
 130.579 -\item [\tt rew\_ord] concerns term orders introduced below in \ref{term-order}
 130.580 -\item [\tt rules] are the theorems to be applied -- in priciple applied in arbitrary order, because all these rule sets should be 'complete' \cite{nipk:rew-all-that} (and actually the theorems are applied in the sequence they appear in this list). The function {\tt num\_str} must be applied to theorems containing numeral constants (and thus is obsolete in this example). {\tt RS} is an infix function applying the theorem {\tt sym} to {\tt radd\_assoc} before storage (the effect see below)
 130.581 -\item [\tt scr] is the script applying the ruleset; it will disappear in later versions of \isac.
 130.582 -\end{description}
 130.583 -These variables evaluate to
 130.584 -{\footnotesize\begin{verbatim}
 130.585 -   ML> sym;
 130.586 -   val it = "?s = ?t ==> ?t = ?s" : thm 
 130.587 -   ML> rearrange_assoc;
 130.588 -   val it =
 130.589 -     Rls
 130.590 -       {preconds=[],rew_ord=("tless_true",fn),
 130.591 -        rules=[Thm ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1"),
 130.592 -               Thm ("rmult_assoc_RS_sym","?m1 * (?n1 * ?k1) = ?m1 * ?n1 * ?k1")],
 130.593 -        scr=Script (Free ("empty_script","RealDef.real"))} : rls 
 130.594 -\end{verbatim}}%size
 130.595 -
 130.596 -\paragraph{Give it a try !} The above rule set makes an arbitrary number of parentheses disappear which are not necessary due to associativity of {\tt +} and 
 130.597 -{\footnotesize\begin{verbatim}
 130.598 -   ML> val ct = (string_of_cterm o the o (parse RatArith.thy))
 130.599 -                "a + (b * (c * d) + e)";
 130.600 -   val ct = "a + ((b * (c * d) + e) + f)" : cterm'
 130.601 -   ML> rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
 130.602 -   val it = Some ("a + b * c * d + e + f",[]) : (string * string list) option
 130.603 -\end{verbatim}}%size
 130.604 -For acchieving this result the rule set has to be surprisingly busy:
 130.605 -{\footnotesize\begin{verbatim}
 130.606 -   ML> toggle trace_rewrite;
 130.607 -   val it = true : bool
 130.608 -   ML> rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
 130.609 -   ### trying thm 'radd_assoc_RS_sym'
 130.610 -   ### rewrite_set_: a + b * (c * d) + e
 130.611 -   ### trying thm 'radd_assoc_RS_sym'
 130.612 -   ### trying thm 'rmult_assoc_RS_sym'
 130.613 -   ### rewrite_set_: a + b * c * d + e
 130.614 -   ### trying thm 'rmult_assoc_RS_sym'
 130.615 -   ### trying thm 'radd_assoc_RS_sym'
 130.616 -   ### trying thm 'rmult_assoc_RS_sym'
 130.617 -   val it = Some ("a + b * c * d + e",[]) : (string * string list) option
 130.618 -\end{verbatim}}%size
 130.619 - 
 130.620 -
 130.621 -\section{Calculate numeric constants}
 130.622 -As soon as numeric constants are in adjacent subterms (see the example on p.\pageref{cond-rew}), they can be calculated by the function
 130.623 -{\footnotesize\begin{verbatim}
 130.624 -   ML> calculate;
 130.625 -   val it = fn : theory' -> string -> cterm' -> (cterm' * thm') option
 130.626 -   ML> calculate_;
 130.627 -   val it = fn : theory -> string -> term -> (term * (string * thm)) option
 130.628 -\end{verbatim}}%size
 130.629 -where the {\tt string} in the arguments defines the algebraic operation to be calculated. The function returns the result of the calculation, and as second element in the pair the theorem applied. The following algebraic operations are available:
 130.630 -{\footnotesize\begin{verbatim}
 130.631 -   ML> calc_list;
 130.632 -   val it =
 130.633 -     ref
 130.634 -       [("plus",("op +",fn)),
 130.635 -        ("times",("op *",fn)),
 130.636 -        ("cancel_",("cancel",fn)),
 130.637 -        ("power",("pow",fn)),
 130.638 -        ("sqrt",("sqrt",fn)),
 130.639 -        ("Var",("Var",fn)),
 130.640 -        ("Length",("Length",fn)),
 130.641 -        ("Nth",("Nth",fn)),
 130.642 -        ("power",("pow",fn)),
 130.643 -        ("le",("op <",fn)),
 130.644 -        ("leq",("op <=",fn)),
 130.645 -        ("is_const",("is'_const",fn)),
 130.646 -        ("is_root_free",("is'_root'_free",fn)),
 130.647 -        ("contains_root",("contains'_root",fn)),
 130.648 -        ("ident",("ident",fn))]
 130.649 -     : (string * (string * (string -> term -> theory -> 
 130.650 -        (string * term) option))) list ref
 130.651 -\end{verbatim}}%size
 130.652 -These operations can be used in the following way.
 130.653 -{\footnotesize\begin{verbatim}
 130.654 -   ML> calculate' "Isac.thy" "plus" "#1 + #2";
 130.655 -   val it = Some ("#3",("#add_#1_#2","\"#1 + #2 = #3\"")) : (string * thm') option
 130.656 -   ML>
 130.657 -   ML> calculate' "Isac.thy" "times" "#2 * #3";
 130.658 -   val it = Some ("#6",("#mult_#2_#3","\"#2 * #3 = #6\""))
 130.659 -     : (string * thm') option
 130.660 -   ML>
 130.661 -   ML> calculate' "Isac.thy" "power" "#2 ^^^ #3";
 130.662 -   val it = Some ("#8",("#power_#2_#3","\"#2 ^^^ #3 = #8\""))
 130.663 -     : (string * thm') option
 130.664 -   ML>
 130.665 -   ML> calculate' "Isac.thy" "cancel_" "#9 // #12";
 130.666 -   val it = Some ("#3 // #4",("#cancel_#9_#12","\"#9 // #12 = #3 // #4\""))
 130.667 -     : (string * thm') option
 130.668 -   ML>
 130.669 -   ML> ...
 130.670 -\end{verbatim}}%size
 130.671 -          
 130.672 -
 130.673 -
 130.674 -\chapter{Term orders}\label{term-order}
 130.675 -Orders on terms are indispensable for the purpose of rewriting to normal forms in associative - commutative domains \cite{nipk:rew-all-that}, and for rewriting to normal forms necessary for matching models to problems, see sect.\ref{pbt}.
 130.676 -\section{Examples for term orders}
 130.677 -It is not trivial to construct a relation $<$ on terms such that it is really an order, i.e. a transitive and antisymmetric relation. These orders are 'recursive path orders' \cite{nipk:rew-all-that}. Some orders implemented in the knowledgebase at {\tt [isac-src]/knowledge/\dots}, %FIXXXmat0201a
 130.678 -e.g.
 130.679 -{\footnotesize\begin{verbatim}
 130.680 -   ML> sqrt_right;
 130.681 -   val it = fn : bool -> theory -> term * term -> bool
 130.682 -   ML> tless_true;
 130.683 -   val it = fn : 'a -> bool 
 130.684 -\end{verbatim}}%size
 130.685 -where the bool argument is a switch for tracing the checks on the respective subterms (and theory is necessary for displyinging the (sub-)terms as strings in the case of 'true'). The order {\tt tless\_true} is a dummy always yielding {\tt true}, and {\tt sqrt\_right} prefers a square root shifted to the right within a term:
 130.686 -{\footnotesize\begin{verbatim}
 130.687 -   ML> val t1 = (term_of o the o (parse thy)) "(sqrt a) + b";
 130.688 -   val t1 = Const # $ (# $ #) $ Free (#,#) : term
 130.689 -   ML>
 130.690 -   ML> val t2 = (term_of o the o (parse thy)) "b + (sqrt a)";
 130.691 -   val t2 = Const # $ Free # $ (Const # $ Free #) : term
 130.692 -   ML>
 130.693 -   ML> sqrt_right false SqRoot.thy (t1, t2);
 130.694 -   val it = false : bool
 130.695 -   ML> sqrt_right false SqRoot.thy (t2, t1);
 130.696 -   val it = true : bool
 130.697 -\end{verbatim}}%size
 130.698 -The many checks performed recursively through all subterms can be traced throughout the algorithm in {\tt [isac-src]/knowledge/SqRoot.ML} by setting the flag to true:
 130.699 -{\footnotesize\begin{verbatim}
 130.700 -   ML> val t1 = (term_of o the o (parse thy)) "a + b*(sqrt c) + d";
 130.701 -   val t1 = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("d","RealDef.real") : term
 130.702 -   ML>
 130.703 -   ML> val t2 = (term_of o the o (parse thy)) "a + (sqrt b)*c + d";
 130.704 -   val t2 = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("d","RealDef.real") : term
 130.705 -   ML>
 130.706 -   ML> sqrt_right true SqRoot.thy (t1, t2);
 130.707 -   t= f@ts= "op +" @ "[a + b * sqrt c,d]"
 130.708 -   u= g@us= "op +" @ "[a + sqrt b * c,d]"
 130.709 -   size_of_term(t,u)= (8, 8)
 130.710 -   hd_ord(f,g)      = EQUAL
 130.711 -   terms_ord(ts,us) = LESS
 130.712 -   -------
 130.713 -   t= f@ts= "op +" @ "[a,b * sqrt c]"
 130.714 -   u= g@us= "op +" @ "[a,sqrt b * c]"
 130.715 -   size_of_term(t,u)= (6, 6)
 130.716 -   hd_ord(f,g)      = EQUAL
 130.717 -   terms_ord(ts,us) = LESS
 130.718 -   -------
 130.719 -   t= f@ts= "a" @ "[]"
 130.720 -   u= g@us= "a" @ "[]"
 130.721 -   size_of_term(t,u)= (1, 1)
 130.722 -   hd_ord(f,g)      = EQUAL
 130.723 -   terms_ord(ts,us) = EQUAL
 130.724 -   -------
 130.725 -   t= f@ts= "op *" @ "[b,sqrt c]"
 130.726 -   u= g@us= "op *" @ "[sqrt b,c]"
 130.727 -   size_of_term(t,u)= (4, 4)
 130.728 -   hd_ord(f,g)      = EQUAL
 130.729 -   terms_ord(ts,us) = LESS
 130.730 -   -------
 130.731 -   t= f@ts= "b" @ "[]"
 130.732 -   u= g@us= "sqrt" @ "[b]"
 130.733 -   size_of_term(t,u)= (1, 2)
 130.734 -   hd_ord(f,g)      = LESS
 130.735 -   terms_ord(ts,us) = LESS
 130.736 -   -------
 130.737 -   val it = true : bool 
 130.738 -\end{verbatim}}%size
 130.739 -
 130.740 -
 130.741 -
 130.742 -\section{Ordered rewriting}
 130.743 -Rewriting faces problems in just the most elementary domains, which are all associative and commutative w.r.t. {\tt +} and {\tt *} --- the law of commutativity applied within a rule set causes this set not to terminate~! One method to cope with this difficulty is ordered rewriting, where a rewrite is only done if the resulting term is smaller w.r.t. a term order (with some additional properties called 'rewrite orders' \cite{nipk:rew-all-that}).
 130.744 -
 130.745 -Such a rule set {\tt ac\_plus\_times}, called an AC-rewrite system, can be found in {\tt[isac-src]/knowledge/RathArith.ML}:
 130.746 -{\footnotesize\begin{verbatim}
 130.747 -   val ac_plus_times =
 130.748 -     Rls{preconds = [], rew_ord = ("term_order",term_order),
 130.749 -         rules =
 130.750 -         [Thm ("radd_commute",radd_commute),
 130.751 -          Thm ("radd_left_commute",radd_left_commute),
 130.752 -          Thm ("radd_assoc",radd_assoc),
 130.753 -          Thm ("rmult_commute",rmult_commute),
 130.754 -          Thm ("rmult_left_commute",rmult_left_commute),
 130.755 -          Thm ("rmult_assoc",rmult_assoc)],
 130.756 -         scr = Script ((term_of o the o (parse thy))
 130.757 -         "empty_script")
 130.758 -         }:rls;
 130.759 -   val ac_plus_times =
 130.760 -     Rls
 130.761 -       {preconds=[],rew_ord=("term_order",fn),
 130.762 -        rules=[Thm ("radd_commute","?m + ?n = ?n + ?m"),
 130.763 -               Thm ("radd_left_commute","?x + (?y + ?z) = ?y + (?x + ?z)"),
 130.764 -               Thm ("radd_assoc","?m + ?n + ?k = ?m + (?n + ?k)"),
 130.765 -               Thm ("rmult_commute","?m * ?n = ?n * ?m"),
 130.766 -               Thm ("rmult_left_commute","?x * (?y * ?z) = ?y * (?x * ?z)"),
 130.767 -               Thm ("rmult_assoc","?m * ?n * ?k = ?m * (?n * ?k)")],
 130.768 -        scr=Script (Free ("empty_script","RealDef.real"))} : rls 
 130.769 -\end{verbatim}}%size
 130.770 -Note that the theorems {\tt radd\_left\_commute} and {\tt rmult\_left\_commute} are really necessary in order to make the rule set 'confluent'~!
 130.771 -
 130.772 -
 130.773 -\paragraph{Give it a try !} Ordered rewriting is one technique to produce polynomial normal from from arbitrary integer terms:
 130.774 -{\footnotesize\begin{verbatim}
 130.775 -   ML> val ct' = "#3 * a + b + #2 * a";
 130.776 -   val ct' = "#3 * a + b + #2 * a" : cterm'
 130.777 -   ML>
 130.778 -   ML> (*-1-*) radd_commute; val thm' = ("radd_commute","") : thm';
 130.779 -   val it = "?m + ?n = ?n + ?m" : thm
 130.780 -   val thm' = ("radd_commute","") : thm'
 130.781 -   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.782 -   val ct' = "#2 * a + (#3 * a + b)" : cterm'
 130.783 -   ML>
 130.784 -   ML> (*-2-*) rdistr_right_assoc_p; val thm' = ("rdistr_right_assoc_p","") : thm';
 130.785 -   val it = "?l * ?n + (?m * ?n + ?k) = (?l + ?m) * ?n + ?k" : thm
 130.786 -   val thm' = ("rdistr_right_assoc_p","") : thm'
 130.787 -   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.788 -   val ct' = "(#2 + #3) * a + b" : cterm'
 130.789 -   ML>
 130.790 -   ML> (*-3-*)
 130.791 -   ML> val Some (ct',_) = calculate thy' "plus" ct';
 130.792 -   val ct' = "#5 * a + b" : cterm'
 130.793 -\end{verbatim}}%size %FIXXXmat0201b ... calculate !
 130.794 -This looks nice, but if {\tt radd\_commute} is applied automatically in {\tt (*-1-*)} without checking the resulting term to be 'smaller' w.r.t. a term order, then rewritin goes on forever (i.e. it does not 'terminate') \dots
 130.795 -{\footnotesize\begin{verbatim}
 130.796 -   ML> val ct' = "#3 * a + b + #2 * a" : cterm';
 130.797 -   val ct' = "#3 * a + b + #2 * a" : cterm'
 130.798 -   ML> val thm' = ("radd_commute","") : thm';
 130.799 -   val thm' = ("radd_commute","") : thm'
 130.800 -   ML>
 130.801 -   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.802 -   val ct' = "#2 * a + (#3 * a + b)" : cterm'
 130.803 -   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.804 -   val ct' = "#3 * a + b + #2 * a" : cterm'
 130.805 -   ML> val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 130.806 -   val ct' = "#2 * a + (#3 * a + b)" : cterm'
 130.807 -              ..........
 130.808 -\end{verbatim}}%size
 130.809 -
 130.810 -Ordered rewriting with the above AC-rewrite system {\tt ac\_plus\_times} performs a kind of bubble sort which can be traced:
 130.811 -{\footnotesize\begin{verbatim}
 130.812 -   ML> toggle trace_rewrite;
 130.813 -   val it = true : bool
 130.814 -   ML>
 130.815 -   ML> rewrite_set "RatArith.thy" "eval_rls" false "ac_plus_times" ct;
 130.816 -   ### trying thm 'radd_commute'
 130.817 -   ### not: "a + (b * (c * d) + e)" > "b * (c * d) + e + a"
 130.818 -   ### rewrite_set_: a + (e + b * (c * d))
 130.819 -   ### trying thm 'radd_commute'
 130.820 -   ### not: "a + (e + b * (c * d))" > "e + b * (c * d) + a"
 130.821 -   ### not: "e + b * (c * d)" > "b * (c * d) + e"
 130.822 -   ### trying thm 'radd_left_commute'
 130.823 -   ### not: "a + (e + b * (c * d))" > "e + (a + b * (c * d))"
 130.824 -   ### trying thm 'radd_assoc'
 130.825 -   ### trying thm 'rmult_commute'
 130.826 -   ### not: "b * (c * d)" > "c * d * b"
 130.827 -   ### not: "c * d" > "d * c"
 130.828 -   ### trying thm 'rmult_left_commute'
 130.829 -   ### not: "b * (c * d)" > "c * (b * d)"
 130.830 -   ### trying thm 'rmult_assoc'
 130.831 -   ### trying thm 'radd_commute'
 130.832 -   ### not: "a + (e + b * (c * d))" > "e + b * (c * d) + a"
 130.833 -   ### not: "e + b * (c * d)" > "b * (c * d) + e"
 130.834 -   ### trying thm 'radd_left_commute'
 130.835 -   ### not: "a + (e + b * (c * d))" > "e + (a + b * (c * d))"
 130.836 -   ### trying thm 'radd_assoc'
 130.837 -   ### trying thm 'rmult_commute'
 130.838 -   ### not: "b * (c * d)" > "c * d * b"
 130.839 -   ### not: "c * d" > "d * c"
 130.840 -   ### trying thm 'rmult_left_commute'
 130.841 -   ### not: "b * (c * d)" > "c * (b * d)"
 130.842 -   ### trying thm 'rmult_assoc'
 130.843 -   val it = Some ("a + (e + b * (c * d))",[]) : (string * string list) option     \end{verbatim}}%size
 130.844 -Notice that {\tt +} is left-associative where the parentheses are omitted for {\tt (a + b) + c = a + b + c}, but not for {\tt a + (b + c)}. Ordered rewriting necessarily terminates with parentheses which could be omitted due to associativity.
 130.845 -
 130.846 -
 130.847 -\chapter{The hierarchy of problem types}\label{pbt}
 130.848 -\section{The standard-function for 'matching'}
 130.849 -Matching \cite{nipk:rew-all-that} is a technique used within rewriting, and used by \isac{} also for (a generalized) 'matching' a problem with a problem type. The function which tests for matching has the following signature:
 130.850 -{\footnotesize\begin{verbatim}
 130.851 -   ML> matches;
 130.852 -   val it = fn : theory -> term -> term -> bool
 130.853 -\end{verbatim}}%size
 130.854 -where the first of the two {\tt term} arguments is the particular term to be tested, and the second one is the pattern:
 130.855 -{\footnotesize\begin{verbatim}
 130.856 -   ML> val t = (term_of o the o (parse thy)) "#3 * x^^^#2 = #1";
 130.857 -   val t = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("#1","RealDef.real") : term
 130.858 -   ML>
 130.859 -   ML> val p = (term_of o the o (parse thy)) "a * b^^^#2 = c";
 130.860 -   val p = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("c","RealDef.real") : term
 130.861 -   ML> atomt p;
 130.862 -   *** -------------
 130.863 -   *** Const ( op =)
 130.864 -   *** . Const ( op *)
 130.865 -   *** . . Free ( a, )
 130.866 -   *** . . Const ( RatArith.pow)
 130.867 -   *** . . . Free ( b, )
 130.868 -   *** . . . Free ( #2, )
 130.869 -   *** . Free ( c, )
 130.870 -   val it = () : unit
 130.871 -   ML>
 130.872 -   ML> free2var;
 130.873 -   val it = fn : term -> term
 130.874 -   ML>
 130.875 -   ML> val pat = free2var p;
 130.876 -   val pat = Const (#,#) $ (# $ # $ (# $ #)) $ Var ((#,#),"RealDef.real") : term
 130.877 -   ML> Sign.string_of_term (sign_of thy) pat;
 130.878 -   val it = "?a * ?b ^^^ #2 = ?c" : cterm' 
 130.879 -   ML> atomt pat;
 130.880 -   *** -------------
 130.881 -   *** Const ( op =)
 130.882 -   *** . Const ( op *)
 130.883 -   *** . . Var ((a, 0), )
 130.884 -   *** . . Const ( RatArith.pow)
 130.885 -   *** . . . Var ((b, 0), )
 130.886 -   *** . . . Free ( #2, )
 130.887 -   *** . Var ((c, 0), )
 130.888 -   val it = () : unit
 130.889 -\end{verbatim}}%size % $ 
 130.890 -Note that the pattern {\tt pat} contains so-called {\it scheme variables} decorated with a {\tt ?} (analoguous to theorems). The pattern is generated by the function {\tt free2var}. This format of the pattern is necessary in order to obtain results like these:
 130.891 -{\footnotesize\begin{verbatim}
 130.892 -   ML> matches thy t pat;
 130.893 -   val it = true : bool
 130.894 -   ML>
 130.895 -   ML> val t2 = (term_of o the o (parse thy)) "x^^^#2 = #1";
 130.896 -   val t2 = Const (#,#) $ (# $ # $ Free #) $ Free ("#1","RealDef.real") : term
 130.897 -   ML> matches thy t2 pat;
 130.898 -   val it = false : bool    
 130.899 -   ML>
 130.900 -   ML> val pat2 = (term_of o the o (parse thy)) "?u^^^#2 = ?v";
 130.901 -   val pat2 = Const (#,#) $ (# $ # $ Free #) $ Var ((#,#),"RealDef.real") : term
 130.902 -   ML> matches thy t2 pat2;
 130.903 -   val it = true : bool 
 130.904 -\end{verbatim}}%size % $
 130.905 -
 130.906 -\section{Accessing the hierarchy}
 130.907 -The hierarchy of problem types is encapsulated; it can be accessed by the following functions. {\tt show\_ptyps} retrieves all leaves of the hierarchy (here in an early version for testing):
 130.908 -{\footnotesize\begin{verbatim}
 130.909 -   ML> show_ptyps;
 130.910 -   val it = fn : unit -> unit
 130.911 -   ML> show_ptyps();
 130.912 -   [
 130.913 -    ["e_pblID"],
 130.914 -    ["equation", "univariate", "linear"],
 130.915 -    ["equation", "univariate", "plain_square"],
 130.916 -    ["equation", "univariate", "polynomial", "degree_two", "pq_formula"],
 130.917 -    ["equation", "univariate", "polynomial", "degree_two", "abc_formula"],
 130.918 -    ["equation", "univariate", "squareroot"],
 130.919 -    ["equation", "univariate", "normalize"],
 130.920 -    ["equation", "univariate", "sqroot-test"],
 130.921 -    ["function", "derivative_of"],
 130.922 -    ["function", "maximum_of", "on_interval"],
 130.923 -    ["function", "make"],
 130.924 -    ["tool", "find_values"],
 130.925 -    ["functional", "inssort"]
 130.926 -   ]
 130.927 -   val it = () : unit
 130.928 -\end{verbatim}}%size
 130.929 -The retrieve function for individual problem types is {\tt get\_pbt}
 130.930 -\footnote{A function providing better readable output is in preparation}. Note that its argument, the 'problem identifier' {\tt pblID}, has the strings listed in reverse order w.r.t. the hierarchy, i.e. from the leave to the root. This order makes the {\tt pblID} closer to a natural description:
 130.931 -{\footnotesize\begin{verbatim}
 130.932 -   ML> get_pbt;
 130.933 -   val it = fn : pblID -> pbt
 130.934 -   ML> get_pbt ["squareroot", "univariate", "equation"];
 130.935 -   val it =
 130.936 -     {met=[("SqRoot.thy","square_equation")],
 130.937 -      ppc=[("#Given",(Const (#,#),Free (#,#))),
 130.938 -           ("#Given",(Const (#,#),Free (#,#))),
 130.939 -           ("#Given",(Const (#,#),Free (#,#))),
 130.940 -           ("#Find",(Const (#,#),Free (#,#)))],
 130.941 -      thy={ProtoPure, CPure, HOL, Ord, Set, subset, equalities, mono, Vimage, Fun,
 130.942 -            Prod, Lfp, Relation, Trancl, WF, NatDef, Gfp, Sum, Inductive, Nat,
 130.943 -            Arith, Divides, Power, Finite, Equiv, IntDef, Int, Univ, Datatype,
 130.944 -            Numeral, Bin, IntArith, WF_Rel, Recdef, IntDiv, NatBin, List, Option,
 130.945 -            Map, Record, RelPow, Sexp, String, Calculation, SVC_Oracle, Main,
 130.946 -            Zorn, Filter, PNat, PRat, PReal, RealDef, RealOrd, RealInt, RealBin,
 130.947 -            HyperDef, Descript, ListG, Tools, Script, Typefix, Atools, RatArith,
 130.948 -            SqRoot},
 130.949 -      where_=[Const ("SqRoot.contains'_root","bool => bool") $
 130.950 -              Free ("e_","bool")]} : pbt
 130.951 -\end{verbatim}}%size %$
 130.952 -where the records fields hold the following data:
 130.953 -\begin{description}
 130.954 -\item [\tt thy]: the theory necessary for parsing the formulas
 130.955 -\item [\tt ppc]: the items of the problem type, divided into those {\tt Given}, the precondition {\tt Where} and the output item(s) {\tt Find}. The items of {\tt Given} and {\tt Find} are all headed by so-called descriptions, which determine the type. These descriptions are defined in {\tt [isac-src]/Isa99/Descript.thy}.
 130.956 -\item [\tt met]: the list of methods solving this problem type.\\
 130.957 -\end{description}
 130.958 -
 130.959 -The following function adds or replaces a problem type (after having it prepared using {\tt prep\_pbt})
 130.960 -{\footnotesize\begin{verbatim}
 130.961 -   ML> store_pbt;
 130.962 -   val it = fn : pbt * pblID -> unit
 130.963 -   ML> store_pbt
 130.964 -    (prep_pbt SqRoot.thy
 130.965 -    (["newtype","univariate","equation"],
 130.966 -     [("#Given" ,["equality e_","solveFor v_","errorBound err_"]),
 130.967 -      ("#Where" ,["contains_root (e_::bool)"]),
 130.968 -      ("#Find"  ,["solutions v_i_"])
 130.969 -     ],
 130.970 -     [("SqRoot.thy","square_equation")]));
 130.971 -   val it = () : unit
 130.972 -\end{verbatim}}%size
 130.973 -When adding a new type with argument {\tt pblID}, an immediate parent must already exist in the hierarchy (this is the one with the tail of {\tt pblID}).
 130.974 -
 130.975 -\section{Internals of the datastructure}
 130.976 -This subsection only serves for the implementation of the hierarchy browser and can be skipped by the authors of math knowledge.
 130.977 -
 130.978 -A problem type is described by the following record type (in the file {\tt [isac-src]/globals.sml}, the respective functions are in {\tt [isac-src]/ME/ptyps.sml}), and held in a global reference variable:
 130.979 -{\footnotesize\begin{verbatim}
 130.980 -   type pbt = 
 130.981 -        {thy   : theory,       (* the nearest to the root,
 130.982 -                                  which allows to compile that pbt  *)
 130.983 -         where_: term list,    (* where - predicates                *)
 130.984 -         ppc   : ((string *    (* fields "#Given","#Find"           *)
 130.985 -                   (term *     (* description                       *)
 130.986 -                    term))     (* id                                *)
 130.987 -                      list),                                        
 130.988 -         met   : metID list};  (* methods solving the pbt           *)
 130.989 -   datatype ptyp = 
 130.990 -            Ptyp of string *   (* key within pblID                  *)
 130.991 -                    pbt list * (* several pbts with different domIDs*)
 130.992 -                    ptyp list;
 130.993 -   val e_Ptyp = Ptyp ("empty",[],[]);
 130.994 -   
 130.995 -   type ptyps = ptyp list;
 130.996 -   val ptyps = ref ([e_Ptyp]:ptyps);
 130.997 -\end{verbatim}}%size
 130.998 -The predicates in {\tt where\_} (i.e. the preconditions) usually are defined in the respective theory in {\tt[isac-src]/knowledge}. Most of the predicates are not defined by rewriting, but by SML-code contained in the respective {\tt *.ML} file.
 130.999 -
130.1000 -Each item is headed by a so-called description which provides some guidance for interactive input. The descriptions are defined in {\tt[isac-src]/Isa99/Descript.thy}.
130.1001 -
130.1002 -
130.1003 -
130.1004 -\section{Match a formalization with a problem type}\label{pbl}
130.1005 -A formalization is {\it match}ed with a problem type which yields a problem. A formal description of this kind of {\it match}ing can be found in \\{\tt ftp://ft.ist.tugraz.at/projects/isac/publ/calculemus01.ps.gz}. A formalization of an equation is e.g.
130.1006 -{\footnotesize\begin{verbatim}
130.1007 -   ML> val fmz = ["equality (#1 + #2 * x = #0)",
130.1008 -                  "solveFor x",
130.1009 -                  "solutions L"] : fmz;
130.1010 -   val fmz = ["equality (#1 + #2 * x = #0)","solveFor x","solutions L"] : fmz
130.1011 -\end{verbatim}}%size
130.1012 -Given a formalization (and a specification of the problem, i.e. a theory, a problemtype, and a method) \isac{} can solve the respective problem automatically. The formalization must match the problem type for this purpose:
130.1013 -{\footnotesize\begin{verbatim}
130.1014 -   ML> match_pbl;
130.1015 -   val it = fn : fmz -> pbt -> match'
130.1016 -   ML>
130.1017 -   ML> match_pbl fmz (get_pbt ["univariate","equation"]);
130.1018 -   val it =
130.1019 -     Matches'
130.1020 -       {Find=[Correct "solutions L"],
130.1021 -        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
130.1022 -        Relate=[],Where=[Correct "matches (?a = ?b) (#1 + #2 * x = #0)"],With=[]}
130.1023 -     : match'
130.1024 -   ML>
130.1025 -   ML> match_pbl fmz (get_pbt ["linear","univariate","equation"]);
130.1026 -   val it =
130.1027 -     Matches'
130.1028 -       {Find=[Correct "solutions L"],
130.1029 -        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
130.1030 -        Relate=[],
130.1031 -        Where=[Correct
130.1032 -                 "matches (          x = #0) (#1 + #2 * x = #0) |
130.1033 -                  matches (     ?b * x = #0) (#1 + #2 * x = #0) |
130.1034 -                  matches (?a      + x = #0) (#1 + #2 * x = #0) |
130.1035 -                  matches (?a + ?b * x = #0) (#1 + #2 * x = #0)"],
130.1036 -        With=[]} : match'
130.1037 -   ML>
130.1038 -   ML> match_pbl fmz (get_pbt ["squareroot","univariate","equation"]);
130.1039 -   val it =
130.1040 -     NoMatch'
130.1041 -       {Find=[Correct "solutions L"],
130.1042 -        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x",
130.1043 -               Missing "errorBound err_"],Relate=[],
130.1044 -        Where=[False "contains_root #1 + #2 * x = #0 "],With=[]} : match'
130.1045 -\end{verbatim}}%size
130.1046 -The above formalization does not match the problem type \\{\tt["squareroot","univariate","equation"]} which is explained by the tags:
130.1047 -\begin{tabbing}
130.1048 -123\=\kill
130.1049 -\> {\tt Missing:} the item is missing in the formalization as required by the problem type\\
130.1050 -\> {\tt Superfl:} the item is not required by the problem type\\
130.1051 -\> {\tt Correct:} the item is correct, or the precondition ({\tt Where}) is true\\
130.1052 -\> {\tt False:} the precondition ({\tt Where}) is false\\
130.1053 -\> {\tt Incompl:} the item is incomlete, or not yet input.\\
130.1054 -\end{tabbing}
130.1055 -
130.1056 -
130.1057 -
130.1058 -\section{Refine a problem specification}
130.1059 -The challenge in constructing the problem hierarchy is, to design the branches in such a way, that problem refinement can be done automatically (as it is done in algebra system e.g. by a internal hierarchy of equations).
130.1060 -
130.1061 -For this purpose the hierarchy must be built using the following rules: Let $F$ be a formalization and $P$ and $P_i,\:i=1\cdots n$ problem types, where the $P_i$ are specialized problem types w.r.t. $P$ (i.e. $P$ is a parent node of $P_i$), then
130.1062 -{\small
130.1063 -\begin{enumerate}
130.1064 -\item for all $F$ matching some $P_i$ must follow, that $F$ matches $P$
130.1065 -\item an $F$ matching $P$ should not have more than {\em one} $P_i,\:i=1\cdots n-1$ with $F$ matching $P_i$ (if there are more than one $P_i$, the first one will be taken)
130.1066 -\item for all $F$ matching some $P$ must follow, that $F$ matches $P_n$\\
130.1067 -\end{enumerate}}%small
130.1068 -\noindent Let us give an example for the point (1.) and (2.) first:
130.1069 -{\footnotesize\begin{verbatim}
130.1070 -   ML> refine;
130.1071 -   val it = fn : fmz -> pblID -> match list
130.1072 -   ML>
130.1073 -   ML> val fmz = ["equality (sqrt(#9+#4*x)=sqrt x + sqrt(#5+x))",
130.1074 -              "solveFor x","errorBound (eps=#0)",
130.1075 -              "solutions L"];
130.1076 -   ML>
130.1077 -   ML> refine fmz ["univariate","equation"];
130.1078 -   *** pass ["equation","univariate"]
130.1079 -   *** pass ["equation","univariate","linear"]
130.1080 -   *** pass ["equation","univariate","plain_square"]
130.1081 -   *** pass ["equation","univariate","polynomial"]
130.1082 -   *** pass ["equation","univariate","squareroot"]
130.1083 -   val it =
130.1084 -     [Matches
130.1085 -        (["univariate","equation"],
130.1086 -         {Find=[Correct "solutions L"],
130.1087 -          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
130.1088 -                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
130.1089 -          Where=[Correct
130.1090 -                   "matches (?a = ?b) (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))"],
130.1091 -          With=[]}),
130.1092 -      NoMatch
130.1093 -        (["linear","univariate","equation"],
130.1094 -         {Find=[Correct "solutions L"],
130.1095 -          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
130.1096 -                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
130.1097 -          Where=[False "(?a + ?b * x = #0) (sqrt (#9 + #4 * x#"],
130.1098 -          With=[]}),
130.1099 -      NoMatch
130.1100 -        (["plain_square","univariate","equation"],
130.1101 -         {Find=[Correct "solutions L"],
130.1102 -          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
130.1103 -                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
130.1104 -          Where=[False
130.1105 -                   "matches (?a + ?b * x ^^^ #2 = #0)"],
130.1106 -          With=[]}),
130.1107 -      NoMatch
130.1108 -        (["polynomial","univariate","equation"],
130.1109 -         {Find=[Correct "solutions L"],
130.1110 -          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
130.1111 -                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
130.1112 -          Where=[False 
130.1113 -                 "is_polynomial_in sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) x"],
130.1114 -          With=[]}),
130.1115 -      Matches
130.1116 -        (["squareroot","univariate","equation"],
130.1117 -         {Find=[Correct "solutions L"],
130.1118 -          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
130.1119 -                 Correct "solveFor x",Correct "errorBound (eps = #0)"],Relate=[],
130.1120 -          Where=[Correct
130.1121 -                   "contains_root sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) "],
130.1122 -          With=[]})] : match list
130.1123 -\end{verbatim}}%size}%footnotesize\label{refine}
130.1124 -This example shows, that in order to refine an {\tt["univariate","equation"]}, the formalization must match respective respective problem type (rule (1.)) and one of the descendants which should match selectively (rule (2.)).
130.1125 -
130.1126 -If no one of the descendants of {\tt["univariate","equation"]} match, rule (3.) comes into play: The {\em last} problem type on this level ($P_n$) provides for a special 'problem type' {\tt["normalize"]}. This node calls a method transforming the equation to a (or another) normal form, which then may match. Look at this example:
130.1127 -{\footnotesize\begin{verbatim}
130.1128 -   ML>  val fmz = ["equality (x+#1=#2)",
130.1129 -               "solveFor x","errorBound (eps=#0)",
130.1130 -               "solutions L"];
130.1131 -   [...]
130.1132 -   ML>
130.1133 -   ML>  refine fmz ["univariate","equation"];
130.1134 -   *** pass ["equation","univariate"]
130.1135 -   *** pass ["equation","univariate","linear"]
130.1136 -   *** pass ["equation","univariate","plain_square"]
130.1137 -   *** pass ["equation","univariate","polynomial"]
130.1138 -   *** pass ["equation","univariate","squareroot"]
130.1139 -   *** pass ["equation","univariate","normalize"]
130.1140 -   val it =
130.1141 -     [Matches
130.1142 -        (["univariate","equation"],
130.1143 -         {Find=[Correct "solutions L"],
130.1144 -          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
130.1145 -                 Superfl "errorBound (eps = #0)"],Relate=[],
130.1146 -          Where=[Correct "matches (?a = ?b) (x + #1 = #2)"],With=[]}),
130.1147 -      NoMatch
130.1148 -        (["linear","univariate","equation"],
130.1149 -   [...]
130.1150 -          With=[]}),
130.1151 -      NoMatch
130.1152 -        (["squareroot","univariate","equation"],
130.1153 -         {Find=[Correct "solutions L"],
130.1154 -          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
130.1155 -                 Correct "errorBound (eps = #0)"],Relate=[],
130.1156 -          Where=[False "contains_root x + #1 = #2 "],With=[]}),
130.1157 -      Matches
130.1158 -        (["normalize","univariate","equation"],
130.1159 -         {Find=[Correct "solutions L"],
130.1160 -          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
130.1161 -                 Superfl "errorBound (eps = #0)"],Relate=[],Where=[],With=[]})]
130.1162 -     : match list
130.1163 -\end{verbatim}}%size
130.1164 -The problem type $P_n$, {\tt["normalize","univariate","equation"]}, will transform the equation {\tt x + \#1 = \#2} to the normal form {\tt \#-1 + x = \#0}, which then will match {\tt["linear","univariate","equation"]}.
130.1165 -
130.1166 -This recursive search on the problem hierarchy can be  done within a proof state. This leads to the next section.
130.1167 -
130.1168 -
130.1169 -\chapter{Methods}
130.1170 -A problem type can have one ore more methods solving a respective problem. A method is described by means of another new program language. The language itself looks like a simple functional language, but constructs an imperative proof-state behind the scenes (thus liberating the programer from dealing with technical details and also prohibiting incorrect construction of the proof tree). The interpreter of 'scripts' written in this language evaluates the scriptexpressions, and also delivers certain parts of the script itself for discussion with the user.
130.1171 -
130.1172 -\section{The scripts' syntax}
130.1173 -The syntax of scripts follows the definition given in Backus-normal-form:
130.1174 -{\it
130.1175 -\begin{tabbing}
130.1176 -123\=123\=expr ::=\=$|\;\;$\=\kill
130.1177 -\>script ::= {\tt Script} id arg$\,^*$ = body\\
130.1178 -\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
130.1179 -\>\>body ::= expr\\
130.1180 -\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
130.1181 -\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
130.1182 -\>\>\>$|\;$\>listexpr\\
130.1183 -\>\>\>$|\;$\>id\\
130.1184 -\>\>\>$|\;$\>seqex id\\
130.1185 -\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
130.1186 -\>\>\>$|\;$\>{\tt Repeat} seqex\\
130.1187 -\>\>\>$|\;$\>{\tt Try} seqex\\
130.1188 -\>\>\>$|\;$\>seqex {\tt Or} seqex\\
130.1189 -\>\>\>$|\;$\>seqex {\tt @@} seqex\\
130.1190 -\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
130.1191 -\>\>type ::= id\\
130.1192 -\>\>tac ::= id
130.1193 -\end{tabbing}}
130.1194 -where {\it id} is an identifier with the usual syntax, {\it prop} is a proposition constructed by Isabelles logical operators (see \cite{Isa-obj} {\tt [isabelle]/src/HOL/HOL.thy}), {\it listexpr} (called {\bf list-expression}) is constructed by Isabelles list functions like {\tt hd, tl, nth} described in {\tt [isabelle]/src/HOL/List.thy}, and {\it type} are (virtually) all types declared in Isabelles version 99.
130.1195 -
130.1196 -Expressions containing some of the keywords {\tt let}, {\tt if} etc. are called {\bf script-expressions}.
130.1197 -
130.1198 -Tactics {\it tac} are (curried) functions. For clarity and simplicity reasons, {\it listexpr} must not contain a {\it tac}, and {\it tac}s must not be nested,
130.1199 -
130.1200 -
130.1201 -\section{Control the flow of evaluation}
130.1202 -The flow of control is managed by the following script-expressions called {\it tacticals}.
130.1203 -\begin{description}
130.1204 -\item{{\tt while} prop {\tt Do} expr id} 
130.1205 -\item{{\tt if} prop {\tt then} expr {\tt else} expr}
130.1206 -\end{description}
130.1207 -While the the above script-expressions trigger the flow of control by evaluating the current formula, the other expressions depend on the applicability of the tactics within their respective subexpressions (which in turn depends on the proofstate)
130.1208 -\begin{description}
130.1209 -\item{{\tt Repeat} expr id}
130.1210 -\item{{\tt Try} expr id}
130.1211 -\item{expr {\tt Or} expr id}
130.1212 -\item{expr {\tt @@} expr id}
130.1213 -\end{description}
130.1214 -
130.1215 -\begin{description}
130.1216 -\item xxx
130.1217 -
130.1218 -\end{description}
130.1219 -
130.1220 -\chapter{Do a calculational proof}
130.1221 -First we list all the tactics available so far (this list may be extended during further development of \isac).
130.1222 -
130.1223 -\section{Tactics for doing steps in calculations}
130.1224 -\input{tactics}
130.1225 -
130.1226 -\section{The functionality of the math engine}
130.1227 -A proof is being started in the math engine {\tt me} by the tactic
130.1228 -\footnote{In the present version a tactic is of type {\tt mstep}.}
130.1229 - {\tt Init\_Proof}, and interactively promoted by other tactics. On input of each tactic the {\tt me} returns the resulting formula and the next tactic applicable. The proof is finished, when the {\tt me} proposes {\tt End\_Proof} as the next tactic.
130.1230 -
130.1231 -We show a calculation (calculational proof) concerning equation solving, where the type of equation is refined automatically: The equation is given by the respective formalization ...
130.1232 -{\footnotesize\begin{verbatim}
130.1233 -   ML> val fmz = ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x",
130.1234 -                  "errorBound (eps=#0)","solutions L"];
130.1235 -   val fmz =
130.1236 -     ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
130.1237 -      "solutions L"] : string list
130.1238 -   ML>
130.1239 -   ML> val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
130.1240 -                                 ("SqRoot.thy","no_met"));
130.1241 -   val dom = "SqRoot.thy" : string
130.1242 -   val pbt = ["univariate","equation"] : string list
130.1243 -   val met = ("SqRoot.thy","no_met") : string * string
130.1244 -\end{verbatim}}%size
130.1245 -... and the specification {\tt spec} of a domain {\tt dom}, a problem type {\tt pbt} and a method {\tt met}. Note that the equation is such, that it is not immediatly clear, what type it is in particular (it could be a polynomial of degree 2; but, for sure, the type is some specialized type of a univariate equation). Thus, no method ({\tt no\_met}) can be specified for solving the problem.
130.1246 -
130.1247 -Nevertheless this specification is sufficient for automatically solving the equation --- the appropriate method will be found by refinement within the hierarchy of problem types.
130.1248 -
130.1249 -
130.1250 -\section{Initialize the calculation}
130.1251 -The start of a new proof requires the following initializations: The proof state is given by a proof tree {\tt ptree} and a position {\tt pos'}; both are empty at the beginning. The tactic {\tt Init\_Proof} is, like all other tactics, paired with an identifier of type {\tt string} for technical reasons.
130.1252 -{\footnotesize\begin{verbatim}
130.1253 -   ML>  val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
130.1254 -   val mID = "Init_Proof" : string
130.1255 -   val m =
130.1256 -     Init_Proof
130.1257 -       (["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
130.1258 -         "solutions L"],("SqRoot.thy",[#,#],(#,#))) : mstep
130.1259 -   ML>
130.1260 -   ML>  val (p,_,f,nxt,_,pt) = me (mID,m) e_pos' c EmptyPtree;
130.1261 -   val p = ([],Pbl) : pos'
130.1262 -   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
130.1263 -   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
130.1264 -     : string * mstep
130.1265 -   val pt =
130.1266 -     Nd
130.1267 -       (PblObj
130.1268 -          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
130.1269 -           result=#,spec=#},[]) : ptree
130.1270 -   \end{verbatim}}%size
130.1271 -The mathematics engine {\tt me} returns the resulting formula {\tt f} of type {\tt mout} (which in this case is a problem), the next tactic {\tt nxt}, and a new proof state ({\tt ptree}, {\tt pos'}).
130.1272 -
130.1273 -We can convince ourselves, that the problem is still empty, by increasing {\tt Compiler.Control.Print.printDepth}:
130.1274 -{\footnotesize\begin{verbatim}
130.1275 -   ML> Compiler.Control.Print.printDepth:=8; (*4 default*)
130.1276 -   val it = () : unit
130.1277 -   ML>
130.1278 -   ML> f;
130.1279 -   val it =
130.1280 -     Form'
130.1281 -       (PpcKF
130.1282 -          (0,EdUndef,0,Nundef,
130.1283 -           (Problem [],
130.1284 -            {Find=[Incompl "solutions []"],
130.1285 -             Given=[Incompl "equality",Incompl "solveFor"],Relate=[],
130.1286 -             Where=[False "matches (?a = ?b) e_"],With=[]}))) : mout
130.1287 -\end{verbatim}}%size
130.1288 -Recall, please, the format of a problem as presented in sect.\ref{pbl} on p.\pageref{pbl}; such an 'empty' problem can be found above encapsulated by several constructors containing additional data (necessary for the dialog guide, not relevant here).\\
130.1289 -
130.1290 -{\it In the sequel we will omit output of the {\tt me} if it is not important for the respective context}.\\
130.1291 -
130.1292 -In general, the dialog guide will hide the following two tactics {\tt Refine\_Tacitly} and {\tt Model\_Problem} from the user.
130.1293 -{\footnotesize\begin{verbatim}
130.1294 -   ML>  nxt;
130.1295 -   val it = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
130.1296 -     : string * mstep
130.1297 -   ML>
130.1298 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1299 -   val nxt = ("Model_Problem",Model_Problem ["normalize","univariate","equation"])
130.1300 -     : string * mstep
130.1301 -   ML>
130.1302 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1303 -\end{verbatim}}%size
130.1304 -
130.1305 -
130.1306 -\section{The phase of modeling} 
130.1307 -comprises the input of the items of the problem; the {\tt me} can help by use of the formalization tacitly transferred by {\tt Init\_Proof}. In particular, the {\tt me} in general 'knows' the next promising tactic; the first one has been returned by the (hidden) tactic {\tt Model\_Problem}.
130.1308 -
130.1309 -{\footnotesize\begin{verbatim}
130.1310 -   ML>  nxt;
130.1311 -   val it =
130.1312 -     ("Add_Given",Add_Given "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)")
130.1313 -     : string * mstep
130.1314 -   ML>
130.1315 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1316 -   val nxt = ("Add_Given",Add_Given "solveFor x") : string * mstep
130.1317 -   ML>
130.1318 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1319 -   val nxt = ("Add_Find",Add_Find "solutions L") : string * mstep
130.1320 -   ML>
130.1321 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt; 
130.1322 -   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
130.1323 -\end{verbatim}}%size
130.1324 -\noindent Now the problem is 'modeled', all items are input. We convince ourselves by increasing {\tt Compiler.Control.Print.printDepth} once more.
130.1325 -{\footnotesize\begin{verbatim}
130.1326 -   ML>  Compiler.Control.Print.printDepth:=8;
130.1327 -   ML>  f;
130.1328 -   val it =
130.1329 -     Form'
130.1330 -       (PpcKF
130.1331 -          (0,EdUndef,0,Nundef,
130.1332 -           (Problem [],
130.1333 -            {Find=[Correct "solutions L"],
130.1334 -             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
130.1335 -                    Correct "solveFor x"],Relate=[],Where=[],With=[]}))) : mout
130.1336 -\end{verbatim}}%size
130.1337 -%One of the input items is considered {\tt Superfluous} by the {\tt me} consulting the problem type {\tt ["univariate","equation"]}. The {\tt ErrorBound}, however, could become important in case the equation only could be solved by some iteration method.
130.1338 -
130.1339 -\section{The phase of specification} 
130.1340 -This phase provides for explicit determination of the domain, the problem type, and the method to be used. In particular, the search for the appropriate problem type is being supported. There are two tactics for this purpose: {\tt Specify\_Problem} generates feedback on how a candidate of a problem type matches the current problem, and {\tt Refine\_Problem} provides help by the system, if the user gets lost.
130.1341 -{\footnotesize\begin{verbatim}
130.1342 -ML> nxt;
130.1343 -   val it = ("Specify_Domain",Specify_Domain "SqRoot.thy") : string * mstep
130.1344 -   ML>
130.1345 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1346 -   val nxt =
130.1347 -     ("Specify_Problem",Specify_Problem ["normalize","univariate","equation"])
130.1348 -     : string * mstep
130.1349 -   val pt =
130.1350 -     Nd
130.1351 -       (PblObj
130.1352 -          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
130.1353 -              result=#,spec=#},[]) : ptree
130.1354 -\end{verbatim}}%size
130.1355 -The {\tt me} is smart enough to know the appropriate problem type (transferred tacitly with {\tt Init\_Proof}). In order to challenge the student, the dialog guide may hide this information; then the {\tt me} works as follows.
130.1356 -{\footnotesize\begin{verbatim}
130.1357 -   ML> val nxt = ("Specify_Problem",
130.1358 -               Specify_Problem ["polynomial","univariate","equation"]);
130.1359 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1360 -   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
130.1361 -   val nxt =
130.1362 -     ("Refine_Problem",Refine_Problem ["normalize","univariate","equation"])
130.1363 -     : string * mstep
130.1364 -   ML>
130.1365 -   ML> val nxt = ("Specify_Problem",
130.1366 -               Specify_Problem ["linear","univariate","equation"]);
130.1367 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1368 -   val f =
130.1369 -     Form'
130.1370 -       (PpcKF
130.1371 -          (0,EdUndef,0,Nundef,
130.1372 -           (Problem ["linear","univariate","equation"],
130.1373 -            {Find=[Correct "solutions L"],
130.1374 -             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
130.1375 -                    Correct "solveFor x"],Relate=[],
130.1376 -             Where=[False
130.1377 -                    "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
130.1378 -             With=[]}))) : mout 
130.1379 -\end{verbatim}}%size
130.1380 -Again assuming that the dialog guide hide the next tactic proposed by the {\tt me}, and the student gets lost, {\tt Refine\_Problem} always 'knows' the way out, if applied to the problem type {\tt["univariate","equation"]}.
130.1381 -{\footnotesize\begin{verbatim}
130.1382 -   ML> val nxt = ("Refine_Problem",
130.1383 -                  Refine_Problem ["linear","univariate","equation
130.1384 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1385 -   val f = Problems (RefinedKF [NoMatch #]) : mout
130.1386 -   ML>
130.1387 -   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
130.1388 -   val f =
130.1389 -     Problems
130.1390 -       (RefinedKF
130.1391 -          [NoMatch
130.1392 -             (["linear","univariate","equation"],
130.1393 -              {Find=[Correct "solutions L"],
130.1394 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
130.1395 -                      Correct "solveFor x"],Relate=[],
130.1396 -               Where=[False
130.1397 -                     "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
130.1398 -               With=[]})]) : mout
130.1399 -   ML>
130.1400 -   ML> val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
130.1401 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1402 -   val f =
130.1403 -     Problems
130.1404 -       (RefinedKF [Matches #,NoMatch #,NoMatch #,NoMatch #,NoMatch #,Matches #])
130.1405 -     : mout
130.1406 -   ML>
130.1407 -   ML>
130.1408 -   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
130.1409 -   val f =
130.1410 -     Problems
130.1411 -       (RefinedKF
130.1412 -          [Matches
130.1413 -             (["univariate","equation"],
130.1414 -              {Find=[Correct "solutions L"],
130.1415 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
130.1416 -                      Correct "solveFor x"],Relate=[],
130.1417 -               Where=[Correct
130.1418 -               With=[]}),
130.1419 -           NoMatch
130.1420 -             (["linear","univariate","equation"],
130.1421 -              {Find=[Correct "solutions L"],
130.1422 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
130.1423 -                      Correct "solveFor x"],Relate=[],
130.1424 -               Where=[False
130.1425 -                      "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
130.1426 -                  With=[]}),
130.1427 -           NoMatch
130.1428 -             ...
130.1429 -             ...   
130.1430 -           Matches
130.1431 -             (["normalize","univariate","equation"],
130.1432 -              {Find=[Correct "solutions L"],
130.1433 -               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
130.1434 -                      Correct "solveFor x"],Relate=[],Where=[],With=[]})]) : mout
130.1435 -\end{verbatim}}%size
130.1436 -The tactic {\tt Refine\_Problem} returns all matches to problem types along the path traced in the problem hierarchy (anlogously to the authoring tool for refinement in sect.\ref{refine} on p.\pageref{refine}) --- a lot of information to be displayed appropriately in the hiearchy browser~!
130.1437 -
130.1438 -\section{The phase of solving} 
130.1439 -This phase starts by invoking a method, which acchieves the normal form within two tactics, {\tt Rewrite rnorm\_equation\_add} and {\tt Rewrite\_Set SqRoot\_simplify}:
130.1440 -{\footnotesize\begin{verbatim} 
130.1441 -   ML> nxt;
130.1442 -   val it = ("Apply_Method",Apply_Method ("SqRoot.thy","norm_univar_equation"))
130.1443 -     : string * mstep
130.1444 -   ML>
130.1445 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1446 -   val f =
130.1447 -     Form' (FormKF (~1,EdUndef,1,Nundef,"(x + #1) * (x + #2) = x ^^^ #2 + #8"))
130.1448 -   val nxt =
130.1449 -     ("Rewrite", Rewrite
130.1450 -        ("rnorm_equation_add","~ ?b =!= #0 ==> (?a = ?b) = (?a + #-1 * ?b = #0)"))
130.1451 -   ML>
130.1452 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1453 -   val f =
130.1454 -     Form' (FormKF (~1,EdUndef,1,Nundef,
130.1455 -           "(x + #1) * (x + #2) + #-1 * (x ^^^ #2 + #8) = #0")) : mout
130.1456 -   val nxt = ("Rewrite_Set",Rewrite_Set "SqRoot_simplify") : string * mstep
130.1457 -   ML>
130.1458 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1459 -   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"#-6 + #3 * x = #0")) : mout
130.1460 -   val nxt = ("Subproblem",Subproblem ("SqRoot.thy",[#,#])) : string * mstep
130.1461 -\end{verbatim}}%size
130.1462 -Now the normal form {\tt \#-6 + \#3 * x = \#0} is the input to a subproblem, which again allows for specification of the type of equation, and the respective method:
130.1463 -{\footnotesize\begin{verbatim}
130.1464 -   ML> nxt;
130.1465 -   val it = ("Subproblem",Subproblem ("SqRoot.thy",["univariate","equation"]))
130.1466 -   ML>   
130.1467 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1468 -   val f =
130.1469 -     Form' (FormKF
130.1470 -          (~1,EdUndef,1,Nundef,"Subproblem (SqRoot.thy, [univariate, equation])"))
130.1471 -     : mout
130.1472 -   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
130.1473 -   ML>
130.1474 -   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1475 -   val nxt = ("Model_Problem",Model_Problem ["linear","univariate","equation"])
130.1476 -\end{verbatim}}%size
130.1477 -As required, the tactic {\tt Refine ["univariate","equation"]} selects the appropriate type of equation from the problem hierarchy, which can be seen by the tactic {\tt Model\_Problem ["linear","univariate","equation"]} prosed by the system.
130.1478 -
130.1479 -Again the whole phase of modeling and specification follows; we skip it here, and \isac's dialog guide may decide to do so as well.
130.1480 -
130.1481 -
130.1482 -\section{The final phase: check the post-condition}
130.1483 -The type of problems solved by \isac{} are so-called 'example construction problems' as shown above. The most characteristic point of such a problem is the post-condition. The handling of the post-condition in the given context is an open research question.
130.1484 -
130.1485 -Thus the post-condition is just mentioned, in our example for both, the problem and the subproblem:
130.1486 -{\footnotesize\begin{verbatim}
130.1487 -   ML> nxt;
130.1488 -   val it = ("Check_Postcond",Check_Postcond ["linear","univariate","equation"])
130.1489 -   ML>
130.1490 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1491 -   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"[x = #2]")) : mout
130.1492 -   val nxt =
130.1493 -     ("Check_Postcond",Check_Postcond ["normalize","univariate","equation"])
130.1494 -   ML>
130.1495 -   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
130.1496 -   val f = Form' (FormKF (~1,EdUndef,0,Nundef,"[x = #2]")) : mout
130.1497 -   val nxt = ("End_Proof'",End_Proof') : string * mstep
130.1498 -\end{verbatim}}%size
130.1499 -The next tactic proposed by the system, {\tt End\_Proof'} indicates that the proof has finished successfully.\\
130.1500 -
130.1501 -{\it The tactics proposed by the system need {\em not} be followed by the user; the user is free to choose other tactics, and the system will report, if this is applicable at the respective proof state, or not~! The reader may try out~!}
130.1502 -
130.1503 -
130.1504 -
130.1505 -\part{Systematic description}
130.1506 -
130.1507 -
130.1508 -\chapter{The structure of the knowledge base}
130.1509 -
130.1510 -\section{Tactics and data}
130.1511 -First we view the ME from outside, i.e. we regard tactics and relate them to the knowledge base (KB). W.r.t. the KB we address the atomic items which have to be implemented in detail by the authors of the KB
130.1512 -\footnote{Some of these items are fetched by the tactics from intermediate storage within the ME, and not directly from the KB.}
130.1513 -. The items are listed in alphabetical order in Tab.\ref{kb-items} on p.\pageref{kb-items}.
130.1514 -{\begin{table}[h]
130.1515 -\caption{Atomic items of the KB} \label{kb-items}
130.1516 -%\tabcolsep=0.3mm
130.1517 -\begin{center}
130.1518 -\def\arraystretch{1.0}
130.1519 -\begin{tabular}{lp{9.0cm}}
130.1520 -abbrevation & description \\
130.1521 -\hline
130.1522 -&\\
130.1523 -{\it calc\_list}
130.1524 -& associationlist of the evaluation-functions {\it eval\_fn}\\
130.1525 -{\it eval\_fn}
130.1526 -& evaluation-function for numerals and for predicates coded in SML\\
130.1527 -{\it eval\_rls   }
130.1528 -& ruleset {\it rls} for simplifying expressions with {\it eval\_fn}s\\
130.1529 -{\it fmz}
130.1530 -& formalization, i.e. a minimal formula representation of an example \\
130.1531 -{\it met}
130.1532 -& a method, i.e. a datastructure holding all informations for the solving phase ({\it rew\_ord}, {\it scr}, etc.)\\
130.1533 -{\it metID}
130.1534 -& reference to a {\it met}\\
130.1535 -{\it op}
130.1536 -& operator as key to an {\it eval\_fn} in a {\it calc\_list}\\
130.1537 -{\it pbl}
130.1538 -& problem, i.e. a node in the problem-hierarchy\\
130.1539 -{\it pblID}
130.1540 -& reference to a {\it pbl}\\
130.1541 -{\it rew\_ord}
130.1542 -& rewrite-order\\
130.1543 -{\it rls}
130.1544 -& ruleset, i.e. a datastructure holding theorems {\it thm} and operators {\it op} for simplification (with a {\it rew\_ord})\\
130.1545 -{\it Rrls}
130.1546 -& ruleset for 'reverse rewriting' (an \isac-technique generating stepwise rewriting, e.g. for cancelling fractions)\\
130.1547 -{\it scr}
130.1548 -& script describing algorithms by tactics, part of a {\it met} \\
130.1549 -{\it norm\_rls}
130.1550 -& special ruleset calculating a normalform, associated with a {\it thy}\\
130.1551 -{\it spec}
130.1552 -& specification, i.e. a tripel ({\it thyID, pblID, metID})\\
130.1553 -{\it subs}
130.1554 -& substitution, i.e. a list of variable-value-pairs\\
130.1555 -{\it term}
130.1556 -& Isabelle term, i.e. a formula\\
130.1557 -{\it thm}
130.1558 -& theorem\\     
130.1559 -{\it thy}
130.1560 -& theory\\
130.1561 -{\it thyID}
130.1562 -& reference to a {\it thy} \\
130.1563 -\end{tabular}\end{center}\end{table}
130.1564 -}
130.1565 -The relations between tactics and data items are shown in Tab.\ref{tac-kb}on p.\pageref{tac-kb}.
130.1566 -{\def\arraystretch{1.2}
130.1567 -\begin{table}[h]
130.1568 -\caption{Which tactic uses which KB's item~?} \label{tac-kb}
130.1569 -\tabcolsep=0.3mm
130.1570 -\begin{center}
130.1571 -\begin{tabular}{|ll||cccc|ccc|cccc|} \hline
130.1572 -tactic  &input &    &    &    &norm\_&   &rew\_&rls &eval\_&eval\_&calc\_&   \\
130.1573 -        &      &thy &scr &Rrls&rls  &thm &ord  &Rrls&fn    &rls   &list  &dsc\\
130.1574 -\hline\hline
130.1575 -Init\_Proof
130.1576 -        &fmz   & x  &    &    & x   &    &     &    &      &      &      & x \\
130.1577 -        &spec  &    &    &    &     &    &     &    &      &      &      &   \\
130.1578 -\hline
130.1579 -\multicolumn{13}{|l|}{model phase}\\
130.1580 -\hline
130.1581 -Add\_*  &term  & x  &    &    & x   &    &     &    &      &      &      & x \\
130.1582 -FormFK  &model & x  &    &    & x   &    &     &    &      &      &      & x \\
130.1583 -\hline
130.1584 -\multicolumn{13}{|l|}{specify phase}\\
130.1585 -\hline
130.1586 -Specify\_Theory 
130.1587 -        &thyID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
130.1588 -Specify\_Problem 
130.1589 -        &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
130.1590 -Refine\_Problem 
130.1591 -           &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
130.1592 -Specify\_Method 
130.1593 -        &metID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
130.1594 -Apply\_Method 
130.1595 -        &metID & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
130.1596 -\hline
130.1597 -\multicolumn{13}{|l|}{solve phase}\\
130.1598 -\hline
130.1599 -Rewrite,\_Inst 
130.1600 -        &thm   & x  & x  &    &     & x  &met  &    & x    &met   &      &   \\
130.1601 -Rewrite, Detail
130.1602 -        &thm   & x  & x  &    &     & x  &rls  &    & x    &rls   &      &   \\
130.1603 -Rewrite, Detail
130.1604 -        &thm   & x  & x  &    &     & x  &Rrls &    & x    &Rrls  &      &   \\
130.1605 -Rewrite\_Set,\_Inst
130.1606 -        &rls   & x  & x  &    &     &    &     & x  & x    & x    &      &   \\
130.1607 -Calculate  
130.1608 -        &op    & x  & x  &    &     &    &     &    &      &      & x    &   \\
130.1609 -Substitute 
130.1610 -        &subs  & x  &    &    & x   &    &     &    &      &      &      &   \\
130.1611 -        &      &    &    &    &     &    &     &    &      &      &      &   \\
130.1612 -SubProblem 
130.1613 -        &spec  & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
130.1614 -        &fmz   &    &    &    &     &    &     &    &      &      &      &   \\
130.1615 -\hline
130.1616 -\end{tabular}\end{center}\end{table}
130.1617 -}
130.1618 -
130.1619 -\section{\isac's theories}
130.1620 -\isac's theories build upon Isabelles theories for high-order-logic (HOL) up to the respective development of real numbers ({\tt HOL/Real}). Theories have a special format defined in \cite{Isa-ref} and the suffix {\tt *.thy}; usually theories are paired with SML-files having the same filename and the suffix {\tt *.ML}.
130.1621 -
130.1622 -\isac's theories represent the deductive part of \isac's knowledge base, the hierarchy of theories is structured accordingly. The {\tt *.ML}-files, however, contain {\em all} data of the other two axes of the knowledge base, the problems and the methods (without presenting their respective structure, which is done by the problem browser and the method browser, see \ref{pbt}).
130.1623 -
130.1624 -Tab.\ref{theories} on p.\pageref{theories} lists the basic theories planned to be implemented in version \isac.1. We expext the list to be expanded in the near future, actually, have a look to the theory browser~!
130.1625 -
130.1626 -The first three theories in the list do {\em not} belong to \isac's knowledge base; they are concerned with \isac's script-language for methods and listed here for completeness.
130.1627 -{\begin{table}[h]
130.1628 -\caption{Theories in \isac-version I} \label{theories}
130.1629 -%\tabcolsep=0.3mm
130.1630 -\begin{center}
130.1631 -\def\arraystretch{1.0}
130.1632 -\begin{tabular}{lp{9.0cm}}
130.1633 -theory & description \\
130.1634 -\hline
130.1635 -&\\
130.1636 -ListI.thy
130.1637 -& assigns identifiers to the functions defined in {\tt Isabelle2002/src/HOL/List.thy} and (intermediatly~?) defines some more list functions\\
130.1638 -ListI.ML
130.1639 -& {\tt eval\_fn} for the additional list functions\\
130.1640 -Tools.thy
130.1641 -& functions required for the evaluation of scripts\\
130.1642 -Tools.ML
130.1643 -& the respective {\tt eval\_fn}s\\
130.1644 -Script.thy
130.1645 -& prerequisites for scripts: types, tactics, tacticals,\\
130.1646 -Script.ML
130.1647 -& sets of tactics and functions for internal use\\
130.1648 -& \\
130.1649 -\hline
130.1650 -& \\
130.1651 -Typefix.thy
130.1652 -& an intermediate hack for escaping type errors\\
130.1653 -Descript.thy
130.1654 -& {\it description}s for the formulas in {\it model}s and {\it problem}s\\
130.1655 -Atools
130.1656 -& (re-)definition of operators; general predicates and functions for preconditions; theorems for the {\tt eval\_rls}\\
130.1657 -Float
130.1658 -& floating point numerals\\
130.1659 -Equation
130.1660 -& basic notions for equations and equational systems\\
130.1661 -Poly
130.1662 -& polynomials\\
130.1663 -PolyEq
130.1664 -& polynomial equations and equational systems \\
130.1665 -Rational.thy
130.1666 -& additional theorems for rationals\\
130.1667 -Rational.ML
130.1668 -& cancel, add and simplify rationals using (a generalization of) Euclids algorithm; respective reverse rulesets\\
130.1669 -RatEq
130.1670 -& equations on rationals\\
130.1671 -Root
130.1672 -& radicals; calculate normalform; respective reverse rulesets\\
130.1673 -RootEq
130.1674 -& equations on roots\\
130.1675 -RatRootEq
130.1676 -& equations on rationals and roots (i.e. on terms containing both operations)\\
130.1677 -Vect
130.1678 -& vector analysis\\
130.1679 -Trig
130.1680 -& trigonometriy\\
130.1681 -LogExp
130.1682 -& logarithms and exponential functions\\
130.1683 -Calculus
130.1684 -& nonstandard analysis\\
130.1685 -Diff
130.1686 -& differentiation\\
130.1687 -DiffApp
130.1688 -& applications of differentiaten (maxima-minima-problems)\\
130.1689 -Test
130.1690 -& (old) data for the test suite\\
130.1691 -Isac
130.1692 -& collects all \isac-theoris.\\
130.1693 -\end{tabular}\end{center}\end{table}
130.1694 -}
130.1695 -
130.1696 -
130.1697 -\section{Data in {\tt *.thy}- and {\tt *.ML}-files}
130.1698 -As already mentioned, theories come in pairs of {\tt *.thy}- and {\tt *.ML}-files with the same respective filename. How data are distributed between the two files is shown in Tab.\ref{thy-ML} on p.\pageref{thy-ML}.
130.1699 -{\begin{table}[h]
130.1700 -\caption{Data in {\tt *.thy}- and {\tt *.ML}-files} \label{thy-ML}
130.1701 -\tabcolsep=2.0mm
130.1702 -\begin{center}
130.1703 -\def\arraystretch{1.0}
130.1704 -\begin{tabular}{llp{7.7cm}}
130.1705 -file & data & description \\
130.1706 -\hline
130.1707 -& &\\
130.1708 -{\tt *.thy}
130.1709 -& consts 
130.1710 -& operators, predicates, functions, script-names ('{\tt Script} name \dots{\tt arguments}')
130.1711 -\\
130.1712 -& rules  
130.1713 -& theorems: \isac{} uses Isabelles theorems if possible; additional theorems analoguous to such existing in Isabelle get the Isabelle-identifier attached an {\it I}
130.1714 -\\& &\\
130.1715 -{\tt *.ML}
130.1716 -& {\tt theory' :=} 
130.1717 -& the theory defined by the actual {\tt *.thy}-file is made accessible to \isac
130.1718 -\\
130.1719 -& {\tt eval\_fn}
130.1720 -& evaluation function for operators and predicates, coded on the meta-level (SML); the identifier of such a function is a combination of the keyword {\tt eval\_} with the identifier of the function as defined in {\tt *.thy}
130.1721 -\\
130.1722 -& {\tt *\_simplify} 
130.1723 -& the canonical simplifier for the actual theory, i.e. the identifier for this ruleset is a combination of the theories identifier and the keyword {\tt *\_simplify}
130.1724 -\\
130.1725 -& {\tt norm\_rls :=}
130.1726 -& the canonical simplifier {\tt *\_simplify} is stored such that it is accessible for \isac
130.1727 -\\
130.1728 -& {\tt rew\_ord' :=}
130.1729 -& the same for rewrite orders, if needed outside of one particular ruleset
130.1730 -\\
130.1731 -& {\tt ruleset' :=}
130.1732 -& the same for rulesets (ordinary rulesets, reverse rulesets and {\tt eval\_rls})
130.1733 -\\
130.1734 -& {\tt calc\_list :=}
130.1735 -& the same for {\tt eval\_fn}s, if needed outside of one particular ruleset (e.g. for a tactic {\tt Calculate} in a script)
130.1736 -\\
130.1737 -& {\tt store\_pbl}
130.1738 -& problems defined within this {\tt *.ML}-file are made accessible for \isac
130.1739 -\\
130.1740 -& {\tt methods :=}
130.1741 -& methods defined within this {\tt *.ML}-file are made accessible for \isac
130.1742 -\\
130.1743 -\end{tabular}\end{center}\end{table}
130.1744 -}
130.1745 -The order of the data-items within the theories should adhere to the order given in this list.
130.1746 -
130.1747 -\section{Formal description of the problem-hierarchy}
130.1748 -%for Richard Lang
130.1749 -
130.1750 -\section{Script tactics}
130.1751 -The tactics actually promote the calculation: they construct the prooftree behind the scenes, and they are the points during evaluation where the script-interpreter transfers control to the user. Here we only describe the sytax of the tactics; the semantics is described on p.\pageref{user-tactics} below in context with the tactics the student uses ('user-tactics'): there is a 1-to-1 correspondence between user-tactics and script-tactics.
130.1752 -
130.1753 -
130.1754 -
130.1755 -
130.1756 -
130.1757 -\part{Authoring on the knowledge}
130.1758 -
130.1759 -
130.1760 -\section{Add a theorem}
130.1761 -\section{Define and add a problem}
130.1762 -\section{Define and add a predicate}
130.1763 -\section{Define and add a method}
130.1764 -\section{}
130.1765 -\section{}
130.1766 -\section{}
130.1767 -\section{}
130.1768 -
130.1769 -
130.1770 -
130.1771 -\newpage
130.1772 -\bibliography{bib/isac,bib/from-theses}
130.1773 -
130.1774 -\end{document}
130.1775 \ No newline at end of file
   131.1 --- a/src/Doc/isac/mat-eng.sml	Mon Sep 16 12:27:20 2013 +0200
   131.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   131.3 @@ -1,519 +0,0 @@
   131.4 -(* cut and paste for math.tex
   131.5 -*)
   131.6 -
   131.7 -(*2.2. *)
   131.8 -"a + b * 3";
   131.9 -str2term "a + b * 3";
  131.10 -val term = str2term "a + b * 3";
  131.11 -atomt term;
  131.12 -atomty term;
  131.13 -
  131.14 -(*2.3. Theories and parsing*)
  131.15 -
  131.16 - > Isac.thy;
  131.17 -val it =
  131.18 -   {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
  131.19 -     Sum_Type, Relation, Record, Inductive, Transitive_Closure,
  131.20 -     Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
  131.21 -     SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
  131.22 -     Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
  131.23 -     IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
  131.24 -     Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
  131.25 -     RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
  131.26 -     Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
  131.27 -     Float, ComplexI, Descript, Atools, Simplify, Poly, Rational, PolyMinus,
  131.28 -     Equation, LinEq, Root, RootEq, RatEq, RootRat, RootRatEq, PolyEq, Vect,
  131.29 -     Calculus, Trig, LogExp, Diff, DiffApp, Integrate, EqSystem, Biegelinie,
  131.30 -     AlgEin, Test, Isac} : Theory.theory
  131.31 -
  131.32 -Group.thy
  131.33 -suche nach '*' Link: http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/HOL/Groups.html
  131.34 -locale semigroup =
  131.35 -  fixes f :: "'a => 'a => 'a" (infixl "*" 70)
  131.36 -  assumes assoc [ac_simps]: "a * b * c = a * (b * c)"
  131.37 -
  131.38 -> parse;
  131.39 -val it = fn : Theory.theory -> string -> Thm.cterm Library.option
  131.40 -
  131.41 -
  131.42 -
  131.43 -> (*-1-*);
  131.44 -> parse HOL.thy "2^^^3";
  131.45 -*** Inner lexical error at: "^^^3"
  131.46 -val it = None : Thm.cterm Library.option
  131.47 -> (*-2-*);
  131.48 -> parse HOL.thy "d_d x (a + x)";
  131.49 -val it = None : Thm.cterm Library.option
  131.50 -> (*-3-*);
  131.51 -> parse Rational.thy "2^^^3";
  131.52 -val it = Some "2 ^^^ 3" : Thm.cterm Library.option
  131.53 -> (*-4-*);
  131.54 -val Some t4 = parse Rational.thy "d_d x (a + x)";
  131.55 -val t4 = "d_d x (a + x)" : Thm.cterm
  131.56 -> (*-5-*);
  131.57 -val Some t5 = parse Diff.thy  "d_d x (a + x)";
  131.58 -val t5 = "d_d x (a + x)" : Thm.cterm
  131.59 -
  131.60 -
  131.61 -> term_of;
  131.62 -val it = fn : Thm.cterm -> Term.term
  131.63 -> term_of t4;
  131.64 -val it =
  131.65 -   Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
  131.66 -         Free ("x", "RealDef.real") $
  131.67 -      (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
  131.68 -            Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
  131.69 -: Term.term
  131.70 -> term_of t5;
  131.71 -val it =
  131.72 -   Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
  131.73 -         Free ("x", "RealDef.real") $
  131.74 -      (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
  131.75 -            Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
  131.76 -: Term.term
  131.77 -
  131.78 -> print_depth;
  131.79 -val it = fn : int -> unit
  131.80 -
  131.81 -
  131.82 -
  131.83 -
  131.84 -
  131.85 -> (*-4-*) val thy = Rational.thy;
  131.86 -val thy =
  131.87 -   {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
  131.88 -     Sum_Type, Relation, Record, Inductive, Transitive_Closure,
  131.89 -     Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
  131.90 -     SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
  131.91 -     Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
  131.92 -     IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
  131.93 -     Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
  131.94 -     RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
  131.95 -     Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
  131.96 -     Float, ComplexI, Descript, Atools, Simplify, Poly, Rational}
  131.97 -: Theory.theory
  131.98 -> ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
  131.99 -
 131.100 -***
 131.101 -*** Free (d_d, [real, real] => real)
 131.102 -*** . Free (x, real)
 131.103 -*** . Const (op +, [real, real] => real)
 131.104 -*** . . Free (a, real)
 131.105 -*** . . Free (x, real)
 131.106 -***
 131.107 -
 131.108 -val it = () : unit
 131.109 -> (*-5-*) val thy = Diff.thy;
 131.110 -val thy =
 131.111 -   {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
 131.112 -     Sum_Type, Relation, Record, Inductive, Transitive_Closure,
 131.113 -     Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
 131.114 -     SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
 131.115 -     Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
 131.116 -     IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
 131.117 -     Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
 131.118 -     RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
 131.119 -     Ring_and_Field, Complex_Numbers, Real, Calculus, Trig, ListG, Tools,
 131.120 -     Script, Typefix, Float, ComplexI, Descript, Atools, Simplify, Poly,
 131.121 -     Equation, LinEq, Root, RootEq, Rational, RatEq, RootRat, RootRatEq,
 131.122 -     PolyEq, LogExp, Diff} : Theory.theory
 131.123 -
 131.124 -> ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
 131.125 -
 131.126 -***
 131.127 -*** Const (Diff.d_d, [real, real] => real)
 131.128 -*** . Free (x, real)
 131.129 -*** . Const (op +, [real, real] => real)
 131.130 -*** . . Free (a, real)
 131.131 -*** . . Free (x, real)
 131.132 -***
 131.133 -
 131.134 -val it = () : unit
 131.135 -
 131.136 -
 131.137 -
 131.138 -> print_depth 1;
 131.139 -val it = () : unit
 131.140 -> term_of t4;
 131.141 -val it =
 131.142 -   Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $ ...
 131.143 -: Term.term
 131.144 -
 131.145 -
 131.146 -> print_depth 1;
 131.147 -val it = () : unit
 131.148 -> term_of t5;
 131.149 -val it =
 131.150 -   Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
 131.151 -      ... : Term.term
 131.152 -
 131.153 -
 131.154 -
 131.155 --------------------------------------------ALT...
 131.156 -explode it;
 131.157 -	  \footnote{
 131.158 -	  print_depth 9;
 131.159 -	  explode "a + b * 3";
 131.160 -	  }
 131.161 -
 131.162 -(*unschoen*)
 131.163 -
 131.164 --------------------------------------------ALT...
 131.165 - HOL.thy;
 131.166 - parse;
 131.167 - parse thy "a + b * 3";
 131.168 - val t = (term_of o the) it;
 131.169 - term_of;
 131.170 -
 131.171 -(*2.3. Displaying terms*)
 131.172 - print_depth;
 131.173 - ////Compiler.Control.Print.printDepth;
 131.174 -? Compiler.Control.Print.printDepth:= 2;
 131.175 - t;
 131.176 - ?Compiler.Control.Print.printDepth:= 6;
 131.177 - t;
 131.178 - ?Compiler.Control.Print.printLength;
 131.179 - ?Compiler.Control.Print.stringDepth;
 131.180 - atomt;
 131.181 - atomt t; 
 131.182 - atomty;
 131.183 - atomty thy t;
 131.184 -(*Give it a try: the mathematics knowledge grows*)
 131.185 - parse HOL.thy "2^^^3";
 131.186 - parse HOL.thy "d_d x (a + x)";
 131.187 - ?parse RatArith.thy "#2^^^#3";
 131.188 - ?parse RatArith.thy "d_d x (a + x)";
 131.189 - parse Differentiate.thy "d_d x (a + x)";
 131.190 - ?parse Differentiate.thy "#2^^^#3";
 131.191 -(*don't trust the string representation*)
 131.192 - ?val thy = RatArith.thy;
 131.193 - ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
 131.194 - ?val thy = Differentiate.thy;
 131.195 - ((atomty thy) o term_of o the o (parse thy)) "d_d x (a + x)";
 131.196 -
 131.197 -(*2.4. Converting terms*)
 131.198 - term_of;
 131.199 - the;
 131.200 - val t = (term_of o the o (parse thy)) "a + b * 3";
 131.201 -
 131.202 - sign_of;
 131.203 - cterm_of;
 131.204 - val ct = cterm_of (sign_of thy) t;
 131.205 -
 131.206 - Sign.string_of_term;
 131.207 - Sign.string_of_term (sign_of thy) t;
 131.208 -
 131.209 - string_of_cterm;
 131.210 - string_of_cterm ct;
 131.211 -
 131.212 -(*2.5. Theorems *)
 131.213 - ?theorem' := overwritel (!theorem',
 131.214 -  [("diff_const",num_str diff_const)
 131.215 -   ]);
 131.216 -
 131.217 -(** 3. Rewriting **)
 131.218 -(*3.1. The arguments for rewriting*)
 131.219 - HOL.thy;
 131.220 - "HOL.thy" : theory';
 131.221 - sqrt_right;
 131.222 - "sqrt_right" : rew_ord';
 131.223 - eval_rls;
 131.224 - "eval_rls" : rls';
 131.225 - diff_sum;
 131.226 - ("diff_sum", "") : thm';
 131.227 -
 131.228 -(*3.2. The functions for rewriting*)
 131.229 - rewrite_;
 131.230 - rewrite;
 131.231 -
 131.232 -> val thy' = "Diff.thy";
 131.233 -val thy' = "Diff.thy" : string
 131.234 -> val ct = "d_d x (a * 3 + b)";
 131.235 -val ct = "d_d x (a * 3 + b)" : string
 131.236 -> val thm = ("diff_sum","");
 131.237 -val thm = ("diff_sum", "") : string * string
 131.238 -> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
 131.239 -                     [("bdv","x::real")] thm ct;
 131.240 -val ct = "d_d x (a * 3) + d_d x b" : cterm'
 131.241 -> val thm = ("diff_prod_const","");
 131.242 -val thm = ("diff_prod_const", "") : string * string
 131.243 -> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
 131.244 -                     [("bdv","x::real")] thm ct;
 131.245 -val ct = "a * d_d x 3 + d_d x b" : cterm'
 131.246 -
 131.247 -
 131.248 -
 131.249 -> val thy' = "Diff.thy";
 131.250 -val thy' = "Diff.thy" : string
 131.251 -> val ct = "d_d x (a + a * (2 + b))";
 131.252 -val ct = "d_d x (a + a * (2 + b))" : string
 131.253 -> val thm = ("diff_sum","");
 131.254 -val thm = ("diff_sum", "") : string * string
 131.255 -> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
 131.256 -                     [("bdv","x::real")] thm ct;
 131.257 -val ct = "d_d x a + d_d x (a * (2 + b))" : cterm'
 131.258 -
 131.259 -> val thm = ("diff_prod_const","");
 131.260 -val thm = ("diff_prod_const", "") : string * string
 131.261 -> val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
 131.262 -                     [("bdv","x::real")] thm ct;
 131.263 -val ct = "d_d x a + a * d_d x (2 + b)" : cterm'
 131.264 -
 131.265 -
 131.266 -
 131.267 -(*Give it a try: rewriting*)
 131.268 - val thy' = "Diff.thy";
 131.269 - val ct = "d_d x (x ^^^ 2 + 3 * x + 4)";
 131.270 - val thm = ("diff_sum","");
 131.271 - val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true [("bdv","x::real")] thm ct;
 131.272 - val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true  [("bdv","x::real")] thm ct;
 131.273 - val thm = ("diff_prod_const","");
 131.274 - val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true [("bdv","x::real")] thm ct;
 131.275 -(*Give it a try: conditional rewriting*)
 131.276 - val thy' = "Isac.thy";
 131.277 - val ct' = "3 * a + 2 * (a + 1)";
 131.278 - val thm' = ("radd_mult_distrib2","?k * (?m + ?n) = ?k * ?m + ?k * ?n");
 131.279 - (*1*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.280 - val thm' = ("radd_assoc_RS_sym","?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1");
 131.281 - ?(*2*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.282 - ?val thm' = ("rcollect_right",
 131.283 -     "[| ?l is_const; ?m is_const |] ==> ?l * ?n + ?m * ?n = (?l + ?m) * ?n");
 131.284 - ?(*3*) val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.285 - ?(*4*) val Some (ct',_) = calculate thy' "plus" ct';
 131.286 - ?(*5*) val Some (ct',_) = calculate thy' "times" ct';
 131.287 -
 131.288 -(*Give it a try: functional programming*)
 131.289 - val thy' = "InsSort.thy";
 131.290 - val ct = "sort [#1,#3,#2]" : cterm';
 131.291 -
 131.292 - val thm = ("sort_def","");
 131.293 - ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 131.294 -
 131.295 - val thm = ("foldr_rec","");
 131.296 - ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 131.297 -
 131.298 - val thm = ("ins_base","");
 131.299 - ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 131.300 -
 131.301 - val thm = ("foldr_rec","");
 131.302 - ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 131.303 -
 131.304 - val thm = ("ins_rec","");
 131.305 - ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 131.306 -
 131.307 - ?val (ct,_) = the (calculate thy' "le" ct);
 131.308 -
 131.309 - val thm = ("if_True","(if True then ?x else ?y) = ?x");
 131.310 - ?val (ct,_) = the (rewrite thy' "tless_true" "eval_rls" false thm ct);
 131.311 -
 131.312 -(*3.3. Variants of rewriting*)
 131.313 - rewrite_inst_;
 131.314 - rewrite_inst;
 131.315 -
 131.316 - rewrite_set_;
 131.317 - rewrite_set;
 131.318 -
 131.319 - rewrite_set_inst_;
 131.320 - rewrite_set_inst;
 131.321 -
 131.322 - toggle;
 131.323 - toggle trace_rewrite;
 131.324 -
 131.325 -(*3.4. Rule sets*)
 131.326 - sym;
 131.327 - rearrange_assoc;
 131.328 -
 131.329 -(*Give it a try: remove parentheses*)
 131.330 - ?val ct = (string_of_cterm o the o (parse RatArith.thy))
 131.331 -           "a + (b * (c * d) + e)";
 131.332 - ?rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
 131.333 -
 131.334 - toggle trace_rewrite;
 131.335 - ?rewrite_set "RatArith.thy" "eval_rls" false "rearrange_assoc" ct;
 131.336 -
 131.337 -(*3.5. Calculate numeric constants*)
 131.338 - calculate;
 131.339 - calculate_;
 131.340 -
 131.341 - ?calc_list;
 131.342 - ?calculate "Isac.thy" "plus" "#1 + #2";
 131.343 - ?calculate "Isac.thy" "times" "#2 * #3";
 131.344 - ?calculate "Isac.thy" "power" "#2 ^^^ #3";
 131.345 - ?calculate "Isac.thy" "cancel_" "#9 // #12";
 131.346 -   
 131.347 -
 131.348 -(** 4. Term orders **)
 131.349 -(*4.1. Exmpales for term orders*)
 131.350 - sqrt_right;
 131.351 - tless_true;
 131.352 -
 131.353 - val t1 = (term_of o the o (parse thy)) "(sqrt a) + b";
 131.354 - val t2 = (term_of o the o (parse thy)) "b + (sqrt a)";
 131.355 - ?sqrt_right false SqRoot.thy (t1, t2);
 131.356 - ?sqrt_right false SqRoot.thy (t2, t1);
 131.357 -
 131.358 - val t1 = (term_of o the o (parse thy)) "a + b*(sqrt c) + d";
 131.359 - val t2 = (term_of o the o (parse thy)) "a + (sqrt b)*c + d";
 131.360 - ?sqrt_right true SqRoot.thy (t1, t2);
 131.361 -
 131.362 -(*4.2. Ordered rewriting*)   
 131.363 - ac_plus_times;
 131.364 -
 131.365 -(*Give it a try: polynomial (normal) form*)
 131.366 - val ct' = "#3 * a + b + #2 * a";
 131.367 - val thm' = ("radd_commute","") : thm';
 131.368 - ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.369 - val thm' = ("rdistr_right_assoc_p","") : thm';
 131.370 - ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.371 - ?val Some (ct',_) = calculate thy' "plus" ct';
 131.372 -
 131.373 - val ct' = "3 * a + b + 2 * a" : cterm';
 131.374 - val thm' = ("radd_commute","") : thm';
 131.375 - ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.376 - ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.377 - ?val Some (ct',_) = rewrite thy' "tless_true" "eval_rls" true thm' ct';
 131.378 -
 131.379 - toggle trace_rewrite;
 131.380 - ?rewrite_set "RatArith.thy" "eval_rls" false "ac_plus_times" ct;
 131.381 -
 131.382 -
 131.383 -(** 5. The hierarchy of problem types **)
 131.384 -(*5.1. The standard-function for 'matching'*)
 131.385 - matches;
 131.386 -
 131.387 - val t = (term_of o the o (parse thy)) "3 * x^^^2 = 1";
 131.388 - val p = (term_of o the o (parse thy)) "a * b^^^2 = c";
 131.389 - atomt p;
 131.390 - free2var;
 131.391 - val pat = free2var p;
 131.392 - matches thy t pat;
 131.393 -
 131.394 - val t2 = (term_of o the o (parse thy)) "x^^^2 = 1";
 131.395 - matches thy t2 pat;
 131.396 -
 131.397 - val pat2 = (term_of o the o (parse thy)) "?u^^^2 = ?v";
 131.398 - matches thy t2 pat2;
 131.399 -
 131.400 -(*5.2. Accessing the hierarchy*)
 131.401 - show_ptyps;
 131.402 - show_ptyps();
 131.403 - get_pbt;
 131.404 - ?get_pbt ["squareroot", "univariate", "equation"];
 131.405 -
 131.406 - store_pbt;
 131.407 - ?store_pbt
 131.408 -    (prep_pbt SqRoot.thy
 131.409 -    (["newtype","univariate","equation"],
 131.410 -     [("#Given" ,["equality e_","solveFor v_","errorBound err_"]),
 131.411 -      ("#Where" ,["contains_root (e_::bool)"]),
 131.412 -      ("#Find"  ,["solutions v_i_"])
 131.413 -     ],
 131.414 -     [("SqRoot.thy","square_equation")]));
 131.415 - show_ptyps();
 131.416 -
 131.417 -(*5.3. Internals of the datastructure*)
 131.418 -(*5.4. Match a problem with a problem type*)
 131.419 - ?val fmz = ["equality (#1 + #2 * x = #0)",
 131.420 - 	    "solveFor x",
 131.421 - 	    "solutions L"] : fmz;
 131.422 - match_pbl;
 131.423 - ?match_pbl fmz (get_pbt ["univariate","equation"]);
 131.424 - ?match_pbl fmz (get_pbt ["linear","univariate","equation"]);
 131.425 - ?match_pbl fmz (get_pbt ["squareroot","univariate","equation"]);
 131.426 -
 131.427 -(*5.5. Refine a problem specification *)
 131.428 - refine;
 131.429 - ?val fmz = ["equality (sqrt(#9+#4*x)=sqrt x + sqrt(#5+x))",
 131.430 - 	    "solveFor x","errorBound (eps=#0)",
 131.431 - 	    "solutions L"];
 131.432 - ?refine fmz ["univariate","equation"];
 131.433 -
 131.434 - ?val fmz = ["equality (x+#1=#2)",
 131.435 - 	    "solveFor x","errorBound (eps=#0)",
 131.436 - 	    "solutions L"];
 131.437 - ?refine fmz ["univariate","equation"];
 131.438 - 
 131.439 -
 131.440 -(* 6. Do a calculational proof *)
 131.441 - ?val fmz = ["equality ((x+#1) * (x+#2) = x^^^#2+#8)","solveFor x",
 131.442 - 	    "errorBound (eps=#0)","solutions L"];
 131.443 - val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
 131.444 - 				("SqRoot.thy","no_met"));
 131.445 - 
 131.446 -(*6.1. Initialize the calculation*)
 131.447 - val p = e_pos'; val c = [];
 131.448 - ?val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
 131.449 - ?val (p,_,f,nxt,_,pt) = me (mID,m) p c EmptyPtree;
 131.450 -
 131.451 - ?Compiler.Control.Print.printDepth:=8;
 131.452 - ?f;
 131.453 - ?Compiler.Control.Print.printDepth:=4;
 131.454 -
 131.455 - ?nxt;
 131.456 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.457 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.458 -
 131.459 -(*6.2. The phase of modeling*)
 131.460 - ?nxt;
 131.461 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.462 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.463 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.464 -
 131.465 - ?Compiler.Control.Print.printDepth:=8;
 131.466 - ?f;
 131.467 - ?Compiler.Control.Print.printDepth:=4;
 131.468 -
 131.469 -(*6.3. The phase of specification*)
 131.470 - ?nxt;
 131.471 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.472 -
 131.473 -
 131.474 - val nxt = ("Specify_Problem",
 131.475 -	    Specify_Problem ["polynomial","univariate","equation"]);
 131.476 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.477 -
 131.478 - val nxt = ("Specify_Problem",
 131.479 -	    Specify_Problem ["linear","univariate","equation"]);
 131.480 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.481 - ?Compiler.Control.Print.printDepth:=8;f;Compiler.Control.Print.printDepth:=4;
 131.482 -
 131.483 - val nxt = ("Refine_Problem",
 131.484 -	    Refine_Problem ["linear","univariate","equation"]);
 131.485 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.486 - ?Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
 131.487 -
 131.488 - val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
 131.489 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.490 - ?Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
 131.491 -
 131.492 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.493 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.494 -
 131.495 -(*6.4. The phase of solving*)
 131.496 - nxt;
 131.497 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.498 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.499 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.500 -
 131.501 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.502 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.503 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.504 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.505 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.506 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.507 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.508 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.509 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.510 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.511 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.512 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.513 -
 131.514 -(*6.5. The final phase: check the postcondition*)
 131.515 - ?val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.516 - val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
 131.517 -
 131.518 -
 131.519 -
 131.520 -
 131.521 -
 131.522 -
   132.1 --- a/src/Doc/isac/mlehnfeld/bib.bib	Mon Sep 16 12:27:20 2013 +0200
   132.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   132.3 @@ -1,26 +0,0 @@
   132.4 -@Book{Nipkow-Paulson-Wenzel:2002,
   132.5 -  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
   132.6 -  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
   132.7 -  publisher	= {Springer},
   132.8 -  series	= {LNCS},
   132.9 -  volume	= 2283,
  132.10 -  year		= 2002}
  132.11 -
  132.12 -@Article{plmms10,
  132.13 -  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
  132.14 -  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
  132.15 -  journal = 	 {ACM Communications in Computer Algebra},
  132.16 -  year = 	 {2010},
  132.17 -  volume = 	 {44},
  132.18 -  number = 	 {1/2},
  132.19 -  pages = 	 {27-41},
  132.20 -  doi =          {10.1145/1838599.1838621}
  132.21 -}
  132.22 -
  132.23 -@Manual{isar-impl,
  132.24 -  title = 	 {The {Isabelle/Isar} Implementation},
  132.25 -  author = 	 {Makarius Wenzel},
  132.26 -  month = 	 {30 January},
  132.27 -  year = 	 {2011},
  132.28 -  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
  132.29 -}
   133.1 Binary file src/Doc/isac/mlehnfeld/overview.odg has changed
   134.1 --- a/src/Doc/isac/mlehnfeld/presentation.tex	Mon Sep 16 12:27:20 2013 +0200
   134.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   134.3 @@ -1,469 +0,0 @@
   134.4 -% $Header: /cvsroot/latex-beamer/latex-beamer/solutions/conference-talks/conference-ornate-20min.en.tex,v 1.7 2007/01/28 20:48:23 tantau Exp $
   134.5 -
   134.6 -\documentclass{beamer}
   134.7 -
   134.8 -% This file is a solution template for:
   134.9 -
  134.10 -% - Talk at a conference/colloquium.
  134.11 -% - Talk length is about 20min.
  134.12 -% - Style is ornate.
  134.13 -
  134.14 -
  134.15 -
  134.16 -% Copyright 2004 by Till Tantau <tantau@users.sourceforge.net>.
  134.17 -%
  134.18 -% In principle, this file can be redistributed and/or modified under
  134.19 -% the terms of the GNU Public License, version 2.
  134.20 -%
  134.21 -% However, this file is supposed to be a template to be modified
  134.22 -% for your own needs. For this reason, if you use this file as a
  134.23 -% template and not specifically distribute it as part of a another
  134.24 -% package/program, I grant the extra permission to freely copy and
  134.25 -% modify this file as you see fit and even to delete this copyright
  134.26 -% notice.
  134.27 -
  134.28 -
  134.29 -\mode<presentation>
  134.30 -{
  134.31 -  \usetheme{Hannover}
  134.32 -  % or ...
  134.33 -
  134.34 -  \setbeamercovered{transparent}
  134.35 -  % or whatever (possibly just delete it)
  134.36 -}
  134.37 -
  134.38 -%\usepackage{setspace} %for "\begin{onehalfspace}"
  134.39 -\usepackage[english]{babel}
  134.40 -% or whatever
  134.41 -
  134.42 -\usepackage[utf8]{inputenc}
  134.43 -% or whatever
  134.44 -
  134.45 -\usepackage{times}
  134.46 -\usepackage[T1]{fontenc}
  134.47 -% Or whatever. Note that the encoding and the font should match. If T1
  134.48 -% does not look nice, try deleting the line with the fontenc.
  134.49 -
  134.50 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  134.51 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  134.52 -
  134.53 -\title[\isac: Computation \& Deduction] % (optional, use only with long paper titles)
  134.54 -{Integrating Computation and Deduction\\
  134.55 -  in the \isac-System}
  134.56 -
  134.57 -\subtitle{Projektpraktikum: Introducing Isabelle's Contexts}
  134.58 -
  134.59 -\author[Lehnfeld] % (optional, use only with lots of authors)
  134.60 -{Mathias~Lehnfeld}
  134.61 -% - Give the names in the same order as the appear in the paper.
  134.62 -% - Use the \inst{?} command only if the authors have different
  134.63 -%   affiliation.
  134.64 -
  134.65 -\institute % (optional, but mostly needed)
  134.66 -{
  134.67 -  Vienna University of Technology\\
  134.68 -  Institute of Computer Languages
  134.69 -}
  134.70 -% - Use the \inst command only if there are several affiliations.
  134.71 -% - Keep it simple, no one is interested in your street address.
  134.72 -
  134.73 -% \date[CFP 2003] % (optional, should be abbreviation of conference name)
  134.74 -% {Conference on Fabulous Presentations, 2003}
  134.75 -% - Either use conference name or its abbreviation.
  134.76 -% - Not really informative to the audience, more for people (including
  134.77 -%   yourself) who are reading the slides online
  134.78 -
  134.79 -% \subject{Theoretical Computer Science}
  134.80 -% This is only inserted into the PDF information catalog. Can be left
  134.81 -% out.
  134.82 -
  134.83 -
  134.84 -
  134.85 -% If you have a file called "university-logo-filename.xxx", where xxx
  134.86 -% is a graphic format that can be processed by latex or pdflatex,
  134.87 -% resp., then you can add a logo as follows:
  134.88 -
  134.89 -% \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename}
  134.90 -% \logo{\pgfuseimage{university-logo}}
  134.91 -
  134.92 -
  134.93 -
  134.94 -% Delete this, if you do not want the table of contents to pop up at
  134.95 -% the beginning of each subsection:
  134.96 -\AtBeginSubsection[]
  134.97 -{
  134.98 -  \begin{frame}<beamer>{Outline}
  134.99 -    \tableofcontents[currentsection,currentsubsection]
 134.100 -  \end{frame}
 134.101 -}
 134.102 -
 134.103 -
 134.104 -% If you wish to uncover everything in a step-wise fashion, uncomment
 134.105 -% the following command:
 134.106 -
 134.107 -%\beamerdefaultoverlayspecification{<+->}
 134.108 -
 134.109 -
 134.110 -\begin{document}
 134.111 -
 134.112 -\begin{frame}
 134.113 -  \titlepage
 134.114 -\end{frame}
 134.115 -
 134.116 -\begin{frame}{Outline}
 134.117 -  \tableofcontents
 134.118 -  % You might wish to add the option [pausesections]
 134.119 -\end{frame}
 134.120 -
 134.121 -
 134.122 -% Structuring a talk is a difficult task and the following structure
 134.123 -% may not be suitable. Here are some rules that apply for this
 134.124 -% solution:
 134.125 -
 134.126 -% - Exactly two or three sections (other than the summary).
 134.127 -% - At *most* three subsections per section.
 134.128 -% - Talk about 30s to 2min per frame. So there should be between about
 134.129 -%   15 and 30 frames, all told.
 134.130 -
 134.131 -% - A conference audience is likely to know very little of what you
 134.132 -%   are going to talk about. So *simplify*!
 134.133 -% - In a 20min talk, getting the main ideas across is hard
 134.134 -%   enough. Leave out details, even if it means being less precise than
 134.135 -%   you think necessary.
 134.136 -% - If you omit details that are vital to the proof/implementation,
 134.137 -%   just say so once. Everybody will be happy with that.
 134.138 -
 134.139 -\section[Introduction]{Introduction: Isabelle and \isac}
 134.140 -%\subsection[Isabelle \& \isac]{Isabelle and \isac}
 134.141 -\begin{frame}
 134.142 -  \frametitle{Isabelle and \isac}
 134.143 -The task of this ``Projektpraktikum'' (6 ECTS) was to
 134.144 -\begin{itemize}
 134.145 -\item study the concept of ``context'' in the theorem prover \textbf{Isabelle} from TU Munich
 134.146 -\item study basic concepts of the math assistant \sisac{} from TU Graz
 134.147 -\pause
 134.148 -\item redesign \sisac{} with respect to contexts
 134.149 -  \begin{itemize}
 134.150 -  \item use contexts for type inference of user input
 134.151 -  \item handle preconditions of specifications
 134.152 -  \item clarify the transfer of context data from sub-programs to the calling program
 134.153 -  \end{itemize}
 134.154 -\pause
 134.155 -\item introduce contexts to \sisac{} according to the new design
 134.156 -\item use the coding standards of Isabelle2011 for new code.
 134.157 -\end{itemize}
 134.158 -\end{frame}
 134.159 -
 134.160 -%\subsection[Computation \& Deduction]{Computation and Deduction in a Lucas-Interpreter}
 134.161 -\begin{frame}
 134.162 -  \frametitle{Computation and Deduction in a Lucas-Interpreter}
 134.163 -    \includegraphics[width=100mm]{overview.pdf}
 134.164 -\end{frame}
 134.165 -
 134.166 -\section[Contributions]{Contributions of the project to \isac}
 134.167 -\subsection[Contexts]{Isabelle's Contexts, advantages and use}
 134.168 -\begin{frame}
 134.169 -  \frametitle{Advantages of Isabelle's Contexts}
 134.170 -Isabelle's context replaced theories because \dots:
 134.171 -\begin{itemize}
 134.172 -\item theories are static containers of \textit{all} logical data
 134.173 -\item contexts are \textit{dynamic} containers of logical data:
 134.174 -  \begin{itemize}
 134.175 -  \item functions for storing and retrieving various logical data
 134.176 -  \item functions for type inference
 134.177 -  \item provide data for Isabelle's automated provers
 134.178 -  \end{itemize}
 134.179 -%\item e.g. theories have no direct functions for type inference
 134.180 -%\item replace function \texttt{parseNEW}
 134.181 -%\item assumptions \& environment $\rightarrow$ context
 134.182 -\item allow to conform with scopes for subprograms.
 134.183 -\end{itemize}
 134.184 -\end{frame}
 134.185 -
 134.186 -\begin{frame}
 134.187 -  \frametitle{Isabelle's context mechanism}
 134.188 -    \texttt{\small{
 134.189 -      \begin{tabbing}
 134.190 -xx\=xx\=in\=\kill
 134.191 -%xx\=xx\=xx\=xx\=\kill
 134.192 -%datatype Isac\_Ctxt =\\
 134.193 -%\>\>Env of term * term\\
 134.194 -%\>| Asm of term;\\
 134.195 -%\\
 134.196 -structure ContextData =  \alert{Proof\_Data}\\
 134.197 -\>~(\alert{type T} = term list\\
 134.198 -\>\>\alert{fun init \_} = []);\\
 134.199 -\\
 134.200 -%local\\
 134.201 -%\>fun insert\_ctxt data = ContextData\alert{.map} (fn xs => distinct (data@xs));\\
 134.202 -%in\\
 134.203 -%\>fun insert\_assumptions asms = map (fn t => Asm t) asms |> insert\_ctxt;\\
 134.204 -%\>fun insert\_environments envs = map (fn t => Env t) envs |> insert\_ctxt;\\
 134.205 -%end\\
 134.206 -fun insert\_assumptions asms = \\
 134.207 -\>\>\>ContextData\alert{.map} (fn xs => distinct (asms@xs));\\
 134.208 -\\
 134.209 -%local\\
 134.210 -%\>fun unpack\_asms (Asm t::ts) = t::(unpack\_asms ts)\\
 134.211 -%\>\>| unpack\_asms (Env \_::ts) = unpack\_asms ts\\
 134.212 -%\>\>| unpack\_asms [] = [];\\
 134.213 -%\>fun unpack\_envs (Env t::ts) = t::(unpack\_envs ts)\\
 134.214 -%\>\>| unpack\_envs (Asm \_::ts) = unpack\_envs ts\\
 134.215 -%\>\>| unpack\_envs [] = [];\\
 134.216 -%in\\
 134.217 -%\>fun get\_assumptions ctxt = ContextData.get ctxt |> unpack\_asms;\\
 134.218 -%\>fun get\_environments ctxt = ContextData.get ctxt |> unpack\_envs;\\
 134.219 -%end
 134.220 -fun get\_assumptions ctxt = ContextData\alert{.get} ctxt;\\
 134.221 -\\
 134.222 -\\
 134.223 -val declare\_constraints : \\
 134.224 -\>\>\>term -> Proof.context -> Proof.context
 134.225 -      \end{tabbing}
 134.226 -    }}
 134.227 -\end{frame}
 134.228 -
 134.229 -\begin{frame}
 134.230 -  \frametitle{Usage of Contexts}
 134.231 -    \texttt{\footnotesize{
 134.232 -      \begin{tabbing}
 134.233 -xx\=xx\=xx\=xx\=xx\=\kill
 134.234 -fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
 134.235 -\>  let\\
 134.236 -\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
 134.237 -\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
 134.238 -\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
 134.239 -\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
 134.240 -\>\>\>\>\>         then transfer fas to\_ctxt\\
 134.241 -\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
 134.242 -\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
 134.243 -\\
 134.244 -fun parse thy str =\\
 134.245 -\>(let val t = (\alert{typ\_a2real} o numbers\_to\_string)\\
 134.246 -\>\>\>\>(\alert{Syntax.read\_term\_global thy} str)\\
 134.247 -\>\>in SOME (cterm\_of thy t) end)\\
 134.248 -\>\>\>handle \_ => NONE;\\
 134.249 -\\
 134.250 -fun parseNEW ctxt str = \\
 134.251 -\>\>\>SOME (\alert{Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
 134.252 -\>\>\>handle \_ => NONE;
 134.253 -      \end{tabbing}
 134.254 -    }}
 134.255 -
 134.256 -
 134.257 -\end{frame}
 134.258 -
 134.259 -\subsection[Redesign]{Redesign of \isac{} using contexts}
 134.260 -\begin{frame}
 134.261 -  \frametitle{Redesign of \isac{} using contexts}
 134.262 -\begin{center} DEMO \end{center}
 134.263 -\end{frame}
 134.264 -
 134.265 -\begin{frame}
 134.266 -  \frametitle{Deduction simplifies computation}
 134.267 -\small{
 134.268 -%\begin{onehalfspace}
 134.269 -\begin{tabbing}
 134.270 -xxx\=xxx\=\kill
 134.271 -     \`$\mathit{(some)}\;\mathit{assumptions}$\\
 134.272 -$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
 134.273 -%     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
 134.274 -%\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
 134.275 -%\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
 134.276 -\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
 134.277 -     \`$x\not=3\land x\not=0$\\
 134.278 -\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
 134.279 -\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
 134.280 -%\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
 134.281 -%\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
 134.282 -\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
 134.283 -\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
 134.284 -\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
 134.285 -\>\>$[x = 0, x = \frac{6}{5}]$ \\
 134.286 -     \`$x = 0\land x = \frac{6}{5}$\\
 134.287 -\>$[\alert{x = 0}, x = \frac{6}{5}]$ \\
 134.288 -     \`\alert{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
 134.289 -\>$[x = \frac{6}{5}]$ \\
 134.290 -$[x = \frac{6}{5}]$
 134.291 -\end{tabbing}
 134.292 -}
 134.293 -%\end{onehalfspace}
 134.294 -\end{frame}
 134.295 -
 134.296 -\begin{frame}
 134.297 -  \frametitle{More ``deduction'', \\less ``computation''}
 134.298 -\footnotesize{\tt
 134.299 -\begin{tabbing}
 134.300 -xx\=xx\=xx\=xx\=xx\=xx\=\kill
 134.301 -Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
 134.302 -\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
 134.303 -\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
 134.304 -\>\>     (L\_L::bool list) =                                   \\
 134.305 -\>\>\>            (SubProblem (Test',                           \\
 134.306 -\>\>\>\>                         [linear,univariate,equation,test]\\
 134.307 -\>\>\>\>                         [Test,solve\_linear])             \\
 134.308 -\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
 134.309 -\>  in \alert{Check\_elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
 134.310 -\end{tabbing}
 134.311 -}
 134.312 -\small{
 134.313 -``Deductive'' part of Lucas-Interpretation relives the ``computational'' part: \alert{one statement becomes obsolete~!}
 134.314 -}
 134.315 -\end{frame}
 134.316 -
 134.317 -
 134.318 -\begin{frame}
 134.319 -  \frametitle{Redesign of \isac{} using contexts}
 134.320 -Advantages of the redesign:
 134.321 -\begin{itemize}
 134.322 -\item type inference by \textit{local} contexts\\
 134.323 -\pause
 134.324 -     \alert{now user-input without type constraints~!}
 134.325 -\pause
 134.326 -\item consistent handling of logical data
 134.327 -  \begin{itemize}
 134.328 -  \item preconditions and partiality conditions in contexts
 134.329 -  \item transfer of context data into subprograms clarified
 134.330 -  \item transfer of context data from subprograms clarified
 134.331 -  \end{itemize}
 134.332 -\pause
 134.333 -     \alert{now some statements become obsolete.}\\
 134.334 -\end{itemize}
 134.335 -\pause
 134.336 -Now Lucas-interpretation shifts efforts from ``computation'' further to ``deduction''.
 134.337 -\end{frame}
 134.338 -
 134.339 -
 134.340 -
 134.341 -\subsection[Code Improvement]{Improvement of functional code}
 134.342 -\begin{frame}
 134.343 -  \frametitle{Improvement of functional code}
 134.344 -  \begin{itemize}
 134.345 -  \item \textbf{code conventions}: Isabelle2011 published coding standards first time
 134.346 -  \item \textbf{combinators}: Isabelle2011 introduced a library containing the following combinators:
 134.347 -\\\vspace{0.2cm}
 134.348 -\tiny{\tt%
 134.349 -  val |$>$ : 'a * ('a -$>$ 'b) -$>$ 'b\\
 134.350 -  val |-$>$ : ('c * 'a) * ('c -$>$ 'a -$>$ 'b) -$>$ 'b\\
 134.351 -  val |$>>$ : ('a * 'c) * ('a -$>$ 'b) -$>$ 'b * 'c\\
 134.352 -  val ||$>$ : ('c * 'a) * ('a -$>$ 'b) -$>$ 'c * 'b\\
 134.353 -  val ||$>>$ : ('c * 'a) * ('a -$>$ 'd * 'b) -$>$ ('c * 'd) * 'b\\
 134.354 -  val \#$>$ : ('a -$>$ 'b) * ('b -$>$ 'c) -$>$ 'a -$>$ 'c\\
 134.355 -  val \#-$>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'b -$>$ 'd) -$>$ 'a -$>$ 'd\\
 134.356 -  val \#$>>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'd) -$>$ 'a -$>$ 'd * 'b\\
 134.357 -  val \#\#$>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'd) -$>$ 'a -$>$ 'c * 'd\\
 134.358 -  val \#\#$>>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'e * 'd) -$>$ 'a -$>$ ('c * 'e) * 'd\\
 134.359 -}
 134.360 -  \end{itemize}
 134.361 -\end{frame}
 134.362 -
 134.363 -\begin{frame}
 134.364 -  \frametitle{Example with combinators}
 134.365 -    \texttt{\footnotesize{
 134.366 -      \begin{tabbing}
 134.367 -xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
 134.368 -fun prep\_ori [] \_ \_ = ([], e\_ctxt)\\
 134.369 -\>| prep\_ori fmz thy pbt =\\
 134.370 -\>\>\>let\\
 134.371 -\>\>\>\>val ctxt = ProofContext.init\_global thy \\
 134.372 -\>\>\>\>\> |> fold declare\_constraints fmz\\
 134.373 -\>\>\>\>val ori = \\
 134.374 -\>\>\>\>\> map (add\_field thy pbt o split\_dts o the o parseNEW ctxt) fmz\\
 134.375 -\>\>\>\>\>\> |> add\_variants\\
 134.376 -\>\>\>\>val maxv = map fst ori |> max\\
 134.377 -\>\>\>\>val maxv = if maxv = 0 then 1 else maxv\\
 134.378 -\>\>\>\>val oris = coll\_variants ori\\
 134.379 -\>\>\>\>\> |> map (replace\_0 maxv |> apfst)\\
 134.380 -\>\>\>\>\> |> add\_id\\
 134.381 -\>\>\>\>\> |> map flattup\\
 134.382 -\>\>\>in (oris, ctxt) end;
 134.383 -      \end{tabbing}
 134.384 -    }}
 134.385 -\dots which probably can be further polished.
 134.386 -\end{frame}
 134.387 -
 134.388 -%\subsection[Future Development]{Preparation of Future Development}
 134.389 -%\begin{frame}
 134.390 -%  \frametitle{Preparation of Future Development}
 134.391 -%
 134.392 -%%  "Script Solve_root_equation (e_e::bool) (v_v::real) =       " ^
 134.393 -%%  " (let e_e = ((Try (Rewrite_Set norm_equation False)) @@    " ^
 134.394 -%%  "            (Try (Rewrite_Set Test_simplify False))) e_e;  " ^
 134.395 -%%  "     (L_L::bool list) =                                    " ^
 134.396 -%%  "            (SubProblem (Test',                            " ^
 134.397 -%%  "                         [linear,univariate,equation,test]," ^
 134.398 -%%  "                         [Test,solve_linear])              " ^
 134.399 -%%  "                        [BOOL e_e, REAL v_v])              " ^
 134.400 -%%  "  in Check_elementwise L_L {(v_v::real). Assumptions})     "
 134.401 -%\end{frame}
 134.402 -%
 134.403 -%\begin{frame}
 134.404 -%  \frametitle{Preparation of Future Development}
 134.405 -%    \begin{itemize}
 134.406 -%    \item logical data for Isabelle provers in contexts
 134.407 -%    \item \isac{} programming language more compact\\
 134.408 -%      $\rightarrow$ context built automatically
 134.409 -%    \end{itemize}
 134.410 -%\end{frame}
 134.411 -
 134.412 -
 134.413 -\section[Problems]{Problems encountered in the project}
 134.414 -\begin{frame}
 134.415 -  \frametitle{Problems encountered in the project}
 134.416 -    \begin{itemize}
 134.417 -    \item new Isabelle release in February 2011: update \sisac{} first
 134.418 -\pause
 134.419 -    \item lines of code (LOC) in Isabelle and \sisac{}\\ \vspace{0.2cm}
 134.420 -\textit{
 134.421 -    \begin{tabular}{lrl}
 134.422 -      src/ & 1700 & $\,$k LOC\\
 134.423 -      src/Pure/ & 70 & k LOC\\
 134.424 -      src/Provers/ & 8 & k LOC\\
 134.425 -      src/Tools/ & 800 & k LOC\\
 134.426 -      src/Tools/isac/ & 37 & k LOC\\
 134.427 -      src/Tools/isac/Knowledge & 16 & k LOC
 134.428 -    \end{tabular}
 134.429 -}
 134.430 -\pause
 134.431 -    \item changes scattered throughout the code ($\rightarrow$ grep)
 134.432 -\pause
 134.433 -    \item documentation of Isabelle very ``technical'' (no API)
 134.434 -\pause
 134.435 -   \item documentation of \sisac{} not up to date
 134.436 -    \end{itemize}
 134.437 -\end{frame}
 134.438 -
 134.439 -%\begin{frame}
 134.440 -%  \frametitle{Lines of Code}
 134.441 -%    \begin{tabular}{lr}
 134.442 -%      src/ & 1700 k \\
 134.443 -%      src/Pure/ & 70 k \\
 134.444 -%      src/Provers/ & 8 k \\
 134.445 -%      src/Tools/ & 800 k \\
 134.446 -%      src/Tools/isac/ & 37 k \\
 134.447 -%      src/Tools/isac/Knowledge & 16 k \\
 134.448 -%    \end{tabular}
 134.449 -%\end{frame}
 134.450 -
 134.451 -\section{Summary}
 134.452 -\begin{frame}
 134.453 -  \frametitle{Summary}
 134.454 -The project succeeded in all goals:
 134.455 -\begin{itemize}
 134.456 -\item implemented Isabelle's contexts in \sisac{} such that
 134.457 -\item user input requires no type constraints anymore
 134.458 -\item consistent logical data is prepared for Isabelle's provers
 134.459 -\end{itemize}
 134.460 -\pause
 134.461 -The course of the project was close to the plan:
 134.462 -\begin{itemize}
 134.463 -\item faster in writing new code
 134.464 -\item slower in integrating the code into \sisac
 134.465 -\end{itemize}
 134.466 -\pause
 134.467 -The project provided essential prerequisites for further development of the Lucas-interpreter.
 134.468 -\end{frame}
 134.469 -
 134.470 -\end{document}
 134.471 -
 134.472 -
   135.1 --- a/src/Doc/isac/mlehnfeld/projektbericht.tex	Mon Sep 16 12:27:20 2013 +0200
   135.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   135.3 @@ -1,575 +0,0 @@
   135.4 -\documentclass[a4paper,12pt]{article}
   135.5 -%
   135.6 -\usepackage[ngerman]{babel}
   135.7 -\usepackage[utf8]{inputenc}
   135.8 -\usepackage{ngerman}
   135.9 -\usepackage{graphicx}
  135.10 -\bibliographystyle{alpha}
  135.11 -
  135.12 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  135.13 -\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  135.14 -
  135.15 -\begin{document}
  135.16 -
  135.17 -\title{\Large {\bf Verbindung von 'Computation' und 'Deduction' im \isac{}-System}\\~\\
  135.18 -	Projektpraktikum am Institut für Computersprachen,\\Technische Universit\"at Wien\\
  135.19 -\vspace{0.7cm}
  135.20 -\large{Betreuer: Univ.-Prof. Dr. Jens Knoop}}
  135.21 -\author{Mathias Lehnfeld\\
  135.22 -	{\tt mathias.lehnfeld@gmx.at}}
  135.23 -%pdflatex creates an empty page 1 and the titlepage on page 2 ?!?...
  135.24 -%\thanks{Betreuer: Univ.-Prof. Dr. Jens Knoop, Technische Universit\"at Wien\\
  135.25 -%        Dr. Walther Neuper, Technische Universit\"at Graz}
  135.26 -\date{30. Mai 2011}
  135.27 -\maketitle
  135.28 -\clearpage
  135.29 -\tableofcontents
  135.30 -\clearpage
  135.31 -
  135.32 -
  135.33 -\section{Zur Aufgabenstellung}
  135.34 -Das \sisac{}-Projekt entwickelt einen {\it math assistant} aufbauend auf den
  135.35 -{\it theorem prover} Isabelle. Der Kern des \sisac{}-Systems ist ein
  135.36 -{\it Lucas-Interpreter}, der automatisch Benutzerführung für schrittweises
  135.37 -Problemlösen erzeugt: Der nächste Schritt wird von einem Programm
  135.38 -berechnet ({\it computation}); {\it deduction} wird gefordert, wenn der Benutzer
  135.39 -eine Formel eingibt (die Ableitbarkeit der Formel aus dem {\it context} ist
  135.40 -zu beweisen).\\
  135.41 -\\
  135.42 -Die Aufgabenstellung im Rahmen des Projektpraktikums besteht darin, das
  135.43 -in Isabelle verfügbare Konzept {\it context} in den Lucas-Interpreter
  135.44 -einzubauen. Dies schließt grundlegende Design-Überlegungen ein, verlangt
  135.45 -tiefes Eindringen in den umfangreichen Code von zwei Softwareprodukten,
  135.46 -{\it Isabelle} und \sisac{} und bedeutet daher Zusammenarbeit mit den jeweiligen
  135.47 -Entwicklerteams.\\
  135.48 -\\
  135.49 -Ein erfolgreicher Einbau der Isabelle-{\it context}s in den
  135.50 -Lucas-Interpreter wird \sisac{}s Fähigkeit, Benutzereingaben zu
  135.51 -interpretieren, wesentlich erweitern: {\it context}s stellen Isabelles
  135.52 -automatischen Beweisern die notwendigen Daten bereit.
  135.53 -
  135.54 -
  135.55 -\section{Planung des Projektes}
  135.56 -\subsection{Ist-Zustand vor dem Projekt}
  135.57 -Das Isabelle Konzept der {\it context}s findet derzeit in \sisac{} noch keine Verwendung. Dadurch entstehen gewisse Einschränkungen bezüglich der Interpretation durch den Lucas-Interpreter, weil Rechenschritte nicht unter Berücksichtigung aller Faktoren ihres Kontexts betrachtet werden können. Derzeit werden Zusicherungen und Umgebungsdaten in einer \sisac{}-spezifischen Datenstruktur verwaltet, die Zugriffe auf Isabelles Prover nicht direkt unterstützen.
  135.58 -
  135.59 -\subsection{Geplanter Soll-Zustand nach dem Projekt}
  135.60 -\sisac{}s Lucas-Interpreter ist nun schlanker und nimmt Isabelles {\it context}s bei der Interpretation von Benutzereingaben in Anspruch. Spezifikationen werden mit Isabelles eigenen Datenstrukturen verwaltet. Zusicherungen und Typen von Variablen werden im Lucas-Interpreter in {\it context}s behandelt.
  135.61 -
  135.62 -\subsection{Zeitplanung f\"ur das Projekt}
  135.63 -Die Planung f\"ur das Projekt sah folgende Meilensteine vor (Details siehe \ref{ms-desc}):
  135.64 -\begin{enumerate}
  135.65 -\item \textbf{Voraussetzungen zum Arbeitsbeginn schaffen} (10.02. -- 18.02.)
  135.66 -  %Beschreibung siehe \ref{ms1_desc}
  135.67 -\item \textbf{\isac{} auf die letzte Isabelle-Release updaten} (21.02. -- 25.02.)
  135.68 -  %Beschreibung siehe \ref{ms2_desc}
  135.69 -\item \textbf{Parsen aus \textit{contexts}} (28.02. -- 04.03.)
  135.70 -  %Beschreibung siehe \ref{ms3_desc}
  135.71 -\item \textbf{Spezifikationsphase mit \textit{context}s} (07.03. -- 11.03.)
  135.72 -  %Beschreibung siehe \ref{ms4_desc}
  135.73 -\item \textbf{L\"osungsphase mit \textit{context}s} (14.03. -- 18.03.)
  135.74 -  %Beschreibung siehe \ref{ms5_desc}
  135.75 -\end{enumerate}
  135.76 -
  135.77 -\section{Konzepte und L\"osungen}
  135.78 -\subsection{Architektur von \isac}
  135.79 -Die Grafik auf Seite \pageref{architektur} gibt einen \"Uberblick \"uber die Architektur von \sisac:
  135.80 -
  135.81 -\begin{figure} [htb]
  135.82 -\begin{center}
  135.83 -    \includegraphics[width=120mm]{overview.pdf}
  135.84 -\end{center}
  135.85 -\caption{Lucas-interpreter und Isabelle}
  135.86 -\label{architektur}
  135.87 -\end{figure}
  135.88 -Die Mathematik-Engine von \sisac{} ist nach dem Konzept eines ``Lucas-Interpreters'' (LI) gebaut. Ein LI interpretiert drei Arten von Daten:
  135.89 -\begin{enumerate}
  135.90 -\item\label{spec}\textbf{Spezifikationen}: diese beschreiben ein Problem der angewandten Mathematik durch die Ein- und Ausgabedaten, die ``precondition'' (Pr\"adikate auf den Eingabedaten) und eine ``postcondition'' (eine Relation zwischen Ein- und Ausgabedaten). Spezifikationen stellen den \textit{applikations-orientierten} Aspekt der Mathematik dar.
  135.91 -\item \textbf{Programme}: beschreiben den Algorithmus zur L\"osung des spezifizierten Problems. \sisac's Programmsprache ist funktional und hat keine Ein- oder Ausgabe-Statements \cite{plmms10}. Sie kann aber auf Funktionalit\"aten des Computer Theorem Provers (CTP) Isabelle \cite{Nipkow-Paulson-Wenzel:2002} zugreifen. Programme  stellen den \textit{algorithmischen} Aspekt der Mathematik dar.
  135.92 -\item \textbf{Theorien}: beinhalten die Definitionen, Axiome und Theoreme, die einer bestimmten Rechnung der angewandten Mathematik zugrundeliegen. \sisac{} verwendet die ``theories'' von Isabelle in vollem Umfang. Theorien  stellen den \textit{deduktiven} Aspekt der Mathematik dar.
  135.93 -\end{enumerate}
  135.94 -
  135.95 -Die Funktionalit\"at eines LI kann in kurzer Form durch die folgenden drei Anspr\"uche erkl\"art werden\footnote{siehe http://www.ist.tugraz.at/isac/index.php/Description}:
  135.96 -
  135.97 -\begin{enumerate}
  135.98 -\item \textbf{Benutzereingaben pr\"ufen}: Benutzereingaben sollen so gro\3z\"ugig wie m\"oglich verarbeitet werden. Bei einem gegebenen Problem aus der angewandten Mathematik als formale Spezifikation, wird mit den jeweiligen ``preconditions'' ein ``context'' erzeugt. Nun kann ein Isabelle ``prover'' die Ableitbarkeit einer Benutzereingabe aus dem ``context'' \"uberpr\"ufen. Der ``context'' wird Schritt f\"ur Schritt durch Benutzereingaben erweitert, bis ein Ergebnis vorliegt, das beweisbar die ``postcondition'' aus der Spezifikation erf\"ullt.
  135.99 -\item \textbf{Den Benutzer anleiten}: Wei\3 der Lernende nicht mehr weiter, so kann das System den n\"achsten Schritt vorschlagen und den Benutzer so Schritt f\"ur Schritt zum Ergebnis f\"uhren. Ein \sisac{}-Programm wird so interpretiert, wie es bei einem Debugger passiert; die Breakpoints (i.e. Schritte) sind als bestimmte Statements im Programm definiert, die notwendigerweise zum Verlauf der Rechnung bzw. deren Aufbau geh\"oren. An den Breakpoints kann der Benutzer frei entscheiden, ob er den n\"achsten Schritt generieren lassen m\"ochte oder ob er versucht, selbst weiter zu rechnen. Die Herausforderung f\"ur den \textit{Lucas-Interpreter} ist, mit beliebigen Benutzereingaben umgehen zu k\"onnen.
 135.100 -\item \textbf{Schritte erkl\"aren}: Bei Interesse hat der Lernende Zugang zu dem Wissen, das f\"ur einen mechanisierten \textit{math assistant} zur L\"osung mathematischer Probleme von N\"oten ist: Definitionen, Axiome und Theoreme (erfasst in ``theories''\footnote{siehe http://www.ist.tugraz.at/projects/isac/www/kbase/thy/index\_thy.html}), Spezifikationen von Problemklassen\footnote{siehe z.B. http://www.ist.tugraz.at/projects/isac/www/kbase/pbl/index\_pbl.html} und Programme, um die Probleme zu l\"osen\footnote{siehe http://www.ist.tugraz.at/projects/isac/www/kbase/met/index\_met.html}. Theoretisch ist dieses Wissen ausreichend, automatisch Erkl\"arungen f\"ur die einzelnen Schritte zu generieren. Das Hintergrundwissen liegt zwar in mathematischer Formulierung vor, es ist jedoch fraglich, wie dies in eine Form gebracht werden kann, die den Lernenden nicht \"uberfordert.
 135.101 -\end{enumerate}
 135.102 -
 135.103 -\subsection{Isabelles Konzept von ``contexts''}
 135.104 -Die Beschreibung dieses bew\"ahrten Konzeptes findet sich in einem internen Papier zur Implementierung von Isabelles Beweissprache Isar \cite{isar-impl}. Isabelle stellt einen sehr generellen Funktor zur Verf\"ugung:
 135.105 -
 135.106 -{\tt
 135.107 -\begin{tabbing}
 135.108 -xx\=xx\=in\=\kill
 135.109 -structure ContextData =  {Proof\_Data}\\
 135.110 -\>~({type T} = term list\\
 135.111 -\>\>{fun init \_} = []);\\
 135.112 -\\
 135.113 -fun insert\_assumptions asms = \\
 135.114 -\>\>\>ContextData{.map} (fn xs => distinct (asms@xs));\\
 135.115 -\\
 135.116 -fun get\_assumptions ctxt = ContextData{.get} ctxt;\\
 135.117 -\\
 135.118 -\\
 135.119 -val declare\_constraints : \\
 135.120 -\>\>\>term -> Proof.context -> Proof.context
 135.121 -\end{tabbing}
 135.122 -}
 135.123 -Das Einzige, was die Definition eines''contexts'' braucht, ist die Spezifikation eines Typs \textit{type T} und einer Funktion \textit{fun init \_} f\"ur den Funktor \textit{Proof\_Data}. Dieser stellt dann die Zugriffsfunktionen \textit{ContextData.map} und \textit{ContextData.get} zur Verf\"ugung.
 135.124 -
 135.125 -Die Funktion \textit{declare\_constraints} liefert eine wichtige Funktionalit\"at: Ein \textit{term} angewandt auf einen \textit{Proof.context} ergibt einen neuen \textit{Proof.context}, der f\"ur das Parsen von Strings verwendet werden kann:
 135.126 -{\tt
 135.127 -\begin{tabbing}
 135.128 -xx\=xx\=xx\=xx\=xx\=\kill
 135.129 -fun parseNEW ctxt str = \\
 135.130 -\>\>\>SOME ({Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
 135.131 -\>\>\>handle \_ => NONE;
 135.132 -      \end{tabbing}
 135.133 -}
 135.134 -\textit{Syntax.read\_term ctxt} entnimmt dem ``context'' die Typinformation, die vorher durch \textit{declare\_constraints} zugef\"uhrt wurde. Da die \textit{fun parse} vor Beginn dieses Projektes keine ``contexts'' zur Verf\"ugung hatte, setzte sie mittels \textit{typ\_a2real} einfach alle unbestimmten Typen auf \textit{real}:
 135.135 -{\tt
 135.136 -\begin{tabbing}
 135.137 -xx\=xx\=xx\=xx\=xx\=\kill
 135.138 -fun parse thy str =\\
 135.139 -\>(let val t = ({typ\_a2real} o numbers\_to\_string)\\
 135.140 -\>\>\>\>({Syntax.read\_term\_global thy} str)\\
 135.141 -\>\>in SOME (cterm\_of thy t) end)\\
 135.142 -\>\>\>handle \_ => NONE;\\
 135.143 -      \end{tabbing}
 135.144 -}
 135.145 -
 135.146 -\subsection{Die Initialisierung von ``contexts''}\label{init-ctxt}
 135.147 -``Contexts'' werden an zwei Stellen von Lucas-Interpretation initialisiert: am Beginn der Spezifikationsphase und zu Beginn der L\"osungsphase.
 135.148 -
 135.149 -\begin{enumerate}
 135.150 -\item\label{init-ctxt-spec}{Die Spezifikations-Phase} dient der Erstellung einer formalen Spezifikation (siehe \ref{spec})\footnote{Da bekannterma\3en formales Spezifizieren schwierig ist, kann es durch entsprechende Dialog-Einstellung dem LI \"uberlassen werden.}. Der ``context'' wird mittels \textit{declare\_constraints} mit den Typdeklarationen aller vorkommenden Variablen initialisiert.
 135.151 -
 135.152 -Im Falle eines Rootproblems kommen die Variablen von einer ``formalization'', einer Kurzbeschreibung der Eingabedaten durch einen Autor. Im Falle eines Subproblems kommen die Variablen von den ``actual arguments'' des Subprogrammes.
 135.153 -
 135.154 -\item\label{init-ctxt-solve}{Die L\"osungsphase} erzeugt die Rechenschritte aus dem spezifizierten Programm. Zu Beginn der Interpretation des Programmes wird der ``context'' initialisiert mit
 135.155 -  \begin{enumerate}
 135.156 -  \item den Typdeklarationen aller in der Spezifikation vorkommenden Variablen mittels \textit{declare\_constraints}
 135.157 -  \item den ``preconditions'' des (interaktiv oder automatisch) spezifizierten Programmes, genauer: mit den ``preconditions'' des zugeh\"origen Guards, der meist gleich der Spezifikation ist
 135.158 -  \end{enumerate}
 135.159 -\end{enumerate}
 135.160 -
 135.161 -
 135.162 -\subsection{Aufbau von ``contexts'' in der Interpretation}\label{partiality}
 135.163 -W\"ahrend der Interpretation eines Programmes baut der Lucas-Interpreter einen ``context'' auf, indem er alle relevanten ``preconditions'', andere Pr\"adikate -- insbesondere ``partiality conditions'' -- einsammelt. Eine ``partiality condition'' ist zum Beispiel $x\not=0$, die eine Division durch $0$ verhindert.
 135.164 -
 135.165 -Am Ende eines Programmes soll der ``context'' hinreichend logische Information enthalten, sodass Isabelles automatische Beweiser die ``postcondition'' automatisch beweisen k\"onnen (das ist eine k\"unftige Entwicklungsaufgabe!).
 135.166 -
 135.167 -\subsection{Transfer von ``contexts'' aus Subprogrammen}\label{transfer}
 135.168 -``contexts'' folgen den \"ublichen Scope-Regeln von Programmsprachen mit Blockstruktur, wie schon die Initialisierung von ``contexts'' gezeigt hat. Die Behandlung von ``contexts'' bei der R\"uckkehr aus Subprogrammen erfolgt durch folgende Funktionen:
 135.169 -{\tt
 135.170 -\begin{tabbing}
 135.171 -xx\=xx\=xx\=xx\=xx\=\kill
 135.172 -fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
 135.173 -\>  let\\
 135.174 -\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
 135.175 -\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
 135.176 -\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
 135.177 -\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
 135.178 -\>\>\>\>\>         then transfer fas to\_ctxt\\
 135.179 -\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
 135.180 -\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
 135.181 -      \end{tabbing}
 135.182 -}
 135.183 -Folgende Daten werden aus dem Sub-``context'' in den ``context'' des aufrufenden Programmes zur\"uckgegeben:
 135.184 -\begin{enumerate}
 135.185 -\item die R\"uckgabewerte des Subprogrammes, sofern sie vom Typ \textit{bool} sind
 135.186 -\item alle \textit{assumptions}, die eine Variable enthalten, die auch einer der R\"uckgabewerte enth\"alt
 135.187 -\item alle \textit{assumptions}, die eine Variable enthalten, die in einem Term des aufrufenden Programmes enthalten sind\footnote{in diesem Punkt sind die Scope-Regeln schw\"acher als sonst bei Subprogrammen}. Der Unterschied begr\"undet sich darin, dass Rechnungen vorzugsweise mit Variablennamen vorgehen, die block\"ubergreifend g\"ultig sind.
 135.188 -\item\label{conflict} \textbf{nicht zur\"uckgegeben} werden R\"uckgabewerte des Subprogrammes dann, wenn sie im Widerspruch zum ``context'' des aufrunfenden Programmes stehen \footnote{Dieser Punkt wurde erst zu Ende der vorliegenden Arbeit gekl\"art und ist zur Zeit ihrer Fertigstellung nicht implementiert~!}. Hier ist ein Beispiel:
 135.189 -\end{enumerate}
 135.190 -
 135.191 -\begin{tabbing}
 135.192 -xxx\=xxx\=\kill
 135.193 -     \`$\mathit{(some)}\;\mathit{assumptions}$\\
 135.194 -$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
 135.195 -     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
 135.196 -\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
 135.197 -\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
 135.198 -\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
 135.199 -     \`$x\not=3\land x\not=0$\\
 135.200 -\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
 135.201 -\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
 135.202 -\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
 135.203 -\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
 135.204 -\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
 135.205 -\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
 135.206 -\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
 135.207 -\>\>$[x = 0, x = \frac{6}{5}]$ \\
 135.208 -     \`$x = 0\land x = \frac{6}{5}$\\
 135.209 -\>$[{x = 0}, x = \frac{6}{5}]$ \\
 135.210 -     \`{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
 135.211 -\>$[x = \frac{6}{5}]$ \\
 135.212 -$[x = \frac{6}{5}]$
 135.213 -\end{tabbing}
 135.214 -Aufgrund von Punkt \ref{conflict}. oben wird es m\"oglich, aus dem Programm, das obige Rechnung erzeugt, das Statement \textit{Check\_Elementwise Assumptions} zu streichen:
 135.215 -{\tt
 135.216 -\begin{tabbing}
 135.217 -xx\=xx\=xx\=xx\=xx\=xx\=\kill
 135.218 -Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
 135.219 -\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
 135.220 -\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
 135.221 -\>\>     (L\_L::bool list) =                                   \\
 135.222 -\>\>\>            (SubProblem (Test',                           \\
 135.223 -\>\>\>\>                         [linear,univariate,equation,test]\\
 135.224 -\>\>\>\>                         [Test,solve\_linear])             \\
 135.225 -\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
 135.226 -\>  in {Check\_Elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
 135.227 -\end{tabbing}
 135.228 -}
 135.229 -Hiermit geht die Entwicklung des Konzeptes von Lucas-Interpretation einen Schritt in die begonnene Richtung weiter, die Verschiebung des Programmieraufwandes von ``computation'' (im herk\"ommlichen Programmieren) auf ``deduction'' (im Spezifizieren von Programmeigenschaften) zu unterst\"utzen.
 135.230 -
 135.231 -\subsection{\"Uberblick: ``contexts'' bei Lucas-Interpretation}
 135.232 -
 135.233 -Im Folgenden betrachten wir ein Bespiel für die Lösung einer Aufgabe durch \sisac. Die gegebenen Codeausschnitte sind nur Teile des gesamten Programmes. Der vollständige Code befindet sich in Anhang \ref{demo-code}.
 135.234 -
 135.235 -\paragraph{Formulierung der Aufgabenstellung und Spezifikation}~\\
 135.236 -
 135.237 -Erklärung siehe \ref{init-ctxt-spec}.
 135.238 -\begin{verbatim}
 135.239 -val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
 135.240 -val (dI',pI',mI') =
 135.241 -  ("Test", ["sqroot-test","univariate","equation","test"],
 135.242 -   ["Test","squ-equ-test-subpbl1"]);
 135.243 -val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
 135.244 -\end{verbatim}
 135.245 -\textit{fmz} enthält also die zwei Eingabegrößen und die gesuchte Ausgabegröße, also die Liste aller Lösungen für \textit{x} in der Gleichung $x + 1 = 2$. Die zweite Zeile definiert den Namen der ``theory'' mit dem deduktiven Hintergrundwissen, die Spezifikation in Form einer Liste und das zu verwendende Programm.\\
 135.246 -\textit{CalcTreeTEST} erzeugt schlie\3lich die grundlegenden Datenstrukturen für die folgenden Berechnungen. Beispielsweise wird ein ``context'' erzeugt, der nun im Baum \textit{pt} an der Position \textit{p} steht.
 135.247 -\begin{verbatim}
 135.248 -val ctxt = get_ctxt pt p;
 135.249 -val SOME known_x = parseNEW ctxt "x + y + z";
 135.250 -val SOME unknown = parseNEW ctxt "a + b + c";
 135.251 -\end{verbatim}
 135.252 -Dies erzeugt folgenden Output:
 135.253 -\begin{verbatim}
 135.254 -val ctxt = <context>: Proof.context
 135.255 -val known_x =
 135.256 -   Const ("Groups.plus_class.plus",
 135.257 -       "RealDef.real => RealDef.real => RealDef.real") $
 135.258 -     (Const ("Groups.plus_class.plus",
 135.259 -         "RealDef.real => RealDef.real => RealDef.real") $
 135.260 -       Free ("x", "RealDef.real") $ Free ("y", "RealDef.real")) $
 135.261 -     Free ("z", "RealDef.real"):
 135.262 -   term
 135.263 -val unknown =
 135.264 -   Const ("Groups.plus_class.plus", "'a => 'a => 'a") $
 135.265 -     (Const ("Groups.plus_class.plus", "'a => 'a => 'a")
 135.266 -       $ Free ("a", "'a") $ Free ("b", "'a")) $
 135.267 -     Free ("c", "'a"):
 135.268 -   term
 135.269 -\end{verbatim}
 135.270 -Der Output dieser Zeilen zeigt die neue Funktionalität anhand der Erkennung des Typs \textit{real} für die Variablen \textit{x}, \textit{y} und \textit{z} mittels Typinferenz, im Gegensatz zu den Unbekannten \textit{a}, \textit{b} und \textit{c} (unbekannter Typ \textit{'a}.
 135.271 -
 135.272 -\paragraph{Beginn der Interpretation}~\\
 135.273 -
 135.274 -Nach einigen Schritten der Mathematik-Engine ist die Spezifikationsphase beendet und die Interpretation des Programmes kann beginnen. Die ``precondition'' ist in den Assumptions enthalten:
 135.275 -\begin{verbatim}
 135.276 -get_assumptions_ pt p |> terms2strs
 135.277 -\end{verbatim}
 135.278 -Output:
 135.279 -\begin{verbatim}
 135.280 -val it = ["precond_rootmet x"]: string list
 135.281 -\end{verbatim}
 135.282 -
 135.283 -\paragraph{Bearbeitung eines Subproblems}~\\
 135.284 -
 135.285 -Einige Ausführungsschritte später startet der Interpreter mit der Gleichung $-1 + x = 0$ ein Subproblem, beginnt dort wiederum mit Spezifikationsphase und setzt mit der Lösungsphase fort.\\
 135.286 -In einem Zwischenschritt bestehen die lokalen Assumptions aus der Annahme, dass die Gleichung mit der Gleichheitsregel zu matchen ist:
 135.287 -\begin{verbatim}
 135.288 -["matches (?a = ?b) (-1 + x = 0)"]: string list
 135.289 -\end{verbatim}
 135.290 -Nach künstlichem Einfügen zweier Assumptions und Beendigung des Subproblems steht eine Lösung für \textit{x} in den Assumptions:\\
 135.291 -\texttt{[\dq{}matches (?a = ?b) (-1 + x = 0)\dq{}, \dq{}x < sub\_asm\_out\dq{}, \dq{}{\bf x = 1}\dq{}, \dq{}precond\_rootmet x\dq{}]: string list}\\
 135.292 -\\
 135.293 -Bei der Rückkehr aus dem Subproblem könnte eine erzeugte Lösung aufgrund einer Bedingungsverletzung wieder wegfallen, hier ist das nicht der Fall. Die Überprüfung dieser Bedingungen (siehe \ref{partiality}) geschieht beim Transfer des lokalen ``contexts'' in den übergeordneten (hier der des Rootproblems, siehe \ref{transfer}).
 135.294 -
 135.295 -\paragraph{Abschluss der Berechnung}~\\
 135.296 -
 135.297 -Nach den letzten Aufrufen der Mathematik-Engine stehen alle Schritte fest:
 135.298 -\begin{verbatim}[
 135.299 -(([], Frm), solve (x + 1 = 2, x)),
 135.300 -(([1], Frm), x + 1 = 2),
 135.301 -(([1], Res), x + 1 + -1 * 2 = 0),
 135.302 -(([2], Res), -1 + x = 0),
 135.303 -(([3], Pbl), solve (-1 + x = 0, x)),
 135.304 -(([3,1], Frm), -1 + x = 0),
 135.305 -(([3,1], Res), x = 0 + -1 * -1),
 135.306 -(([3,2], Res), x = 1),
 135.307 -(([3], Res), [x = 1]),
 135.308 -(([4], Res), [x = 1]),
 135.309 -(([], Res), [x = 1])] 
 135.310 -\end{verbatim}
 135.311 -
 135.312 -\section{Beschreibung der Meilensteine}\label{ms-desc}
 135.313 -\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}\label{ms1_desc}
 135.314 -Die Komplexit\"at \sisac{}s, welches auf Konzepten von Isabelle aufbaut und die tief ins System eingreifenden Ver\"anderungen in den bevorstehenden Meilensteinen machen eine intensive Auseinandersetzung mit Isabelle, insbesondere mit dem Konzept der ``contexts'', und dem \sisac-Code notwendig. Darunter fallen neben dem Lesen von Dokumentationen auch die gezielte Suche von Anwendungsf\"allen im bestehenden Code, sowie das Studieren von Coding Standards und ein Vertrautmachen mit den im \sisac-Team \"ublichen Workflows.
 135.315 -
 135.316 -\subsection{\isac{} auf die letzte Isabelle-Release updaten}\label{ms2_desc}
 135.317 -Die Arbeit mit den Isabelle {\it context}s wird Anfragen in isabelle-dev@
 135.318 -erfordern. isabelle-dev@ beantwortet Fragen i.A. nur f\"ur die aktuelle
 135.319 -Release. Überraschenderweise wurde zwei Wochen vor Beginn des Projektpraktikums eine neue Release
 135.320 -veröffentlicht. Daher muss auf diese vor Arbeitsbeginn upgedatet werden.
 135.321 -
 135.322 -\subsection{Parsen aus {\it context}s}\label{ms3_desc}
 135.323 -Bisher nahm \sisac{} für jede Variable den Typ {\it real} an. Variablen, Terme und Pr\"adikate sollen nun beim ersten Auftreten im {\it context} eingetragen werden. User-Input wird mithilfe des {\it context}s mittels Typinferenz typgerecht geparst. Die Verwendungen der bestehenden \textit{parse}-Funktion m\"ussen im ganzen System ersetzt und angepasst werden.
 135.324 -
 135.325 -\subsection{Spezifikationsphase mit {\it context}s}\label{ms4_desc}
 135.326 -\sisac{} sah für die Spezifikation eine Datenstruktur vor, die interaktives Spezifizieren effizient unterstützt. Diese Datenstruktur soll nun durch {\it context}s ersetzt werden. Dadurch ist die bisherige Fixierung auf {\it real} aufgehoben und beliebige Typen werden fehlerfrei behandelt. Dieser Schritt macht weitere Eingriffe in grundlegende Funktionen und Datenstrukturen des Systems notwendig.
 135.327 -
 135.328 -\subsection{L\"osungsphase mit {\it context}s}\label{ms5_desc}
 135.329 -Der Lucas-Interpreter speicherte Assumptions (precondition, partiality conditions, etc.) in einer eigenen Datenstruktur im Rechenbaum. Nun sollen Assumptions im {\it context} verwaltet werden. Dazu sind Schreib- und Lesefunktionen zu implementieren und alle Verwendungen von Assumptions entsprechend anzupassen.
 135.330 -
 135.331 -\section{Bericht zum Projektverlauf}
 135.332 -
 135.333 -\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}
 135.334 -Die Größe der Projekte {\it Isabelle} und \sisac{} sowie deren Abgrenzung haben den Weg zu meinem schließlichen Verständnis der Aufgabenstellung etwas langwierig gestaltet. Dazu kamen nicht geplante, organisatorische Vorbereitungen, wie die Erstellung einer Projektbeschreibung und des -planes. Die lange Vorbereitung hat sich aber positiv auf den weiteren Verlauf des Projektes ausgewirkt.
 135.335 -
 135.336 -\subsection{\isac{} auf die letzte Isabelle-Release updaten}
 135.337 -Da die Veröffentlichung der {\it Isabelle}-Version 2009-2 noch nicht lange zurück lag, kam {\it Isabelle2011} mit vielen grundlegenden Änderungen im System kurz vor Projektbeginn sehr überraschend. Die Mailingliste der Entwickler beantwortet nur Fragen zur aktuellen Release, weshalb ein entsprechendes Update von \sisac{} vor Arbeitsbeginn notwendig war.\\
 135.338 -Dieser Arbeitsschritt beanspruchte wesentlich mehr Zeit als ursprünglich geplant. Als \sisac{} schließlich erfolgreich kompilierte funktionierte eine große Zahl der Tests nicht mehr. Dies machte die selbstständige Arbeit für mich vorerst unmöglich. Ich konnte jedoch in persönlicher Zusammenarbeit mit Walther Neuper meine Fähigkeiten einbringen. Die Notwendigkeit dieser persönlichen Zusammenarbeit verzögerte den Projektverlauf.
 135.339 -
 135.340 -\subsection{Parsen aus {\it context}s}
 135.341 -In diesem Schritt konnte ich besonders Syntax und Funktionsweise von StandardML, die praktischen, {\it Isabelle}-eigenen Operatoren und die Arbeitsweise mit der Entwicklungsumgebung kennen lernen. Dieser Meilenstein konnte in recht kurzer Zeit abgeschlossen werden.
 135.342 -
 135.343 -\subsection{Spezifikationsphase mit {\it context}s}
 135.344 -Hier konnte ich sehr viel selbstständig arbeiten. Zu Beginn verlief alles völlig problemlos, die Suche nach einem bestimmten Fehler beanspruchte dann aber mit Abstand die meiste Zeit, hatte jedoch zur Folge, dass ich mich sehr intensiv mit dem System auseinandersetzen musste und damit einige Kernfunktionen kennen und verstehen lernte und teilweise sogar etwas optimieren konnte.
 135.345 -Insgesamt verlief diese Phase trotz der langwierigen Fehlersuche nicht viel langsamer als geplant.
 135.346 -
 135.347 -\subsection{L\"osungsphase mit {\it context}s}
 135.348 -Die Integration von {\it context}s in die Lösungsphase zur Ersetzung der ursprünglichen behandlung von Assertions konnte in enger Zusammenarbeit mit Herrn Neuper fertiggestellt werden, persönliche Termine auf beiden Seiten verlängerten aber den zeitlichen Verlauf. Der Code des Lucas-Interpreters ist jetzt sauberer und die Logik vereinfacht.
 135.349 -
 135.350 -
 135.351 -\section{Abschließende Bemerkungen}
 135.352 -Rückblickend betrachte ich das Projektpraktikum als sehr positive Erfahrung, da ich das Gefühl habe, etwas nicht Unwesentliches  zur Erweiterung von \sisac{} beigetragen zu haben. Die persönliche Zusammenarbeit mit Akademikern und auch die Verrichtung einer Arbeit, die nach Abschluss gebraucht und verwendet wird, ist eine Erfahrung, die in meinem Studium nicht selbstverständlich ist und um die ich mich sehr bemüht habe.
 135.353 -
 135.354 -Der %nicht zuletzt 
 135.355 -durch das überraschend notwendig gewordene Update 
 135.356 -von Isabelle2009-2 auf Isabelle2011
 135.357 -bedingte zähe Verlauf bis ich endlich wirklich an der eigentlichen Aufgabenstellung arbeiten konnte, %war etwas ernüchternd, 
 135.358 -verlange einies Umdisponieren,
 135.359 -da ich gehofft hatte, das Praktikum bis spätestens Ende März abschließen zu können. Die zeitliche Verzögerung des Projektes wurde jedoch durch gro\3es Entgegenkommen des Institutes in der Terminsetzung am Ende des Projektes ausgeglichen; daf\"ur bin ich Herrn Professor Knoop sehr zu Dank verpflichtet. Lehrreich war f\"ur mich auch die Einbindung der Abschlusspr\"asentation in die Vortragsreihe des Institutes f\"ur Computersprachen und dem Feedback von dort; auch daf\"ur herzlichen Dank.
 135.360 -
 135.361 -Die Zusammenarbeit mit \sisac-Entwicklung an der Technischen Universit\"at Graz \"uber Herrn Neuper hat %jedenfalls 
 135.362 -sehr gut funktioniert und aus meiner Sicht haben wir uns sehr gut verstanden. Das hat ein produktives %entspanntes 
 135.363 -Arbeitsklima ermöglicht.
 135.364 -
 135.365 -%Abgesehen von der zeitlichen Verzögerung des Projektes freue ich mich über den erfolgreichen Abschluss der geplanten Aufgaben und deren interessanten Charakter.
 135.366 -
 135.367 -\clearpage
 135.368 -
 135.369 -\bibliography{bib}
 135.370 -
 135.371 -\clearpage
 135.372 -
 135.373 -\appendix
 135.374 -%\section*{Anhang}
 135.375 -\section{Demobeispiel}\label{demo-code}
 135.376 -\begin{verbatim}
 135.377 -
 135.378 -theory All_Ctxt imports Isac begin
 135.379 -
 135.380 -text {* all changes of context are demonstrated in a mini example.
 135.381 -  see test/../mstools.sml --- all ctxt changes in minimsubpbl x+1=2 --- *}
 135.382 -
 135.383 -section {* start of the mini example *}
 135.384 -
 135.385 -ML {*
 135.386 -  val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
 135.387 -  val (dI',pI',mI') =
 135.388 -    ("Test", ["sqroot-test","univariate","equation","test"],
 135.389 -     ["Test","squ-equ-test-subpbl1"]);
 135.390 -  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
 135.391 -*}
 135.392 -
 135.393 -section {* start of specify phase *}
 135.394 -
 135.395 -text {* variables known from formalisation provide type-inference 
 135.396 -  for further input *}
 135.397 -
 135.398 -ML {*
 135.399 -  val ctxt = get_ctxt pt p;
 135.400 -  val SOME known_x = parseNEW ctxt "x + y + z";
 135.401 -  val SOME unknown = parseNEW ctxt "a + b + c";
 135.402 -*}
 135.403 -
 135.404 -ML {*
 135.405 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.406 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.407 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.408 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.409 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.410 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.411 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.412 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.413 -*}
 135.414 -
 135.415 -section {* start interpretation of method *}
 135.416 -
 135.417 -text {* preconditions are known at start of
 135.418 -        interpretation of (root-)method *}
 135.419 -
 135.420 -ML {*
 135.421 -  get_assumptions_ pt p |> terms2strs;
 135.422 -*}
 135.423 -
 135.424 -ML {*
 135.425 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.426 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.427 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.428 -*}
 135.429 -
 135.430 -section {* start a subproblem: specification *}
 135.431 -
 135.432 -text {* variables known from arguments of (sub-)method
 135.433 -        provide type-inference for further input *}
 135.434 -
 135.435 -ML {*
 135.436 -  val ctxt = get_ctxt pt p;
 135.437 -  val SOME known_x = parseNEW ctxt "x+y+z";
 135.438 -  val SOME unknown = parseNEW ctxt "a+b+c";
 135.439 -*}
 135.440 -
 135.441 -ML {*
 135.442 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.443 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.444 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.445 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.446 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.447 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.448 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.449 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
 135.450 -*}
 135.451 -
 135.452 -section {* interpretation of subproblem's method *}
 135.453 -
 135.454 -text {* preconds are known at start of interpretation of (sub-)method *}
 135.455 -
 135.456 -ML {*
 135.457 - get_assumptions_ pt p |> terms2strs
 135.458 -*}
 135.459 -
 135.460 -ML {*
 135.461 - val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
 135.462 -*}
 135.463 -
 135.464 -ML {*
 135.465 -  "artifically inject assumptions";
 135.466 -  val (SOME (iform, cform), SOME (ires, cres)) = get_obj g_loc pt (fst p);
 135.467 -  val ctxt = insert_assumptions [str2term "x < sub_asm_out",
 135.468 -                                 str2term "a < sub_asm_local"] cres;
 135.469 -  val pt = update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
 135.470 -*}
 135.471 -
 135.472 -ML {* 
 135.473 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.474 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.475 -*}
 135.476 -
 135.477 -section {* finish subproblem, return to calling method*}
 135.478 -
 135.479 -text {* transfer non-local assumptions and result from sub-method
 135.480 -        to root-method.
 135.481 -        non-local assumptions are those contaning a variable known
 135.482 -        in root-method.
 135.483 -*}
 135.484 -
 135.485 -ML {*
 135.486 -  terms2strs (get_assumptions_ pt p);
 135.487 -*}
 135.488 -
 135.489 -ML {*
 135.490 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.491 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
 135.492 -*}
 135.493 -
 135.494 -section {* finish Lucas interpretation *}
 135.495 -
 135.496 -text {* assumptions collected during lucas-interpretation
 135.497 -        for proof of postcondition *}
 135.498 -
 135.499 -ML {*
 135.500 -  terms2strs (get_assumptions_ pt p);
 135.501 -*}
 135.502 -
 135.503 -ML {*
 135.504 -  show_pt pt;
 135.505 -*}
 135.506 -
 135.507 -end
 135.508 -\end{verbatim}
 135.509 -
 135.510 -\section{Stundenliste}
 135.511 -
 135.512 -\subsection*{Voraussetzungen zum Arbeitsbeginn schaffen}
 135.513 -\begin{tabular}[t]{lll}
 135.514 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
 135.515 -    10.02.2011 & 2:00 & Besprechung der Problemstellung \\
 135.516 -    11.02.2011 & 1:30 & {\it context}s studieren, Isabelle/Mercurial Installation \\
 135.517 -    18.02.2011 & 0:15 & meld/tortoisehg installieren \\
 135.518 -    20.02.2011 & 1:00 & Projektbeschreibung, jedit Probleme \\
 135.519 -    25.02.2011 & 1:00 & Ausarbeitung Meilensteine \\
 135.520 -    26.02.2011 & 1:00 & Ausarbeitung Ist-/Soll-Zustand, {\it context}s studieren\\
 135.521 -    28.02.2011 & 1:15 & Einführungsbeispiel {\it context}s \\
 135.522 -    28.02.2011 & 1:15 & Projektplan erstellen, formatieren \\
 135.523 -    01.03.2011 & 1:00 & Projektplan überarbeiten, Stundenlisten \\
 135.524 -\end{tabular}
 135.525 -
 135.526 -\subsection*{\isac{} auf die letzte Isabelle-Release updaten}
 135.527 -\begin{tabular}[t]{lll}
 135.528 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
 135.529 -    18.02.2011 & 2:45 & Anpassungen an Isabelle2011 \\
 135.530 -    20.02.2011 & 2:45 & Update auf Isabelle2011, Fehlersuche \\
 135.531 -    21.02.2011 & 6:30 & ... \\
 135.532 -    25.02.2011 & 5:30 & ... \\
 135.533 -    26.02.2011 & 4:30 & ... \\
 135.534 -    03.03.2011 & 5:00 & ... \\
 135.535 -    04.03.2011 & 6:00 & Tests reparieren \\
 135.536 -\end{tabular}
 135.537 -
 135.538 -\subsection*{Parsen aus \textit{contexts}}
 135.539 -\begin{tabular}[t]{lll}
 135.540 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
 135.541 -    02.03.2011 & 1:30 & vorbereitendes Übungsbeispiel \\
 135.542 -    03.03.2011 & 1:00 & ... \\
 135.543 -    04.03.2011 & 5:00 & Funktion {\tt parseNEW} schreiben \\
 135.544 -    05.03.2011 & 3:00 & Funktion {\tt vars} anpassen, {\tt declare\_constraints} neu \\
 135.545 -    07.03.2011 & 8:45 & {\tt parseNEW}, Spezifikationen studieren \\
 135.546 -    08.03.2011 & 6:00 & {\it context} in zentrale Datenstrukturen einbauen \\
 135.547 -    09.03.2011 & 2:00 & Fehlersuche {\it context}-Integration \\
 135.548 -\end{tabular}
 135.549 -
 135.550 -\subsection*{Spezifikationsphase mit \textit{context}s}
 135.551 -\begin{tabular}[t]{lll}
 135.552 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
 135.553 -    10.03.2011 & 2:30 & {\it context} in {\tt prep\_ori} und {\tt appl\_add} einbauen\\
 135.554 -    11.03.2011 & 5:45 & {\tt appl\_add} überarbeiten \\
 135.555 -    12.03.2011 & 5:15 & Fehlersuche \\
 135.556 -    14.03.2011 & 2:00 & ... \\
 135.557 -    16.03.2011 & 2:30 & ... \\
 135.558 -    17.03.2011 & 1:45 & ... \\
 135.559 -    18.03.2011 & 4:45 & ..., Optimierung \\
 135.560 -    19.03.2011 & 5:30 & ... \\
 135.561 -    21.03.2011 & 3:00 & Abschluss Spezifikationsphase \\
 135.562 -\end{tabular}
 135.563 -
 135.564 -\subsection*{L\"osungsphase mit \textit{context}s}
 135.565 -\begin{tabular}[t]{lll}
 135.566 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
 135.567 -    22.03.2011 & 4:30 & {\it context} in Funktion {\tt solve} einbauen\\
 135.568 -    23.03.2011 & 4:45 & Tests reparieren \\
 135.569 -    24.03.2011 & 3:30 & ... \\
 135.570 -    25.03.2011 & 2:00 & ... \\
 135.571 -    03.04.2011 & 4:00 & ... \\
 135.572 -    05.04.2011 & 8:00 & Optimierung \\
 135.573 -    06.04.2011 & 7:15 & L\"osung Exponentenoperator \\
 135.574 -    07.04.2011 & 7:00 & ... \\
 135.575 -    12.04.2011 & 3:30 & Projektbericht \\
 135.576 -\end{tabular}
 135.577 -
 135.578 -\end{document}
   136.1 --- a/src/Doc/isac/msteger/README	Mon Sep 16 12:27:20 2013 +0200
   136.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   136.3 @@ -1,2 +0,0 @@
   136.4 -bakk-arbeit/ contains stylefiles required for Bernhard Aichernig's format.
   136.5 -These probably go to a shared directory.
   136.6 \ No newline at end of file
   137.1 --- a/src/Doc/isac/msteger/bakk-arbeit/CLEANUP	Mon Sep 16 12:27:20 2013 +0200
   137.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   137.3 @@ -1,10 +0,0 @@
   137.4 -rm *.dvi
   137.5 -rm *.bbl
   137.6 -rm *.blg
   137.7 -rm *.aux
   137.8 -rm *.log
   137.9 -rm *.nav
  137.10 -rm *.out
  137.11 -rm *.snm
  137.12 -rm *.toc
  137.13 -rm *~
   138.1 --- a/src/Doc/isac/msteger/bakk-arbeit/content.tex	Mon Sep 16 12:27:20 2013 +0200
   138.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   138.3 @@ -1,607 +0,0 @@
   138.4 -\chapter{Definition der Aufgabenstellung}
   138.5 -\section{Detaillierte Beschreibung der Aufgabenstellung}
   138.6 -Zu Beginn des Projekts wurden einige Vorgaben und Ziele des Projektes erarbeitet und im Laufe des Projekts angepasst wo notwendig. Es wurde bewusst auf eine zu einschr\"ankende Aufgabenstellung verzichtet, da Entwicklungen und Erarbeitungen von verschiedenen Umsetzungsstrategien erw\"unscht war.
   138.7 -
   138.8 -Hauptaugenmerk war dabei auf die Erstellung eines jEdit-Plugins gelegt worden, das als Vorarbeit zu Back's Structured Derivations dienen soll. Mit anderen Worten, es sollte so viel Plugin-Code, wie im begrenzten Projektzeitraum m\"oglich, implementiert werden.
   138.9 -
  138.10 -Weiters sollte eine Projektstruktur aufgebaut werden, die die Initialisierungsarbeiten von weiterf\"uhrende bzw. nachfolgende Projekten erleichtert und somit verk\"urzt. Dabei sollte darauf geachtet werden, dass die vom Isabelleteam bereits verwendete Projekthierarchie soweit wie m\"oglich \"ubernommen bzw. erweitert wird.
  138.11 -Die nachfolgende Auflistung soll die wichtigsten Tasks nochmals zusammenfassen:
  138.12 -\begin{enumerate}
  138.13 -\item Relevante Isabelle Komponenten identifizieren und studieren
  138.14 -\item Installation der Standard-Komponenten
  138.15 -\item Entwicklungsumgebung vom Isabelle-Team kopieren
  138.16 -\item Relevante Komponenten implementieren
  138.17 -\begin{itemize}
  138.18 -\item jEdit Plugin f\"ur SD
  138.19 -\item zugeh\"origen Parser
  138.20 -\item nicht vorgesehen: SD-Interpreter in Isar (SML)
  138.21 -\end{itemize}
  138.22 -\end{enumerate}
  138.23 -In Abs.\ref{zusammenfassung} wird r\"uckblickend zusammengefasst, welche dieser Punkte in welchem Ausma\ss{} in dieser Bachelor-Arbeit erledigt wurden.
  138.24 -
  138.25 -\chapter{Beleuchtung der Projekt-relevanten Technologien}
  138.26 -Dieses Kapitel soll die vielen unterschiedlichen Technologien, die im Rahmen dieser Arbeit verwendet oder zumindest ber\"uhrt wurden, beleuchten und dem Leser helfen, nachfolgende Zusammenh\"ange zu verstehen. Nat\"urlich kann in keines der folgenden Themen sehr tief eingestiegen werden. Viel mehr sollen die nachfolgenden Ausf\"uhrungen einen groben \"Uberblick \"uber die einzelnen Technologien geben.
  138.27 -\section{Back's Structured Derivations}
  138.28 -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.
  138.29 -
  138.30 -Das nachfolgende Beispiel zeigt ein einfaches Beispiel, wie eine Formel mittels SD dargestellt bzw. umgeformt werden kann:
  138.31 -
  138.32 -%{\footnotesize
  138.33 -\begin{tabbing}
  138.34 -123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
  138.35 -\>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
  138.36 -\> \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
  138.37 -\>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
  138.38 -\> \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
  138.39 -\>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
  138.40 -\> \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
  138.41 -\> \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
  138.42 -\> \> \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
  138.43 -\> \>$\equiv$\>\vdots\\
  138.44 -\> \> \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
  138.45 -\> \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$ \\
  138.46 -\> \> \>$1 + -1 * x$\\
  138.47 -\>\dots\>$1 + -1 * x$\\
  138.48 -\>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
  138.49 -\> \>$1-x$
  138.50 -\end{tabbing}
  138.51 -%}
  138.52 -
  138.53 -Dieses Beispiel kann wie folgt interpretiert werden:
  138.54 -\begin{enumerate}
  138.55 -\item Die erste Zeile ist als Angabe bzw. Ausgangspunkt der Berechnung zu verstehen.
  138.56 -\item Nun folgt der eigentliche Ablauf einer Umformung mittels SD: Mit der Formel in der zweiten Zeile beginnt die Berechnung.
  138.57 -\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 schlie{\ss}en zu k\"onnen.
  138.58 -\item Aus dieser Rechenvorschrift ergibt sich die Formel in der n\"achsten Zeile.
  138.59 -\item Dieser Ablauf wiederholt sich und zieht sich \"uber die weiteren Berechnungen.
  138.60 -\end{enumerate}
  138.61 -
  138.62 -Back liefert mit SD eine sehr gute Darstellungs- und Verbarbeitungs-Richtlinie, die einerseits dem Leser/Anwender hilft, da durch die Regel- bzw. Beschreibungs-Zeile klar gestellt wird, wie der letzte Berechnungsschritt durchgef\"uhrt wurde. Andererseits 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\"oglich ist.
  138.63 -
  138.64 -\section{Der Texteditor jEdit}\label{jEdit}
  138.65 -% http://www.jedit.org/
  138.66 -% http://de.wikipedia.org/wiki/JEdit
  138.67 -% http://www.chip.de/downloads/jEdit_19235021.html
  138.68 -%
  138.69 -jEdit ist ein in Java geschriebener und als Open-Source-Projekt erh\"altlicher Texteditor, der vor allem durch sein sehr gut entwickeltes und ebenso einfaches Plugin-Management-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.
  138.70 -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.
  138.71 -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.
  138.72 -
  138.73 -\subsection{Das Plugin-System}
  138.74 -% http://jedit.org/users-guide/writing-plugins-part.html
  138.75 -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} verwendet. Dabei ist es m\"oglich, dass Java-Plugins mit Scala-Plugins kombiniert werden, da diese auch problemlos miteinander kommunizieren k\"{o}nnen.
  138.76 -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.
  138.77 -Weiters bietet sich die M\"oglichkeit, 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.
  138.78 -
  138.79 -
  138.80 -\subsection{Pluginstruktur}
  138.81 -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.
  138.82 -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.
  138.83 -
  138.84 -\section{Isabelle}
  138.85 -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(mit funktionalen sowie imperativen Sprachanteilen). 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.
  138.86 -
  138.87 -\subsection{Isabelle-Pure}
  138.88 -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.
  138.89 -Eine Auflistung der f\"ur das Isabelle-Pure-Packet ben\"otigten Scala-Source-Filles kann Anhang B.2 entnommen werden.
  138.90 -
  138.91 -\subsection{Isabelle-jEdit}
  138.92 -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.
  138.93 -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.
  138.94 -
  138.95 -\subsection{Paketstruktur von Isabelle}
  138.96 -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.
  138.97 -Die nachfolgende Auflistung zeigt alle Pakete, die f\"{u}r SD bzw. {\sisac} von Bedeutung sind und und wo diese zu finden sind.
  138.98 -
  138.99 -
 138.100 -\begin{itemize}
 138.101 -\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.
 138.102 -\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.
 138.103 -\item \textit{src/Tools/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...}
 138.104 -\item \textit{src/Tools/jEditC/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.
 138.105 -\item \textit{src/Tools/jEditC/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 bzw. sollte dies nur f\"ur schwer nachvollziebare Abl\"aufe ohne Isabelle-Beteiligung angewendet werden.
 138.106 -\end{itemize}
 138.107 -
 138.108 -Siehe dazu auch Anhang B. Dort sind alle relevanten jar-Pakete noch einmal aufgelistet und entsprechend gruppiert.
 138.109 -
 138.110 -\section{Die Programmiersprache Scala}
 138.111 -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.
 138.112 -
 138.113 -\subsection{Grundlage der Sprache}
 138.114 -Scala \cite{odersky:scala06} 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 \cite{pl:milner97} ab. Dies, und vorallem auch das von Erlang \cite{armstrong:erlang96} \"ubernommene und sehr gut umgesetzte Actorprinzip \cite{Haller:2009:SAU:1496391.1496422,scala:jmlc06}, sind wohl die Hauptgr\"unde, warum sich das Isabelle-Entwicklungsteam f\"{u}r diese Sprache entschieden hat. Wie bereits 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.
 138.115 -
 138.116 -Dieser direkte Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing gezeigt bzw. die Vorteile, die daraus resultieren, beleuchtet werden.
 138.117 -
 138.118 -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.
 138.119 -
 138.120 -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.
 138.121 -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.
 138.122 -
 138.123 -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.
 138.124 -
 138.125 -\subsection{Scala, Java und jEdit}
 138.126 -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!
 138.127 -
 138.128 -\subsection{Der Isabelle-Scala-Layer}
 138.129 -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.
 138.130 -
 138.131 -In diesem Absatz sollen nun die Eigenschaften des Scala-Layers und die damit verbundenen Chancen f\"ur das Isac- bzw. SD-Projektes
 138.132 -erarbeitet werden.
 138.133 -
 138.134 -\begin{figure}
 138.135 -\begin{center}
 138.136 -\includegraphics[width=100mm]{../fig-reuse-ml-scala-SD.png}
 138.137 -\end{center}
 138.138 -\label{fig-reuse-ml-scala}
 138.139 -\caption{Der Scala-Layer zwischen Java und SML}
 138.140 -\end{figure}
 138.141 -
 138.142 -Wie %Fig.\ref{fig-reuse-ml-scala} WARUM GEHT DAS NICHT ???
 138.143 -Fig.3.1
 138.144 -zeigt, verbindet der Scala-Layer 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 sollte hier also nicht angreifen sonder die Isabelle-Theorien entsprechend erweitern.
 138.145 -
 138.146 -\chapter{Konfiguration und Implementation der Komponenten}
 138.147 -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 \ref{files-SD-plugin} entnommen werden.
 138.148 -
 138.149 -\section{Konfiguration des Netbeans- (NB-) Projektes}
 138.150 -Um in k\"unftigen Entwicklungsvorhaben effizient kooperieren zu k\"onnen, wurde das NB-Projekt genau nach den Vorgaben des Isabelle-Teams konfiguriert. Voraussetzung f\"ur die Konfiguration sind die Files aus dem Repository laut Anhang \ref{files-SD-plugin}. Die Konfiguration des NB-Projektes ``testSD-jedit'' erfolgt in folgenden Schritten:
 138.151 -
 138.152 -\begin{enumerate}
 138.153 -\item Softwarekomponenten aus dem Isabelle\_bundle checken; diese sind alle im Verzeichnis {\tt contrib}:
 138.154 -  \begin{enumerate}
 138.155 -  \item {\tt contrib/scala-\dots} Scala-Compiler und Runtime-System
 138.156 -  \item {\tt contrib/scala-\dots} jEdit
 138.157 -  \item {\tt src/Tools/jEditC} der Code f\"ur das Test-Plugin
 138.158 -  \end{enumerate}
 138.159 -\item Konfigurations-Files von Netbeans im ``Files''-View checken; Achtung: die Files beeinflussen sich gegenseitig, direkte Eingriffe sind problematisch:
 138.160 -\begin{enumerate}
 138.161 -\item {\tt build.xml} wurde direkt aus dem Template in {\tt src/Tools/jEdit/} erzeugt; von hier nimmt NB die Daten um Daten in (Teilen von den) anderen Konfigurations-Files zu \"andern; NB nimmt hier keine automatischen Ver\"anderungen vor.
 138.162 -\item {\tt nbproject/build-impl.xml} z.T. automatisch erzeugt aus {\tt build.xml} und z.T. untenstehenden Files
 138.163 -\item {\tt nbproject/genfiles.properties}
 138.164 -\item {\tt nbproject/project.properties}, z.B. Projekt-Name
 138.165 -\item {\tt nbproject/project.xml}
 138.166 -\end{enumerate}
 138.167 -\item Sacla-plugin installieren laut {\tt http://wiki.netbeans.org/Scala69},
 138.168 -\begin{enumerate}
 138.169 -\item insbesonders siehe ``Install with NetBeans 6.9''
 138.170 -\item nach {\tt /usr/local/netbeans.../plugins/scala/} kopieren
 138.171 -\end{enumerate}
 138.172 -\item Scala-plugin in NB installieren
 138.173 -\begin{enumerate}
 138.174 -\item Men\"u $>$ Tools $>$ Plugins $>$ Downloaded $>$ Add Plugins
 138.175 -\item alle Files von {\tt /usr/local/netbeans\dots/plugins/scala/} ausw\"ahlen
 138.176 -\item Fenster in ``Add Plugins'' zeigt alle ausgew\"alten Files
 138.177 -\item $<$Install$>$ ruft den Wizzard auf, $<$Next$>$ erzeugt i.A. ein ``Warning'' das zu \"ubergehen ist
 138.178 -\item Funktionstest: Men\"ue $>$ Files $>$ New Project: zeigt Scala als ``Categories''
 138.179 -\end{enumerate}
 138.180 -\item Neues Projekt ``testSD-jedit'' konfigurieren
 138.181 -\begin{enumerate}
 138.182 -\item Men\"u $>$ Open Project (weil schon aus dem Repository die notwendigen Files vorhanden sind)
 138.183 -\item /src/Tools/jeditC: Reference Problems, weil jEdit die Plugins von \ref{plugins} braucht
 138.184 -\item Funktionskontrolle: ``Projects''-View zeigt das neue Projekt.\\
 138.185 -  Die Konfigurations-Files sind v\"ollig getrennt von denen anderer Projekte~!
 138.186 -\item\label{reference-pbl} Referenz-Probleme beheben; das zeigt auch eventuell fehlende Files:
 138.187 -\begin{enumerate}
 138.188 -\item ``Projects''-View $>$ rightMouse $>$ Resolve Reference Problems: Fenster zeigt dieListe der fehlenden Dateien; $<$Next$>$
 138.189 -\item Files holen aus ``Tools'' $>$ Libraries: \"uber Filebrowser aus dem Isabelle\_bundle holen {\tt contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars}
 138.190 -\item\label{plugins} ``New Library''
 138.191 -\begin{enumerate}
 138.192 -\item Cobra-renderer: cobra.jar
 138.193 -\item Console: Console.jar
 138.194 -\item ErrorList: ErrorList.jar
 138.195 -\item Hyperlinks: Hyperlinks.jar
 138.196 -\item Isabelle-Pure: Pure.jar
 138.197 -\item Rhino-JavaScript: js.jar
 138.198 -\item Scala-compiler: scala-compiler.jar
 138.199 -\item SideKick: SideKick.jar
 138.200 -\end{enumerate}
 138.201 -\item Funktions-Kontrollen
 138.202 -\begin{enumerate}
 138.203 -\item das kleine gelbe Warndreieck im ``Projects''-View ist verschwunden
 138.204 -\item im ``Projects''-View sind nun 2 Ordner: {\tt src} und {\tt Libraries}
 138.205 -\end{enumerate}
 138.206 -\end{enumerate}
 138.207 -\item jEdit-Paket zum ``testSD-jedit''-Projekt hinzuf\"ugen
 138.208 -\begin{enumerate}
 138.209 -\item ``Project''-View $>$ rightMouse $>$ Add Jar/Folder: Filebrowser
 138.210 -\item /contrib/jedit.../jedit.jar
 138.211 -\item Funktions-Kontrolle: ist in ``Projects''/Libraries/jedit.jar
 138.212 -\end{enumerate}
 138.213 -\item Das neue Projekt ``testSD-jedit'' zum Hauptprojekt machen: ``Project''-View $>$ rightMouse $>$ Set as Main Project; Funktions-Kontrolle: der Projektname ist boldface.
 138.214 -\end{enumerate}
 138.215 -\item den neuen Isabelle/Scala-Layer ({\tt Pure.jar}) erzeugen mit {\tt bin/testSD}; siehe Pkt.\ref{build-isa-scala} unten.
 138.216 -\end{enumerate}
 138.217 -
 138.218 -\noindent Ab nun wird die Konfiguration \"uber ``trial and error'' zu Ende gef\"uhrt; die unten angef\"uhrten Fehler entstanden durch Umbenennung des Projektes von ``isac-jedit'' auf ``testSD-jedit'' w\"ahrend der oben beschriebenen Installation.
 138.219 -\begin{enumerate}
 138.220 -\item Build des Plugins schl\"agt fehl: Men\"u $>$ Build Main
 138.221 -  \begin{enumerate}
 138.222 -  \item Fehler: {\it Target ``Isac-impl.jar'' does not exist in the project ``testSD-jedit''. It is used from target ``debug''}
 138.223 -    \begin{enumerate}
 138.224 -    \item\label{restart-NB} Versuch
 138.225 -      \begin{itemize}
 138.226 -      \item {\tt build-impl.xml} l\"oschen
 138.227 -      \item NetBeans neu starten, stellt build-impl.xml automatisch aus build.xml wieder her
 138.228 -      \item \dots hat in diesem Fall nicht geholfen
 138.229 -      \end{itemize}
 138.230 -    \item Versuch zur Vermutung: Projekt wurde umbenannt von ``Isac'' in ``testSD-jedit'', entsprechende Eintr\"age in den Konfigurations-Dateien wurden automatisch richtig ersetzt, aber nicht in {\tt build.xml}
 138.231 -      \begin{itemize}
 138.232 -      \item in {\tt build.xml} query-replace ``isac-jedit'' in ``testSD-jedit''
 138.233 -      \end{itemize}
 138.234 -    \end{enumerate}
 138.235 -  \item Fehler: {\it Problem: failed to create task or type scalac}
 138.236 -    \begin{enumerate}
 138.237 -    \item Versuch: Pfad zum Scala bekanntgeben
 138.238 -      \begin{itemize}
 138.239 -      \item {\tt /usr/local/netbeans-6.9.1/etc/netbeans.conf}: netbeans\_default\_options= \dots richtigen Scala-Pfad setzen
 138.240 -      \item build-impl.xml l\"oschen
 138.241 -      \item NetBeans neu starten (siehe \ref{restart-NB}).
 138.242 -      \end{itemize}
 138.243 -    \end{enumerate}
 138.244 -  \item Wenn Fehler: {\it /usr/local/isabisac/src/Tools/jEditC/\${project.jEdit}/modes does not exist}
 138.245 -    \begin{enumerate}
 138.246 -    \item grep -r "project.jEdit" *
 138.247 -    \item {\tt nbproject/project.properties}: project.jEdit=contrib/jEdit
 138.248 -  \end{enumerate}
 138.249 -  \end{enumerate}%??indent
 138.250 -\item Fehlersuche in den Project Files, nicht in {\tt build.xml}:\\
 138.251 -{\it src/Tools/jEditC/src/testSD.scala:225: error: value Isac is not a member of package isabelle}
 138.252 -  \begin{enumerate}
 138.253 -  \item den Link zu {\tt testSD.scala:22} folgen
 138.254 -  \item\label{build-intermed} als Zwischenschritt eine noch nicht erzeugte Class ``Isac'' auskommentieren; siehe Pkt.\ref{build-intermed-end} unten\\
 138.255 -val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')\\
 138.256 -    val str1: String = ``TEST'' //isabelle.Isac.parse(``Testdaten aus dem Parser!'')
 138.257 -  \item nochmals Men\"u $>$ Build (Hammer) \dots successful (wegen auskommentierter Zeile)
 138.258 -  \item in der Konsole beobachten, welche Files kopiert werden und vergleichen mit {\tt build.xml}, z.B. 
 138.259 -     $<$target name=''-pre-jar''$>$
 138.260 -     $<$target name=''-post-jar''$>$
 138.261 -  \item {\tt bin/testSD} ausf\"uhren \dots
 138.262 -  \item =dots stellt den entscheidender Schritt dar: ein neues {\tt Pure.jar} wurde erzeugt; dieses ist nun erweitert mit einer class {\tt Isac}; diese Klasse wurde erzeugt durch Code in \\{\tt scr/Pure/Isac/isac.scala}
 138.263 -  \item\label{build-intermed-end} den Zwischenschritt Pkt.\ref{build-intermed} oben r\"uckg\"angig machen:\\
 138.264 -    ``val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')".\\
 138.265 -    Dieser Befehl braucht das {\em neue} {\tt Pure.jar} am richtigen Platz \dots
 138.266 -  \item \dots das Shellscript {\tt bin/testSD\_jedit} erzeugt dieses {\tt Pure.jar}
 138.267 -  \end{enumerate}
 138.268 -\item\label{build-isa-scala} Fehler beim Exekutieren von {\tt bin/testSD}
 138.269 -  \begin{enumerate}
 138.270 -  \item einfach auf die ``error messages'' schauen, eg. {\it src/Pure/: no such file or directory} \dots
 138.271 -  \item \dots hei\ss t, dass das Skript nicht vom richtigen Pfad {\tt \~{\,}\~{\,}} gestartet wurde --- dieses Skript sollte also verbessert werden.
 138.272 -  \item Funktionstest: \\
 138.273 -    \#\#\#\\
 138.274 -    \#\#\# Building Isabelle/Scala layer\\
 138.275 -    \#\#\#
 138.276 -  \end{enumerate}
 138.277 -\item Fehlermeldung beim Starten des Plugins aus NB, die \"ubergehen sind:
 138.278 -\begin{verbatim}
 138.279 -/home/neuper/.jedit/jars/Console.jar:
 138.280 -Two copies installed. Please remove one of the two copies.
 138.281 -/home/neuper/.jedit/jars/Hyperlinks.jar:
 138.282 -Two copies installed. Please remove one of the two copies.
 138.283 -/home/neuper/.jedit/jars/SideKick.jar:
 138.284 -Two copies installed. Please remove one of the two copies.
 138.285 -/home/neuper/.jedit/jars/ErrorList.jar:
 138.286 -Two copies installed. Please remove one of the two copies.
 138.287 -\end{verbatim}
 138.288 -Fehler zu beseitigen mit {\tt rm -r \~/jedit/jars}
 138.289 -\item \textit{Referenzproblem} auf {\tt Pure.jar}: siehe Pkt.\ref{reference-pbl} auf S.\pageref{reference-pbl}.
 138.290 -
 138.291 -%$<$ $>$
 138.292 -%Men\"u $>$ $>$ $>$ $>$ $>$ $>$
 138.293 -%``Project''-View $>$ rightMouse $>$ $>$ $>$ $>$ $>$
 138.294 -%\item
 138.295 -%  \begin{enumerate}
 138.296 -%  \item
 138.297 -%    \begin{enumerate}
 138.298 -%    \item
 138.299 -%      \begin{itemize}
 138.300 -%      \item
 138.301 -%        \begin{itemize}
 138.302 -%        \item
 138.303 -%        \item
 138.304 -%        \item
 138.305 -%        \end{itemize}
 138.306 -%      \item
 138.307 -%      \item
 138.308 -%      \end{itemize}
 138.309 -%    \item
 138.310 -%    \item
 138.311 -%  \end{enumerate}
 138.312 -%\item
 138.313 -%\item
 138.314 -%\end{enumerate}
 138.315 -%\item
 138.316 -%\begin{enumerate}
 138.317 -%\item
 138.318 -%\begin{enumerate}
 138.319 -%\item
 138.320 -%\begin{itemize}
 138.321 -%\item
 138.322 -%\begin{itemize}
 138.323 -%\item
 138.324 -%\item
 138.325 -%\item
 138.326 -%\end{itemize}
 138.327 -%\item
 138.328 -%\item
 138.329 -%\end{itemize}
 138.330 -%\item
 138.331 -%\item
 138.332 -%\end{enumerate}
 138.333 -%\item
 138.334 -%\item
 138.335 -%\end{enumerate}
 138.336 -\end{enumerate}
 138.337 -
 138.338 -
 138.339 -\section{Implementation der jEdit Komponenten}
 138.340 -
 138.341 -\subsection{Erstellen des Plugin-Ger\"{u}sts}
 138.342 -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.
 138.343 -
 138.344 -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 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.
 138.345 -
 138.346 -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.
 138.347 -
 138.348 -\subsection{Erzeugung des Plugins}
 138.349 -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, Anhang C):
 138.350 -\begin{enumerate}
 138.351 -\item Das Plugin kann mittels Kommandline folgenderma{\ss}en erstellt werden: \\ \textit{cd ISABELLE\_HOME/src/Tools/isac/jEdit} $\rightarrow$ \textit{ant jar}
 138.352 -\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/}
 138.353 -\item jEdit ausf\"{u}hren und testen
 138.354 -\end{enumerate}
 138.355 -
 138.356 -\subsection{Verbindung zum Isabelle-Pure Plugin herstellen}
 138.357 -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, {\tt Pure.jar}, weitergegeben werden. Dort k\"{o}nnen die Daten verwertet und aufbereitet zur\"{u}ck an das Frontend gereicht werden.
 138.358 -
 138.359 -\begin{figure}
 138.360 -\begin{center}
 138.361 -\includegraphics[width=100mm]{../fig-jedit-plugins-SD.png}
 138.362 -\end{center}
 138.363 -\label{fig-jedit-plugins-SD}
 138.364 -\caption{jEdit Plugins und die Verbindung zu Isabelle}
 138.365 -\end{figure}
 138.366 -
 138.367 -%Fig.\ref{fig-jedit-plugins-SD} WARUM GEHT DAS NICHT ???
 138.368 -Fig.4.1 zeigt die involvierten Komponenten und ihren Zusammenhang.
 138.369 -
 138.370 -Der Zusammenhang zwischen dem Kern von Isabelle, Isabelle-Pure und dem Plugin wird folgenderma\ss en hergestellt: Zun\"{a}chst wird {\tt Pure.jar} leicht modifiziert, danach neu erstellt und zuletzt zu den restlichen jEdit-Plugins hinzugef\"{u}gt. 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.
 138.371 -
 138.372 -
 138.373 -\begin{enumerate}
 138.374 -\item Um den \sisac-Teil im Isabelle-Pure genau abzugrenzen, wurde ein Ordner \textit{Isac} angelegt und ein Testfile \textit{isac.scala} erstellt.
 138.375 -\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.
 138.376 -\item Nun kann Pure.jar mittels Kommandline erstellt werden: \textit{cd /src/Pure} $\rightarrow$ \textit{../../bin/isabelle env ./build-jars}
 138.377 -\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/}
 138.378 -\item jEdit ausf\"{u}hren und testen
 138.379 -\end{enumerate}
 138.380 -Alle die oben angef\"{u}hrten Punkte, sowie das Erzeugen und Kopieren des Plugins selbst, werden vom Script isac\_jedit erledigt.
 138.381 -Das Skript kann dem Anhang C entnommen werden.
 138.382 -
 138.383 -\section{``Run Configurations''}
 138.384 -Zwischen Isabelle2009-2 und Isabelle2011 hat sich viel ge\"andert. Jetzt mit Isabelle2011 sieht es folgenderma\ss en aus:
 138.385 -
 138.386 -Am Anfang der Plugin-Entwicklung wird man versuchen, ohne eine Verbindung zu Isabelle auszukommen; in sp\"ateren Phase wird man genau diese Verbindung brauchen. Starten eines Plugins in NB mit gleichzeitigem Hochfahren von Isabelle ist schwierig.
 138.387 -
 138.388 -Folgende M\"oglichkeiten gibt es beim Debuggen:
 138.389 -
 138.390 -\begin{enumerate}
 138.391 -\item Man macht alles in Netbeans.  Mit dem -Disabelle.home=... sollte man
 138.392 -      die Applikation direkt aus der IDE starten und profilen/debuggen
 138.393 -      k\"onnen.  Das war der urspr\"ungliche Plan des ganzen Setups, d.h. der
 138.394 -      Grund warum er so kompliziert ist.
 138.395 -
 138.396 -\item Man startet aus der Shell \"uber "isabelle jedit -d" und verbindet
 138.397 -      dann den Netbeans debugger (oder jeden anderen JVM debugger) \"uber
 138.398 -      den hier ausgegebenen Port.
 138.399 -
 138.400 -\item Man startet "isabelle jedit", geht dann in das "Console" Plugin und
 138.401 -      w\"ahlt dort das "Scala" Sub-Plugin aus.  Nach ca. 5s Bedenkzeit steht
 138.402 -      der interaktive Scala toplevel innerhalb von Isabelle/jEdit zur
 138.403 -      Verf\"ugung.  Nun kann man direkt Dinge auswerten etc. und schauen was
 138.404 -      passiert.
 138.405 -
 138.406 -      Auf dem Cambridge Workshop 2010, {\tt T06\_System.thy} sind Beispiele zu finden.
 138.407 -      Siehe subsection Isabelle/Scala.  Man aktuviert dazu Isabelle/jEdit
 138.408 -      mit obigem thy File und kopiert die Scala snippets aus dem Text
 138.409 -      zeilenweise in das Console/Scala Fenster.
 138.410 -
 138.411 -\item Man streut einfach {\tt System.err.println} in seinen Code ein.
 138.412 -\end{enumerate}
 138.413 -Die M\"oglichkeiten (3) oder (4) sind zu bevorzugen.
 138.414 -
 138.415 -Ferner gibt es einige externe JVM Diagnose-Tools.  Zu nennen sind {\tt jvisualvm} oder {\tt jconsole} um threads, heaps, profiles etc. anzuschauen, da sich das alles gerne verheddert.
 138.416 -
 138.417 -Richtig koordiniertes Hochfahren aller Komponenten braucht ein Shellscript wie {\tt isabelle jedit}.
 138.418 -
 138.419 -\section{Umsetzung des SD-Parsers}
 138.420 -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.
 138.421 -
 138.422 -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.
 138.423 -
 138.424 -
 138.425 -\chapter{Ausblick: Von SD- zum \isac-Plugin}
 138.426 -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.
 138.427 -
 138.428 -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.
 138.429 -
 138.430 -\chapter{Zusammenfassung und R\"{u}ckblick}
 138.431 -Zusammenfassend wird nun ein \"Uberblick gegeben, welche Milestones erledigt wurden und welche nicht; Details dazu finden sich in Anhang A. %TODO
 138.432 -Abschlie{\ss}end gebe ich einen R\"uckblick auf meine pers\"onlichen Erfahrungen aus dieser Bakkalaureats-Arbeit.
 138.433 -
 138.434 -\section{Zusammenfassung}\label{zusammenfassung}
 138.435 -Folgende Milestones wurden erfolgreich abgeschlossen:
 138.436 -\begin{enumerate}
 138.437 -\item Relevante Isabelle Komponenten dokumentiert
 138.438 -
 138.439 -\item Installation der Standard-Komponenten:
 138.440 -\begin{itemize}
 138.441 -\item Mercurial Versioncontrol
 138.442 -\item NetBeans IDE
 138.443 -\item Standard Isabelle Bundle
 138.444 -\end{itemize}
 138.445 -
 138.446 -\item Entwicklungsumgebung vom Isabelle-Team kopieren
 138.447 -\begin{itemize}
 138.448 -\item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
 138.449 -\item jEdit als NetBeans Projekt definiert
 138.450 -\end{itemize}
 138.451 -
 138.452 -\item Relevante Komponenten implementieren
 138.453 -\begin{itemize}
 138.454 -\item jEdit Plugin f\"ur SD
 138.455 -\item Verbindung des Plugins zu Isabelle
 138.456 -\item zugeh\"origen Parser: nur ein Test in SML
 138.457 -\end{itemize}
 138.458 -\end{enumerate}
 138.459 -
 138.460 -\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.
 138.461 -
 138.462 -\paragraph{Voraussetzungen f\"ur k\"unftige Entwicklung} geschaffen:
 138.463 -\begin{enumerate}
 138.464 -\item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
 138.465 -\item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
 138.466 -\item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
 138.467 -\end{enumerate}
 138.468 -
 138.469 -\section{R\"uckblick}
 138.470 -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.
 138.471 -
 138.472 -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\"onnen.
 138.473 -
 138.474 -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.
 138.475 -
 138.476 -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.
 138.477 -
 138.478 -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.
 138.479 -
 138.480 -%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!
 138.481 -
 138.482 -%\chapter{Milestones und Arbeitsprotokolle}
 138.483 -%\section{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010}
 138.484 -%\begin{itemize}
 138.485 -%\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010
 138.486 -%\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
 138.487 -%\item Scala Actors: beendet am 12.08.2010
 138.488 -%\end{itemize}
 138.489 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 138.490 -%\hline
 138.491 -%Datum & T\"atigkeit & Einheiten \\ \hline
 138.492 -%12.07.2010 & Meeting: erste Besprechung und Erkl\"{a}rungen zu Isabelle, Isac und CTPs & 2 \\ \hline
 138.493 -%15.07.2010 & Recherche \"{u}ber Isabelle und CTPs & 3 \\ \hline
 138.494 -%20.07.2010 & Meeting: Besprechen der grunds\"{a}tzlichen Vorgangsweise und Ziele & 1 \\ \hline
 138.495 -%23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenh\"{a}nge mit Isac abkl\"{a}ren & 1 \\ \hline
 138.496 -%30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise \"{u}ber Backs 'structured derivations'; Begriffserkl\"{a}rung & 3 \\ \hline
 138.497 -%01.08.2010 & Recherche: Buch f\"{u}r Scala & 2 \\ \hline
 138.498 -%03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
 138.499 -%05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1 \\ \hline
 138.500 -%06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
 138.501 -%08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
 138.502 -%09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
 138.503 -%12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
 138.504 -%24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
 138.505 -%25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
 138.506 -%27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline \hline
 138.507 -% & Anzahl der Einheiten & 44 \\
 138.508 -%\hline
 138.509 -%\end{tabular}
 138.510 -%
 138.511 -%
 138.512 -%\section{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
 138.513 -%\begin{itemize}
 138.514 -%\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
 138.515 -%\item Scala in NetBeans eingebunden: beendet am 22.07.2010
 138.516 -%\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010
 138.517 -%\end{itemize}
 138.518 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 138.519 -%\hline
 138.520 -%Datum & T\"atigkeit & Einheiten \\ \hline
 138.521 -%19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
 138.522 -%20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
 138.523 -%21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
 138.524 -%22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
 138.525 -%23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausf\"{u}hren: testen & 5 \\ \hline
 138.526 -%27.07.2010 & Isabelle-jEdit-Plugin: \"{a}nderungen an der Projektstruktur & 7 \\ \hline
 138.527 -%28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
 138.528 -%29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
 138.529 -%30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung \"{u}ber Erfahrungen mit Filestruktur & 4 \\ \hline
 138.530 -%02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
 138.531 -% & Anzahl der Einheiten & 60 \\
 138.532 -%\hline
 138.533 -%\end{tabular}
 138.534 -%
 138.535 -%\section{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010}
 138.536 -%\begin{itemize}
 138.537 -%\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
 138.538 -%\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
 138.539 -%\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010
 138.540 -%\end{itemize}
 138.541 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 138.542 -%\hline
 138.543 -%Datum & T\"atigkeit & Einheiten \\ \hline
 138.544 -%10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
 138.545 -%11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
 138.546 -%21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
 138.547 -%22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten f\"{u}r ISAC & 3 \\ \hline
 138.548 -%24.08.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 6 \\ \hline
 138.549 -%26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach L\"{o}sungen & 3 \\ \hline
 138.550 -%28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
 138.551 -%29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
 138.552 -%30.08.2010 & Isabelle-jEdit-Plugin endlich vollst\"{a}ndig lauff\"{a}hig gebracht & 4 \\ \hline
 138.553 -%01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
 138.554 -%04.09.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 5 \\ \hline
 138.555 -%20.09.2010 & Einrichten des Laptops f\"{u}r Isabelle-Isac & 4 \\ \hline
 138.556 -%22.09.2010 & Meeting: Fortschrittsbericht, kurze Einf\"{u}hrung f\"{u}r Mitstreiter & 3 \\ \hline
 138.557 -%
 138.558 -%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
 138.559 -%30.09.2010 & QN: Start mit \"{u}bersetzten der Sourcefiles & 5 \\ \hline
 138.560 -%02.10.2010 & QN: \"{U}bersetzten der Sourcefiles & 6 \\ \hline
 138.561 -%04.10.2010 & QN: \"{U}bersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
 138.562 -%05.10.2010 & QN: QN vollst\"andig in Scala \"{u}bersetzt, testen & 2 \\ \hline \hline
 138.563 -% & Anzahl der Einheiten & 71 \\
 138.564 -%\hline
 138.565 -%\end{tabular}
 138.566 -%
 138.567 -%\section{Experimentelle Parser implementiert: beendet am 04.03.2011}
 138.568 -%\begin{itemize}
 138.569 -%\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
 138.570 -%\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
 138.571 -%\item Implementierung des Scala-Parsers: aufgeschoben
 138.572 -%\end{itemize}
 138.573 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 138.574 -%\hline
 138.575 -%Datum & T\"atigkeit & Einheiten \\ \hline
 138.576 -%28.01.2011 & Testen des SideKick-Parsers im Isabelle-Plugin & 2 \\ \hline
 138.577 -%29.01.2011 & Leichte Modifikationen des SideKick-Parsers im Isabelle-Plugin & 1 \\ \hline
 138.578 -%08.02.2011 & Besprechung zum Abschluss der praktischen Arbeiten & 1 \\ \hline
 138.579 -%16.02.2011 & Erstellen des Isabelle-Pur jar-Files & 1 \\ \hline
 138.580 -%19.02.2011 & Behebung des Problems mit den Umgebungsvariablen & 1 \\ \hline
 138.581 -%03.03.2011 & Erzeugung des Pure.jar Package m\"{o}glich & 2 \\ \hline
 138.582 -%04.04.2011 & Verbindung zwischen Plugin und Isabelle-Pure hergestellt und getestet & 3 \\ \hline
 138.583 -%08.04.2011 & Besprechung: Implementierung des experimentellen Parsers wird nicht mehr durchgef\"{u}hrt & 1 \\ \hline \hline
 138.584 -% & Anzahl der Einheiten & 12 \\
 138.585 -%\hline
 138.586 -%\end{tabular}
 138.587 -%
 138.588 -%\section{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am TO.DO.2011}
 138.589 -%\begin{itemize}
 138.590 -%\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
 138.591 -%\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
 138.592 -%\item Dokumentation abgeschlossen: beendet am TO.DO.2011
 138.593 -%\end{itemize}
 138.594 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 138.595 -%\hline
 138.596 -%Datum & T\"atigkeit & Einheiten \\ \hline
 138.597 -%01.03.2011 & Besprechung zum Ablauf der Dokumentationsarbeiten: Protokoll und Dokumentation & 1 \\ \hline
 138.598 -%01.03.2011 & Erstellen des Protokolls & 2 \\ \hline
 138.599 -%08.03.2011 & Besprechung zur Doku und zur Schnittstelle zu Isabelle-Pure & 1 \\ \hline
 138.600 -%17.03.2011 & Dokumentation schreiben & 2 \\ \hline
 138.601 -%19.03.2011 & Dokumentation schreiben & 3 \\ \hline
 138.602 -%24.04.2011 & Dokumentation schreiben & 2 \\ \hline
 138.603 -%25.04.2011 & Dokumentation schreiben & 4 \\ \hline
 138.604 -%27.04.2011 & Dokumentation schreiben & 2 \\ \hline
 138.605 -%28.04.2011 & Dokumentation: Fertigstellen der ersten Version & 3 \\ \hline \hline
 138.606 -% & Anzahl der Einheiten & 20 \\
 138.607 -%\hline
 138.608 -%\end{tabular}
 138.609 -%
 138.610 -%\section{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}
   139.1 --- a/src/Doc/isac/msteger/bakk-arbeit/master_thesis.bib	Mon Sep 16 12:27:20 2013 +0200
   139.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   139.3 @@ -1,187 +0,0 @@
   139.4 -% Add your bibtex entries
   139.5 -
   139.6 -@Book{aichernig:uni-iist-02,
   139.7 -  editor = 	 {Aichernig, Bernhard K. and Maibaum, Tom},
   139.8 -  title = 	 {Formal Methods at the Crossroads. From Panacea to Foundational Support.
   139.9 -{10th Anniversary Colloquium of UNU/IIST, the International Institute for Software Technology of The United Nations University}},
  139.10 -  publisher = 	 {Springer-Verlag},
  139.11 -  year = 	 {2003},
  139.12 -  volume = 	 {2757},
  139.13 -  series = 	 {Lecture Notes in Computer Science},
  139.14 -  address = 	 {Lisbon, Portugal},
  139.15 -  month = 	 {March 18-20, 2002}
  139.16 -}
  139.17 -
  139.18 -@InCollection{aichernig:mut-test,
  139.19 -  author = 	 {Aichernig, Bernhard},
  139.20 -  title = 	 {A systematic introduction to mutation testing in unifying theories of programming},
  139.21 -  booktitle = 	 {Testing Techniques in Software Engineering},
  139.22 -  pages = 	 {243--287},
  139.23 -  publisher = {Springer Berlin / Heidelberg},
  139.24 -  year = 	 {2010},
  139.25 -  editor = 	 {Borba, Paulo and Cavalcanti, Ana and Sampaio, Augusto and Woodcook, Jim},
  139.26 -  volume = 	 {6153},
  139.27 -  series = 	 {Lecture Notes in Computer Science}
  139.28 -}
  139.29 -
  139.30 -@inproceedings{Aspinall:2007:FIP:1420412.1420429,
  139.31 - author = {Aspinall, David and L\"{u}th, Christoph and Winterstein, Daniel},
  139.32 - title = {A Framework for Interactive Proof},
  139.33 - booktitle = {Proceedings of the 14th symposium on Towards Mechanized Mathematical Assistants: 6th International Conference},
  139.34 - series = {Calculemus '07 / MKM '07},
  139.35 - year = {2007},
  139.36 - isbn = {978-3-540-73083-5},
  139.37 - location = {Hagenberg, Austria},
  139.38 - pages = {161--175},
  139.39 - numpages = {15},
  139.40 - url = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
  139.41 - doi = {http://dx.doi.org/10.1007/978-3-540-73086-6_15},
  139.42 - acmid = {1420429},
  139.43 - publisher = {Springer-Verlag},
  139.44 - address = {Berlin, Heidelberg},
  139.45 -}
  139.46 -
  139.47 -@Book{armstrong:erlang96,
  139.48 -  author = 	 {Armstrong, Joe and others},
  139.49 -  title = 	 {Concurrent Programming in Erlang},
  139.50 -  publisher = {Prentice Hall},
  139.51 -  year = 	 {1996}
  139.52 -}
  139.53 -
  139.54 -@TechReport{odersky:scala06,
  139.55 -  author = 	 {Odersky, Martin and others},
  139.56 -  title = 	 {An Overview of the Scala Programming Language},
  139.57 -  institution =  {\'Ecole Polytechnique F\'ed\'erale de Lausanne (EPFL)},
  139.58 -  year = 	 {2006},
  139.59 -  type = 	 {Technical Report LAMP-REPORT-2006-001},
  139.60 -  address = 	 {1015 Lausanne, Switzerland},
  139.61 -  note = 	 {Second Edition},
  139.62 -  annote = 	 {http://www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf}
  139.63 -}
  139.64 -
  139.65 -@article{Haller:2009:SAU:1496391.1496422,
  139.66 - author = {Haller, Philipp and Odersky, Martin},
  139.67 - title = {Scala Actors: Unifying thread-based and event-based programming},
  139.68 - journal = {Theor. Comput. Sci.},
  139.69 - volume = {410},
  139.70 - issue = {2-3},
  139.71 - month = {February},
  139.72 - year = {2009},
  139.73 - issn = {0304-3975},
  139.74 - pages = {202--220},
  139.75 - numpages = {19},
  139.76 - url = {http://portal.acm.org/citation.cfm?id=1496391.1496422},
  139.77 - doi = {10.1016/j.tcs.2008.09.019},
  139.78 - acmid = {1496422},
  139.79 - publisher = {Elsevier Science Publishers Ltd.},
  139.80 - address = {Essex, UK},
  139.81 - keywords = {Actors, Concurrent programming, Events, Threads},
  139.82 -} 
  139.83 -
  139.84 -@InProceedings{scala:jmlc06,
  139.85 -  author =       {Philipp Haller and Martin Odersky},
  139.86 -  title =        {Event-Based Programming without Inversion of Control},
  139.87 -  booktitle =    {Proc. Joint Modular Languages Conference},
  139.88 -  year =         2006,
  139.89 -  series =       {Springer LNCS}
  139.90 -}
  139.91 -
  139.92 -
  139.93 -@InProceedings{makarius:isa-scala-jedit,
  139.94 -  author = 	 {Makarius Wenzel},
  139.95 -  title = 	 {Asyncronous Proof Processing with {Isabelle/Scala} and {Isabelle/jEdit}},
  139.96 -  booktitle = {User Interfaces for Theorem Provers (UITP 2010)},
  139.97 -  year = 	 {2010},
  139.98 -  editor = 	 {C. Sacerdoti Coen and D. Aspinall},
  139.99 -  address = 	 {Edinburgh, Scotland},
 139.100 -  month = 	 {July},
 139.101 -  organization = {FLOC 2010 Satellite Workshop},
 139.102 -  note = 	 {http://www4.in.tum.de/~wenzelm/papers/async-isabelle-scala.pdf}
 139.103 -}
 139.104 -
 139.105 -@Book{db:dom-eng,
 139.106 -  author = 	 {Bj{\o}rner, Dines},
 139.107 -  title = 	 {Domain Engineering. Technology Management, Research and Engineering},
 139.108 -  publisher = 	 {JAIST Press},
 139.109 -  year = 	 {2009},
 139.110 -  month = 	 {Feb},
 139.111 -  series = 	 {COE Research Monograph Series},
 139.112 -  volume = 	 {4},
 139.113 -  address = 	 {Nomi, Japan}
 139.114 -}
 139.115 -
 139.116 -@inproceedings{Haftmann-Nipkow:2010:code,
 139.117 -  author =      {Florian Haftmann and Tobias Nipkow},
 139.118 -  title =       {Code Generation via Higher-Order Rewrite Systems},
 139.119 -  booktitle =   {Functional and Logic Programming, 10th International
 139.120 -Symposium: {FLOPS} 2010},
 139.121 -  year =        {2010},
 139.122 -  publisher =   {Springer},
 139.123 -  series =      {Lecture Notes in Computer Science},
 139.124 -  volume =      {6009}
 139.125 -}
 139.126 -
 139.127 -@Manual{coq1999,
 139.128 -  title = 	 {The Coq Proof Assistant},
 139.129 -  author = 	 {Barras, B. and others},
 139.130 -  organization = {INRIA-Rocquencourt - CNRS-ENS Lyon},
 139.131 -  month = 	 {July},
 139.132 -  year = 	 {1999},
 139.133 -  pnote={},status={cited},source={mkm01.caprotti},location={}  
 139.134 -}
 139.135 -
 139.136 -@Book{meta-ML,
 139.137 -  author = 	 {Gordon,M. and Milner,R.  and Wadsworth,C. P.},
 139.138 -  title = 	 {Edinburgh LCF: A Mechanised Logic of Computation},
 139.139 -  publisher = 	 { Springer-Verlag},
 139.140 -  year = 	 {1979},
 139.141 -  volume = 	 {78},
 139.142 -  series = 	 {Lecture Notes in Computer Science}
 139.143 -}
 139.144 - 
 139.145 -@book{Paulson:Isa94,
 139.146 -        title={Isabelle: a generic theorem prover}, 
 139.147 -        author={Paulson, Lawrence C. }, publisher={Springer-Verlag},year={1994}, 
 139.148 -	volume={828},series={Lecture Notes in Computer Science},address={},edition={},month={}, 
 139.149 -	note={With contributions by Topias Nipkow},
 139.150 -        status={},source={},location={-} 
 139.151 -        }  
 139.152 -
 139.153 -@Book{pl:milner97,
 139.154 -  author = 	 {Robin Milner and Mads Tofte and Robert Harper and David MacQueen},
 139.155 -  title = 	 {The Definition of Standard ML (Revised)},
 139.156 -  publisher = 	 {The MIT Press},
 139.157 -  year = 	 1997,
 139.158 -  address =	 {Cambridge, London},
 139.159 -  annote =	 {97bok375}
 139.160 -}
 139.161 -
 139.162 -@Article{back-grundy-wright-98,
 139.163 -  author = 	 {Back, Ralph and Grundy, Jim and von Wright, Joakim},
 139.164 -  title = 	 {Structured Calculational Proof},
 139.165 -  journal = 	 {Formal Aspects of Computing},
 139.166 -  year = 	 {1998},
 139.167 -  number = 	 {9},
 139.168 -  pages = 	 {469-483}
 139.169 -}
 139.170 -
 139.171 -@Manual{isar-impl,
 139.172 -  title = 	 {The {Isabelle/Isar} Implementation},
 139.173 -  author = 	 {Makarius Wenzel},
 139.174 -  month = 	 {April 19},
 139.175 -  year = 	 {2009},
 139.176 -  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
 139.177 -}
 139.178 -
 139.179 -@InProceedings{wenzel:isar,
 139.180 -  author = 	 {Wenzel, Markus},
 139.181 -  title = 	 {Isar - a Generic Interpretative Approach to Readable Formal Proof Documents},
 139.182 -  booktitle = 	 {Theorem Proving in Higher Order Logics},
 139.183 -  year = 	 {1999},
 139.184 -  editor = 	 {G. Dowek, A. Hirschowitz, C. Paulin, L. Thery},
 139.185 -  series = 	 {LNCS 1690},
 139.186 -  organization = {12th International Conference TPHOLs'99},
 139.187 -  publisher = {Springer}
 139.188 -}
 139.189 -
 139.190 -
   140.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-acknowl.tex	Mon Sep 16 12:27:20 2013 +0200
   140.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   140.3 @@ -1,55 +0,0 @@
   140.4 -%\begin{changemargin}{1.5cm}{1.5cm}
   140.5 -
   140.6 -%\chapter*{Acknowledgements}
   140.7 -%\addcontentsline{toc}{chapter}{Acknowledgements}
   140.8 -
   140.9 -
  140.10 -
  140.11 -\begin{center}
  140.12 -{\Large\bfseries Acknowledgements}
  140.13 -\end{center}
  140.14 -%\vspace*{3mm}
  140.15 -
  140.16 -\begin{changemargin}{1.5cm}{1.5cm}
  140.17 -I would like to thank Professor Berhard Aichernig for having prepared the grounds for this thesis by his work on test case generation and in particular in his interest in the computer theorem prover Isabelle.
  140.18 -
  140.19 -His general surveys on computer theorem proving, on programming languages in general, on functional programming in particular and on respective advantages in upcoming multi-core computing were inspiring and they motivate the directions for my future studies.
  140.20 -
  140.21 -Many thanks also to Walther Neuper, who was always available for the many intricacies of Isabelle/Isar and the technicalities involved when doing a bachelor project and writing a thesis.
  140.22 -
  140.23 -\begin{flushright}
  140.24 -Marco Steger \\ {\small Graz, June 30, 2011}
  140.25 -\end{flushright}
  140.26 -\end{changemargin}
  140.27 -
  140.28 -\selectlanguage{austrian}
  140.29 -
  140.30 -\vspace*{5mm}
  140.31 -
  140.32 -\begin{center}
  140.33 -{\Large\bfseries Danksagung}
  140.34 -\end{center}
  140.35 -%\vspace*{0mm}
  140.36 -
  140.37 -\begin{changemargin}{1.5cm}{1.5cm}
  140.38 -Ich mchte mich herzlich bei allen bedanken, die diese Bakkalaureats-Arbeit unterst\"utzt haben.
  140.39 -
  140.40 -Herr Professor Bernhard Aichernig hat die Voraussetzungen f\"ur die Themenstellung der Arbeit durch seine F\&E in Test-Case-Generation geschaffen; Isabelle geh\"ort auch zu seinem Tool-Set.
  140.41 -
  140.42 -Besonder inspirierend waren seine \"Uberblicks-Informationen zu Computer Theorem Proving, zu Programm-Sprachen im Allgemeinen und zu funktionalen Sprachen im Besonderen, die ihre Vorteile bei den kommenden Multi-Core-Prozessoren zum Tragen bringen werden; diese Informationen werden auch meine Entscheidung f\"ur Wahlf\"acher in den kommenden Semestern motivieren.
  140.43 -
  140.44 -Walther Neuper war immer hilfreich in allen technischen Fragen zu Isabelle/Isar und in organisatorischen Fragen zu Bachelor-Projekt und -Thesis.
  140.45 -
  140.46 -\begin{flushright}
  140.47 -Marco Steger \\ {\small Graz, am 30 Juni 2011}
  140.48 -\end{flushright}
  140.49 -\end{changemargin}
  140.50 -
  140.51 -\selectlanguage{english}
  140.52 -
  140.53 -
  140.54 -
  140.55 -
  140.56 -
  140.57 -
  140.58 -
   141.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-appendix.tex	Mon Sep 16 12:27:20 2013 +0200
   141.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   141.3 @@ -1,339 +0,0 @@
   141.4 -\chapter{Milestones und Arbeitsprotokolle}\label{milestones} %\ref doesnt work outside this file ?!?
   141.5 -\section{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010} 
   141.6 -\begin{itemize}
   141.7 -\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010 
   141.8 -\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
   141.9 -\item Scala Actors: beendet am 12.08.2010
  141.10 -\end{itemize}
  141.11 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  141.12 -\hline
  141.13 -Datum & T\"atigkeit & Einheiten \\ \hline
  141.14 -12.07.2010 & Meeting: erste Besprechung und Erkl\"{a}rungen zu Isabelle, Isac und CTPs & 2 \\ \hline
  141.15 -15.07.2010 & Recherche \"{u}ber Isabelle und CTPs & 3 \\ \hline
  141.16 -20.07.2010 & Meeting: Besprechen der grunds\"{a}tzlichen Vorgangsweise und Ziele & 1 \\ \hline
  141.17 -23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenh\"{a}nge mit Isac abkl\"{a}ren & 1 \\ \hline 
  141.18 -30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise \"{u}ber Backs 'structured derivations'; Begriffserkl\"{a}rung & 3 \\ \hline
  141.19 -01.08.2010 & Recherche: Buch f\"{u}r Scala & 2 \\ \hline
  141.20 -03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
  141.21 -05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1  \\ \hline
  141.22 -06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
  141.23 -08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
  141.24 -09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
  141.25 -12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
  141.26 -24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
  141.27 -25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
  141.28 -27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline \hline
  141.29 - & Anzahl der Einheiten & 44 \\
  141.30 -\hline
  141.31 -\end{tabular}
  141.32 -
  141.33 -
  141.34 -\section{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
  141.35 -\begin{itemize}
  141.36 -\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
  141.37 -\item Scala in NetBeans eingebunden: beendet am 22.07.2010
  141.38 -\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010 
  141.39 -\end{itemize}
  141.40 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  141.41 -\hline
  141.42 -Datum & T\"atigkeit & Einheiten \\ \hline
  141.43 -19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
  141.44 -20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
  141.45 -21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
  141.46 -22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
  141.47 -23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausf\"{u}hren: testen & 5 \\ \hline 
  141.48 -27.07.2010 & Isabelle-jEdit-Plugin: \"{a}nderungen an der Projektstruktur & 7 \\ \hline
  141.49 -28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
  141.50 -29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
  141.51 -30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung \"{u}ber Erfahrungen mit Filestruktur & 4 \\ \hline
  141.52 -02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
  141.53 - & Anzahl der Einheiten & 60 \\
  141.54 -\hline
  141.55 -\end{tabular}
  141.56 -
  141.57 -\section{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010} 
  141.58 -\begin{itemize}
  141.59 -\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
  141.60 -\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
  141.61 -\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010 
  141.62 -\end{itemize}
  141.63 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  141.64 -\hline
  141.65 -Datum & T\"atigkeit & Einheiten \\ \hline
  141.66 -10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
  141.67 -11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
  141.68 -21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
  141.69 -22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten f\"{u}r ISAC & 3 \\ \hline
  141.70 -24.08.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 6 \\ \hline 
  141.71 -26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach L\"{o}sungen & 3 \\ \hline
  141.72 -28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
  141.73 -29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
  141.74 -30.08.2010 & Isabelle-jEdit-Plugin endlich vollst\"{a}ndig lauff\"{a}hig gebracht & 4 \\ \hline
  141.75 -01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
  141.76 -04.09.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 5 \\ \hline 
  141.77 -20.09.2010 & Einrichten des Laptops f\"{u}r Isabelle-Isac & 4 \\ \hline 
  141.78 -22.09.2010 & Meeting: Fortschrittsbericht, kurze Einf\"{u}hrung f\"{u}r Mitstreiter & 3 \\ \hline
  141.79 -
  141.80 -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 
  141.81 -30.09.2010 & QN: Start mit \"{u}bersetzten der Sourcefiles & 5 \\ \hline
  141.82 -02.10.2010 & QN: \"{U}bersetzten der Sourcefiles & 6 \\ \hline
  141.83 -04.10.2010 & QN: \"{U}bersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
  141.84 -05.10.2010 & QN: QN vollst\"andig in Scala \"{u}bersetzt, testen & 2 \\ \hline \hline
  141.85 - & Anzahl der Einheiten & 71 \\
  141.86 -\hline
  141.87 -\end{tabular}
  141.88 -
  141.89 -\section{Experimentelle Parser implementiert: beendet am 04.03.2011} 
  141.90 -\begin{itemize}
  141.91 -\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
  141.92 -\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
  141.93 -\item Implementierung des Scala-Parsers: aufgeschoben
  141.94 -\end{itemize}
  141.95 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  141.96 -\hline
  141.97 -Datum & T\"atigkeit & Einheiten \\ \hline
  141.98 -28.01.2011 & Testen des SideKick-Parsers im Isabelle-Plugin & 2 \\ \hline
  141.99 -29.01.2011 & Leichte Modifikationen des SideKick-Parsers im Isabelle-Plugin & 1 \\ \hline
 141.100 -08.02.2011 & Besprechung zum Abschluss der praktischen Arbeiten & 1 \\ \hline
 141.101 -16.02.2011 & Erstellen des Isabelle-Pur jar-Files & 1 \\ \hline
 141.102 -19.02.2011 & Behebung des Problems mit den Umgebungsvariablen & 1 \\ \hline
 141.103 -03.03.2011 & Erzeugung des Pure.jar Package m\"{o}glich & 2 \\ \hline
 141.104 -04.04.2011 & Verbindung zwischen Plugin und Isabelle-Pure hergestellt und getestet  & 3 \\ \hline
 141.105 -08.04.2011 & Besprechung: Implementierung des experimentellen Parsers wird nicht mehr durchgef\"{u}hrt & 1 \\ \hline \hline
 141.106 - & Anzahl der Einheiten & 12 \\
 141.107 -\hline
 141.108 -\end{tabular}
 141.109 -
 141.110 -\section{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am 30.Juni 2011}
 141.111 -\begin{itemize}
 141.112 -\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
 141.113 -\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
 141.114 -\item Dokumentation abgeschlossen: beendet am 30.Juni 2011 
 141.115 -\end{itemize}
 141.116 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 141.117 -\hline
 141.118 -Datum & T\"atigkeit & Einheiten \\ \hline
 141.119 -01.03.2011 & Besprechung zum Ablauf der Dokumentationsarbeiten: Protokoll und Dokumentation & 1 \\ \hline
 141.120 -01.03.2011 & Erstellen des Protokolls & 2 \\ \hline
 141.121 -08.03.2011 & Besprechung zur Doku und zur Schnittstelle zu Isabelle-Pure & 1 \\ \hline
 141.122 -17.03.2011 & Dokumentation schreiben & 2 \\ \hline
 141.123 -19.03.2011 & Dokumentation schreiben & 3 \\ \hline
 141.124 -24.04.2011 & Dokumentation schreiben & 2 \\ \hline
 141.125 -25.04.2011 & Dokumentation schreiben & 4 \\ \hline
 141.126 -27.04.2011 & Dokumentation schreiben & 2 \\ \hline
 141.127 -28.04.2011 & Dokumentation: Fertigstellen der ersten Version & 3 \\ \hline \hline
 141.128 - & Anzahl der Einheiten & 20 \\
 141.129 -\hline
 141.130 -\end{tabular}
 141.131 -
 141.132 -\section{Pr\"asentation der Arbeit im IST-Seminar: beendet am 21.06.2011}
 141.133 -\begin{itemize}
 141.134 -\item Pr\"asentation fertiggestellt: beendet am 19.06.2011
 141.135 -\item Pr\"asentation: abgehalten am 21.06.2011
 141.136 -\end{itemize}
 141.137 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 141.138 -\hline
 141.139 -Datum & T\"atigkeit & Einheiten \\ \hline
 141.140 -06.06.2011 & Planung der Pr\"asentation & 2 \\ \hline
 141.141 -16.06.2011 & Verfassen der Pr\"asentation & 2 \\ \hline
 141.142 -18.06.2011 & Verfassen der Pr\"asentation & 3 \\ \hline
 141.143 -19.06.2011 & Pr\"asentation: Feinschliff & 2 \\ \hline
 141.144 -20.06.2011 & Vorbereiten der Pr\"asentation& 3 \\ \hline
 141.145 -21.06.2011 & Abhaltung und nachfolgende Diskussion & 1 \\ \hline \hline
 141.146 - & Anzahl der Einheiten & 13 \\
 141.147 - \hline
 141.148 -\end{tabular}
 141.149 -
 141.150 -\chapter{Filestruktur Isabelle}
 141.151 -\section{jar-Packete}
 141.152 -\textbf{----- for "isabelle jedit \&"; contained in Isabelle\_bundle} \\
 141.153 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jedit.jar \\
 141.154 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/LatestVersion.jar \\
 141.155 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/SideKick.jar \\
 141.156 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Console.jar  \\
 141.157 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Pure.jar  \\
 141.158 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Isac.jar \\
 141.159 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-compiler.jar \\
 141.160 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Isabelle-jEdit.jar \\
 141.161 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/cobra.jar \\
 141.162 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/js.jar \\
 141.163 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/Hyperlinks.jar \\
 141.164 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-swing.jar \\
 141.165 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/scala-library.jar \\
 141.166 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/QuickNotepad.jar \\
 141.167 -./contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/ErrorList.jar \\
 141.168 -\textbf{----- scala system; contained in Isabelle\_bundle} \\
 141.169 -./contrib/scala-2.8.1.final/misc/sbaz/scala-bazaars.jar \\
 141.170 -./contrib/scala-2.8.1.final/misc/sbaz/sbaz-tests.jar \\
 141.171 -./contrib/scala-2.8.1.final/misc/scala-devel/plugins/continuations.jar \\
 141.172 -./contrib/scala-2.8.1.final/lib/scala-compiler.jar \\
 141.173 -./contrib/scala-2.8.1.final/lib/scalap.jar \\
 141.174 -./contrib/scala-2.8.1.final/lib/scala-swing.jar \\
 141.175 -./contrib/scala-2.8.1.final/lib/scala-library.jar \\
 141.176 -./contrib/scala-2.8.1.final/lib/jline.jar \\
 141.177 -./contrib/scala-2.8.1.final/lib/scala-dbc.jar \\
 141.178 -./contrib/scala-2.8.1.final/src/scala-library-src.jar \\
 141.179 -./contrib/scala-2.8.1.final/src/scala-swing-src.jar \\
 141.180 -./contrib/scala-2.8.1.final/src/scala-compiler-src.jar \\
 141.181 -./contrib/scala-2.8.1.final/src/scala-dbc-src.jar \\
 141.182 -./contrib/scala-2.8.1.final/src/sbaz-src.jar \\
 141.183 -\textbf{----- Isars entry to SML from Scala-layer; } \\
 141.184 -\textit{created according to 4.3.\#3 }\\
 141.185 -./lib/classes/isabelle-scala.jar  \\
 141.186 -./lib/classes/Pure.jar \\\\
 141.187 -\textit{\textbf{===== all below for NetBeans}} \\\\
 141.188 -\textbf{----- standard Isabelle, started by $<RUN>$ in NetBeans} \\
 141.189 -      \textit{description in 2.2.2} \\
 141.190 -./src/Tools/jEdit/dist/jars/jedit.jar \\
 141.191 -./src/Tools/jEdit/dist/jars/SideKick.jar \\
 141.192 -./src/Tools/jEdit/dist/jars/Console.jar \\
 141.193 -./src/Tools/jEdit/dist/jars/Pure.jar \\
 141.194 -./src/Tools/jEdit/dist/jars/scala-compiler.jar \\
 141.195 -./src/Tools/jEdit/dist/jars/Isabelle-jEdit.jar \\
 141.196 -./src/Tools/jEdit/dist/jars/cobra.jar \\
 141.197 -./src/Tools/jEdit/dist/jars/js.jar \\
 141.198 -./src/Tools/jEdit/dist/jars/Hyperlinks.jar \\
 141.199 -./src/Tools/jEdit/dist/jars/scala-swing.jar \\
 141.200 -./src/Tools/jEdit/dist/jars/scala-library.jar \\
 141.201 -./src/Tools/jEdit/dist/jars/ErrorList.jar \\
 141.202 -\textbf{----- source of jEdit, required for $<DEBUG>$ in NetBeans; \\}
 141.203 -      adapted from NetBeans' webpages, \\
 141.204 -      \textit{description in 2.2.3.\#5} \\
 141.205 -./src/Tools/jEditC/contrib/jEdit/build/jars/SideKick.jar \\
 141.206 -./src/Tools/jEditC/contrib/jEdit/build/jars/Console.jar \\
 141.207 -./src/Tools/jEditC/contrib/jEdit/build/jars/Pure.jar \\
 141.208 -./src/Tools/jEditC/contrib/jEdit/build/jars/Isac.jar \\
 141.209 -./src/Tools/jEditC/contrib/jEdit/build/jars/QuickNPScala.jar \\
 141.210 -./src/Tools/jEditC/contrib/jEdit/build/jars/scala-compiler.jar \\
 141.211 -./src/Tools/jEditC/contrib/jEdit/build/jars/Isabelle-jEdit.jar \\
 141.212 -./src/Tools/jEditC/contrib/jEdit/build/jars/cobra.jar \\
 141.213 -./src/Tools/jEditC/contrib/jEdit/build/jars/js.jar \\
 141.214 -./src/Tools/jEditC/contrib/jEdit/build/jars/Hyperlinks.jar \\
 141.215 -./src/Tools/jEditC/contrib/jEdit/build/jars/scala-swing.jar \\
 141.216 -./src/Tools/jEditC/contrib/jEdit/build/jars/scala-library.jar \\
 141.217 -./src/Tools/jEditC/contrib/jEdit/build/jars/ErrorList.jar \\
 141.218 -./src/Tools/jEditC/contrib/jEdit/build/jEdit.jar \\
 141.219 -\textbf{----- demo plugin, started by $<RUN>$ in NetBeans \\}
 141.220 -      \textit{description in 2.2.3.\#4} \\
 141.221 -./src/Tools/jEditC/dist/jars/SideKick.jar \\
 141.222 -./src/Tools/jEditC/dist/jars/Console.jar \\
 141.223 -./src/Tools/jEditC/dist/jars/Pure.jar \\
 141.224 -./src/Tools/jEditC/dist/jars/Isac.jar \\
 141.225 -./src/Tools/jEditC/dist/jars/scala-compiler.jar \\
 141.226 -./src/Tools/jEditC/dist/jars/cobra.jar \\
 141.227 -./src/Tools/jEditC/dist/jars/js.jar \\
 141.228 -./src/Tools/jEditC/dist/jars/Hyperlinks.jar \\
 141.229 -./src/Tools/jEditC/dist/jars/scala-swing.jar \\
 141.230 -./src/Tools/jEditC/dist/jars/scala-library.jar \\
 141.231 -./src/Tools/jEditC/dist/jars/ErrorList.jar \\
 141.232 -
 141.233 -\section{Scala-Files: Isabelle-Pure}
 141.234 -\textbf{General:}\\
 141.235 -./src/Pure/General/xml.scala\\
 141.236 -./src/Pure/General/linear\_set.scala\\
 141.237 -./src/Pure/General/symbol.scala\\
 141.238 -./src/Pure/General/exn.scala\\
 141.239 -./src/Pure/General/position.scala\\
 141.240 -./src/Pure/General/scan.scala\\
 141.241 -./src/Pure/General/xml\_data.scala\\
 141.242 -./src/Pure/General/yxml.scala\\
 141.243 -./src/Pure/General/markup.scala\\
 141.244 -./src/Pure/General/sha1.scala\\
 141.245 -./src/Pure/General/timing.scala\\
 141.246 -./src/Pure/General/pretty.scala\\
 141.247 -\textbf{Concurent:}\\
 141.248 -./src/Pure/Concurrent/volatile.scala\\
 141.249 -./src/Pure/Concurrent/future.scala\\
 141.250 -./src/Pure/Concurrent/simple\_thread.scala\\
 141.251 -\textbf{Thy:}\\
 141.252 -./src/Pure/Thy/html.scala\\
 141.253 -./src/Pure/Thy/completion.scala\\
 141.254 -./src/Pure/Thy/thy\_header.scala\\
 141.255 -./src/Pure/Thy/thy\_syntax.scala\\
 141.256 -./src/Pure/Isac/isac.scala\\
 141.257 -./src/Pure/library.scala\\
 141.258 -\textbf{Isar:}\\
 141.259 -./src/Pure/Isar/keyword.scala\\
 141.260 -./src/Pure/Isar/outer\_syntax.scala\\
 141.261 -./src/Pure/Isar/token.scala\\
 141.262 -./src/Pure/Isar/parse.scala\\
 141.263 -\textbf{Isac:}\\
 141.264 -\textit{./src/Pure/Isac/isac.scala}\\
 141.265 -\textbf{System:}\\
 141.266 -./src/Pure/System/gui\_setup.scala\\
 141.267 -./src/Pure/System/isabelle\_system.scala\\
 141.268 -./src/Pure/System/swing\_thread.scala\\
 141.269 -./src/Pure/System/download.scala\\
 141.270 -./src/Pure/System/session\_manager.scala\\
 141.271 -./src/Pure/System/standard\_system.scala\\
 141.272 -./src/Pure/System/isabelle\_syntax.scala\\
 141.273 -./src/Pure/System/session.scala\\
 141.274 -./src/Pure/System/platform.scala\\
 141.275 -./src/Pure/System/cygwin.scala\\
 141.276 -./src/Pure/System/event\_bus.scala\\
 141.277 -./src/Pure/System/isabelle\_process.scala\\
 141.278 -\textbf{PIDE}\\
 141.279 -./src/Pure/PIDE/document.scala\\
 141.280 -./src/Pure/PIDE/markup\_tree.scala\\
 141.281 -./src/Pure/PIDE/text.scala\\
 141.282 -./src/Pure/PIDE/command.scala\\
 141.283 -./src/Pure/PIDE/isar\_document.scala \\
 141.284 -
 141.285 -
 141.286 -\chapter{Das Skript \textit{isac\_jedit}}
 141.287 -
 141.288 -\textit{
 141.289 -\#$!$/usr/bin/env bash
 141.290 -cd src/Pure/ \\
 141.291 -echo "Building Pure.jar" \\
 141.292 -../../bin/isabelle env ./build-jars \\
 141.293 -echo "copying Pure.jar to contrib/jedit" \\
 141.294 -cp ../../lib/classes/Pure.jar ../../contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/ \\
 141.295 -echo "Building Isac.jar" \\
 141.296 -cd /home/gadei/isac/isa/src/Tools/jEditC \\
 141.297 -ant jar \\
 141.298 -cd /home/gadei/isac/isa/src/Pure/ \\
 141.299 -echo "copying Isac.jar to contrib/jedit" \\
 141.300 -cp ../Tools/jEditC/contrib/jEdit/build/jars/Isac.jar ../../contrib/jedit-4.3.2\_Isabelle-6d736d983d5c/jars/ \\
 141.301 -echo "Done!" \\
 141.302 -}
 141.303 -
 141.304 -\chapter{Filestruktur f\"ur die Entwicklung des SD-Plugins}\label{files-SD-plugin}
 141.305 -
 141.306 -\textbf{src/Tools/jEditC/}build.xml\\
 141.307 -\textbf{src/Tools/jEditC/}makedist\\
 141.308 -\textbf{src/Tools/jEditC/}manifest.mf\\
 141.309 -\textbf{src/Tools/jEditC/}README\_BUILD\\
 141.310 -\textbf{src/Tools/jEditC/build/*}\\
 141.311 -\textbf{src/Tools/jEditC/contrib/*}\\
 141.312 -\textbf{src/Tools/jEditC/dist/*}\\
 141.313 -\textbf{src/Tools/jEditC/plugin/}build.xml\\
 141.314 -\textbf{src/Tools/jEditC/plugin/}changes40.txt\\
 141.315 -\textbf{src/Tools/jEditC/plugin/}changes42.txt\\
 141.316 -\textbf{src/Tools/jEditC/plugin/}description.html\\
 141.317 -\textbf{src/Tools/jEditC/plugin/}testSDActions.java\\
 141.318 -\textbf{src/Tools/jEditC/plugin/}testSD.iml\\
 141.319 -\textbf{src/Tools/jEditC/plugin/}testSD.java\\
 141.320 -\textbf{src/Tools/jEditC/plugin/}testSDOptionPane.java\\
 141.321 -\textbf{src/Tools/jEditC/plugin/}testSDPlugin.java\\
 141.322 -\textbf{src/Tools/jEditC/plugin/}testSDTextArea.java\\
 141.323 -\textbf{src/Tools/jEditC/plugin/}testSDToolPanel.java\\
 141.324 -\textbf{src/Tools/jEditC/plugin/}plugin\\
 141.325 -\textbf{src/Tools/jEditC/plugin/}README.txt\\
 141.326 -\textbf{src/Tools/jEditC/nbproject/*}\\
 141.327 -\textbf{src/Tools/jEditC/src/}actions.xml\\
 141.328 -\textbf{src/Tools/jEditC/src/}changes40.txt\\
 141.329 -\textbf{src/Tools/jEditC/src/}changes42.txt\\
 141.330 -\textbf{src/Tools/jEditC/src/}description.html\\
 141.331 -\textbf{src/Tools/jEditC/src/}dockables.xml\\
 141.332 -\textbf{src/Tools/jEditC/src/}testSDActions.scala\\
 141.333 -\textbf{src/Tools/jEditC/src/}testSD.iml\\
 141.334 -\textbf{src/Tools/jEditC/src/}testSDOptionPane.scala\\
 141.335 -\textbf{src/Tools/jEditC/src/}testSDPlugin.scala\\
 141.336 -\textbf{src/Tools/jEditC/src/}testSD.props\\
 141.337 -\textbf{src/Tools/jEditC/src/}testSD.scala\\
 141.338 -\textbf{src/Tools/jEditC/src/}testSDTextArea.scala\\
 141.339 -\textbf{src/Tools/jEditC/src/}testSDToolPanel.scala\\
 141.340 -\textbf{src/Tools/jEditC/src/}manifest.mf\\
 141.341 -\textbf{src/Tools/jEditC/src/}README.txt\\
 141.342 -\textbf{src/Tools/jEditC/src/}users-guide.xml \\
 141.343 \ No newline at end of file
   142.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-biblio.tex	Mon Sep 16 12:27:20 2013 +0200
   142.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   142.3 @@ -1,15 +0,0 @@
   142.4 -{
   142.5 -
   142.6 -%\bibliographystyle{plain}
   142.7 -\bibliographystyle{alpha}
   142.8 -
   142.9 -
  142.10 -% the names of the bib files used
  142.11 -
  142.12 -\phantomsection
  142.13 -\addcontentsline{toc}{chapter}{Bibliography}
  142.14 -\bibliography{master_thesis.bib} 
  142.15 -
  142.16 -}
  142.17 -
  142.18 -
   143.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-conclusion.tex	Mon Sep 16 12:27:20 2013 +0200
   143.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   143.3 @@ -1,2 +0,0 @@
   143.4 -\chapter{Concluding Remarks}
   143.5 -...
   143.6 \ No newline at end of file
   144.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-contents.tex	Mon Sep 16 12:27:20 2013 +0200
   144.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   144.3 @@ -1,25 +0,0 @@
   144.4 -{
   144.5 -\setlength{\parskip}{3pt plus 3pt minus 3pt} % compact table of contents
   144.6 -
   144.7 -\tableofcontents
   144.8 -
   144.9 -\listoffigures
  144.10 -%\addcontentsline{toc}{chapter}{List of Figures}
  144.11 -
  144.12 -{
  144.13 -% format sections to chapters for this scope
  144.14 -\titleformat{\section}{\bf\huge}{\thesection\quad}{0em}{}
  144.15 -\titlespacing*{\section}{0em}{-2em}{1.5em}
  144.16 -\def\chapter*#1{\section*{#1}}
  144.17 -
  144.18 -%\vspace*{20mm}
  144.19 -%\listoftables
  144.20 -%%\addcontentsline{toc}{chapter}{List of Tables}
  144.21 -%
  144.22 -%\vspace*{20mm}
  144.23 -%\lstlistoflistings
  144.24 -%%\addcontentsline{toc}{chapter}{List of Listings}
  144.25 -
  144.26 -}
  144.27 -}
  144.28 -
   145.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-intro.tex	Mon Sep 16 12:27:20 2013 +0200
   145.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   145.3 @@ -1,9 +0,0 @@
   145.4 -\chapter{Einf\"{u}hrung}
   145.5 -Europa ist bei Computer Theorem Provern (CTP) weltweit f\"uhrend, die zwei prominenten Prover sind Coq \cite{coq1999} und Isabelle \cite{Paulson:Isa94}.
   145.6 -Im Zuge der Weiterentwicklung der Informatik als Ingenieurs-Disziplin werden auch Anwendungsgebiete zunehmend mathematisiert \cite{db:dom-eng}, was wiederum CTP vermehrt auf den Plan ruft.
   145.7 -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.
   145.8 -
   145.9 -Nachdem CTP nun unaufhaltsam in Entwicklungs-Umgebungen von Software- Ingenieuren vorzudringen beginnen (siehe zum Beispiel \cite{aichernig:uni-iist-02,aichernig:mut-test}),% \cite{wolff10-boogie}, 
  145.10 -stellt sich die Herausforderung neu, Frontends f\"ur die t\"agliche Entwicklungsarbeit mit integrierten CTP zu entwerfen. Einer der Vorschl\"age, wie Theorem Prover mit Front-ends zu verbinden w\"are, findet sich in \cite{Aspinall:2007:FIP:1420412.1420429}. Isabelle geht einen anderen Weg, indem es sich aktuellen technischen Herausforderungen stellt \cite{makarius:isa-scala-jedit}: 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.
  145.11 -
  145.12 -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) \cite{back-grundy-wright-98} sollen auf jEdit und Isabelle aufgesetzt werden. Die Bachelorarbeit liefert die Machbarkeits-Studie f\"ur diesen Schritt.
   146.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-macros.tex	Mon Sep 16 12:27:20 2013 +0200
   146.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   146.3 @@ -1,67 +0,0 @@
   146.4 -% macros and definitions
   146.5 -
   146.6 -\newcommand\fname{\begingroup \smaller\urlstyle{tt}\Url}
   146.7 -
   146.8 -\newcommand\vname{\begingroup \smaller\urlstyle{tt}\Url}
   146.9 -
  146.10 -
  146.11 -% for class names, define our own url style
  146.12 -
  146.13 -\makeatletter  % protect @ names
  146.14 -
  146.15 -% \url@letstyle: New URL sty to premit break at any letters.
  146.16 -% Based on \url@ttstyle
  146.17 -
  146.18 -\def\Url@letdo{% style assignments for tt fonts or T1 encoding
  146.19 -\def\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l%
  146.20 -               \do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x%
  146.21 -               \do\y\do\z%
  146.22 -               \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L%
  146.23 -               \do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
  146.24 -               \do\Y\do\Z%
  146.25 -}%
  146.26 -\def\UrlBigBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\%\do\;\do\>\do\]%
  146.27 - \do\)\do\,\do\?\do\'\do\+\do\=\do\#\do\:\do@url@hyp}%
  146.28 -\def\UrlNoBreaks{\do\(\do\[\do\{\do\<}% (unnecessary)
  146.29 -\def\UrlSpecials{\do\ {\ }}%
  146.30 -\def\UrlOrds{\do\*\do\-\do\~}% any ordinary characters that aren't usually
  146.31 -\Urlmuskip = 0mu plus 1mu%
  146.32 -}
  146.33 -
  146.34 -\def\url@letstyle{%
  146.35 -\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\sffamily}}\Url@letdo
  146.36 -}
  146.37 -
  146.38 -\makeatother  % unprotect @ names
  146.39 -
  146.40 -
  146.41 -\newcommand\cname{\begingroup \smaller\urlstyle{let}\Url}
  146.42 -
  146.43 -
  146.44 -\newcommand{\imgcredit}[1]
  146.45 -{%
  146.46 -\small
  146.47 -[#1]
  146.48 -}
  146.49 -
  146.50 -
  146.51 -\newcommand{\chapquote}[2]
  146.52 -{%
  146.53 -\begin{quote}
  146.54 -\emph{%
  146.55 -``#1''%
  146.56 -}%
  146.57 -\begin{flushright}
  146.58 -{\scriptsize \sffamily [#2]}%
  146.59 -\end{flushright}
  146.60 -\end{quote}
  146.61 -}
  146.62 -
  146.63 -
  146.64 -% \urlfootnote{url}{day}{month}{year}
  146.65 -\newcommand{\murlfootnote}[4]{\footnote{\url{{#1}} (last visit {#4}-{#3}-{#2})}}
  146.66 -\newcommand{\murlfootnotebreak}[4]{\footnote{\url{{#1}}\\ \hspace*{6mm}(last visit {#4}-{#3}-{#2})}}
  146.67 -
  146.68 -% change margin command
  146.69 -\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
  146.70 -\let\endchangemargin=\endlist
  146.71 \ No newline at end of file
   147.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-preamble.tex	Mon Sep 16 12:27:20 2013 +0200
   147.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   147.3 @@ -1,183 +0,0 @@
   147.4 -\usepackage[          % set page and margin sizes
   147.5 -  a4paper,
   147.6 -  twoside=false,
   147.7 -  top=10mm,
   147.8 -  bottom=10mm,
   147.9 -  left=20mm,
  147.10 -  right=20mm,
  147.11 -  bindingoffset=10mm,
  147.12 -  head=10mm,
  147.13 -  foot=10mm,
  147.14 -  headsep=10mm,
  147.15 -  footskip=10mm,
  147.16 -  includeheadfoot,
  147.17 -]{geometry}
  147.18 -
  147.19 -\usepackage{times}                   % use PostScript fonts
  147.20 -%\usepackage{ngerman}                % causes ! Illegal parameter number in definition of \grmn@originalTeX. <to be read again> \penalty l.53 \selectlanguage{austrian}
  147.21 -\usepackage{relsize}                 % relative font sizes \smaller \larger
  147.22 -
  147.23 -\usepackage[iso-8859-1]{inputenx}    % so can use Umlaut chars  �, �
  147.24 -
  147.25 -\usepackage{textcomp}                % symbols such as \texttimes and \texteuro
  147.26 -
  147.27 -\usepackage[bf]{titlesec}
  147.28 -% format chapter captions (vorher \Huge)
  147.29 -\titleformat{\chapter}{\bf\huge}{\thechapter\quad}{0em}{}
  147.30 -\titlespacing*{\chapter}{0em}{-2em}{1.5em}
  147.31 -
  147.32 -% use caption and subfig (caption2 and subfigure are now obsolete)
  147.33 -\usepackage[
  147.34 -  position=bottom,
  147.35 -  margin=1cm,
  147.36 -  font=small,
  147.37 -  labelfont={bf,sf},
  147.38 -  format=hang,
  147.39 -  indention=0mm,
  147.40 -]{caption,subfig}
  147.41 -
  147.42 -\captionsetup[subfigure]{
  147.43 -  margin=0pt,
  147.44 -  parskip=0pt,
  147.45 -  hangindent=0pt,
  147.46 -  indention=0pt,
  147.47 -  singlelinecheck=true,
  147.48 -}
  147.49 -
  147.50 -
  147.51 -
  147.52 -% fancyhdr to make nice headers and footers
  147.53 -% and deal with long chapter names
  147.54 -
  147.55 -\usepackage{fancyhdr}         % headers and footers
  147.56 -\pagestyle{fancy}             % must call to set defaults before redefining
  147.57 -
  147.58 -\renewcommand{\headrulewidth}{0mm}
  147.59 -\renewcommand{\footrulewidth}{0mm}
  147.60 -\fancyhf{}
  147.61 -
  147.62 -\fancyhead[R]{\thepage}
  147.63 -
  147.64 -\fancyhead[L]{
  147.65 -  \parbox[t]{0.8\textwidth}{\nouppercase{\leftmark}}
  147.66 -}
  147.67 -
  147.68 -
  147.69 -% \usepackage{tabularx}                 % for better tables
  147.70 -\usepackage{multirow}
  147.71 -\usepackage{listings}                 % for listings of source code
  147.72 -\usepackage{amsmath}
  147.73 -
  147.74 -
  147.75 -\usepackage[austrian,english]{babel}  % load babel *before* natbib or jurabib
  147.76 -
  147.77 -
  147.78 -\usepackage[square]{natbib}         % natbib but with my own knat.bst
  147.79 -                                    % made with the custom-bib package
  147.80 -
  147.81 -\usepackage{url}
  147.82 -\def\UrlFont{\small\ttfamily}
  147.83 -
  147.84 -\usepackage{latexsym}
  147.85 -
  147.86 -\usepackage{color}
  147.87 -\definecolor{lightgrey}{gray}{0.8}
  147.88 -% \definecolor{darkgreen}{rgb}{0,0.2,0}
  147.89 -% \definecolor{darkblue}{rgb}{0,0,0.2}
  147.90 -% \definecolor{darkred}{rgb}{0.2,0,0}
  147.91 -
  147.92 -
  147.93 -
  147.94 -\usepackage{ifpdf}
  147.95 -
  147.96 -%begin{latexonly}
  147.97 -\ifpdf
  147.98 -  % pdflatex
  147.99 -  \usepackage[pdftex]{graphicx}
 147.100 -  \DeclareGraphicsExtensions{.pdf,.jpg,.png}
 147.101 -  \pdfcompresslevel=9
 147.102 -  \pdfpageheight=297mm
 147.103 -  \pdfpagewidth=210mm
 147.104 -  \usepackage{rotating}				% sidewaystable
 147.105 -  \usepackage[         % hyperref should be last package loaded
 147.106 -    pdftex,
 147.107 -    pdftitle={Automating Test Case Generation from Transition Systems via Symbolic Execution and SAT Solving},
 147.108 -    pdfsubject={Master's Thesis},
 147.109 -    pdfauthor={Elisabeth Joebstl},
 147.110 -    pdfkeywords={Model-Based Testing, Conformance Testing, Automated Test Case Generation, Input Output Symbolic Transition Systems, Symbolic Execution, SMT Solving},
 147.111 -    bookmarks,
 147.112 -    bookmarksnumbered,
 147.113 -    linktocpage,
 147.114 -    pagebackref,
 147.115 -    colorlinks,
 147.116 -    linkcolor=black,
 147.117 -    anchorcolor=black,
 147.118 -    citecolor=black,
 147.119 -    urlcolor=black,
 147.120 -    pdfview={FitH},
 147.121 -    pdfstartview={Fit},
 147.122 -    pdfpagemode=UseOutlines,       % open bookmarks in Acrobat
 147.123 -    plainpages=false,              % avoids duplicate page number problem
 147.124 -    pdfpagelabels,                 % avoids duplicate page number problem
 147.125 -  ]{hyperref}
 147.126 -
 147.127 -  \renewcommand*{\backref}[1]{}
 147.128 -  \renewcommand*{\backrefalt}[4]{
 147.129 -  \ifcase #1
 147.130 -  (Not cited.)
 147.131 -  \or
 147.132 -  (Cited on page~#2.)
 147.133 -  \else
 147.134 -  (Cited on pages~#2.)
 147.135 -  \fi
 147.136 -  }
 147.137 -
 147.138 -  \renewcommand*{\backrefsep}{, }
 147.139 -  \renewcommand*{\backreftwosep}{ and~}
 147.140 -  \renewcommand*{\backreflastsep}{ and~}
 147.141 -
 147.142 -\else
 147.143 -  % latex
 147.144 -  \usepackage{rotating}				% sidewaystable
 147.145 -  \usepackage{graphicx}
 147.146 -  \DeclareGraphicsExtensions{.eps}
 147.147 -\fi
 147.148 -%end{latexonly}
 147.149 -
 147.150 -
 147.151 -% \includeonly{intro,biblio}   % selective inclusion
 147.152 -
 147.153 -
 147.154 -
 147.155 -\newcommand{\halfh}{9.5cm}        % height of figures for 2 per page
 147.156 -\newcommand{\thirdh}{6cm}         % height of figures for 3 per page
 147.157 -
 147.158 -
 147.159 -\setlength{\parskip}{3pt plus 1pt minus 0pt}  % vert. space before a paragraph
 147.160 -
 147.161 -
 147.162 -\setcounter{tocdepth}{2}        % lowest section level entered in ToC % TODO FIXXME: wieder auf 1 zurcksetzen?
 147.163 -\setcounter{secnumdepth}{2}     % lowest section level still numbered
 147.164 -
 147.165 -
 147.166 -\input{thesis-macros}
 147.167 -
 147.168 -
 147.169 -% Reduce vertical distance between items
 147.170 -% itemize
 147.171 -\let\origitemize\itemize
 147.172 -\def\itemize{\origitemize\itemsep0pt}
 147.173 -%enumerate
 147.174 -\let\origenumerate\enumerate
 147.175 -\def\enumerate{\origenumerate\itemsep0pt}
 147.176 -
 147.177 -
 147.178 -% FIXXME: bessere Positionierung der Graphiken
 147.179 -%\setcounter{totalnumber}{8}
 147.180 -%\setcounter{topnumber}{5}
 147.181 -%\setcounter{bottomnumber}{5}
 147.182 -
 147.183 -%\renewcommand{\topfraction}{0.999}
 147.184 -%\renewcommand{\bottomfraction}{0.999}
 147.185 -%\renewcommand{\textfraction}{0.0005}
 147.186 -
   148.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis-title.tex	Mon Sep 16 12:27:20 2013 +0200
   148.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   148.3 @@ -1,205 +0,0 @@
   148.4 -% --- English Title Page ------------------------------------------------
   148.5 -\begin{titlepage}
   148.6 -\begin{center}
   148.7 -\vspace*{8mm}
   148.8 -{\LARGE Bachelor's Thesis}\\
   148.9 -
  148.10 -\vspace{16mm}
  148.11 -
  148.12 -{\huge \bf Userinterfaces for Computer Theorem Provers\\
  148.13 -	Feasibility Study in the \isac-Projekt\\}
  148.14 -
  148.15 -\vspace{16mm}
  148.16 -
  148.17 -{\LARGE Marco Steger\textsuperscript{1}}\\
  148.18 -
  148.19 -\vspace{16mm}
  148.20 -
  148.21 -{\Large
  148.22 -Institute for Software Technology (IST)\\
  148.23 -Graz University of Technology\\
  148.24 -A-8010 Graz, Austria\\}
  148.25 -
  148.26 -\vspace{16mm}
  148.27 -
  148.28 -%TODO TU - figure; Line 26, 76
  148.29 -%\begin{figure}[!ht]
  148.30 -%\centerline{\includegraphics[width=4cm,keepaspectratio=true]{fig/tug}}
  148.31 -%\end{figure}
  148.32 -
  148.33 -\vspace{16mm}
  148.34 -
  148.35 -{\large
  148.36 -\begin{tabular}{ll}
  148.37 -Advisor:    & Ass.Prof. Dipl.-Ing. Dr.techn.\ Bernhard Aichernig\\[0.5ex]
  148.38 -%TODO Aichernig????
  148.39 -Co-Advisor: & Dr.techn.\ Walther Neuper
  148.40 -\end{tabular}}
  148.41 -
  148.42 -\vfill
  148.43 -{\large Graz, 30.06.2011}
  148.44 -\vspace{15mm}
  148.45 -\end{center}
  148.46 -
  148.47 -\noindent
  148.48 -\underline{\hspace*{3cm}}\\
  148.49 -{\footnotesize
  148.50 -\textsuperscript{1} E-mail: m.steger@student.tugraz.at\\
  148.51 -\copyright ~ Copyright 2011 by the author}
  148.52 -
  148.53 -
  148.54 -
  148.55 -% --- German Title Page -------------------------------------------------
  148.56 -\selectlanguage{austrian}
  148.57 -
  148.58 -\newpage
  148.59 -\begin{center}
  148.60 -\vspace*{8mm}
  148.61 -{\LARGE Bachelorarbeit}\\
  148.62 -
  148.63 -\vspace{16mm}
  148.64 -
  148.65 -{\huge \bf Userinterfaces f\"ur Computer Theorem Prover\\
  148.66 -	Machbarkeits-Studie im \isac-Projekt\\}
  148.67 -
  148.68 -\vspace{16mm}
  148.69 -
  148.70 -{\LARGE Marco Steger\textsuperscript{1}}\\
  148.71 -
  148.72 -\vspace{16mm}
  148.73 -
  148.74 -{\Large
  148.75 -Institut f\"ur Softwaretechnologie (IST)\\
  148.76 -Technische Universit\"at Graz\\
  148.77 -A-8010 Graz\\}
  148.78 -
  148.79 -\vspace{16mm}
  148.80 -
  148.81 -%\begin{figure}[!ht]
  148.82 -%\centerline{\includegraphics[width=4cm,keepaspectratio=true]{fig/tug}}
  148.83 -%\end{figure}
  148.84 -
  148.85 -\vspace{16mm}
  148.86 -
  148.87 -%TODO Aichernig????
  148.88 -{\large
  148.89 -\begin{tabular}{ll}
  148.90 -Gutachter:	& Ass.Prof. Dipl.-Ing. Dr.techn.\ Bernhard Aichernig\\[0.5ex]
  148.91 -Mitbetreuer:	& Dr.techn.\ Walther Neuper
  148.92 -\end{tabular}}
  148.93 -
  148.94 -\vspace{16mm}
  148.95 -{\large Graz, 30.05.2011}
  148.96 -
  148.97 -\vfill
  148.98 -Diese Arbeit ist in deutscher Sprache verfasst.
  148.99 -\end{center}
 148.100 -
 148.101 -\noindent
 148.102 -\underline{\hspace*{3cm}}\\
 148.103 -{\footnotesize
 148.104 -\textsuperscript{1} E-Mail: m.steger@student.tugraz.at\\
 148.105 -\copyright ~ Copyright 2011, Marco Steger}
 148.106 -\end{titlepage}
 148.107 -
 148.108 -\selectlanguage{english}
 148.109 -
 148.110 -
 148.111 -% --- English Abstract --------------------------------------------------
 148.112 -\pagestyle{plain}
 148.113 -\pagenumbering{roman}
 148.114 -\newpage
 148.115 -
 148.116 -\vspace*{25mm}
 148.117 -
 148.118 -\begin{changemargin}{15mm}{15mm}
 148.119 -\begin{center}
 148.120 -{\Large\bfseries Abstract}
 148.121 -\end{center}
 148.122 -\vspace*{7mm}
 148.123 -
 148.124 -The computer theorem prover Isabelle switches from a user interface for expert users to a user interface which is more powerful and which serves integration of Isabelle into other tools for software engineers.
 148.125 -
 148.126 -This bachelor thesis in ``Telematik'' introduces the specific components underlying Isabelle's new user interface, the scala-layer for asyncronous editing of proof documents, the Java-based editor jEdit together with the respective plugin mechanisms; and the thesis documents the current organization of these components in Isabelle and sets up the whole system, Isabelle, Scala and jEdit in the IDE NetBeans copying the configuration of the Isabelle developer team. This setup is explored in the implementation of a test-plugin, and the experiences are documented in detail.
 148.127 -
 148.128 -Thus the prerequisites are given for cooperation in the further development of Isabelle's future front-end and respective integration into development tools like test case generators for software engineers.
 148.129 -
 148.130 -\vspace{5mm}
 148.131 -\noindent
 148.132 -{\large\bfseries Keywords:}
 148.133 -computer theorem prover, Isabelle, user-interface, jEdit, plugin, Scala, actors, asynconous communication, proof document, structured derivations
 148.134 -
 148.135 -
 148.136 -
 148.137 -% --- German Abstract ---------------------------------------------------
 148.138 -\selectlanguage{austrian}
 148.139 -\newpage
 148.140 -
 148.141 -\vspace*{10mm}
 148.142 -
 148.143 -\begin{center}
 148.144 -{\Large\bfseries Kurzfassung}
 148.145 -\end{center}
 148.146 -\vspace*{2mm}
 148.147 -
 148.148 -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.
 148.149 -
 148.150 -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 setzt das gesamte System in einer integrierten Entwicklungsungebung auf. Dieses Setup wird in der Implementation eines Test-Plugins erprobt. Die Erfahrungen mit diesem Test werden ausf\"uhrlich dokumentiert.
 148.151 -
 148.152 -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.
 148.153 -
 148.154 -\vspace{5mm}
 148.155 -\noindent
 148.156 -{\large\bfseries Schlagworte:}
 148.157 -Computer Theorem Proving, Isabelle, User-Interface, jEdit, Plugin, Scala, Actors, Asyncrone Kommunikation, Beweis-Dokument, Structured Derivations
 148.158 -
 148.159 -\selectlanguage{english}
 148.160 -\end{changemargin}
 148.161 -
 148.162 -
 148.163 -% --- Pledge ------------------------------------------------------------
 148.164 -\newpage
 148.165 -\vspace*{20mm}
 148.166 -
 148.167 -\begin{center}
 148.168 -{\Large\bfseries Statutory Declaration}
 148.169 -\end{center}
 148.170 -\vspace{5mm}
 148.171 -\noindent
 148.172 -I declare that I have authored this thesis independently, that I have not used other than the declared
 148.173 -sources/resources, and that I have explicitly marked all material which has been quoted either
 148.174 -literally or by content from the used sources.
 148.175 -
 148.176 -\vspace{2cm}
 148.177 -
 148.178 -\noindent
 148.179 -\begin{tabular}{ccc}
 148.180 -\hspace*{6cm}     & \hspace*{2cm}   & \hspace*{6.7cm}\\
 148.181 -\dotfill          &                 & \dotfill\\
 148.182 -place, date       &                 & (signature)\\
 148.183 -\end{tabular}
 148.184 -
 148.185 -\vspace{35mm}
 148.186 -
 148.187 -
 148.188 -\selectlanguage{austrian}
 148.189 -
 148.190 -\begin{center}
 148.191 -{\Large\bfseries Eidesstattliche Erkl\"arung}
 148.192 -\end{center}
 148.193 -\vspace{5mm}
 148.194 -\noindent
 148.195 -Ich erkl\"are an Eides statt, dass ich die vorliegende Arbeit selbstst\"andig verfasst, andere als die
 148.196 -angegebenen Quellen/Hilfsmittel nicht benutzt, und die den benutzten Quellen w\"ortlich und inhaltlich
 148.197 -entnommenen Stellen als solche kenntlich gemacht habe.
 148.198 -
 148.199 -\vspace{2cm}
 148.200 -
 148.201 -\noindent
 148.202 -\begin{tabular}{ccc}
 148.203 -\hspace*{6cm}     & \hspace*{2cm}   & \hspace*{6.7cm}\\
 148.204 -\dotfill          &                 & \dotfill\\
 148.205 -Ort, Datum        &                 & (Unterschrift)\\
 148.206 -\end{tabular}
 148.207 -
 148.208 -\selectlanguage{english}
   149.1 --- a/src/Doc/isac/msteger/bakk-arbeit/thesis.tex	Mon Sep 16 12:27:20 2013 +0200
   149.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   149.3 @@ -1,72 +0,0 @@
   149.4 -\documentclass[11pt]{report}
   149.5 -%\usepackage{ngerman}
   149.6 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   149.7 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   149.8 -
   149.9 -\include{thesis-preamble}
  149.10 -
  149.11 -\begin{document}
  149.12 -
  149.13 -\lstset{               % set parameters for listings
  149.14 -  language=,
  149.15 -  basicstyle=\small,
  149.16 -  tabsize=2,
  149.17 -  xleftmargin=2mm,
  149.18 -  xrightmargin=2mm,
  149.19 -  float=htb,
  149.20 -  frame=shadowbox,
  149.21 -  framexleftmargin=2mm,
  149.22 -  rulesepcolor=\color{lightgrey},
  149.23 -  numbers=left,
  149.24 -  numberstyle=\scriptsize,
  149.25 -  extendedchars,
  149.26 -  breaklines,
  149.27 -  showtabs=false,
  149.28 -  showspaces=false,
  149.29 -  showstringspaces=false,
  149.30 -  keywordstyle=\bfseries,
  149.31 -  identifierstyle=\ttfamily,
  149.32 -  stringstyle=,
  149.33 -  captionpos=b,
  149.34 -  abovecaptionskip=\abovecaptionskip,
  149.35 -  belowcaptionskip=\belowcaptionskip,
  149.36 -  aboveskip=\floatsep,
  149.37 -}
  149.38 -
  149.39 -
  149.40 -%\frontmatter
  149.41 -\normalsize
  149.42 -\pagestyle{empty}            % for title pages
  149.43 -
  149.44 -\pagenumbering{alph}
  149.45 -\include{thesis-title}       % Title Pages, Abstracts, Pledge
  149.46 -\include{thesis-acknowl}     % Acknowledgements
  149.47 -\include{thesis-contents}    % Table of Contents, List of Figures, List of Tables
  149.48 -
  149.49 -
  149.50 -%\mainmatter
  149.51 -\pagestyle{fancy}               % for main pages
  149.52 -\pagenumbering{arabic}          % for main pages
  149.53 -
  149.54 -\include{thesis-intro}          % Introduction
  149.55 -\include{content}
  149.56 -% \include{your main files}
  149.57 -
  149.58 -%\include{thesis-conclusion}     % Conclusion and Future Work
  149.59 -
  149.60 -
  149.61 -\appendix
  149.62 -% \noappendicestocpagenum
  149.63 -% \addappheadtotoc
  149.64 -
  149.65 -\include{thesis-appendix}      % Appendix A
  149.66 -
  149.67 -
  149.68 -%\backmatter
  149.69 -\include{thesis-biblio}      % Bibliography
  149.70 -%%%\bibliographystyle{plain}
  149.71 -%%%\bibliography{master_thesis}
  149.72 -% \include{glossary}      % Glossary
  149.73 -% \include{index}         % Index
  149.74 -
  149.75 -\end{document}
  149.76 \ No newline at end of file
   150.1 --- a/src/Doc/isac/msteger/bakk-plan.tex	Mon Sep 16 12:27:20 2013 +0200
   150.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   150.3 @@ -1,141 +0,0 @@
   150.4 -\documentclass{article}
   150.5 -\usepackage{a4}
   150.6 -\usepackage{times}
   150.7 -\usepackage{latexsym}
   150.8 -
   150.9 -\bibliographystyle{alpha}
  150.10 -\usepackage{graphicx}
  150.11 -
  150.12 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  150.13 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  150.14 -\def\Problem{ {\tt Problem }}
  150.15 -
  150.16 -
  150.17 -\title{Userinterfaces f\"ur Computer Theorem Prover\\
  150.18 -	Machbarkeits-Studie im Isac-Projekt
  150.19 -}
  150.20 -
  150.21 -\author{Marco Steger\\
  150.22 -Bachelorarbeit Telematik\\
  150.23 -am Institut f\"ur Softwaretechnologie\\
  150.24 -TU Graz}
  150.25 -
  150.26 -\begin{document}
  150.27 -\maketitle
  150.28 -%\newpage
  150.29 -\section{Zur Aufgabenstellung der Bachelorarbeit}\label{intro}
  150.30 -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.
  150.31 -
  150.32 -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.
  150.33 -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.
  150.34 -
  150.35 -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' sollen auf jEdit und Isabelle aufgesetzt werden. Die Bachelorarbeit liefert die Machbarkeits-Studie f\"ur diesen Schritt.
  150.36 -
  150.37 -%\newpage
  150.38 -
  150.39 -\section{Ist-Zustand zu Projektbeginn}
  150.40 -ISAC wird als Eclipse-Projekt entwickelt, das das JavaSwing-Frontend und auch die SML-Mathematik-Engine (samt einer alten Isabelle-Version) umfasst. Isabelles kommende jEdit/Scala-Technologie ist schwer in Eclipse zu integrieren. Zwei Frontends, das alte JavaSwing und das neue jEdit, st\"oren sich gegenseitig in einer einzigen Entwicklungs-Umgebung.
  150.41 -
  150.42 -Sowohl zu jEdit als auch zu Scala und NetBeans bestehen keine Erfahrungen im ISAC-Projekt. 
  150.43 -
  150.44 -\section{Planung: Soll-Zustand am Projektende}
  150.45 -ISAC ist in die Isabelle-Entwicklung integriert, die ISAC-Entwicklung l\"auft in einem updatebaren Repository von Isabelle. F\"ur das in Entwicklung befindliche jEdit-Frontend von Isabelle ist ein NetBeans-Projekt aufgesetzt.
  150.46 -Wesentliche Vorarbeiten haben die Herausforderungen gekl\"art, die sich aus der Zielsetzung ergeben: Backs 'structured derivations' \"uber das neue jEdit-GUI eingeben und von Isabelle checken lassen. 
  150.47 -
  150.48 -%\newpage
  150.49 -
  150.50 -\section{Milestones und Arbeitsprotokolle}
  150.51 -\subsection{Inhaltliche Voraussetzungen erarbeitet: am 27.09.2010} 
  150.52 -\begin{itemize}
  150.53 -\item Kenntnis der Grundlagen und Anwendung von CTP: am 03.08.2010 
  150.54 -\item Charakteristika der Programmsprache Scala: 27.09.2010
  150.55 -\item Scala Actors: am 12.08.2010
  150.56 -\end{itemize}
  150.57 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  150.58 -\hline
  150.59 -Datum & T\"atigkeit & Einheiten \\ \hline
  150.60 -12.07.2010 & Meeting: erste Besprechung und Erklärungen zu Isabelle, Isac und CTPs & 2 \\ \hline
  150.61 -15.07.2010 & Recherche über Isabelle und CTPs & 3 \\ \hline
  150.62 -20.07.2010 & Meeting: Besprechen der grundsätzlichen Vorgangsweise und Ziele & 1 \\ \hline
  150.63 -23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenhänge mit Isac abklären & 1 \\ \hline 
  150.64 -30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise über Backs 'structured derivations'; Begriffserklärung & 3 \\ \hline
  150.65 -01.08.2010 & Recherche: Buch für Scala & 2 \\ \hline
  150.66 -03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
  150.67 -05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1  \\ \hline
  150.68 -06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
  150.69 -08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
  150.70 -09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
  150.71 -12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
  150.72 -24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
  150.73 -25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
  150.74 -27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline
  150.75 - & Anzahl der Einheiten & 44 \\
  150.76 -\hline
  150.77 -\end{tabular}
  150.78 -
  150.79 -
  150.80 -\subsection{Technische Voraussetzungen hergestellt: am 02.08.2010}
  150.81 -\begin{itemize}
  150.82 -\item Isabelle installiert, Filestruktur bekannt: am 02.08.2010
  150.83 -\item Scala in NetBeans eingebunden: am 22.07.2010
  150.84 -\item Mercurial installiert und einrichten des Repositories: 19.07.2010 
  150.85 -\end{itemize}
  150.86 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
  150.87 -\hline
  150.88 -Datum & T\"atigkeit & Einheiten \\ \hline
  150.89 -19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
  150.90 -20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
  150.91 -21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
  150.92 -22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
  150.93 -23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausführen: testen & 5 \\ \hline 
  150.94 -27.07.2010 & Isabelle-jEdit-Plugin: Änderungen an der Projektstruktur & 7 \\ \hline
  150.95 -28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
  150.96 -29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
  150.97 -30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung über Erfahrungen mit Filestruktur & 4 \\ \hline
  150.98 -02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
  150.99 - & Anzahl der Einheiten & 60 \\
 150.100 -\hline
 150.101 -\end{tabular}
 150.102 -
 150.103 -\subsection{NetBeans-Projekt aufgesetzt }% am ..(*)...} 
 150.104 -\begin{itemize}
 150.105 -\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: am 02.08.2010
 150.106 -\item jEdit-Plugin: XML-Files für ISAC vorbereitet: am 22.07.2010
 150.107 -\item jEdit-Plugin: Source files geschrieben: 19.07.2010 
 150.108 -\end{itemize}
 150.109 -\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 150.110 -\hline
 150.111 -Datum & T\"atigkeit & Einheiten \\ \hline
 150.112 -10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
 150.113 -11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
 150.114 -21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
 150.115 -22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten für ISAC & 3 \\ \hline
 150.116 -24.08.2010 & Umarbeiten des Isabelle-Plugins für ISAC & 6 \\ \hline 
 150.117 -26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach Lösungen & 3 \\ \hline
 150.118 -28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
 150.119 -29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
 150.120 -30.08.2010 & Isabelle-jEdit-Plugin endlich vollständig lauffähig gebracht & 4 \\ \hline
 150.121 -01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
 150.122 -04.09.2010 & Umarbeiten des Isabelle-Plugins für ISAC & 5 \\ \hline 
 150.123 -20.09.2010 & Einrichten des Laptops für Isabelle-Isac & 4 \\ \hline 
 150.124 -22.09.2010 & Meeting: Fortschrittsbericht, kurze Einführung für Mitstreiter & 3 \\ \hline
 150.125 -
 150.126 -29.09.2010 & Neue Vorgehensweise: QuickNotepad-Plugin(QN) wird in Scala übersetzt und für ISAC entsprechend angepasst: Arbeit an den XML-Files & 4 \\ \hline 
 150.127 -30.09.2010 & QN: Start mit übersetzten der Sourcefiles & 5 \\ \hline
 150.128 -02.10.2010 & QN: Übersetzten der Sourcefiles & 6 \\ \hline
 150.129 -04.10.2010 & QN: Übersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
 150.130 -05.10.2010 & QN: QN vollständig in Scala übersetzt, testen & 2 \\ \hline \hline
 150.131 - & Anzahl der Einheiten & 71 \\
 150.132 -\hline
 150.133 -\end{tabular}
 150.134 -
 150.135 -\subsection{Experimentelle Parser implementiert}% am ..(*)...} 
 150.136 -\subsection{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}
 150.137 -%\newpage
 150.138 -
 150.139 -\section{Zusammenfassung und R\"uckblick}
 150.140 -
 150.141 -
 150.142 -%\bibliography{CTP-userinterfaces}
 150.143 -%\bibliography{bib/math-eng,bib/bk,bib/RISC_2,bib/isac,bib/pl,bib/math,bib/pl}
 150.144 -\end{document}
 150.145 \ No newline at end of file
   151.1 --- a/src/Doc/isac/msteger/bakk-presentation.tex	Mon Sep 16 12:27:20 2013 +0200
   151.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   151.3 @@ -1,445 +0,0 @@
   151.4 -% /usr/share/doc/latex-beamer/solutions/conference-talks/conference-ornate-20min.en.tex
   151.5 -
   151.6 -\documentclass{beamer}
   151.7 -\mode<presentation>
   151.8 -{
   151.9 -  \usetheme{Hannover}
  151.10 -  \setbeamercovered{transparent}
  151.11 -}
  151.12 -\usepackage[english]{babel}
  151.13 -\usepackage[latin1]{inputenc}
  151.14 -\usepackage{times}
  151.15 -\usepackage{ngerman}
  151.16 -\usepackage[T1]{fontenc}
  151.17 -%\usepackage{graphicx}
  151.18 -
  151.19 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  151.20 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  151.21 -
  151.22 -\title[Isabelle Frontend]
  151.23 -{Userinterfaces \\f\"ur Computer Theorem Prover,\\
  151.24 -	Machbarkeits-Studie im \isac-Projekt
  151.25 -}
  151.26 -\subtitle{Bachelorarbeit Telematik}
  151.27 -
  151.28 -\author{Marco Steger}
  151.29 -\institute{Institut f\"ur Software Technologie\\
  151.30 -  Technische Universit\"at Graz}
  151.31 -
  151.32 -\date{21.06.2011}
  151.33 -%\subject{Formal specification of math assistants}
  151.34 -% This is only inserted into the PDF information catalog
  151.35 -
  151.36 -% Delete this, if you do not want the table of contents to pop up at
  151.37 -% the beginning of each subsection:
  151.38 -\AtBeginSubsection[]
  151.39 -{
  151.40 -  \begin{frame}<beamer>
  151.41 -    \frametitle{Outline}
  151.42 -    \tableofcontents[currentsection,currentsubsection]
  151.43 -  \end{frame}
  151.44 -}
  151.45 -
  151.46 -
  151.47 -% If you wish to uncover everything in a step-wise fashion, uncomment
  151.48 -% the following command: 
  151.49 -%\beamerdefaultoverlayspecification{<+->}
  151.50 -
  151.51 -
  151.52 -\begin{document}
  151.53 -\begin{frame}
  151.54 -  \titlepage
  151.55 -\end{frame}
  151.56 -
  151.57 -\begin{frame}
  151.58 -  \frametitle{Outline}
  151.59 -  \tableofcontents
  151.60 -  % You might wish to add the option [pausesections]
  151.61 -\end{frame}
  151.62 -
  151.63 -\section[Stutus quo]{Ausgangssituation: das k\"unftige Isabelle Front-end}
  151.64 -\subsection[Isabelle]{Der Theoremprover Isabelle}
  151.65 -\begin{frame}
  151.66 -  \frametitle{Der Theoremprover Isabelle}
  151.67 -\begin{itemize}
  151.68 -\item Anwendungen von Isabelle
  151.69 -  \begin{itemize}
  151.70 -  \item Mechanisieren von Mathematik Theorien
  151.71 -    \begin{itemize}
  151.72 -    \item nat\"urliche, reelle, komplexe Zahlen, Listen, Lattices, \dots
  151.73 -    \item Gr\"obner Basen, Integral/Differential, Taylorreihen, \dots          
  151.74 -    \item High Order Logics, Logic of Computable Functions, \dots
  151.75 -    \end{itemize}
  151.76 -\pause
  151.77 -  \item Math.Grundlagen f\"ur Softwaretechnologie
  151.78 -    \begin{itemize}
  151.79 -    \item Hoare Logic, Temporal Logic of Actions, Hoare for Java
  151.80 -    \item Theory for Unix file-system security, for state spaces, \dots
  151.81 -    \item Archive of Formal Proofs {\tiny\tt http://afp.sourceforge.net}
  151.82 -    \end{itemize}
  151.83 -  \end{itemize}
  151.84 -\pause
  151.85 -\item Integration von Isabelle in Entwicklungstools
  151.86 -  \begin{itemize}
  151.87 -  \item Boogie --- Verification Condition Generator
  151.88 -  \item $\mathbf{\pi}d.e$ Projekt: Unterst\"utzung Domain-spezifischen CTPs
  151.89 -  \item Test Case Generators (TUG) ?
  151.90 -  \end{itemize}
  151.91 -\pause
  151.92 -\item Isar, die Beweissprache von Isabelle
  151.93 -  \begin{itemize}
  151.94 -  %\item Demo $\sqrt{2}\not\in{\cal R}\;\;\;$ 
  151.95 -  \item Demo 'Allgemeine Dreiecke'
  151.96 -\pause
  151.97 -\alert{Beweisteile asynchron interpretiert}
  151.98 -  \end{itemize}
  151.99 -\end{itemize}
 151.100 -\end{frame}
 151.101 -
 151.102 -\subsection[Scala-Layer]{Die Konzeption des Scala-Layers}
 151.103 -\begin{frame}\frametitle{Die Konzeption des Scala-Layers}
 151.104 -\begin{figure}
 151.105 -\begin{center}
 151.106 -\includegraphics[width=100mm]{fig-reuse-ml-scala-SD}
 151.107 -\end{center}
 151.108 -%\nocaptionrule\caption{Reuse of Isabelle/Isar's Scala API.}
 151.109 -\label{fig-reuse-ml-scala}
 151.110 -\end{figure}
 151.111 -\end{frame}
 151.112 -
 151.113 -\begin{frame}\frametitle{Kommunikationsprotokoll \\Scala --- SML}
 151.114 -\begin{itemize}
 151.115 -\item Das Protokoll ist \textbf{asynchron}: \\
 151.116 -verschiedene Teile eines Beweises werden in verschiedenen Threads interpretiert
 151.117 -\pause
 151.118 -\item Die Threads werden von Scala-\textbf{``Actors''} verwaltet (``Actors'' von der Programmsprache Erlang \"ubernommen)
 151.119 -\pause
 151.120 -\item \alert{Das Protokoll hat \textbf{kein API} nach aussen:}\\
 151.121 -\pause
 151.122 -Der Scala-Layer zielt auf konsistente Verwaltung gro\3er, verteilter Theorie-Bibliotheken\\
 151.123 -\pause
 151.124 -Anwendungsprogrammierer sollen nicht hier eingreifen, sondern Isabelle Theorien erweitern\\
 151.125 -\pause
 151.126 -\alert{\textit{!~Grunds\"atzliches Problem f\"ur das Projekt ``SD''~!}}
 151.127 -\end{itemize}
 151.128 -\end{frame}
 151.129 -
 151.130 -\subsection[Integration]{Isabelles Filestruktur im \"Ubergangsstadium}
 151.131 -
 151.132 -
 151.133 -\begin{frame}\frametitle{Isabelle Files: *.scala}
 151.134 -{\tiny
 151.135 -\textbf{\$ find -name ``*.scala''}\\
 151.136 -./src/Pure/General/xml.scala\\
 151.137 -./src/Pure/General/linear\_set.scala\\
 151.138 -
 151.139 -./src/Pure/General/symbol.scala\\
 151.140 -./src/Pure/General/exn.scala\\
 151.141 -./src/Pure/General/position.scala\\
 151.142 -./src/Pure/General/scan.scala\\
 151.143 -./src/Pure/General/xml\_data.scala\\
 151.144 -./src/Pure/General/yxml.scala\\
 151.145 -./src/Pure/General/markup.scala\\
 151.146 -:\\
 151.147 -./src/Pure/General/sha1.scala\\
 151.148 -./src/Pure/General/timing.scala\\
 151.149 -./src/Pure/General/pretty.scala\\
 151.150 -.\\
 151.151 -./src/Pure/Concurrent/volatile.scala\\
 151.152 -./src/Pure/Concurrent/future.scala\\
 151.153 -./src/Pure/Concurrent/simple\_thread.scala\\
 151.154 -.\\
 151.155 -./src/Pure/Thy/html.scala\\
 151.156 -./src/Pure/Thy/completion.scala\\
 151.157 -./src/Pure/Thy/thy\_header.scala\\
 151.158 -./src/Pure/Thy/thy\_syntax.scala\\
 151.159 -./src/Pure/Isac/isac.scala\\
 151.160 -./src/Pure/library.scala\\
 151.161 -.\\
 151.162 -./src/Pure/Isar/keyword.scala\\
 151.163 -./src/Pure/Isar/outer\_syntax.scala\\
 151.164 -./src/Pure/Isar/token.scala\\
 151.165 -./src/Pure/Isar/parse.scala\\
 151.166 -.\\
 151.167 -./src/Pure/System/gui\_setup.scala\\
 151.168 -./src/Pure/System/isabelle\_system.scala\\
 151.169 -./src/Pure/General/timing.scala\\
 151.170 -./src/Pure/General/pretty.scala\\
 151.171 -.\\
 151.172 -./src/Pure/Concurrent/volatile.scala\\
 151.173 -./src/Pure/Concurrent/future.scala\\
 151.174 -./src/Pure/Concurrent/simple\_thread.scala\\
 151.175 -.\\
 151.176 -./src/Pure/Thy/html.scala\\
 151.177 -./src/Pure/Thy/completion.scala\\
 151.178 -./src/Pure/Thy/thy\_header.scala\\
 151.179 -./src/Pure/Thy/thy\_syntax.scala\\
 151.180 -./src/Pure/Isac/isac.scala\\
 151.181 -./src/Pure/library.scala\\
 151.182 -.\\
 151.183 -./src/Pure/Isar/keyword.scala\\
 151.184 -./src/Pure/Isar/outer\_syntax.scala\\
 151.185 -./src/Pure/Isar/token.scala\\
 151.186 -./src/Pure/Isar/parse.scala\\
 151.187 -.\\
 151.188 -./src/Pure/System/gui\_setup.scala\\
 151.189 -./src/Pure/System/isabelle\_system.scala\\
 151.190 -./src/Pure/System/swing\_thread.scala\\
 151.191 -./src/Pure/System/download.scala\\
 151.192 -./src/Pure/System/session\_manager.scala\\
 151.193 -./src/Pure/System/standard\_system.scala\\
 151.194 -./src/Pure/System/isabelle\_syntax.scala\\
 151.195 -./src/Pure/System/session.scala\\
 151.196 -./src/Pure/System/platform.scala\\
 151.197 -./src/Pure/System/cygwin.scala\\
 151.198 -./src/Pure/System/event\_bus.scala\\
 151.199 -./src/Pure/System/isabelle\_process.scala\\
 151.200 -.\\
 151.201 -./src/Pure/PIDE/document.scala\\
 151.202 -./src/Pure/PIDE/markup\_tree.scala\\
 151.203 -./src/Pure/PIDE/text.scala\\
 151.204 -./src/Pure/PIDE/command.scala\\
 151.205 -./src/Pure/PIDE/isar\_document.scala
 151.206 -}
 151.207 -\end{frame}
 151.208 -
 151.209 -
 151.210 -
 151.211 -\subsection[jEdit]{Das Frontend: jEdit und ``plugins''}
 151.212 -\begin{frame}\frametitle{Das Frontend: \\jEdit und ``plugins''}
 151.213 -\begin{itemize}
 151.214 -\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.''}
 151.215 -\pause
 151.216 -\item Also: Die Funktionalit\"at von jEdit wird \"uber ``plugins'' bestimmt
 151.217 -\pause
 151.218 -\item Isabelle verwendet eine Reihe davon
 151.219 -  \begin{itemize}
 151.220 -  \item der Parser ``Sidekick''
 151.221 -  \item Console f\"ur jEdit-Komponenten
 151.222 -  \item + Scala
 151.223 -  \item + Ml
 151.224 -  \item etc
 151.225 -  \end{itemize}
 151.226 -\pause
 151.227 -\item jEdit ist ``open source'' mit gro\3er Community
 151.228 -\pause
 151.229 -\item Anfragen an Mailinglisten von jEdit (ohne Scala-plugin!) und Isabelle
 151.230 -\end{itemize}
 151.231 -\end{frame}
 151.232 -
 151.233 -\section[Projektarbeit]{Projekt: Vorarbeiten f\"ur ``structured derivations'' (SD)}
 151.234 -\subsection[Aufgabenstellung]{Definition der Aufgabenstellung}
 151.235 -\begin{frame}\frametitle{Definition der Aufgabenstellung}
 151.236 -Aufgabenstellung: \\Feasibility-Study zur Implementierung von ``structured~derivations'' (SD) in Isabelle.\\
 151.237 -
 151.238 -\textit{``Die Implementierung soweit vorantreiben wie im gegebenen Studenausma\3 m\"oglich~!''}\\
 151.239 -
 151.240 -Milestones:
 151.241 -\begin{enumerate}
 151.242 -\item Relevante Isabelle Komponenten identifizieren und studieren
 151.243 -\item Installation der Standard-Komponenten
 151.244 -\item Entwicklungsumgebung vom Isabelle-Team kopieren
 151.245 -\item Relevante Komponenten implementieren
 151.246 -  \begin{itemize}
 151.247 -  \item jEdit Plugin f\"ur SD
 151.248 -  \item zugeh\"origen Parser
 151.249 -  \item nicht vorgesehen: SD-Interpreter in Isar (SML)
 151.250 -  \end{itemize}
 151.251 -\end{enumerate}
 151.252 -\end{frame}
 151.253 -
 151.254 -%\subsection[Beispiel SD]{Beispiel ``structured derivation'' (SD)}
 151.255 -\begin{frame}\frametitle{Beispiel ``structured~derivation''~(SD)}
 151.256 -{\footnotesize
 151.257 -\begin{tabbing}
 151.258 -123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
 151.259 -\>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
 151.260 -\>  \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
 151.261 -\>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
 151.262 -\>  \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
 151.263 -\>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
 151.264 -\>  \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
 151.265 -\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
 151.266 -\>  \>   \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
 151.267 -\>  \>$\equiv$\>\vdots\\
 151.268 -\>  \>  \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
 151.269 -\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$  \\
 151.270 -\>  \>     \>$1 + -1 * x$\\
 151.271 -\>\dots\>$1 + -1 * x$\\
 151.272 -\>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
 151.273 -\>  \>$1-x$
 151.274 -\end{tabbing}
 151.275 -}
 151.276 -\end{frame}
 151.277 -
 151.278 -\subsection[NetBeans]{Konfiguration des Projektes in der NetBeans IDE}
 151.279 -\begin{frame}\frametitle{Konfiguration in NetBeans}
 151.280 -Mehrere Run-Konfigurationen sind praktisch:
 151.281 -\begin{itemize}
 151.282 -\item Start von jEdit + Plug-ins aus NetBeans
 151.283 -  \begin{itemize}
 151.284 -  \item Exekution der fertig kompilierten jEdit.jar
 151.285 -  \item Exkution der eingebundenen jEdit Sources: \\zum Debuggen !
 151.286 -  \end{itemize}
 151.287 -\item Start von jEdit aus der Konsole
 151.288 -\end{itemize}
 151.289 -\vspace{0.2cm}   \pause
 151.290 -Dementsprechend komplex sind die Konfigurations-Files:
 151.291 -\begin{center}
 151.292 -\begin{tabular}{l r l}
 151.293 -build.xml          & 102 & LOCs\\
 151.294 -project.xml        & 25  & LOCs\\
 151.295 -project.properties & 85  & LOCs\\
 151.296 -build-impl.xml     & 708 & LOCs\\
 151.297 -                   &     & (teilw. automatisch generiert)\end{tabular}
 151.298 -\end{center}
 151.299 -\end{frame}
 151.300 -
 151.301 -\subsection[Implementation]{Komponenten zur Implementation von SD}
 151.302 -
 151.303 -\begin{frame}\frametitle{Die Konzeption des Scala-Layers}
 151.304 -\begin{figure}
 151.305 -\includegraphics[width=100mm]{fig-jedit-plugins-SD}
 151.306 -\label{Frontend des jEdit}
 151.307 -\end{figure}
 151.308 -\end{frame}
 151.309 -
 151.310 -\begin{frame}\frametitle{jEdit-Plugin}
 151.311 -\begin{itemize}
 151.312 -\item Aufbau: Ein Plugin besteht aus:
 151.313 -\pause
 151.314 -	\begin{itemize}
 151.315 -	\item Source-Files: \textbf{Scala} 
 151.316 -	\pause
 151.317 -	\item Property file 
 151.318 -	\pause
 151.319 -	\item XML-Files: \textit{``glue code''} zwischen \textbf{Java} (Editor) und \textbf{Scala} (Plugin)
 151.320 -	\end{itemize}
 151.321 -%\pause
 151.322 -%\item Bestehendes Java-Plugin in Scala transferieren
 151.323 -%\pause
 151.324 -%\item Neue Ordnerstruktur in bestehende Isabelle-Ordner-Hierachie integrieren
 151.325 -\end{itemize}
 151.326 -\end{frame}
 151.327 -
 151.328 -\begin{frame}\frametitle{Sources des jEdit Plugins}
 151.329 -{\tiny
 151.330 -src/Tools/jEditC\textbf{\$ ls -l *}\\
 151.331 -build.xml\\
 151.332 -%makedist\\
 151.333 -%manifest.mf\\
 151.334 -%README\_BUILD\\
 151.335 -\textbf{build/*}\\
 151.336 -\textbf{contrib/*}\\
 151.337 -\textbf{dist/*}\\
 151.338 -\textbf{plugin/}build.xml\\
 151.339 -\textbf{plugin/}changes40.txt\\
 151.340 -\textbf{plugin/}changes42.txt\\
 151.341 -\textbf{plugin/}description.html\\
 151.342 -\textbf{plugin/}IsacActions.java\\
 151.343 -\textbf{plugin/}Isac.iml\\
 151.344 -\textbf{plugin/}Isac.java\\
 151.345 -\textbf{plugin/}IsacOptionPane.java\\
 151.346 -\textbf{plugin/}IsacPlugin.java\\
 151.347 -\textbf{plugin/}IsacTextArea.java\\
 151.348 -\textbf{plugin/}IsacToolPanel.java\\
 151.349 -\textbf{plugin/}plugin\\
 151.350 -\textbf{plugin/}README.txt\\
 151.351 -\textbf{nbproject/*}\\
 151.352 -\textbf{src/}actions.xml\\
 151.353 -\textbf{src/}changes40.txt\\
 151.354 -\textbf{src/}changes42.txt\\
 151.355 -\textbf{src/}description.html\\
 151.356 -\textbf{src/}dockables.xml\\
 151.357 -\textbf{src/}IsacActions.scala\\
 151.358 -\textbf{src/}Isac.iml\\
 151.359 -\textbf{src/}IsacOptionPane.scala\\
 151.360 -\textbf{src/}IsacPlugin.scala\\
 151.361 -\textbf{src/}Isac.props\\
 151.362 -\textbf{src/}Isac.scala\\
 151.363 -\textbf{src/}IsacTextArea.scala\\
 151.364 -\textbf{src/}IsacToolPanel.scala\\
 151.365 -\textbf{src/}manifest.mf\\
 151.366 -\textbf{src/}README.txt\\
 151.367 -\textbf{src/}users-guide.xml
 151.368 -}
 151.369 -\end{frame}
 151.370 -
 151.371 -\begin{frame}\frametitle{Anforderungen an das Versuchs-Plugin}
 151.372 -Folgende Funktionalit\"at wurde zu Testzwecken umgesetzt:
 151.373 -\pause
 151.374 -\begin{itemize}
 151.375 -	\item Grunds\"atzlicher Aufbau eines GUIs
 151.376 -	\pause
 151.377 -	\item Kopieren von Text zwischen den einzelnen Buffers
 151.378 -	\pause
 151.379 -		\begin{itemize}
 151.380 -		\item \alert{Somit auch Zugriff auf andere Plugins!}
 151.381 -		\end{itemize}
 151.382 -	\pause
 151.383 -	\item Ansatz f\"ur die Einbindung des SD-Parsers
 151.384 -	\pause
 151.385 -		\begin{itemize}
 151.386 -		\item Zugriff auf Isabelle-Pure: \alert{parsen von SD parallel zu Isabelle/Isar}
 151.387 -		\end{itemize}
 151.388 -	\pause
 151.389 -	\item \textit{DEMO}
 151.390 -\end{itemize}
 151.391 -\end{frame}
 151.392 -
 151.393 -
 151.394 -%\subsection[Parser]{Ein funktionaler Parser f\"ur SD (in SML)}
 151.395 -
 151.396 -\section[Summary]{Zusammenfassung}
 151.397 -\begin{frame}\frametitle{Zusammenfassung}
 151.398 -Folgende Milestones wurden erfolgreich abgeschlossen:
 151.399 -\begin{enumerate}
 151.400 -\item Relevante Isabelle Komponenten dokumentiert
 151.401 -\pause
 151.402 -\item Installation der Standard-Komponenten:
 151.403 -  \begin{itemize}
 151.404 -  \item Mercurial Versioncontrol
 151.405 -  \item NetBeans IDE
 151.406 -  \item Standard Isabelle Bundle
 151.407 -  \end{itemize}
 151.408 -  \pause
 151.409 -\item Entwicklungsumgebung vom Isabelle-Team kopieren
 151.410 -  \begin{itemize}
 151.411 -  \item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
 151.412 -  \item jEdit als NetBeans Projekt definiert
 151.413 -  \end{itemize}
 151.414 -  \pause
 151.415 -\item Relevante Komponenten implementieren
 151.416 -  \begin{itemize}
 151.417 -  \item jEdit Plugin f\"ur SD
 151.418 -  \item Verbindung des Plugins zu Isabelle
 151.419 -  \item zugeh\"origen Parser: nur ein Test in SML
 151.420 -  \end{itemize}
 151.421 -\end{enumerate}
 151.422 -\end{frame}
 151.423 -
 151.424 -\begin{frame}\frametitle{Zusammenfassung}
 151.425 -\pause
 151.426 -\alert{$\mathbf{- - -}$}\\
 151.427 -Aus Zeitgr\"unden nicht m\"oglich: ein komplettes SD-Plugin;\\
 151.428 -dazu w\"are auch ein Interpreter auf der ML-Seite n\"otig.\\
 151.429 -\vspace{0.3cm}
 151.430 -\alert{$\mathbf{+ + +}$}\\
 151.431 -\pause
 151.432 -Voraussetzungen f\"ur k\"unftige Entwicklung geschaffen:
 151.433 -\begin{enumerate}
 151.434 -\item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
 151.435 -\item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
 151.436 -\item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
 151.437 -\end{enumerate}
 151.438 -\end{frame}
 151.439 -
 151.440 -\begin{frame}\frametitle{}
 151.441 -\begin{center}
 151.442 -\LARGE{Danke f\"ur die Aufmerksamkeit !}
 151.443 -\end{center}
 151.444 -\end{frame}
 151.445 -
 151.446 -\end{document}
 151.447 -
 151.448 -
   152.1 --- a/src/Doc/isac/msteger/bibliografie.bib	Mon Sep 16 12:27:20 2013 +0200
   152.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   152.3 @@ -1,15 +0,0 @@
   152.4 -@article{wolff10-boogie,
   152.5 -  author    = {Sascha B{\"o}hme and
   152.6 -               Michal Moskal and
   152.7 -               Wolfram Schulte and
   152.8 -               Burkhart Wolff},
   152.9 -  title     = {HOL-Boogie - An Interactive Prover-Backend for the Verifying
  152.10 -               C Compiler},
  152.11 -  journal   = {J. Autom. Reasoning},
  152.12 -  volume    = {44},
  152.13 -  number    = {1-2},
  152.14 -  year      = {2010},
  152.15 -  pages     = {111-144},
  152.16 -  ee        = {http://dx.doi.org/10.1007/s10817-009-9142-9},
  152.17 -  bibsource = {DBLP, http://dblp.uni-trier.de}
  152.18 -}
  152.19 \ No newline at end of file
   153.1 --- a/src/Doc/isac/msteger/dirs-all-jars.txt	Mon Sep 16 12:27:20 2013 +0200
   153.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   153.3 @@ -1,79 +0,0 @@
   153.4 ------ for "isabelle jedit &"; contained in Isabelle_bundle
   153.5 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jedit.jar
   153.6 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/LatestVersion.jar
   153.7 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/SideKick.jar
   153.8 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Console.jar
   153.9 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Pure.jar
  153.10 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Isac.jar
  153.11 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/scala-compiler.jar
  153.12 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Isabelle-jEdit.jar
  153.13 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/cobra.jar
  153.14 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/js.jar
  153.15 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/Hyperlinks.jar
  153.16 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/scala-swing.jar
  153.17 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/scala-library.jar
  153.18 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/QuickNotepad.jar
  153.19 -./contrib/jedit-4.3.2_Isabelle-6d736d983d5c/jars/ErrorList.jar
  153.20 ------ scala system; contained in Isabelle_bundle
  153.21 -./contrib/scala-2.8.1.final/misc/sbaz/scala-bazaars.jar
  153.22 -./contrib/scala-2.8.1.final/misc/sbaz/sbaz-tests.jar
  153.23 -./contrib/scala-2.8.1.final/misc/scala-devel/plugins/continuations.jar
  153.24 -./contrib/scala-2.8.1.final/lib/scala-compiler.jar
  153.25 -./contrib/scala-2.8.1.final/lib/scalap.jar
  153.26 -./contrib/scala-2.8.1.final/lib/scala-swing.jar
  153.27 -./contrib/scala-2.8.1.final/lib/scala-library.jar
  153.28 -./contrib/scala-2.8.1.final/lib/jline.jar
  153.29 -./contrib/scala-2.8.1.final/lib/scala-dbc.jar
  153.30 -./contrib/scala-2.8.1.final/src/scala-library-src.jar
  153.31 -./contrib/scala-2.8.1.final/src/scala-swing-src.jar
  153.32 -./contrib/scala-2.8.1.final/src/scala-compiler-src.jar
  153.33 -./contrib/scala-2.8.1.final/src/scala-dbc-src.jar
  153.34 -./contrib/scala-2.8.1.final/src/sbaz-src.jar
  153.35 ------ Isars entry to SML from Scala-layer; created according to 3.3.#3{enumerate}
  153.36 -./lib/classes/isabelle-scala.jar 
  153.37 -./lib/classes/Pure.jar
  153.38 -===== all below for NetBeans
  153.39 ------ standard Isabelle, started by <RUN> in NetBeans
  153.40 -      description in 2.2.2
  153.41 -./src/Tools/jEdit/dist/jars/jedit.jar
  153.42 -./src/Tools/jEdit/dist/jars/SideKick.jar
  153.43 -./src/Tools/jEdit/dist/jars/Console.jar
  153.44 -./src/Tools/jEdit/dist/jars/Pure.jar
  153.45 -./src/Tools/jEdit/dist/jars/scala-compiler.jar
  153.46 -./src/Tools/jEdit/dist/jars/Isabelle-jEdit.jar
  153.47 -./src/Tools/jEdit/dist/jars/cobra.jar
  153.48 -./src/Tools/jEdit/dist/jars/js.jar
  153.49 -./src/Tools/jEdit/dist/jars/Hyperlinks.jar
  153.50 -./src/Tools/jEdit/dist/jars/scala-swing.jar
  153.51 -./src/Tools/jEdit/dist/jars/scala-library.jar
  153.52 -./src/Tools/jEdit/dist/jars/ErrorList.jar
  153.53 ------ source of jEdit, required for <DEBUG> in NetBeans;
  153.54 -      adapted from NetBeans' webpages,
  153.55 -      description in 2.2.3.#5
  153.56 -./src/Tools/jEditC/contrib/jEdit/build/jars/SideKick.jar
  153.57 -./src/Tools/jEditC/contrib/jEdit/build/jars/Console.jar
  153.58 -./src/Tools/jEditC/contrib/jEdit/build/jars/Pure.jar
  153.59 -./src/Tools/jEditC/contrib/jEdit/build/jars/Isac.jar
  153.60 -./src/Tools/jEditC/contrib/jEdit/build/jars/QuickNPScala.jar
  153.61 -./src/Tools/jEditC/contrib/jEdit/build/jars/scala-compiler.jar
  153.62 -./src/Tools/jEditC/contrib/jEdit/build/jars/Isabelle-jEdit.jar
  153.63 -./src/Tools/jEditC/contrib/jEdit/build/jars/cobra.jar
  153.64 -./src/Tools/jEditC/contrib/jEdit/build/jars/js.jar
  153.65 -./src/Tools/jEditC/contrib/jEdit/build/jars/Hyperlinks.jar
  153.66 -./src/Tools/jEditC/contrib/jEdit/build/jars/scala-swing.jar
  153.67 -./src/Tools/jEditC/contrib/jEdit/build/jars/scala-library.jar
  153.68 -./src/Tools/jEditC/contrib/jEdit/build/jars/ErrorList.jar
  153.69 -./src/Tools/jEditC/contrib/jEdit/build/jEdit.jar
  153.70 ------ demo plugin, started by <RUN> in NetBeans
  153.71 -      description in 2.2.3.#4
  153.72 -./src/Tools/jEditC/dist/jars/SideKick.jar
  153.73 -./src/Tools/jEditC/dist/jars/Console.jar
  153.74 -./src/Tools/jEditC/dist/jars/Pure.jar
  153.75 -./src/Tools/jEditC/dist/jars/Isac.jar
  153.76 -./src/Tools/jEditC/dist/jars/scala-compiler.jar
  153.77 -./src/Tools/jEditC/dist/jars/cobra.jar
  153.78 -./src/Tools/jEditC/dist/jars/js.jar
  153.79 -./src/Tools/jEditC/dist/jars/Hyperlinks.jar
  153.80 -./src/Tools/jEditC/dist/jars/scala-swing.jar
  153.81 -./src/Tools/jEditC/dist/jars/scala-library.jar
  153.82 -./src/Tools/jEditC/dist/jars/ErrorList.jar
   154.1 Binary file src/Doc/isac/msteger/fig-jedit-plugins-SD.odg has changed
   155.1 Binary file src/Doc/isac/msteger/fig-jedit-plugins-SD.png has changed
   156.1 Binary file src/Doc/isac/msteger/fig-reuse-ml-scala-SD.odg has changed
   157.1 Binary file src/Doc/isac/msteger/fig-reuse-ml-scala-SD.png has changed
   158.1 --- a/src/Doc/isac/msteger/official_docu/Doku.tex	Mon Sep 16 12:27:20 2013 +0200
   158.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   158.3 @@ -1,540 +0,0 @@
   158.4 -\chapter{Definition der Aufgabenstellung}
   158.5 -\section{Detaillierte Beschreibung der Aufgabenstellung}
   158.6 -Zu Beginn des Projekts wurden einige Vorgaben und Ziele des Projektes erarbeitet 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. 
   158.7 -
   158.8 -Hauptaugenmerk war dabei auf die Erstellung eines jEdit-Plugins, dass die Verarbeitung von Back's Structured Derivations m\"oglich machen soll, gelegt worden. Mit anderen Worten, es sollte so viel Plugin-Code, wie im begrenzten Projektzeitraum m\"oglich, implementiert werden.
   158.9 -
  158.10 -Weiters sollte eine Projektstruktur aufgebaut werden, die die Initialisierungsarbeiten von weiterf\"uhrende bzw. nachfolgende Projekten erleichtert und somit verk\"urzt. Dabei sollte darauf geachtet werden, dass die vom Isabelleteam bereits verwendete Projekthierarchie soweit wie m\"oglich \"ubernommen bzw. erweitert wird.
  158.11 -Die nachfolgende Auflistung soll die wichtigsten Tasks nochmals zusammenfassen:
  158.12 -\begin{enumerate}
  158.13 -\item Relevante Isabelle Komponenten identifizieren und studieren
  158.14 -\item Installation der Standard-Komponenten
  158.15 -\item Entwicklungsumgebung vom Isabelle-Team kopieren
  158.16 -\item Relevante Komponenten implementieren
  158.17 -  \begin{itemize}
  158.18 -  \item jEdit Plugin f\"ur SD
  158.19 -  \item zugeh\"origen Parser
  158.20 -  \item nicht vorgesehen: SD-Interpreter in Isar (SML)
  158.21 -  \end{itemize}
  158.22 -\end{enumerate}
  158.23 -
  158.24 -\chapter{Beleuchtung der Projekt-relevanten Technologien}
  158.25 -Dieses Kapitel soll die vielen unterschiedlichen Technologien, die im Rahmen dieser Arbeit verwendet oder zumindest ber\"uhrt wurden, beleuchten und dem Leser helfen, nachfolgende Zusammenh\"ange zu verstehen. Nat\"urlich kann in keines der folgenden Themen sehr tief eingestiegen werden. Viel mehr sollen die nachfolgenden Ausf\"uhrungen einen groben \"Uberblick \"uber die einzelnen Technologien geben.
  158.26 -\section{Back's Structured Derivations}
  158.27 -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.
  158.28 -
  158.29 -Das nachfolgende Beispiel zeigt ein einfaches Beispiel, wie eine Formel mittels SD dargestellt bzw. umgeformt werden kann:
  158.30 -
  158.31 -%{\footnotesize
  158.32 -\begin{tabbing}
  158.33 -123,\=1234\=1234\=1234\=1234\=1234\=1234\=123\=\kill
  158.34 -\>$\bullet$\>Simplify $(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
  158.35 -\>  \>$(1 - x) * (x ^ 2 + 1) + x ^ 3 - x ^ 2$\\
  158.36 -\>$\equiv$\>$\{ {\it RewriteSet}\;{\it purify}\}$\\
  158.37 -\>  \>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
  158.38 -\>$\equiv$\>$\{{\it RewriteSet}\;{\it simplify\_pure}\}$\\
  158.39 -\>  \>$\bullet$\>$(1 + -1 * x) * (x ^ 2 + 1) + x ^ 3 + -1 * x ^ 2$\\
  158.40 -\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it expand\_poly\_}\}$ \\
  158.41 -\>  \>   \>$1 * x ^ 2 + 1 * 1 + (-1 * x * x ^ 2 + -1 * x * 1) + x ^ 3 +-1 * x ^ 2$\\
  158.42 -\>  \>$\equiv$\>\vdots\\
  158.43 -\>  \>  \>$1 + -1 * x + 0 * x ^ 2 + 0 * x ^ 3$\\
  158.44 -\>  \>$\equiv$\>$\{{\it RewriteSet}\;{\it reduce\_012\_}\}$  \\
  158.45 -\>  \>     \>$1 + -1 * x$\\
  158.46 -\>\dots\>$1 + -1 * x$\\
  158.47 -\>$\equiv$\>$\{{\it RewriteSet}\;{\it beautify}\}$\\
  158.48 -\>  \>$1-x$
  158.49 -\end{tabbing}
  158.50 -%}
  158.51 -
  158.52 -Dieses Beispiel kann wie folgt interpretiert werden:
  158.53 -\begin{enumerate}
  158.54 -\item Die erste Zeile ist als Angabe bzw. Ausgangspunkt der Berechnung zu verstehen.
  158.55 -\item Nun folgt der eigentliche Ablauf einer Umformung mittels SD: Mit der Formel in der zweiten Zeile beginnt die Berechnung.
  158.56 -\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 schlie{\ss}en zu k\"onnen.
  158.57 -\item Aus dieser Rechenvorschrift ergibt sich die Formel in der n\"achsten Zeile.
  158.58 -\item Dieser Ablauf wiederholt sich und zieht sich \"uber die weiteren Berechnungen.
  158.59 -\end{enumerate}
  158.60 -
  158.61 -Back liefert mit SD eine sehr gute Darstellungs- und Verbarbeitungs-Richtlinie, die einerseits dem Leser/Anwender hilft, da durch die Regel- bzw. Beschreibungs-Zeile klar gestellt wird, wie der letzte Berechnungsschritt durchgef\"uhrt wurde. Andererseits 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\"oglich ist.
  158.62 -
  158.63 -\section{Der Texteditor jEdit}\label{jEdit}
  158.64 -%     http://www.jedit.org/
  158.65 -%     http://de.wikipedia.org/wiki/JEdit
  158.66 -%     http://www.chip.de/downloads/jEdit_19235021.html
  158.67 -%
  158.68 -jEdit ist ein in Java geschriebener und als Open-Source-Projekt erh\"altlicher Texteditor, der vor allem durch sein sehr gut entwickeltes und ebenso einfaches Plugin-Management-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.
  158.69 -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.
  158.70 -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.
  158.71 -
  158.72 -\subsection{Das Plugin-System}
  158.73 -% http://jedit.org/users-guide/writing-plugins-part.html
  158.74 -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} verwendet. Dabei ist es m\"oglich, dass Java-Plugins mit Scala-Plugins kombiniert werden, da diese auch problemlos miteinander kommunizieren k\"{o}nnen.
  158.75 -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.
  158.76 -Weiters bietet sich die M\"oglichkeit, 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.
  158.77 -
  158.78 -
  158.79 -\subsection{Pluginstruktur}
  158.80 -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. 
  158.81 -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. 
  158.82 -
  158.83 -\section{Isabelle}
  158.84 -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(mit funktionalen sowie imperativen Sprachanteilen). 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.
  158.85 -
  158.86 -\subsection{Isabelle-Pure}
  158.87 -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. 
  158.88 -Eine Auflistung der f\"ur das Isabelle-Pure-Packet ben\"otigten Scala-Source-Filles kann Anhang B.2 entnommen werden.
  158.89 -
  158.90 -\subsection{Isabelle-jEdit}
  158.91 -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.
  158.92 -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.
  158.93 -
  158.94 -\subsection{Paketstruktur von Isabelle}
  158.95 -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.
  158.96 -Die nachfolgende Auflistung zeigt alle Pakete, die f\"{u}r SD bzw. {\sisac} von Bedeutung sind und und wo diese zu finden sind.
  158.97 - 
  158.98 -
  158.99 -\begin{itemize}
 158.100 -\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. 
 158.101 -\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.
 158.102 -\item \textit{src/Tools/jEdit/dist/jars:} \textbf{Isabelle-jEdit.jar, Pure.jar, SideKick.jar, jedit.jar, ...} 
 158.103 -\item \textit{src/Tools/jEditC/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.
 158.104 -\item \textit{src/Tools/jEditC/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 bzw. sollte dies nur f\"ur schwer nachvollziebare Abl\"aufe ohne Isabelle-Beteiligung angewendet werden. 
 158.105 -\end{itemize} 
 158.106 -
 158.107 -Siehe dazu auch Anhang B. Dort sind alle relevanten jar-Pakete noch einmal aufgearbeitet und entsprechend gruppiert.
 158.108 -
 158.109 -\section{Die Programmiersprache Scala}
 158.110 -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.
 158.111 -
 158.112 -\subsection{Grundlage der Sprache}
 158.113 -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, und vorallem auch das von Erlang \"ubernommene und sehr gut umgesetzte Actorprinzip, sind wohl die Hauptgr\"unde, warum sich das Isabelle-Entwicklungsteam f\"{u}r diese Sprache entschieden hat. Wie bereits 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.
 158.114 -
 158.115 -Dieser direkte Zusammenhang zwischen Java und Scala soll anhand der Grafik-Bibliotheken Swing gezeigt bzw. die Vorteile, die daraus resultieren, beleuchtet werden.
 158.116 -
 158.117 -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. 
 158.118 -
 158.119 -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. 
 158.120 -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.
 158.121 -
 158.122 -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.
 158.123 -
 158.124 -\subsection{Scala, Java und jEdit}
 158.125 -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!
 158.126 -
 158.127 -\subsection{Der Isabelle-Scala-Layer}
 158.128 -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. 
 158.129 -
 158.130 -Dieser Absatz sollen nun die Eigenschaften des Scala-Layers und die damit verbundenen Chancen f\"ur das Isac- bzw. SD-Projektes 
 158.131 -erarbeitet werden. 
 158.132 -
 158.133 -\begin{figure}
 158.134 -\begin{center}
 158.135 -\includegraphics[width=100mm]{../fig-reuse-ml-scala-SD}
 158.136 -\end{center}
 158.137 -\label{fig-reuse-ml-scala}
 158.138 -\end{figure}
 158.139 -
 158.140 -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 sollte hier also nicht angreifen sonder die Isabelle-Theorien entsprechend erweitern.
 158.141 -
 158.142 -\chapter{Konfiguration und Implementation der Komponenten}
 158.143 -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.
 158.144 -
 158.145 -\section{Konfiguration des Netbeans Projektes}
 158.146 -Um in k\"unftigen Entwicklungsvorhaben effizient kooperieren zu k\"onnen, wurde das Netbeans-Projekt genau nach den Vorgaben des Isabelle-Teams konfiguriert. 
 158.147 -
 158.148 -\begin{enumerate}
 158.149 -\item Konfigurations-Files von Netbeans in ``Files''-View; beeinflussen sich gegenseitig
 158.150 -  \begin{enumerate}
 158.151 -  \item build.xml (aus template erzeugt, keine automatischen Ver\"anderunen)
 158.152 -  \item nbproject/build-impl.xml (z.T. automatische Ver\"anderunen)
 158.153 -  \item nbproject/project.xml (z.T. automatische Ver\"anderunen)
 158.154 -  \item TODO
 158.155 -  \end{enumerate}
 158.156 -\item Sacla-plugin installieren laut http://wiki.netbeans.org/Scala69, 
 158.157 -  \begin{enumerate}
 158.158 -  \item von ``Install with NetBeasn 6.9''
 158.159 -  \item nach /usr/local/netbeans.../plugins/scala
 158.160 -  \end{enumerate}
 158.161 -\item Scala-plugin installiert in NetBeans
 158.162 -  \begin{enumerate}
 158.163 -  \item Men\"u $>$ Tools $>$ Plugins $>$ Downloaded $>$ Add Plugins 
 158.164 -  \item alle Files von /usr/local/netbeans.../plugins/scala/
 158.165 -  \item Fenster zeigt alle ausgew\"alten Files
 158.166 -  \item $<$Install$>$ calls Wizzard $<$Next$>$ probably accept Warning
 158.167 -  \item Funktionstest: Men\"ue $>$ Files $>$ New Project: zeigt Scala als ``Categories''
 158.168 -  \end{enumerate}
 158.169 -\item Neues Projekt ``isac-jedit'' konfigurieren
 158.170 -  \begin{enumerate}
 158.171 -  \item Men\"u $>$ Open Project (weil schon aus dem Repository die notwendigen Files vorhanden sind)
 158.172 -  \item /src/Tools/jeditC: Reference Problems, weil jEdit folgende Plugins braucht
 158.173 -  \item Funktionskontrolle: ``Projects''-View zeigt das neue Projekt
 158.174 -  \item Die Konfigurations-Files sind v\"ollig getrennt von anderen Projekten
 158.175 -  \item Referenz-Probleme beheben; das zeigt auch eventuell fehlende Files
 158.176 -    \begin{enumerate}
 158.177 -    \item ``Projects''-View $>$ rightMouse $>$ Resolve Reference Problems: Fenster zeigt dieListe der fehlenden Dateien; $<$Next$>$
 158.178 -    \item Files holen aus ``Tools'' $>$ Libraries: \"uber Filebrowser aus dem Isabelle\_bundle holen contrib/jEdit---/jars
 158.179 -    \item ``New Library'' 
 158.180 -      \begin{enumerate}
 158.181 -      \item Cobra-renderer: cobra.jar
 158.182 -      \item Console:  Console.jar
 158.183 -      \item ErrorList: ErrorList.jar
 158.184 -      \item Hyperlinks: Hyperlinks.jar
 158.185 -      \item Isabelle-Pure: Pure.jar
 158.186 -      \item Rhino-JavaScript: js.jar
 158.187 -      \item Scala-compiler: scala-compiler.jar
 158.188 -      \item SideKick: SideKick.jar
 158.189 -      \end{enumerate}
 158.190 -    \item Funktions-Kontrollen 
 158.191 -      \begin{enumerate}
 158.192 -      \item das kleine gelbe Warndreieck im ``Projects''-View ist verschwunden
 158.193 -      \item im ``Projects''-View 2 Ordner: ``src'' und ``Libraries''
 158.194 -      \end{enumerate}
 158.195 -    \end{enumerate}
 158.196 -  \item jEdit-Paket zum ``isac-jedit''-Projekt hinzuf\"ugen
 158.197 -    \begin{enumerate}
 158.198 -    \item ``Project''-View $>$ rightMouse $>$ Add Jar/Folder: Filebrowser
 158.199 -    \item /contrib/jedit.../jedit.jar
 158.200 -    \item Funktions-Kontrolle: ist in ``Projects''/Libraries/jedit.jar
 158.201 -    \end{enumerate}
 158.202 -  \item Das neue Projekt ``isac-jedit'' zum Hauptprojekt machen: ``Project''-View $>$ rightMouse $>$ Set as Main Project; Funktions-Kontrolle: der Projektname ist boldface.
 158.203 -  \end{enumerate}
 158.204 -\item Ab nun wird die Konfiguration \"uber ``trial and error'' zu Ende gef\"uhrt
 158.205 -  \begin{enumerate}
 158.206 -  \item Men\"u $>$ Build Main 
 158.207 -    \begin{enumerate}
 158.208 -    \item Wenn: Target ``Isac-impl.jar'' does not exist in the project ``isac-jedit''. It is used from target ``debug''
 158.209 -      \begin{enumerate}
 158.210 -      \item Versuch
 158.211 -        \begin{itemize}
 158.212 -        \item build-impl.xml l\"oschen
 158.213 -        \item NetBeans neu starten, stellt build-impl.xml automatisch aus build.xml wieder her
 158.214 -        \item \dots hat in diesem Fall nicht geholfen
 158.215 -       \end{itemize}
 158.216 -      \item Versuch zur Vermutung: Projekt wurde umbenannt von ``Isac'' in ``isac-jedit'', und das machte build.xml inkonsistent
 158.217 -        \begin{itemize}
 158.218 -        \item in build.xml query-replace ``Isac'' in ``isac-jedit''
 158.219 -        \item TODO?
 158.220 -        \item 
 158.221 -        \end{itemize}
 158.222 -      \end{enumerate}
 158.223 -    \item Wenn: Problem: failed to create tsk or type scalac
 158.224 -      \begin{enumerate}
 158.225 -      \item Versuch: Pfad zum Scala bekanntgeben
 158.226 -        \begin{itemize}
 158.227 -        \item /usr/local/netbeans-6.9.1/etc/netbeans.conf: netbeans\_default\_options= richtigen Scala-Pfad setzen
 158.228 -        \item build-impl.xml l\"oschen
 158.229 -        \item NetBeans neu starten.
 158.230 -        \end{itemize}
 158.231 -      \end{enumerate}
 158.232 -    \item Wenn Fehler: ``/usr/local/isabisac/src/Tools/jEditC/\${project.jEdit}/modes does not exist''
 158.233 -      \begin{enumerate}
 158.234 -      \item grep -r "project.jEdit" *
 158.235 -      \item nbproject/project.properties:project.jEdit=contrib/jEdit
 158.236 -      \item TODO?
 158.237 -      \end{enumerate}
 158.238 -    \end{enumerate}
 158.239 -  \end{enumerate}
 158.240 -\item error in project files, not in build.xml etc (1)
 158.241 -  \begin{enumerate}
 158.242 -  \item follow link to testSD.scala:22
 158.243 -  \item val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')\\
 158.244 -        val str1: String = ``TEST'' //isabelle.Isac.parse(``Testdaten aus dem Parser!'')\\
 158.245 -  \item build once again ... successful\\
 158.246 -  \item watch in console what is being copied and compare build.xml, 
 158.247 -          $<$target name=''-pre-jar''$>$
 158.248 -          $<$target name=''-post-jar''$>$
 158.249 -  \item essential: a new Pure.jar has been generated, which has been extended with a new class ``Isac''; this class has been defined in scr/Pure/Isac/isac.scala
 158.250 -  \item restore ``val str1: String = isabelle.Isac.parse(``Testdaten aus dem Parser!'')" requires new Pure.jar at the right place \dots
 158.251 -  \item \dots the shellscript bin/testSD\_jedit creates this new Pure.jar
 158.252 -  \end{enumerate}
 158.253 -\item error in bin/testSD
 158.254 -  \begin{enumerate}
 158.255 -  \item look at error messages, eg. src/Pure/: no such file or directory \dots
 158.256 -  \item \dots means that the script has not been started from $\approx\approx$ --- this behaviour shall be improved a.s.a.p.
 158.257 -  \item function test: \\
 158.258 -        \#\#\#\\
 158.259 -        \#\#\# Building Isabelle/Scala layer\\
 158.260 -        \#\#\#\\
 158.261 -  \item 
 158.262 -  \item 
 158.263 -  \end{enumerate}
 158.264 -$<$ $>$
 158.265 -Men\"u $>$  $>$ $>$  $>$ $>$  $>$
 158.266 -``Project''-View $>$ rightMouse $>$ $>$  $>$ $>$  $>$
 158.267 -\item 
 158.268 -  \begin{enumerate}
 158.269 -  \item 
 158.270 -    \begin{enumerate}
 158.271 -    \item 
 158.272 -      \begin{itemize}
 158.273 -      \item 
 158.274 -        \begin{itemize}
 158.275 -        \item 
 158.276 -        \item 
 158.277 -        \item 
 158.278 -        \end{itemize}
 158.279 -      \item 
 158.280 -      \item 
 158.281 -      \end{itemize}
 158.282 -    \item 
 158.283 -    \item 
 158.284 -    \end{enumerate}
 158.285 -  \item 
 158.286 -  \item 
 158.287 -  \end{enumerate}
 158.288 -\item 
 158.289 -  \begin{enumerate}
 158.290 -  \item 
 158.291 -    \begin{enumerate}
 158.292 -    \item 
 158.293 -      \begin{itemize}
 158.294 -      \item 
 158.295 -        \begin{itemize}
 158.296 -        \item 
 158.297 -        \item 
 158.298 -        \item 
 158.299 -        \end{itemize}
 158.300 -      \item 
 158.301 -      \item 
 158.302 -      \end{itemize}
 158.303 -    \item 
 158.304 -    \item 
 158.305 -    \end{enumerate}
 158.306 -  \item 
 158.307 -  \item 
 158.308 -  \end{enumerate}
 158.309 -\end{enumerate}
 158.310 -
 158.311 -
 158.312 -\section{Implementation der jEdit Komponenten}
 158.313 -
 158.314 -\subsection{Erstellen des Plugin-Ger\"{u}sts}
 158.315 -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. 
 158.316 -
 158.317 -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 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.
 158.318 -
 158.319 -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.
 158.320 -
 158.321 -\subsection{Erzeugung des Plugins}
 158.322 -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, Anhang C):
 158.323 -\begin{enumerate}
 158.324 -\item Das Plugin kann mittels Kommandline folgenderma{\ss}en erstellt werden: \\ \textit{cd ISABELLE\_HOME/src/Tools/isac/jEdit} $\rightarrow$ \textit{ant jar}
 158.325 -\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/}
 158.326 -\item jEdit ausf\"{u}hren und testen
 158.327 -\end{enumerate}
 158.328 -
 158.329 -\subsection{Verbindung zum Isabelle-Pure Plugin herstellen}
 158.330 -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. 
 158.331 -
 158.332 -\begin{figure}
 158.333 -\begin{center}
 158.334 -\includegraphics[width=100mm]{../fig-jedit-plugins-SD}
 158.335 -\end{center}
 158.336 -\label{fig-jedit-plugins-SD}
 158.337 -\end{figure}
 158.338 -
 158.339 -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.
 158.340 -
 158.341 -
 158.342 -\begin{enumerate}
 158.343 -\item Um den \sisac-Teil im Isabelle-Pure genau abzugrenzen, wurde ein Ordner \textit{Isac} angelegt und ein Testfile \textit{isac.scala} erstellt.
 158.344 -\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.
 158.345 -\item Nun kann Pure.jar mittels Kommandline erstellt werden: \textit{cd /src/Pure} $\rightarrow$ \textit{../../bin/isabelle env ./build-jars}
 158.346 -\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/}
 158.347 -\item jEdit ausf\"{u}hren und testen
 158.348 -\end{enumerate}
 158.349 -Alle die oben angef\"{u}hrten Punkte, sowie das Erzeugen und Kopieren des Plugins selbst, werden vom Script isac\_jedit erledigt.
 158.350 -Das Skript kann dem Anhang C entnommen werden.
 158.351 -
 158.352 -\section{Umsetzung des SD-Parsers}
 158.353 -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.
 158.354 -
 158.355 -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. 
 158.356 -
 158.357 -
 158.358 -\chapter{Ausblick: Von SD- zum \isac-Plugin}
 158.359 -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. 
 158.360 -
 158.361 -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. 
 158.362 -
 158.363 -\chapter{Zusammenfassung und R\"{u}ckblick}
 158.364 -Zusammenfassend wird nun ein \"Uberblick gegeben, welche Milestones erledigt wurden und welche nicht; Details dazu finden sich in Anhang A. %TODO
 158.365 -Abschlie{\ss}end gebe ich einen R\"uckblick auf meine pers\"onlichen Erfahrungen aus dieser Bakkalaureats-Arbeit.
 158.366 -
 158.367 -\section{Zusammenfassung}
 158.368 -Folgende Milestones wurden erfolgreich abgeschlossen:
 158.369 -\begin{enumerate}
 158.370 -\item Relevante Isabelle Komponenten dokumentiert
 158.371 -
 158.372 -\item Installation der Standard-Komponenten:
 158.373 -  \begin{itemize}
 158.374 -  \item Mercurial Versioncontrol
 158.375 -  \item NetBeans IDE
 158.376 -  \item Standard Isabelle Bundle
 158.377 -  \end{itemize}
 158.378 -  
 158.379 -\item Entwicklungsumgebung vom Isabelle-Team kopieren
 158.380 -  \begin{itemize}
 158.381 -  \item Isabelle-Sources vom Repository M\"unchen (Java, Scala, ML)
 158.382 -  \item jEdit als NetBeans Projekt definiert
 158.383 -  \end{itemize}
 158.384 -  
 158.385 -\item Relevante Komponenten implementieren
 158.386 -  \begin{itemize}
 158.387 -  \item jEdit Plugin f\"ur SD
 158.388 -  \item Verbindung des Plugins zu Isabelle
 158.389 -  \item zugeh\"origen Parser: nur ein Test in SML
 158.390 -  \end{itemize}
 158.391 -\end{enumerate}
 158.392 -
 158.393 -\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.
 158.394 -
 158.395 -\paragraph{Voraussetzungen f\"ur k\"unftige Entwicklung} geschaffen:
 158.396 -\begin{enumerate}
 158.397 -\item f\"ur die Implementation von ``structured derivations'' in Isabelle \dots
 158.398 -\item \dots als Vorarbeit f\"ur jEdit als k\"unftiges \isac-Frontend
 158.399 -\item f\"ur Mitarbeit an k\"unftiger Integration von Isabelle in Entwicklungswerkzeuge (Testcase-Generation etc).
 158.400 -\end{enumerate}
 158.401 -
 158.402 -\section{R\"uckblick}
 158.403 -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.
 158.404 -
 158.405 -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\"onnen.
 158.406 -
 158.407 -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.
 158.408 -
 158.409 -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. 
 158.410 -
 158.411 -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.
 158.412 -
 158.413 -%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!
 158.414 -
 158.415 -%\chapter{Milestones und Arbeitsprotokolle}
 158.416 -%\section{Inhaltliche Voraussetzungen erarbeitet: beendet am 27.09.2010} 
 158.417 -%\begin{itemize}
 158.418 -%\item Kenntnis der Grundlagen und Anwendung von CTP: beendet am 03.08.2010 
 158.419 -%\item Charakteristika der Programmsprache Scala: beendet am 27.09.2010
 158.420 -%\item Scala Actors: beendet am 12.08.2010
 158.421 -%\end{itemize}
 158.422 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 158.423 -%\hline
 158.424 -%Datum & T\"atigkeit & Einheiten \\ \hline
 158.425 -%12.07.2010 & Meeting: erste Besprechung und Erkl\"{a}rungen zu Isabelle, Isac und CTPs & 2 \\ \hline
 158.426 -%15.07.2010 & Recherche \"{u}ber Isabelle und CTPs & 3 \\ \hline
 158.427 -%20.07.2010 & Meeting: Besprechen der grunds\"{a}tzlichen Vorgangsweise und Ziele & 1 \\ \hline
 158.428 -%23.07.2010 & Isabelle: Ziele, Techniken (ML) und Zusammenh\"{a}nge mit Isac abkl\"{a}ren & 1 \\ \hline 
 158.429 -%30.07.2010 & Ende der Einarbeitungstage: weitere Vorgensweise \"{u}ber Backs 'structured derivations'; Begriffserkl\"{a}rung & 3 \\ \hline
 158.430 -%01.08.2010 & Recherche: Buch f\"{u}r Scala & 2 \\ \hline
 158.431 -%03.08.2010 & Isabelle bestehende Technologie studieren & 4 \\ \hline
 158.432 -%05.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren & 1  \\ \hline
 158.433 -%06.08.2010 & Einarbeiten in Scala: Unterschiede zu Java indentifizieren, erste Beispielfiles & 4 \\ \hline
 158.434 -%08.08.2010 & Einarbeiten in Scala: funktionale Seite von Scala & 2 \\ \hline
 158.435 -%09.08.2010 & Einarbeiten in Scala: Testfiles mit Scala-Swing & 5 \\ \hline
 158.436 -%12.08.2010 & Studieren von Papers zu Scala Actors & 3 \\ \hline
 158.437 -%24.09.2010 & Scala: Arbeiten mit Klassen und Schnittstellen & 3 \\ \hline
 158.438 -%25.09.2010 & Scala: Experimente mit Java in Scala-Source & 6 \\ \hline
 158.439 -%27.09.2010 & Scala: Testfiles zu "Funktional vs Imperativ" & 4 \\ \hline \hline
 158.440 -% & Anzahl der Einheiten & 44 \\
 158.441 -%\hline
 158.442 -%\end{tabular}
 158.443 -%
 158.444 -%
 158.445 -%\section{Technische Voraussetzungen hergestellt: beendet am 02.08.2010}
 158.446 -%\begin{itemize}
 158.447 -%\item Isabelle installiert, Filestruktur bekannt: beendet am 02.08.2010
 158.448 -%\item Scala in NetBeans eingebunden: beendet am 22.07.2010
 158.449 -%\item Mercurial installiert und einrichten des Repositories: beendet am 19.07.2010 
 158.450 -%\end{itemize}
 158.451 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 158.452 -%\hline
 158.453 -%Datum & T\"atigkeit & Einheiten \\ \hline
 158.454 -%19.07.2010 & Beginn der Installationsarbeiten: Repo klonen und testen & 6 \\ \hline
 158.455 -%20.07.2010 & Installationsarbeiten, Einarbeiten in Filestruktur & 7 \\ \hline
 158.456 -%21.07.2010 & Einarbeiten in Filestruktur & 6 \\ \hline
 158.457 -%22.07.2010 & Vorbereitungen: NetBeans, JDK und Scala installieren. Scala in NetBeans integrieren & 8 \\ \hline
 158.458 -%23.07.2010 & Isabelle-jEdit-Plugin mittels NetBeans ausf\"{u}hren: testen & 5 \\ \hline 
 158.459 -%27.07.2010 & Isabelle-jEdit-Plugin: \"{a}nderungen an der Projektstruktur & 7 \\ \hline
 158.460 -%28.07.2010 & Experimente mit Isabelle-jEdit-Plugin & 6 \\ \hline
 158.461 -%29.07.2010 & Identifikations der Parse-Einstiegsstelle & 5 \\ \hline
 158.462 -%30.07.2010 & Experimente mit Isabelle-jEdit-Plugin, Besprechung \"{u}ber Erfahrungen mit Filestruktur & 4 \\ \hline
 158.463 -%02.08.2010 & Installationen und einrichten des Repos auf meinen Laptop & 6 \\ \hline \hline
 158.464 -% & Anzahl der Einheiten & 60 \\
 158.465 -%\hline
 158.466 -%\end{tabular}
 158.467 -%
 158.468 -%\section{NetBeans-Projekt aufgesetzt: beendet am 02.08.2010} 
 158.469 -%\begin{itemize}
 158.470 -%\item Grundlegende Projektstruktur f\"ur ISAC hergestellt: beendet am 02.08.2010
 158.471 -%\item jEdit-Plugin: XML-Files f\"{u}r ISAC vorbereitet: beendet am 22.07.2010
 158.472 -%\item jEdit-Plugin: Source files geschrieben: beendet am 19.07.2010 
 158.473 -%\end{itemize}
 158.474 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 158.475 -%\hline
 158.476 -%Datum & T\"atigkeit & Einheiten \\ \hline
 158.477 -%10.08.2010 & Projektstruktur anlegen, build.xml anpassen & 7 \\ \hline
 158.478 -%11.08.2010 & jEdit-Plugin-Struktur studieren: Howto durcharbeiten & 5 \\ \hline
 158.479 -%21.08.2010 & bestehende jEdit-Plugins (Java) durcharbeiten & 3 \\ \hline
 158.480 -%22.08.2010 & Kopieren des Isabelle-jEdit-Plugins, Umarbeiten f\"{u}r ISAC & 3 \\ \hline
 158.481 -%24.08.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 6 \\ \hline 
 158.482 -%26.08.2010 & Problem mit Isabelle-Umgebungsvariable: Suche nach L\"{o}sungen & 3 \\ \hline
 158.483 -%28.08.2010 & Recherchen zum Umgebungsvariable-Problem, Arbeiten mit den Isabelle-Shell-Skripts & 2 \\ \hline
 158.484 -%29.08.2010 & Experimente mit den Path-Varialbe der jvm & 3 \\ \hline
 158.485 -%30.08.2010 & Isabelle-jEdit-Plugin endlich vollst\"{a}ndig lauff\"{a}hig gebracht & 4 \\ \hline
 158.486 -%01.09.2010 & Arbeiten an der jEdit-ISAC-Projektstruktur & 3 \\ \hline
 158.487 -%04.09.2010 & Umarbeiten des Isabelle-Plugins f\"{u}r ISAC & 5 \\ \hline 
 158.488 -%20.09.2010 & Einrichten des Laptops f\"{u}r Isabelle-Isac & 4 \\ \hline 
 158.489 -%22.09.2010 & Meeting: Fortschrittsbericht, kurze Einf\"{u}hrung f\"{u}r Mitstreiter & 3 \\ \hline
 158.490 -%
 158.491 -%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 
 158.492 -%30.09.2010 & QN: Start mit \"{u}bersetzten der Sourcefiles & 5 \\ \hline
 158.493 -%02.10.2010 & QN: \"{U}bersetzten der Sourcefiles & 6 \\ \hline
 158.494 -%04.10.2010 & QN: \"{U}bersetzten der Sourcefiles: Problem bei Interface & 3 \\ \hline
 158.495 -%05.10.2010 & QN: QN vollst\"andig in Scala \"{u}bersetzt, testen & 2 \\ \hline \hline
 158.496 -% & Anzahl der Einheiten & 71 \\
 158.497 -%\hline
 158.498 -%\end{tabular}
 158.499 -%
 158.500 -%\section{Experimentelle Parser implementiert: beendet am 04.03.2011} 
 158.501 -%\begin{itemize}
 158.502 -%\item Experimente mit dem SideKick-Parser abgeschlossen: beendet am 03.02.2011
 158.503 -%\item Verbindung zu Isabelle-Pure hergestellt: beendet am 04.03.2011
 158.504 -%\item Implementierung des Scala-Parsers: aufgeschoben
 158.505 -%\end{itemize}
 158.506 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 158.507 -%\hline
 158.508 -%Datum & T\"atigkeit & Einheiten \\ \hline
 158.509 -%28.01.2011 & Testen des SideKick-Parsers im Isabelle-Plugin & 2 \\ \hline
 158.510 -%29.01.2011 & Leichte Modifikationen des SideKick-Parsers im Isabelle-Plugin & 1 \\ \hline
 158.511 -%08.02.2011 & Besprechung zum Abschluss der praktischen Arbeiten & 1 \\ \hline
 158.512 -%16.02.2011 & Erstellen des Isabelle-Pur jar-Files & 1 \\ \hline
 158.513 -%19.02.2011 & Behebung des Problems mit den Umgebungsvariablen & 1 \\ \hline
 158.514 -%03.03.2011 & Erzeugung des Pure.jar Package m\"{o}glich & 2 \\ \hline
 158.515 -%04.04.2011 & Verbindung zwischen Plugin und Isabelle-Pure hergestellt und getestet  & 3 \\ \hline
 158.516 -%08.04.2011 & Besprechung: Implementierung des experimentellen Parsers wird nicht mehr durchgef\"{u}hrt & 1 \\ \hline \hline
 158.517 -% & Anzahl der Einheiten & 12 \\
 158.518 -%\hline
 158.519 -%\end{tabular}
 158.520 -%
 158.521 -%\section{Verfassen der Dokumentation und abschliesende Arbeiten: beendet am TO.DO.2011}
 158.522 -%\begin{itemize}
 158.523 -%\item Bacc.-Protokoll fertiggestellt: beendet am 01.03.2011
 158.524 -%\item Dokumentation: erste Version fertiggestellt: beendet am 28.04.2011
 158.525 -%\item Dokumentation abgeschlossen: beendet am TO.DO.2011 
 158.526 -%\end{itemize}
 158.527 -%\begin{tabular}{|p{2cm}|p{8cm}|p{2cm}|}
 158.528 -%\hline
 158.529 -%Datum & T\"atigkeit & Einheiten \\ \hline
 158.530 -%01.03.2011 & Besprechung zum Ablauf der Dokumentationsarbeiten: Protokoll und Dokumentation & 1 \\ \hline
 158.531 -%01.03.2011 & Erstellen des Protokolls & 2 \\ \hline
 158.532 -%08.03.2011 & Besprechung zur Doku und zur Schnittstelle zu Isabelle-Pure & 1 \\ \hline
 158.533 -%17.03.2011 & Dokumentation schreiben & 2 \\ \hline
 158.534 -%19.03.2011 & Dokumentation schreiben & 3 \\ \hline
 158.535 -%24.04.2011 & Dokumentation schreiben & 2 \\ \hline
 158.536 -%25.04.2011 & Dokumentation schreiben & 4 \\ \hline
 158.537 -%27.04.2011 & Dokumentation schreiben & 2 \\ \hline
 158.538 -%28.04.2011 & Dokumentation: Fertigstellen der ersten Version & 3 \\ \hline \hline
 158.539 -% & Anzahl der Einheiten & 20 \\
 158.540 -%\hline
 158.541 -%\end{tabular}
 158.542 -%
 158.543 -%\section{Pr\"asentation der Arbeit im IST-Seminar }% am ..(*)...}
   159.1 --- a/src/Doc/isac/tactics.tex	Mon Sep 16 12:27:20 2013 +0200
   159.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   159.3 @@ -1,26 +0,0 @@
   159.4 -\chapter{\isac s tactics}
   159.5 -
   159.6 -\begin{description}
   159.7 -\item{\bf Init\_Proof\_Hid (dialogmode, formalization, specification)} transfers the arguments to the math engine, the latter two in order to solve the example automatically. The tactic is not intended to be used by the student; it generates a proof tree with an empty model.
   159.8 -\item{\bf Init\_Proof} generates a proof tree with an empty model.
   159.9 -\item{\bf Model\_Problem problem} determines a problemtype (eventually found in the hierarchy) to be used for modeling.
  159.10 -\item{\bf Add\_Given, Add\_Find, Add\_Relation formula} inputs a formula to the respective field in a model (necessary as long as there is no facility for the user to input formula directly, and not only select the respective tactic plus formula from a list).
  159.11 -\item{\bf Specify\_Theory theory, Specify\_Problem problem, Specify\_Method method} specifies the respective element of the knowledgebase.
  159.12 -\item{\bf Refine\_Problem problem} searches for a matching problem in the hierarchy below 'problem'.
  159.13 -\item{\bf Apply\_Method method} finishes the model and specification phase and starts the solve phase. 
  159.14 -\item{\bf Free\_Solve} initiates the solve phase without guidance by a method.
  159.15 -\item{\bf Rewrite theorem} applies 'theorem' to the current formula and transforms it accordingly (if possible -- otherwise error). 
  159.16 -\item{\bf Rewrite\_Asm theorem} is the same tactic as 'Rewrite', but stores an eventual assumption of the theorem (instead of evaluating the assumption, i.e. the condition)
  159.17 -\item{\bf Rewrite\_Set ruleset} similar to 'Rewrite', but applies a whole set of theorems ('ruleset').
  159.18 -\item{\bf Rewrite\_Inst (substitution, theorem), Rewrite\_Set\_Inst (substitution, ruleset)} similar to the respective tactics, but substitute a constant (e.g. a bound variable) in 'theorem' before application.
  159.19 -\item{\bf Calculate operation} calculates the result of numerals w.r.t. 'operation' (plus, minus, times, cancel, pow, sqrt) within the current formula.
  159.20 -\item{\bf Substitute substitution} applies 'substitution' to the current formula and transforms it accordingly.
  159.21 -\item{\bf Take formula} starts a new sequence of calculations on 'formula' within an already ongoing calculation. 
  159.22 -\item{\bf Subproblem (theory, problem)} initiates a subproblem within a calculation.
  159.23 -\item{\bf Function formula} calls a function, where 'formula' contains the function name, e.g. 'Function (solve $1+2x+3x^2=0\;\;\;x$)'. In this case the modelling and specification phases are suppressed by default, i.e. the solving phase of this subproblem starts immediately. 
  159.24 -\item{\bf Split\_And, Conclude\_And, Split\_Or, Conclude\_Or, Begin\_Trans, End\_Trans, Begin\_Sequ, End\_Sequ, Split\_Intersect, End\_Intersect} concern the construction of particular branches of the prooftree; usually suppressed by the dialog guide.
  159.25 -\item{\bf Check\_elementwise assumptions} w.r.t. the current formula which comprises elements in a list.
  159.26 -\item{\bf Or\_to\_List} transforms a conjunction of equations to a list of equations (a questionable tactic in equation solving).
  159.27 -\item{\bf Check\_postcond:} check the current formula w.r.t. the postcondition on finishing the resepctive (sub)problem. 
  159.28 -\item{\bf End\_Proof} finishes a proof and delivers a result only if 'Check\_postcond' has been successful before.
  159.29 -\end{description}
  159.30 \ No newline at end of file
   160.1 Binary file src/Doc/isac/template_master_thesis.zip has changed
   161.1 --- a/src/Doc/isac/template_thesis_prelim.tex	Mon Sep 16 12:27:20 2013 +0200
   161.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   161.3 @@ -1,42 +0,0 @@
   161.4 -\documentclass{report}
   161.5 -\usepackage{a4}
   161.6 -\usepackage{times}
   161.7 -\usepackage{latexsym}
   161.8 -%\bibliographystyle{alpha}
   161.9 -\bibliographystyle{abbrv}
  161.10 -\usepackage{graphicx}
  161.11 -
  161.12 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  161.13 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
  161.14 -
  161.15 -\title{Tentative Title:\\
  161.16 -  TODO}
  161.17 -\author{n.n.\\
  161.18 -{\tt TODO@xxx.at}}
  161.19 -
  161.20 -\begin{document}
  161.21 -\maketitle
  161.22 -\abstract{
  161.23 -TODO
  161.24 -}
  161.25 -
  161.26 -\chapter{Background}
  161.27 -
  161.28 -\chapter{Goal}
  161.29 -
  161.30 -\chapter{State of the Art}
  161.31 -
  161.32 -\chapter{Thesis Structure}
  161.33 -
  161.34 -\chapter{Timeline}
  161.35 -Milestones
  161.36 -
  161.37 -\section{TODO}
  161.38 -
  161.39 -\section{TODO}
  161.40 -
  161.41 -\section{TODO}
  161.42 -
  161.43 -
  161.44 -%\bibliography{bib/TODO}
  161.45 -\end{document}
   162.1 --- a/src/Doc/isac/tleh/ferialprakt.tex	Mon Sep 16 12:27:20 2013 +0200
   162.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   162.3 @@ -1,96 +0,0 @@
   162.4 -\documentclass[a4paper,12pt]{article}
   162.5 -%usepackage{ngerman}
   162.6 -
   162.7 -
   162.8 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   162.9 -\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
  162.10 -
  162.11 -\title{Ferialpraxis\\ am Institut f\"ur Softwaretechnologie\\
  162.12 -       der Technischen Universit\"at Graz\\
  162.13 -       Arbeitsprotokoll}
  162.14 -\author{Thomas Leh\\
  162.15 -       t.leh@gmx.at}
  162.16 -\date{\today}
  162.17 -
  162.18 -\begin{document}
  162.19 -\maketitle
  162.20 -
  162.21 -\section{Pers\"ohnliche Zielsetzung}
  162.22 -Im letzen Sommer vor der Maturaklasse wollte ich mich schon \"uber 
  162.23 -Studienm\"oglichkeiten informieren. 
  162.24 -Meine Interessen liegen im Bereich der Computerwissenschaften und ich war
  162.25 -deshalb froh, die Praktikumsstelle bekommen zu haben.
  162.26 -Dabei wollte ich Folgendes erzielen:
  162.27 -\begin{itemize}\itemsep1pt
  162.28 -\item Genereller Einblick in die Software-Entwicklung 
  162.29 -\item Einblick ins Programmieren 
  162.30 -\item Informationen \"uber die Studienrichtung Informatik auf der TU
  162.31 -\item Arbeitserfahrung im Bereich der Informatik
  162.32 -\end{itemize}
  162.33 -\newpage
  162.34 -\section{Arbeitsprotokoll}
  162.35 -\begin{center}
  162.36 -\begin{tabular}{l|l|r}
  162.37 -Datum   & T\"atigkeit & Std. \\ \hline
  162.38 -12.7.11
  162.39 - & Demonstration des ``educational math assistant \sisac'' &7.5 \\
  162.40 - & Demonstration des Theorem Provers Isabelle & \\
  162.41 - & Einf\"uhrung Linux, objektorientierte/funktionale Programmierung& \\
  162.42 - & Installation: Isabelle, \sisac-core, Mercurial & \\ \hline
  162.43 -13.7.11 & Einf\"uhrung Latex und ML Basic & 7.5 \\
  162.44 - & Konfiguration von Mercurial & \\
  162.45 - & ML Basics \"Ubungen  &  \\\hline
  162.46 -14.7.11 & Einf\"uhrung ML Functions und ML Combinators  &7.5 \\
  162.47 - &  \"Ubungen ML Functions und ML Combinators s & \\ \hline
  162.48 -15.7.11&  Einf\"uhrung ML Datastructure  &7.5 \\ 
  162.49 - & Ml Datastructure \"Ubungen & \\
  162.50 - & Informationen \"uber Rewriting und MathEngine & \\  \hline
  162.51 -18.7.11 & Einf\"uhrung in die Fehlersuche (ISAC-Tests)  & 7.5 \\ 
  162.52 - & Fehlersuche im Directory ``Frontend'' &  \\ \hline
  162.53 -19.7.11 & Fehlersuche im Directory ``Knowledge''   & 7.5 \\
  162.54 - & Uncommanding funktionierender Tests   & \\ \hline
  162.55 -20.7.11 & Einf\"uhrung Fehlerbeseitigung (ISAC-Tests) &  7.5  \\
  162.56 - & Fehlerbeseitigung im File polyminus.sml  &  \\ \hline
  162.57 -21.7.11 & Informationen \"uber Studienrichtungen der Informatik & 7.5 \\
  162.58 - & Fehlerbeseitigung im File integrate.sml  &  \\ \hline
  162.59 -22.7.11 & Fehlersuche in der File ``diffapp''   &  7.5 \\ 
  162.60 -& Beseitigung des Fehlers   & \\ \hline
  162.61 -25.7.11 & Fehlersuche  in der File ``diff.sml''  & 7.5\\ 
  162.62 -& Fehlerbeseitigung in der File ``diff.sml``& \\\hline
  162.63 -26.7.11 & updaten des ``scr'' Directories & 7.5  \\ 
  162.64 -& Fehlersuche im ``scr'' Directory & \\ \hline
  162.65 -27.7.11 & updaten des ``scr'' Directories  &  7.5 \\
  162.66 -& Fehlerbehebung in den Files eqsystem.thy, atools.thy & \\  \hline
  162.67 -28.7.11 & Abschluss: Check des builds, check aller Tests & 7.5 \\
  162.68 - & Fertigstellung des Protokolls  &   \\ \hline
  162.69 -29.7.11 & Austausch mit Ferialpraktikanten von anderen Fakult\"aten & 7.5 \\
  162.70 -\end{tabular}
  162.71 -\end{center}
  162.72 -\newpage
  162.73 -\section{R\"uckblick auf das Praktikum}
  162.74 -
  162.75 -
  162.76 -
  162.77 -\paragraph{Im Bereich der Software-Entwicklung} wurden meine Erwartungen 
  162.78 -erf\"ullt. Ich wei\ss \ jetzt wie bei einem gr\"o\ss eren Software-Projekt 
  162.79 -gearbeitet wird und habe mich mit den Umgang mit der Versionsverwaltungssoftware
  162.80 -Mercurial vertraut gemacht. Des weiteren wurde mir die wichtige Rolle von Tests in
  162.81 -Software-Projekten bewusst gemacht.
  162.82 -
  162.83 -\paragraph{Von der Programmierung} habe ich mir einen gro\ss en \"Überblick
  162.84 - verschaffen k\"onnen. Dabei habe ich vorallem einiges zum Thema ``Funktionales 
  162.85 -Programmieren (SML)'' erfahren und wurde mit dem Editor-Programm ``Jedit'' 
  162.86 -vertraut gemacht.
  162.87 -
  162.88 -\paragraph{Informationen \"uber die Studienrichtungen der Informatik} konnte ich 
  162.89 -auch gewinnen. Ich habe Zug\"ange bei tugonline in Erfahrung gebracht und habe 
  162.90 -mich \"uber die Studienrichtungen Informatik, Telematik und Softwareentwicklung-
  162.91 -Wirtschaft informiert.
  162.92 -
  162.93 -\paragraph{Arbeitserfahrung} konnte ich auch einige erlangen. Es herrschte eine 
  162.94 -sehr komplexe, und vor allem ungewohnte Arbeitsumgebung (Linux,Mercurial,Isabelle)
  162.95 -an die es sich zu gew\"ohnen galt. Es wurde mit mehreren dutzend Files mit einigen
  162.96 -tausend Programmzeilen gearbeitet.
  162.97 -
  162.98 -
  162.99 -\end{document}