separated Isac documentation (~~/doc-isac) from Isabelle documentation (~~/src/Doc)
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}