finaly cleanup of mlehnfeld docu
authorWalther Neuper <neuper@ist.tugraz.at>
Mon, 30 Jun 2014 16:14:30 +0200
changeset 554672e9db65faf65
parent 55466 55c2d2ee3f92
child 55468 e9c068fedcec
finaly cleanup of mlehnfeld docu
doc-isac/mlehnfeld/bacc/bib.bib
doc-isac/mlehnfeld/bacc/overview.odg
doc-isac/mlehnfeld/bacc/presentation.tex
doc-isac/mlehnfeld/bacc/projektbericht.tex
doc-isac/mlehnfeld/bib.bib
doc-isac/mlehnfeld/master/Unsynchronized.ref.txt
doc-isac/mlehnfeld/master/mlehnfeld-ma.tex
doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_calcs
doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_cas
doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_mets
doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_ptyps
doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_rlss
doc-isac/mlehnfeld/master/ordered-calclist.Unsynchronized
doc-isac/mlehnfeld/master/ordered-castab.Unsynchronized
doc-isac/mlehnfeld/master/ordered-mets.Unsynchronized
doc-isac/mlehnfeld/master/ordered-ptyps.Unsynchronized
doc-isac/mlehnfeld/master/ordered-ruleset.Unsynchronized
doc-isac/mlehnfeld/master/ruleset.Unsynchronized-1
doc-isac/mlehnfeld/master/ruleset.Unsynchronized-2
doc-isac/mlehnfeld/master/thesis/README
doc-isac/mlehnfeld/overview.odg
doc-isac/mlehnfeld/presentation.tex
doc-isac/mlehnfeld/projektbericht.tex
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/doc-isac/mlehnfeld/bacc/bib.bib	Mon Jun 30 16:14:30 2014 +0200
     1.3 @@ -0,0 +1,26 @@
     1.4 +@Book{Nipkow-Paulson-Wenzel:2002,
     1.5 +  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
     1.6 +  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
     1.7 +  publisher	= {Springer},
     1.8 +  series	= {LNCS},
     1.9 +  volume	= 2283,
    1.10 +  year		= 2002}
    1.11 +
    1.12 +@Article{plmms10,
    1.13 +  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
    1.14 +  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
    1.15 +  journal = 	 {ACM Communications in Computer Algebra},
    1.16 +  year = 	 {2010},
    1.17 +  volume = 	 {44},
    1.18 +  number = 	 {1/2},
    1.19 +  pages = 	 {27-41},
    1.20 +  doi =          {10.1145/1838599.1838621}
    1.21 +}
    1.22 +
    1.23 +@Manual{isar-impl,
    1.24 +  title = 	 {The {Isabelle/Isar} Implementation},
    1.25 +  author = 	 {Makarius Wenzel},
    1.26 +  month = 	 {30 January},
    1.27 +  year = 	 {2011},
    1.28 +  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
    1.29 +}
     2.1 Binary file doc-isac/mlehnfeld/bacc/overview.odg has changed
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/doc-isac/mlehnfeld/bacc/presentation.tex	Mon Jun 30 16:14:30 2014 +0200
     3.3 @@ -0,0 +1,469 @@
     3.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 $
     3.5 +
     3.6 +\documentclass{beamer}
     3.7 +
     3.8 +% This file is a solution template for:
     3.9 +
    3.10 +% - Talk at a conference/colloquium.
    3.11 +% - Talk length is about 20min.
    3.12 +% - Style is ornate.
    3.13 +
    3.14 +
    3.15 +
    3.16 +% Copyright 2004 by Till Tantau <tantau@users.sourceforge.net>.
    3.17 +%
    3.18 +% In principle, this file can be redistributed and/or modified under
    3.19 +% the terms of the GNU Public License, version 2.
    3.20 +%
    3.21 +% However, this file is supposed to be a template to be modified
    3.22 +% for your own needs. For this reason, if you use this file as a
    3.23 +% template and not specifically distribute it as part of a another
    3.24 +% package/program, I grant the extra permission to freely copy and
    3.25 +% modify this file as you see fit and even to delete this copyright
    3.26 +% notice.
    3.27 +
    3.28 +
    3.29 +\mode<presentation>
    3.30 +{
    3.31 +  \usetheme{Hannover}
    3.32 +  % or ...
    3.33 +
    3.34 +  \setbeamercovered{transparent}
    3.35 +  % or whatever (possibly just delete it)
    3.36 +}
    3.37 +
    3.38 +%\usepackage{setspace} %for "\begin{onehalfspace}"
    3.39 +\usepackage[english]{babel}
    3.40 +% or whatever
    3.41 +
    3.42 +\usepackage[utf8]{inputenc}
    3.43 +% or whatever
    3.44 +
    3.45 +\usepackage{times}
    3.46 +\usepackage[T1]{fontenc}
    3.47 +% Or whatever. Note that the encoding and the font should match. If T1
    3.48 +% does not look nice, try deleting the line with the fontenc.
    3.49 +
    3.50 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    3.51 +\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
    3.52 +
    3.53 +\title[\isac: Computation \& Deduction] % (optional, use only with long paper titles)
    3.54 +{Integrating Computation and Deduction\\
    3.55 +  in the \isac-System}
    3.56 +
    3.57 +\subtitle{Projektpraktikum: Introducing Isabelle's Contexts}
    3.58 +
    3.59 +\author[Lehnfeld] % (optional, use only with lots of authors)
    3.60 +{Mathias~Lehnfeld}
    3.61 +% - Give the names in the same order as the appear in the paper.
    3.62 +% - Use the \inst{?} command only if the authors have different
    3.63 +%   affiliation.
    3.64 +
    3.65 +\institute % (optional, but mostly needed)
    3.66 +{
    3.67 +  Vienna University of Technology\\
    3.68 +  Institute of Computer Languages
    3.69 +}
    3.70 +% - Use the \inst command only if there are several affiliations.
    3.71 +% - Keep it simple, no one is interested in your street address.
    3.72 +
    3.73 +% \date[CFP 2003] % (optional, should be abbreviation of conference name)
    3.74 +% {Conference on Fabulous Presentations, 2003}
    3.75 +% - Either use conference name or its abbreviation.
    3.76 +% - Not really informative to the audience, more for people (including
    3.77 +%   yourself) who are reading the slides online
    3.78 +
    3.79 +% \subject{Theoretical Computer Science}
    3.80 +% This is only inserted into the PDF information catalog. Can be left
    3.81 +% out.
    3.82 +
    3.83 +
    3.84 +
    3.85 +% If you have a file called "university-logo-filename.xxx", where xxx
    3.86 +% is a graphic format that can be processed by latex or pdflatex,
    3.87 +% resp., then you can add a logo as follows:
    3.88 +
    3.89 +% \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename}
    3.90 +% \logo{\pgfuseimage{university-logo}}
    3.91 +
    3.92 +
    3.93 +
    3.94 +% Delete this, if you do not want the table of contents to pop up at
    3.95 +% the beginning of each subsection:
    3.96 +\AtBeginSubsection[]
    3.97 +{
    3.98 +  \begin{frame}<beamer>{Outline}
    3.99 +    \tableofcontents[currentsection,currentsubsection]
   3.100 +  \end{frame}
   3.101 +}
   3.102 +
   3.103 +
   3.104 +% If you wish to uncover everything in a step-wise fashion, uncomment
   3.105 +% the following command:
   3.106 +
   3.107 +%\beamerdefaultoverlayspecification{<+->}
   3.108 +
   3.109 +
   3.110 +\begin{document}
   3.111 +
   3.112 +\begin{frame}
   3.113 +  \titlepage
   3.114 +\end{frame}
   3.115 +
   3.116 +\begin{frame}{Outline}
   3.117 +  \tableofcontents
   3.118 +  % You might wish to add the option [pausesections]
   3.119 +\end{frame}
   3.120 +
   3.121 +
   3.122 +% Structuring a talk is a difficult task and the following structure
   3.123 +% may not be suitable. Here are some rules that apply for this
   3.124 +% solution:
   3.125 +
   3.126 +% - Exactly two or three sections (other than the summary).
   3.127 +% - At *most* three subsections per section.
   3.128 +% - Talk about 30s to 2min per frame. So there should be between about
   3.129 +%   15 and 30 frames, all told.
   3.130 +
   3.131 +% - A conference audience is likely to know very little of what you
   3.132 +%   are going to talk about. So *simplify*!
   3.133 +% - In a 20min talk, getting the main ideas across is hard
   3.134 +%   enough. Leave out details, even if it means being less precise than
   3.135 +%   you think necessary.
   3.136 +% - If you omit details that are vital to the proof/implementation,
   3.137 +%   just say so once. Everybody will be happy with that.
   3.138 +
   3.139 +\section[Introduction]{Introduction: Isabelle and \isac}
   3.140 +%\subsection[Isabelle \& \isac]{Isabelle and \isac}
   3.141 +\begin{frame}
   3.142 +  \frametitle{Isabelle and \isac}
   3.143 +The task of this ``Projektpraktikum'' (6 ECTS) was to
   3.144 +\begin{itemize}
   3.145 +\item study the concept of ``context'' in the theorem prover \textbf{Isabelle} from TU Munich
   3.146 +\item study basic concepts of the math assistant \sisac{} from TU Graz
   3.147 +\pause
   3.148 +\item redesign \sisac{} with respect to contexts
   3.149 +  \begin{itemize}
   3.150 +  \item use contexts for type inference of user input
   3.151 +  \item handle preconditions of specifications
   3.152 +  \item clarify the transfer of context data from sub-programs to the calling program
   3.153 +  \end{itemize}
   3.154 +\pause
   3.155 +\item introduce contexts to \sisac{} according to the new design
   3.156 +\item use the coding standards of Isabelle2011 for new code.
   3.157 +\end{itemize}
   3.158 +\end{frame}
   3.159 +
   3.160 +%\subsection[Computation \& Deduction]{Computation and Deduction in a Lucas-Interpreter}
   3.161 +\begin{frame}
   3.162 +  \frametitle{Computation and Deduction in a Lucas-Interpreter}
   3.163 +    \includegraphics[width=100mm]{overview.pdf}
   3.164 +\end{frame}
   3.165 +
   3.166 +\section[Contributions]{Contributions of the project to \isac}
   3.167 +\subsection[Contexts]{Isabelle's Contexts, advantages and use}
   3.168 +\begin{frame}
   3.169 +  \frametitle{Advantages of Isabelle's Contexts}
   3.170 +Isabelle's context replaced theories because \dots:
   3.171 +\begin{itemize}
   3.172 +\item theories are static containers of \textit{all} logical data
   3.173 +\item contexts are \textit{dynamic} containers of logical data:
   3.174 +  \begin{itemize}
   3.175 +  \item functions for storing and retrieving various logical data
   3.176 +  \item functions for type inference
   3.177 +  \item provide data for Isabelle's automated provers
   3.178 +  \end{itemize}
   3.179 +%\item e.g. theories have no direct functions for type inference
   3.180 +%\item replace function \texttt{parseNEW}
   3.181 +%\item assumptions \& environment $\rightarrow$ context
   3.182 +\item allow to conform with scopes for subprograms.
   3.183 +\end{itemize}
   3.184 +\end{frame}
   3.185 +
   3.186 +\begin{frame}
   3.187 +  \frametitle{Isabelle's context mechanism}
   3.188 +    \texttt{\small{
   3.189 +      \begin{tabbing}
   3.190 +xx\=xx\=in\=\kill
   3.191 +%xx\=xx\=xx\=xx\=\kill
   3.192 +%datatype Isac\_Ctxt =\\
   3.193 +%\>\>Env of term * term\\
   3.194 +%\>| Asm of term;\\
   3.195 +%\\
   3.196 +structure ContextData =  \alert{Proof\_Data}\\
   3.197 +\>~(\alert{type T} = term list\\
   3.198 +\>\>\alert{fun init \_} = []);\\
   3.199 +\\
   3.200 +%local\\
   3.201 +%\>fun insert\_ctxt data = ContextData\alert{.map} (fn xs => distinct (data@xs));\\
   3.202 +%in\\
   3.203 +%\>fun insert\_assumptions asms = map (fn t => Asm t) asms |> insert\_ctxt;\\
   3.204 +%\>fun insert\_environments envs = map (fn t => Env t) envs |> insert\_ctxt;\\
   3.205 +%end\\
   3.206 +fun insert\_assumptions asms = \\
   3.207 +\>\>\>ContextData\alert{.map} (fn xs => distinct (asms@xs));\\
   3.208 +\\
   3.209 +%local\\
   3.210 +%\>fun unpack\_asms (Asm t::ts) = t::(unpack\_asms ts)\\
   3.211 +%\>\>| unpack\_asms (Env \_::ts) = unpack\_asms ts\\
   3.212 +%\>\>| unpack\_asms [] = [];\\
   3.213 +%\>fun unpack\_envs (Env t::ts) = t::(unpack\_envs ts)\\
   3.214 +%\>\>| unpack\_envs (Asm \_::ts) = unpack\_envs ts\\
   3.215 +%\>\>| unpack\_envs [] = [];\\
   3.216 +%in\\
   3.217 +%\>fun get\_assumptions ctxt = ContextData.get ctxt |> unpack\_asms;\\
   3.218 +%\>fun get\_environments ctxt = ContextData.get ctxt |> unpack\_envs;\\
   3.219 +%end
   3.220 +fun get\_assumptions ctxt = ContextData\alert{.get} ctxt;\\
   3.221 +\\
   3.222 +\\
   3.223 +val declare\_constraints : \\
   3.224 +\>\>\>term -> Proof.context -> Proof.context
   3.225 +      \end{tabbing}
   3.226 +    }}
   3.227 +\end{frame}
   3.228 +
   3.229 +\begin{frame}
   3.230 +  \frametitle{Usage of Contexts}
   3.231 +    \texttt{\footnotesize{
   3.232 +      \begin{tabbing}
   3.233 +xx\=xx\=xx\=xx\=xx\=\kill
   3.234 +fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
   3.235 +\>  let\\
   3.236 +\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
   3.237 +\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
   3.238 +\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
   3.239 +\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
   3.240 +\>\>\>\>\>         then transfer fas to\_ctxt\\
   3.241 +\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
   3.242 +\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
   3.243 +\\
   3.244 +fun parse thy str =\\
   3.245 +\>(let val t = (\alert{typ\_a2real} o numbers\_to\_string)\\
   3.246 +\>\>\>\>(\alert{Syntax.read\_term\_global thy} str)\\
   3.247 +\>\>in SOME (cterm\_of thy t) end)\\
   3.248 +\>\>\>handle \_ => NONE;\\
   3.249 +\\
   3.250 +fun parseNEW ctxt str = \\
   3.251 +\>\>\>SOME (\alert{Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
   3.252 +\>\>\>handle \_ => NONE;
   3.253 +      \end{tabbing}
   3.254 +    }}
   3.255 +
   3.256 +
   3.257 +\end{frame}
   3.258 +
   3.259 +\subsection[Redesign]{Redesign of \isac{} using contexts}
   3.260 +\begin{frame}
   3.261 +  \frametitle{Redesign of \isac{} using contexts}
   3.262 +\begin{center} DEMO \end{center}
   3.263 +\end{frame}
   3.264 +
   3.265 +\begin{frame}
   3.266 +  \frametitle{Deduction simplifies computation}
   3.267 +\small{
   3.268 +%\begin{onehalfspace}
   3.269 +\begin{tabbing}
   3.270 +xxx\=xxx\=\kill
   3.271 +     \`$\mathit{(some)}\;\mathit{assumptions}$\\
   3.272 +$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
   3.273 +%     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
   3.274 +%\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
   3.275 +%\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
   3.276 +\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
   3.277 +     \`$x\not=3\land x\not=0$\\
   3.278 +\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
   3.279 +\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
   3.280 +%\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
   3.281 +%\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
   3.282 +\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
   3.283 +\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
   3.284 +\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
   3.285 +\>\>$[x = 0, x = \frac{6}{5}]$ \\
   3.286 +     \`$x = 0\land x = \frac{6}{5}$\\
   3.287 +\>$[\alert{x = 0}, x = \frac{6}{5}]$ \\
   3.288 +     \`\alert{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
   3.289 +\>$[x = \frac{6}{5}]$ \\
   3.290 +$[x = \frac{6}{5}]$
   3.291 +\end{tabbing}
   3.292 +}
   3.293 +%\end{onehalfspace}
   3.294 +\end{frame}
   3.295 +
   3.296 +\begin{frame}
   3.297 +  \frametitle{More ``deduction'', \\less ``computation''}
   3.298 +\footnotesize{\tt
   3.299 +\begin{tabbing}
   3.300 +xx\=xx\=xx\=xx\=xx\=xx\=\kill
   3.301 +Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
   3.302 +\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
   3.303 +\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
   3.304 +\>\>     (L\_L::bool list) =                                   \\
   3.305 +\>\>\>            (SubProblem (Test',                           \\
   3.306 +\>\>\>\>                         [linear,univariate,equation,test]\\
   3.307 +\>\>\>\>                         [Test,solve\_linear])             \\
   3.308 +\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
   3.309 +\>  in \alert{Check\_elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
   3.310 +\end{tabbing}
   3.311 +}
   3.312 +\small{
   3.313 +``Deductive'' part of Lucas-Interpretation relives the ``computational'' part: \alert{one statement becomes obsolete~!}
   3.314 +}
   3.315 +\end{frame}
   3.316 +
   3.317 +
   3.318 +\begin{frame}
   3.319 +  \frametitle{Redesign of \isac{} using contexts}
   3.320 +Advantages of the redesign:
   3.321 +\begin{itemize}
   3.322 +\item type inference by \textit{local} contexts\\
   3.323 +\pause
   3.324 +     \alert{now user-input without type constraints~!}
   3.325 +\pause
   3.326 +\item consistent handling of logical data
   3.327 +  \begin{itemize}
   3.328 +  \item preconditions and partiality conditions in contexts
   3.329 +  \item transfer of context data into subprograms clarified
   3.330 +  \item transfer of context data from subprograms clarified
   3.331 +  \end{itemize}
   3.332 +\pause
   3.333 +     \alert{now some statements become obsolete.}\\
   3.334 +\end{itemize}
   3.335 +\pause
   3.336 +Now Lucas-interpretation shifts efforts from ``computation'' further to ``deduction''.
   3.337 +\end{frame}
   3.338 +
   3.339 +
   3.340 +
   3.341 +\subsection[Code Improvement]{Improvement of functional code}
   3.342 +\begin{frame}
   3.343 +  \frametitle{Improvement of functional code}
   3.344 +  \begin{itemize}
   3.345 +  \item \textbf{code conventions}: Isabelle2011 published coding standards first time
   3.346 +  \item \textbf{combinators}: Isabelle2011 introduced a library containing the following combinators:
   3.347 +\\\vspace{0.2cm}
   3.348 +\tiny{\tt%
   3.349 +  val |$>$ : 'a * ('a -$>$ 'b) -$>$ 'b\\
   3.350 +  val |-$>$ : ('c * 'a) * ('c -$>$ 'a -$>$ 'b) -$>$ 'b\\
   3.351 +  val |$>>$ : ('a * 'c) * ('a -$>$ 'b) -$>$ 'b * 'c\\
   3.352 +  val ||$>$ : ('c * 'a) * ('a -$>$ 'b) -$>$ 'c * 'b\\
   3.353 +  val ||$>>$ : ('c * 'a) * ('a -$>$ 'd * 'b) -$>$ ('c * 'd) * 'b\\
   3.354 +  val \#$>$ : ('a -$>$ 'b) * ('b -$>$ 'c) -$>$ 'a -$>$ 'c\\
   3.355 +  val \#-$>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'b -$>$ 'd) -$>$ 'a -$>$ 'd\\
   3.356 +  val \#$>>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'd) -$>$ 'a -$>$ 'd * 'b\\
   3.357 +  val \#\#$>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'd) -$>$ 'a -$>$ 'c * 'd\\
   3.358 +  val \#\#$>>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'e * 'd) -$>$ 'a -$>$ ('c * 'e) * 'd\\
   3.359 +}
   3.360 +  \end{itemize}
   3.361 +\end{frame}
   3.362 +
   3.363 +\begin{frame}
   3.364 +  \frametitle{Example with combinators}
   3.365 +    \texttt{\footnotesize{
   3.366 +      \begin{tabbing}
   3.367 +xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
   3.368 +fun prep\_ori [] \_ \_ = ([], e\_ctxt)\\
   3.369 +\>| prep\_ori fmz thy pbt =\\
   3.370 +\>\>\>let\\
   3.371 +\>\>\>\>val ctxt = ProofContext.init\_global thy \\
   3.372 +\>\>\>\>\> |> fold declare\_constraints fmz\\
   3.373 +\>\>\>\>val ori = \\
   3.374 +\>\>\>\>\> map (add\_field thy pbt o split\_dts o the o parseNEW ctxt) fmz\\
   3.375 +\>\>\>\>\>\> |> add\_variants\\
   3.376 +\>\>\>\>val maxv = map fst ori |> max\\
   3.377 +\>\>\>\>val maxv = if maxv = 0 then 1 else maxv\\
   3.378 +\>\>\>\>val oris = coll\_variants ori\\
   3.379 +\>\>\>\>\> |> map (replace\_0 maxv |> apfst)\\
   3.380 +\>\>\>\>\> |> add\_id\\
   3.381 +\>\>\>\>\> |> map flattup\\
   3.382 +\>\>\>in (oris, ctxt) end;
   3.383 +      \end{tabbing}
   3.384 +    }}
   3.385 +\dots which probably can be further polished.
   3.386 +\end{frame}
   3.387 +
   3.388 +%\subsection[Future Development]{Preparation of Future Development}
   3.389 +%\begin{frame}
   3.390 +%  \frametitle{Preparation of Future Development}
   3.391 +%
   3.392 +%%  "Script Solve_root_equation (e_e::bool) (v_v::real) =       " ^
   3.393 +%%  " (let e_e = ((Try (Rewrite_Set norm_equation False)) @@    " ^
   3.394 +%%  "            (Try (Rewrite_Set Test_simplify False))) e_e;  " ^
   3.395 +%%  "     (L_L::bool list) =                                    " ^
   3.396 +%%  "            (SubProblem (Test',                            " ^
   3.397 +%%  "                         [linear,univariate,equation,test]," ^
   3.398 +%%  "                         [Test,solve_linear])              " ^
   3.399 +%%  "                        [BOOL e_e, REAL v_v])              " ^
   3.400 +%%  "  in Check_elementwise L_L {(v_v::real). Assumptions})     "
   3.401 +%\end{frame}
   3.402 +%
   3.403 +%\begin{frame}
   3.404 +%  \frametitle{Preparation of Future Development}
   3.405 +%    \begin{itemize}
   3.406 +%    \item logical data for Isabelle provers in contexts
   3.407 +%    \item \isac{} programming language more compact\\
   3.408 +%      $\rightarrow$ context built automatically
   3.409 +%    \end{itemize}
   3.410 +%\end{frame}
   3.411 +
   3.412 +
   3.413 +\section[Problems]{Problems encountered in the project}
   3.414 +\begin{frame}
   3.415 +  \frametitle{Problems encountered in the project}
   3.416 +    \begin{itemize}
   3.417 +    \item new Isabelle release in February 2011: update \sisac{} first
   3.418 +\pause
   3.419 +    \item lines of code (LOC) in Isabelle and \sisac{}\\ \vspace{0.2cm}
   3.420 +\textit{
   3.421 +    \begin{tabular}{lrl}
   3.422 +      src/ & 1700 & $\,$k LOC\\
   3.423 +      src/Pure/ & 70 & k LOC\\
   3.424 +      src/Provers/ & 8 & k LOC\\
   3.425 +      src/Tools/ & 800 & k LOC\\
   3.426 +      src/Tools/isac/ & 37 & k LOC\\
   3.427 +      src/Tools/isac/Knowledge & 16 & k LOC
   3.428 +    \end{tabular}
   3.429 +}
   3.430 +\pause
   3.431 +    \item changes scattered throughout the code ($\rightarrow$ grep)
   3.432 +\pause
   3.433 +    \item documentation of Isabelle very ``technical'' (no API)
   3.434 +\pause
   3.435 +   \item documentation of \sisac{} not up to date
   3.436 +    \end{itemize}
   3.437 +\end{frame}
   3.438 +
   3.439 +%\begin{frame}
   3.440 +%  \frametitle{Lines of Code}
   3.441 +%    \begin{tabular}{lr}
   3.442 +%      src/ & 1700 k \\
   3.443 +%      src/Pure/ & 70 k \\
   3.444 +%      src/Provers/ & 8 k \\
   3.445 +%      src/Tools/ & 800 k \\
   3.446 +%      src/Tools/isac/ & 37 k \\
   3.447 +%      src/Tools/isac/Knowledge & 16 k \\
   3.448 +%    \end{tabular}
   3.449 +%\end{frame}
   3.450 +
   3.451 +\section{Summary}
   3.452 +\begin{frame}
   3.453 +  \frametitle{Summary}
   3.454 +The project succeeded in all goals:
   3.455 +\begin{itemize}
   3.456 +\item implemented Isabelle's contexts in \sisac{} such that
   3.457 +\item user input requires no type constraints anymore
   3.458 +\item consistent logical data is prepared for Isabelle's provers
   3.459 +\end{itemize}
   3.460 +\pause
   3.461 +The course of the project was close to the plan:
   3.462 +\begin{itemize}
   3.463 +\item faster in writing new code
   3.464 +\item slower in integrating the code into \sisac
   3.465 +\end{itemize}
   3.466 +\pause
   3.467 +The project provided essential prerequisites for further development of the Lucas-interpreter.
   3.468 +\end{frame}
   3.469 +
   3.470 +\end{document}
   3.471 +
   3.472 +
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/doc-isac/mlehnfeld/bacc/projektbericht.tex	Mon Jun 30 16:14:30 2014 +0200
     4.3 @@ -0,0 +1,575 @@
     4.4 +\documentclass[a4paper,12pt]{article}
     4.5 +%
     4.6 +\usepackage[ngerman]{babel}
     4.7 +\usepackage[utf8]{inputenc}
     4.8 +\usepackage{ngerman}
     4.9 +\usepackage{graphicx}
    4.10 +\bibliographystyle{alpha}
    4.11 +
    4.12 +\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    4.13 +\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    4.14 +
    4.15 +\begin{document}
    4.16 +
    4.17 +\title{\Large {\bf Verbindung von 'Computation' und 'Deduction' im \isac{}-System}\\~\\
    4.18 +	Projektpraktikum am Institut für Computersprachen,\\Technische Universit\"at Wien\\
    4.19 +\vspace{0.7cm}
    4.20 +\large{Betreuer: Univ.-Prof. Dr. Jens Knoop}}
    4.21 +\author{Mathias Lehnfeld\\
    4.22 +	{\tt mathias.lehnfeld@gmx.at}}
    4.23 +%pdflatex creates an empty page 1 and the titlepage on page 2 ?!?...
    4.24 +%\thanks{Betreuer: Univ.-Prof. Dr. Jens Knoop, Technische Universit\"at Wien\\
    4.25 +%        Dr. Walther Neuper, Technische Universit\"at Graz}
    4.26 +\date{30. Mai 2011}
    4.27 +\maketitle
    4.28 +\clearpage
    4.29 +\tableofcontents
    4.30 +\clearpage
    4.31 +
    4.32 +
    4.33 +\section{Zur Aufgabenstellung}
    4.34 +Das \sisac{}-Projekt entwickelt einen {\it math assistant} aufbauend auf den
    4.35 +{\it theorem prover} Isabelle. Der Kern des \sisac{}-Systems ist ein
    4.36 +{\it Lucas-Interpreter}, der automatisch Benutzerführung für schrittweises
    4.37 +Problemlösen erzeugt: Der nächste Schritt wird von einem Programm
    4.38 +berechnet ({\it computation}); {\it deduction} wird gefordert, wenn der Benutzer
    4.39 +eine Formel eingibt (die Ableitbarkeit der Formel aus dem {\it context} ist
    4.40 +zu beweisen).\\
    4.41 +\\
    4.42 +Die Aufgabenstellung im Rahmen des Projektpraktikums besteht darin, das
    4.43 +in Isabelle verfügbare Konzept {\it context} in den Lucas-Interpreter
    4.44 +einzubauen. Dies schließt grundlegende Design-Überlegungen ein, verlangt
    4.45 +tiefes Eindringen in den umfangreichen Code von zwei Softwareprodukten,
    4.46 +{\it Isabelle} und \sisac{} und bedeutet daher Zusammenarbeit mit den jeweiligen
    4.47 +Entwicklerteams.\\
    4.48 +\\
    4.49 +Ein erfolgreicher Einbau der Isabelle-{\it context}s in den
    4.50 +Lucas-Interpreter wird \sisac{}s Fähigkeit, Benutzereingaben zu
    4.51 +interpretieren, wesentlich erweitern: {\it context}s stellen Isabelles
    4.52 +automatischen Beweisern die notwendigen Daten bereit.
    4.53 +
    4.54 +
    4.55 +\section{Planung des Projektes}
    4.56 +\subsection{Ist-Zustand vor dem Projekt}
    4.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.
    4.58 +
    4.59 +\subsection{Geplanter Soll-Zustand nach dem Projekt}
    4.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.
    4.61 +
    4.62 +\subsection{Zeitplanung f\"ur das Projekt}
    4.63 +Die Planung f\"ur das Projekt sah folgende Meilensteine vor (Details siehe \ref{ms-desc}):
    4.64 +\begin{enumerate}
    4.65 +\item \textbf{Voraussetzungen zum Arbeitsbeginn schaffen} (10.02. -- 18.02.)
    4.66 +  %Beschreibung siehe \ref{ms1_desc}
    4.67 +\item \textbf{\isac{} auf die letzte Isabelle-Release updaten} (21.02. -- 25.02.)
    4.68 +  %Beschreibung siehe \ref{ms2_desc}
    4.69 +\item \textbf{Parsen aus \textit{contexts}} (28.02. -- 04.03.)
    4.70 +  %Beschreibung siehe \ref{ms3_desc}
    4.71 +\item \textbf{Spezifikationsphase mit \textit{context}s} (07.03. -- 11.03.)
    4.72 +  %Beschreibung siehe \ref{ms4_desc}
    4.73 +\item \textbf{L\"osungsphase mit \textit{context}s} (14.03. -- 18.03.)
    4.74 +  %Beschreibung siehe \ref{ms5_desc}
    4.75 +\end{enumerate}
    4.76 +
    4.77 +\section{Konzepte und L\"osungen}
    4.78 +\subsection{Architektur von \isac}
    4.79 +Die Grafik auf Seite \pageref{architektur} gibt einen \"Uberblick \"uber die Architektur von \sisac:
    4.80 +
    4.81 +\begin{figure} [htb]
    4.82 +\begin{center}
    4.83 +    \includegraphics[width=120mm]{overview.pdf}
    4.84 +\end{center}
    4.85 +\caption{Lucas-interpreter und Isabelle}
    4.86 +\label{architektur}
    4.87 +\end{figure}
    4.88 +Die Mathematik-Engine von \sisac{} ist nach dem Konzept eines ``Lucas-Interpreters'' (LI) gebaut. Ein LI interpretiert drei Arten von Daten:
    4.89 +\begin{enumerate}
    4.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.
    4.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.
    4.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.
    4.93 +\end{enumerate}
    4.94 +
    4.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}:
    4.96 +
    4.97 +\begin{enumerate}
    4.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.
    4.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.
   4.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.
   4.101 +\end{enumerate}
   4.102 +
   4.103 +\subsection{Isabelles Konzept von ``contexts''}
   4.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:
   4.105 +
   4.106 +{\tt
   4.107 +\begin{tabbing}
   4.108 +xx\=xx\=in\=\kill
   4.109 +structure ContextData =  {Proof\_Data}\\
   4.110 +\>~({type T} = term list\\
   4.111 +\>\>{fun init \_} = []);\\
   4.112 +\\
   4.113 +fun insert\_assumptions asms = \\
   4.114 +\>\>\>ContextData{.map} (fn xs => distinct (asms@xs));\\
   4.115 +\\
   4.116 +fun get\_assumptions ctxt = ContextData{.get} ctxt;\\
   4.117 +\\
   4.118 +\\
   4.119 +val declare\_constraints : \\
   4.120 +\>\>\>term -> Proof.context -> Proof.context
   4.121 +\end{tabbing}
   4.122 +}
   4.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.
   4.124 +
   4.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:
   4.126 +{\tt
   4.127 +\begin{tabbing}
   4.128 +xx\=xx\=xx\=xx\=xx\=\kill
   4.129 +fun parseNEW ctxt str = \\
   4.130 +\>\>\>SOME ({Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
   4.131 +\>\>\>handle \_ => NONE;
   4.132 +      \end{tabbing}
   4.133 +}
   4.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}:
   4.135 +{\tt
   4.136 +\begin{tabbing}
   4.137 +xx\=xx\=xx\=xx\=xx\=\kill
   4.138 +fun parse thy str =\\
   4.139 +\>(let val t = ({typ\_a2real} o numbers\_to\_string)\\
   4.140 +\>\>\>\>({Syntax.read\_term\_global thy} str)\\
   4.141 +\>\>in SOME (cterm\_of thy t) end)\\
   4.142 +\>\>\>handle \_ => NONE;\\
   4.143 +      \end{tabbing}
   4.144 +}
   4.145 +
   4.146 +\subsection{Die Initialisierung von ``contexts''}\label{init-ctxt}
   4.147 +``Contexts'' werden an zwei Stellen von Lucas-Interpretation initialisiert: am Beginn der Spezifikationsphase und zu Beginn der L\"osungsphase.
   4.148 +
   4.149 +\begin{enumerate}
   4.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.
   4.151 +
   4.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.
   4.153 +
   4.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
   4.155 +  \begin{enumerate}
   4.156 +  \item den Typdeklarationen aller in der Spezifikation vorkommenden Variablen mittels \textit{declare\_constraints}
   4.157 +  \item den ``preconditions'' des (interaktiv oder automatisch) spezifizierten Programmes, genauer: mit den ``preconditions'' des zugeh\"origen Guards, der meist gleich der Spezifikation ist
   4.158 +  \end{enumerate}
   4.159 +\end{enumerate}
   4.160 +
   4.161 +
   4.162 +\subsection{Aufbau von ``contexts'' in der Interpretation}\label{partiality}
   4.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.
   4.164 +
   4.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!).
   4.166 +
   4.167 +\subsection{Transfer von ``contexts'' aus Subprogrammen}\label{transfer}
   4.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:
   4.169 +{\tt
   4.170 +\begin{tabbing}
   4.171 +xx\=xx\=xx\=xx\=xx\=\kill
   4.172 +fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
   4.173 +\>  let\\
   4.174 +\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
   4.175 +\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
   4.176 +\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
   4.177 +\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
   4.178 +\>\>\>\>\>         then transfer fas to\_ctxt\\
   4.179 +\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
   4.180 +\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
   4.181 +      \end{tabbing}
   4.182 +}
   4.183 +Folgende Daten werden aus dem Sub-``context'' in den ``context'' des aufrufenden Programmes zur\"uckgegeben:
   4.184 +\begin{enumerate}
   4.185 +\item die R\"uckgabewerte des Subprogrammes, sofern sie vom Typ \textit{bool} sind
   4.186 +\item alle \textit{assumptions}, die eine Variable enthalten, die auch einer der R\"uckgabewerte enth\"alt
   4.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.
   4.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:
   4.189 +\end{enumerate}
   4.190 +
   4.191 +\begin{tabbing}
   4.192 +xxx\=xxx\=\kill
   4.193 +     \`$\mathit{(some)}\;\mathit{assumptions}$\\
   4.194 +$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
   4.195 +     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
   4.196 +\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
   4.197 +\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
   4.198 +\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
   4.199 +     \`$x\not=3\land x\not=0$\\
   4.200 +\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
   4.201 +\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
   4.202 +\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
   4.203 +\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
   4.204 +\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
   4.205 +\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
   4.206 +\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
   4.207 +\>\>$[x = 0, x = \frac{6}{5}]$ \\
   4.208 +     \`$x = 0\land x = \frac{6}{5}$\\
   4.209 +\>$[{x = 0}, x = \frac{6}{5}]$ \\
   4.210 +     \`{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
   4.211 +\>$[x = \frac{6}{5}]$ \\
   4.212 +$[x = \frac{6}{5}]$
   4.213 +\end{tabbing}
   4.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:
   4.215 +{\tt
   4.216 +\begin{tabbing}
   4.217 +xx\=xx\=xx\=xx\=xx\=xx\=\kill
   4.218 +Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
   4.219 +\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
   4.220 +\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
   4.221 +\>\>     (L\_L::bool list) =                                   \\
   4.222 +\>\>\>            (SubProblem (Test',                           \\
   4.223 +\>\>\>\>                         [linear,univariate,equation,test]\\
   4.224 +\>\>\>\>                         [Test,solve\_linear])             \\
   4.225 +\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
   4.226 +\>  in {Check\_Elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
   4.227 +\end{tabbing}
   4.228 +}
   4.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.
   4.230 +
   4.231 +\subsection{\"Uberblick: ``contexts'' bei Lucas-Interpretation}
   4.232 +
   4.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}.
   4.234 +
   4.235 +\paragraph{Formulierung der Aufgabenstellung und Spezifikation}~\\
   4.236 +
   4.237 +Erklärung siehe \ref{init-ctxt-spec}.
   4.238 +\begin{verbatim}
   4.239 +val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
   4.240 +val (dI',pI',mI') =
   4.241 +  ("Test", ["sqroot-test","univariate","equation","test"],
   4.242 +   ["Test","squ-equ-test-subpbl1"]);
   4.243 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   4.244 +\end{verbatim}
   4.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.\\
   4.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.
   4.247 +\begin{verbatim}
   4.248 +val ctxt = get_ctxt pt p;
   4.249 +val SOME known_x = parseNEW ctxt "x + y + z";
   4.250 +val SOME unknown = parseNEW ctxt "a + b + c";
   4.251 +\end{verbatim}
   4.252 +Dies erzeugt folgenden Output:
   4.253 +\begin{verbatim}
   4.254 +val ctxt = <context>: Proof.context
   4.255 +val known_x =
   4.256 +   Const ("Groups.plus_class.plus",
   4.257 +       "RealDef.real => RealDef.real => RealDef.real") $
   4.258 +     (Const ("Groups.plus_class.plus",
   4.259 +         "RealDef.real => RealDef.real => RealDef.real") $
   4.260 +       Free ("x", "RealDef.real") $ Free ("y", "RealDef.real")) $
   4.261 +     Free ("z", "RealDef.real"):
   4.262 +   term
   4.263 +val unknown =
   4.264 +   Const ("Groups.plus_class.plus", "'a => 'a => 'a") $
   4.265 +     (Const ("Groups.plus_class.plus", "'a => 'a => 'a")
   4.266 +       $ Free ("a", "'a") $ Free ("b", "'a")) $
   4.267 +     Free ("c", "'a"):
   4.268 +   term
   4.269 +\end{verbatim}
   4.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}.
   4.271 +
   4.272 +\paragraph{Beginn der Interpretation}~\\
   4.273 +
   4.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:
   4.275 +\begin{verbatim}
   4.276 +get_assumptions_ pt p |> terms2strs
   4.277 +\end{verbatim}
   4.278 +Output:
   4.279 +\begin{verbatim}
   4.280 +val it = ["precond_rootmet x"]: string list
   4.281 +\end{verbatim}
   4.282 +
   4.283 +\paragraph{Bearbeitung eines Subproblems}~\\
   4.284 +
   4.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.\\
   4.286 +In einem Zwischenschritt bestehen die lokalen Assumptions aus der Annahme, dass die Gleichung mit der Gleichheitsregel zu matchen ist:
   4.287 +\begin{verbatim}
   4.288 +["matches (?a = ?b) (-1 + x = 0)"]: string list
   4.289 +\end{verbatim}
   4.290 +Nach künstlichem Einfügen zweier Assumptions und Beendigung des Subproblems steht eine Lösung für \textit{x} in den Assumptions:\\
   4.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}\\
   4.292 +\\
   4.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}).
   4.294 +
   4.295 +\paragraph{Abschluss der Berechnung}~\\
   4.296 +
   4.297 +Nach den letzten Aufrufen der Mathematik-Engine stehen alle Schritte fest:
   4.298 +\begin{verbatim}[
   4.299 +(([], Frm), solve (x + 1 = 2, x)),
   4.300 +(([1], Frm), x + 1 = 2),
   4.301 +(([1], Res), x + 1 + -1 * 2 = 0),
   4.302 +(([2], Res), -1 + x = 0),
   4.303 +(([3], Pbl), solve (-1 + x = 0, x)),
   4.304 +(([3,1], Frm), -1 + x = 0),
   4.305 +(([3,1], Res), x = 0 + -1 * -1),
   4.306 +(([3,2], Res), x = 1),
   4.307 +(([3], Res), [x = 1]),
   4.308 +(([4], Res), [x = 1]),
   4.309 +(([], Res), [x = 1])] 
   4.310 +\end{verbatim}
   4.311 +
   4.312 +\section{Beschreibung der Meilensteine}\label{ms-desc}
   4.313 +\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}\label{ms1_desc}
   4.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.
   4.315 +
   4.316 +\subsection{\isac{} auf die letzte Isabelle-Release updaten}\label{ms2_desc}
   4.317 +Die Arbeit mit den Isabelle {\it context}s wird Anfragen in isabelle-dev@
   4.318 +erfordern. isabelle-dev@ beantwortet Fragen i.A. nur f\"ur die aktuelle
   4.319 +Release. Überraschenderweise wurde zwei Wochen vor Beginn des Projektpraktikums eine neue Release
   4.320 +veröffentlicht. Daher muss auf diese vor Arbeitsbeginn upgedatet werden.
   4.321 +
   4.322 +\subsection{Parsen aus {\it context}s}\label{ms3_desc}
   4.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.
   4.324 +
   4.325 +\subsection{Spezifikationsphase mit {\it context}s}\label{ms4_desc}
   4.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.
   4.327 +
   4.328 +\subsection{L\"osungsphase mit {\it context}s}\label{ms5_desc}
   4.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.
   4.330 +
   4.331 +\section{Bericht zum Projektverlauf}
   4.332 +
   4.333 +\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}
   4.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.
   4.335 +
   4.336 +\subsection{\isac{} auf die letzte Isabelle-Release updaten}
   4.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.\\
   4.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.
   4.339 +
   4.340 +\subsection{Parsen aus {\it context}s}
   4.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.
   4.342 +
   4.343 +\subsection{Spezifikationsphase mit {\it context}s}
   4.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.
   4.345 +Insgesamt verlief diese Phase trotz der langwierigen Fehlersuche nicht viel langsamer als geplant.
   4.346 +
   4.347 +\subsection{L\"osungsphase mit {\it context}s}
   4.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.
   4.349 +
   4.350 +
   4.351 +\section{Abschließende Bemerkungen}
   4.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.
   4.353 +
   4.354 +Der %nicht zuletzt 
   4.355 +durch das überraschend notwendig gewordene Update 
   4.356 +von Isabelle2009-2 auf Isabelle2011
   4.357 +bedingte zähe Verlauf bis ich endlich wirklich an der eigentlichen Aufgabenstellung arbeiten konnte, %war etwas ernüchternd, 
   4.358 +verlange einies Umdisponieren,
   4.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.
   4.360 +
   4.361 +Die Zusammenarbeit mit \sisac-Entwicklung an der Technischen Universit\"at Graz \"uber Herrn Neuper hat %jedenfalls 
   4.362 +sehr gut funktioniert und aus meiner Sicht haben wir uns sehr gut verstanden. Das hat ein produktives %entspanntes 
   4.363 +Arbeitsklima ermöglicht.
   4.364 +
   4.365 +%Abgesehen von der zeitlichen Verzögerung des Projektes freue ich mich über den erfolgreichen Abschluss der geplanten Aufgaben und deren interessanten Charakter.
   4.366 +
   4.367 +\clearpage
   4.368 +
   4.369 +\bibliography{bib}
   4.370 +
   4.371 +\clearpage
   4.372 +
   4.373 +\appendix
   4.374 +%\section*{Anhang}
   4.375 +\section{Demobeispiel}\label{demo-code}
   4.376 +\begin{verbatim}
   4.377 +
   4.378 +theory All_Ctxt imports Isac begin
   4.379 +
   4.380 +text {* all changes of context are demonstrated in a mini example.
   4.381 +  see test/../mstools.sml --- all ctxt changes in minimsubpbl x+1=2 --- *}
   4.382 +
   4.383 +section {* start of the mini example *}
   4.384 +
   4.385 +ML {*
   4.386 +  val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
   4.387 +  val (dI',pI',mI') =
   4.388 +    ("Test", ["sqroot-test","univariate","equation","test"],
   4.389 +     ["Test","squ-equ-test-subpbl1"]);
   4.390 +  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   4.391 +*}
   4.392 +
   4.393 +section {* start of specify phase *}
   4.394 +
   4.395 +text {* variables known from formalisation provide type-inference 
   4.396 +  for further input *}
   4.397 +
   4.398 +ML {*
   4.399 +  val ctxt = get_ctxt pt p;
   4.400 +  val SOME known_x = parseNEW ctxt "x + y + z";
   4.401 +  val SOME unknown = parseNEW ctxt "a + b + c";
   4.402 +*}
   4.403 +
   4.404 +ML {*
   4.405 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.406 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.407 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.408 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.409 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.410 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.411 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.412 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.413 +*}
   4.414 +
   4.415 +section {* start interpretation of method *}
   4.416 +
   4.417 +text {* preconditions are known at start of
   4.418 +        interpretation of (root-)method *}
   4.419 +
   4.420 +ML {*
   4.421 +  get_assumptions_ pt p |> terms2strs;
   4.422 +*}
   4.423 +
   4.424 +ML {*
   4.425 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.426 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.427 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.428 +*}
   4.429 +
   4.430 +section {* start a subproblem: specification *}
   4.431 +
   4.432 +text {* variables known from arguments of (sub-)method
   4.433 +        provide type-inference for further input *}
   4.434 +
   4.435 +ML {*
   4.436 +  val ctxt = get_ctxt pt p;
   4.437 +  val SOME known_x = parseNEW ctxt "x+y+z";
   4.438 +  val SOME unknown = parseNEW ctxt "a+b+c";
   4.439 +*}
   4.440 +
   4.441 +ML {*
   4.442 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.443 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.444 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.445 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.446 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.447 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.448 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.449 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   4.450 +*}
   4.451 +
   4.452 +section {* interpretation of subproblem's method *}
   4.453 +
   4.454 +text {* preconds are known at start of interpretation of (sub-)method *}
   4.455 +
   4.456 +ML {*
   4.457 + get_assumptions_ pt p |> terms2strs
   4.458 +*}
   4.459 +
   4.460 +ML {*
   4.461 + val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   4.462 +*}
   4.463 +
   4.464 +ML {*
   4.465 +  "artifically inject assumptions";
   4.466 +  val (SOME (iform, cform), SOME (ires, cres)) = get_obj g_loc pt (fst p);
   4.467 +  val ctxt = insert_assumptions [str2term "x < sub_asm_out",
   4.468 +                                 str2term "a < sub_asm_local"] cres;
   4.469 +  val pt = update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
   4.470 +*}
   4.471 +
   4.472 +ML {* 
   4.473 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.474 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.475 +*}
   4.476 +
   4.477 +section {* finish subproblem, return to calling method*}
   4.478 +
   4.479 +text {* transfer non-local assumptions and result from sub-method
   4.480 +        to root-method.
   4.481 +        non-local assumptions are those contaning a variable known
   4.482 +        in root-method.
   4.483 +*}
   4.484 +
   4.485 +ML {*
   4.486 +  terms2strs (get_assumptions_ pt p);
   4.487 +*}
   4.488 +
   4.489 +ML {*
   4.490 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.491 +  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   4.492 +*}
   4.493 +
   4.494 +section {* finish Lucas interpretation *}
   4.495 +
   4.496 +text {* assumptions collected during lucas-interpretation
   4.497 +        for proof of postcondition *}
   4.498 +
   4.499 +ML {*
   4.500 +  terms2strs (get_assumptions_ pt p);
   4.501 +*}
   4.502 +
   4.503 +ML {*
   4.504 +  show_pt pt;
   4.505 +*}
   4.506 +
   4.507 +end
   4.508 +\end{verbatim}
   4.509 +
   4.510 +\section{Stundenliste}
   4.511 +
   4.512 +\subsection*{Voraussetzungen zum Arbeitsbeginn schaffen}
   4.513 +\begin{tabular}[t]{lll}
   4.514 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
   4.515 +    10.02.2011 & 2:00 & Besprechung der Problemstellung \\
   4.516 +    11.02.2011 & 1:30 & {\it context}s studieren, Isabelle/Mercurial Installation \\
   4.517 +    18.02.2011 & 0:15 & meld/tortoisehg installieren \\
   4.518 +    20.02.2011 & 1:00 & Projektbeschreibung, jedit Probleme \\
   4.519 +    25.02.2011 & 1:00 & Ausarbeitung Meilensteine \\
   4.520 +    26.02.2011 & 1:00 & Ausarbeitung Ist-/Soll-Zustand, {\it context}s studieren\\
   4.521 +    28.02.2011 & 1:15 & Einführungsbeispiel {\it context}s \\
   4.522 +    28.02.2011 & 1:15 & Projektplan erstellen, formatieren \\
   4.523 +    01.03.2011 & 1:00 & Projektplan überarbeiten, Stundenlisten \\
   4.524 +\end{tabular}
   4.525 +
   4.526 +\subsection*{\isac{} auf die letzte Isabelle-Release updaten}
   4.527 +\begin{tabular}[t]{lll}
   4.528 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
   4.529 +    18.02.2011 & 2:45 & Anpassungen an Isabelle2011 \\
   4.530 +    20.02.2011 & 2:45 & Update auf Isabelle2011, Fehlersuche \\
   4.531 +    21.02.2011 & 6:30 & ... \\
   4.532 +    25.02.2011 & 5:30 & ... \\
   4.533 +    26.02.2011 & 4:30 & ... \\
   4.534 +    03.03.2011 & 5:00 & ... \\
   4.535 +    04.03.2011 & 6:00 & Tests reparieren \\
   4.536 +\end{tabular}
   4.537 +
   4.538 +\subsection*{Parsen aus \textit{contexts}}
   4.539 +\begin{tabular}[t]{lll}
   4.540 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
   4.541 +    02.03.2011 & 1:30 & vorbereitendes Übungsbeispiel \\
   4.542 +    03.03.2011 & 1:00 & ... \\
   4.543 +    04.03.2011 & 5:00 & Funktion {\tt parseNEW} schreiben \\
   4.544 +    05.03.2011 & 3:00 & Funktion {\tt vars} anpassen, {\tt declare\_constraints} neu \\
   4.545 +    07.03.2011 & 8:45 & {\tt parseNEW}, Spezifikationen studieren \\
   4.546 +    08.03.2011 & 6:00 & {\it context} in zentrale Datenstrukturen einbauen \\
   4.547 +    09.03.2011 & 2:00 & Fehlersuche {\it context}-Integration \\
   4.548 +\end{tabular}
   4.549 +
   4.550 +\subsection*{Spezifikationsphase mit \textit{context}s}
   4.551 +\begin{tabular}[t]{lll}
   4.552 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
   4.553 +    10.03.2011 & 2:30 & {\it context} in {\tt prep\_ori} und {\tt appl\_add} einbauen\\
   4.554 +    11.03.2011 & 5:45 & {\tt appl\_add} überarbeiten \\
   4.555 +    12.03.2011 & 5:15 & Fehlersuche \\
   4.556 +    14.03.2011 & 2:00 & ... \\
   4.557 +    16.03.2011 & 2:30 & ... \\
   4.558 +    17.03.2011 & 1:45 & ... \\
   4.559 +    18.03.2011 & 4:45 & ..., Optimierung \\
   4.560 +    19.03.2011 & 5:30 & ... \\
   4.561 +    21.03.2011 & 3:00 & Abschluss Spezifikationsphase \\
   4.562 +\end{tabular}
   4.563 +
   4.564 +\subsection*{L\"osungsphase mit \textit{context}s}
   4.565 +\begin{tabular}[t]{lll}
   4.566 +    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
   4.567 +    22.03.2011 & 4:30 & {\it context} in Funktion {\tt solve} einbauen\\
   4.568 +    23.03.2011 & 4:45 & Tests reparieren \\
   4.569 +    24.03.2011 & 3:30 & ... \\
   4.570 +    25.03.2011 & 2:00 & ... \\
   4.571 +    03.04.2011 & 4:00 & ... \\
   4.572 +    05.04.2011 & 8:00 & Optimierung \\
   4.573 +    06.04.2011 & 7:15 & L\"osung Exponentenoperator \\
   4.574 +    07.04.2011 & 7:00 & ... \\
   4.575 +    12.04.2011 & 3:30 & Projektbericht \\
   4.576 +\end{tabular}
   4.577 +
   4.578 +\end{document}
     5.1 --- a/doc-isac/mlehnfeld/bib.bib	Thu Jun 26 17:19:30 2014 +0200
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,26 +0,0 @@
     5.4 -@Book{Nipkow-Paulson-Wenzel:2002,
     5.5 -  author	= {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
     5.6 -  title		= {{Isabelle/HOL} --- A Proof Assistant for Higher-Order Logic},
     5.7 -  publisher	= {Springer},
     5.8 -  series	= {LNCS},
     5.9 -  volume	= 2283,
    5.10 -  year		= 2002}
    5.11 -
    5.12 -@Article{plmms10,
    5.13 -  author = 	 {Florian Haftmann and Cezary Kaliszyk and Walther Neuper},
    5.14 -  title = 	 {{CTP}-based programming languages~? Considerations about an experimental design},
    5.15 -  journal = 	 {ACM Communications in Computer Algebra},
    5.16 -  year = 	 {2010},
    5.17 -  volume = 	 {44},
    5.18 -  number = 	 {1/2},
    5.19 -  pages = 	 {27-41},
    5.20 -  doi =          {10.1145/1838599.1838621}
    5.21 -}
    5.22 -
    5.23 -@Manual{isar-impl,
    5.24 -  title = 	 {The {Isabelle/Isar} Implementation},
    5.25 -  author = 	 {Makarius Wenzel},
    5.26 -  month = 	 {30 January},
    5.27 -  year = 	 {2011},
    5.28 -  note = 	 {With contributions by Florian Haftmann and Larry Paulson}
    5.29 -}
     6.1 --- a/doc-isac/mlehnfeld/master/Unsynchronized.ref.txt	Thu Jun 26 17:19:30 2014 +0200
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,441 +0,0 @@
     6.4 -neuper@neuper:/usr/local/isabisac/src$ grep -r "Unsynchronized.ref " *
     6.5 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     6.6 -relevance for Isac's parallel math-engine: # low .. ##### high
     6.7 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     6.8 -legend:
     6.9 ---- comments
    6.10 -!! to be replaced by Theory_Data
    6.11 -!? to be replaced by other means
    6.12 -@  first quick marks for possible relevance
    6.13 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    6.14 -
    6.15 -   Doc/IsarImplementation/ML.thy:  @{index_ML "!": "'a Unsynchronized.ref -> 'a"} \\
    6.16 -   Doc/IsarImplementation/ML.thy:  @{index_ML_op ":=": "'a Unsynchronized.ref * 'a -> unit"} \\
    6.17 -   FOLP/simp.ML:val tracing = Unsynchronized.ref false;
    6.18 -   HOL/HOLCF/Tools/Domain/domain_induction.ML:val quiet_mode = Unsynchronized.ref false
    6.19 -
    6.20 ---- Isac is a level deeper than HOL, at level Pure ...
    6.21 -   HOL/HOLCF/Tools/Domain/domain_induction.ML:val trace_domain = Unsynchronized.ref false
    6.22 -   HOL/Matrix_LP/Cplex_tools.ML:val cplexsolver = Unsynchronized.ref SOLVER_DEFAULT;
    6.23 -   HOL/Matrix_LP/Cplex_tools.ML:        val ignore_NL = Unsynchronized.ref true
    6.24 -   HOL/Matrix_LP/Cplex_tools.ML:    val rest = Unsynchronized.ref []
    6.25 -   HOL/Matrix_LP/Cplex_tools.ML:    val linebuf = Unsynchronized.ref ""
    6.26 -   HOL/Matrix_LP/Cplex_tools.ML:    val rest = Unsynchronized.ref []
    6.27 -   HOL/Matrix_LP/Cplex_tools.ML:    val rest = Unsynchronized.ref []
    6.28 -   HOL/Matrix_LP/FloatSparseMatrixBuilder.ML:        val ytable = Unsynchronized.ref Inttab.empty
    6.29 -   HOL/Matrix_LP/FloatSparseMatrixBuilder.ML:    val count = Unsynchronized.ref 0;
    6.30 -   HOL/Matrix_LP/Compute_Oracle/am_interpreter.ML:val max_reductions = Unsynchronized.ref (NONE : int option)
    6.31 -   HOL/Matrix_LP/Compute_Oracle/am_interpreter.ML:        val s = Unsynchronized.ref (Continue p)
    6.32 -   HOL/Matrix_LP/Compute_Oracle/am_interpreter.ML:        val counter = Unsynchronized.ref 0
    6.33 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:  (theory_ref * Encode.encoding * term list * unit Sorttab.table * prog * unit Unsynchronized.ref * naming)
    6.34 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun theory_of (Computer (Unsynchronized.ref (SOME (rthy,_,_,_,_,_,_)))) = Theory.deref rthy
    6.35 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun hyps_of (Computer (Unsynchronized.ref (SOME (_,_,hyps,_,_,_,_)))) = hyps
    6.36 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun shyps_of (Computer (Unsynchronized.ref (SOME (_,_,_,shyptable,_,_,_)))) = Sorttab.keys (shyptable)
    6.37 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun shyptab_of (Computer (Unsynchronized.ref (SOME (_,_,_,shyptable,_,_,_)))) = shyptable
    6.38 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun stamp_of (Computer (Unsynchronized.ref (SOME (_,_,_,_,_,stamp,_)))) = stamp
    6.39 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun prog_of (Computer (Unsynchronized.ref (SOME (_,_,_,_,prog,_,_)))) = prog
    6.40 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun encoding_of (Computer (Unsynchronized.ref (SOME (_,encoding,_,_,_,_,_)))) = encoding
    6.41 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun set_encoding (Computer (r as Unsynchronized.ref (SOME (p1,_,p2,p3,p4,p5,p6)))) encoding' = 
    6.42 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun naming_of (Computer (Unsynchronized.ref (SOME (_,_,_,_,_,_,n)))) = n
    6.43 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:fun set_naming (Computer (r as Unsynchronized.ref (SOME (p1,p2,p3,p4,p5,p6,_)))) naming'= 
    6.44 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:  Computer (Unsynchronized.ref (SOME (make_internal machine thy (Unsynchronized.ref ()) Encode.empty cache_patterns raw_thms)))
    6.45 -   HOL/Matrix_LP/Compute_Oracle/compute.ML:datatype theorem = Theorem of theory_ref * unit Unsynchronized.ref * (int * typ) Symtab.table * (AbstractMachine.term option) Inttab.table  
    6.46 -   HOL/Matrix_LP/Compute_Oracle/am_sml.ML:  val dump_output : (string option) Unsynchronized.ref 
    6.47 -   HOL/Matrix_LP/Compute_Oracle/am_sml.ML:val dump_output = Unsynchronized.ref (NONE: string option)
    6.48 -   HOL/Matrix_LP/Compute_Oracle/am_sml.ML:val saved_result = Unsynchronized.ref (NONE:(string*term)option)
    6.49 -   HOL/Matrix_LP/Compute_Oracle/am_sml.ML:val compiled_rewriter = Unsynchronized.ref (NONE:(term -> term)Option.option)
    6.50 -   HOL/Matrix_LP/Compute_Oracle/am_sml.ML:        val buffer = Unsynchronized.ref ""
    6.51 -   HOL/Matrix_LP/Compute_Oracle/am_sml.ML:val guid_counter = Unsynchronized.ref 0
    6.52 -   HOL/Matrix_LP/Compute_Oracle/linker.ML:  PComputer of theory_ref * Compute.computer * theorem list Unsynchronized.ref *
    6.53 -   HOL/Matrix_LP/Compute_Oracle/linker.ML:    pattern list Unsynchronized.ref 
    6.54 -   HOL/Matrix_LP/Compute_Oracle/linker.ML:        val changed = Unsynchronized.ref false
    6.55 -   HOL/Matrix_LP/Compute_Oracle/linker.ML:        val counter = Unsynchronized.ref 0
    6.56 -   HOL/Matrix_LP/Compute_Oracle/linker.ML:        val tab = Unsynchronized.ref (CThmtab.empty : unit CThmtab.table)
    6.57 -   HOL/Matrix_LP/Compute_Oracle/linker.ML:        val thstab = Unsynchronized.ref (Inttab.empty : thm Inttab.table)
    6.58 -   HOL/Matrix_LP/Compute_Oracle/linker.ML:        PComputer (Theory.check_thy thy, computer, Unsynchronized.ref ths, Unsynchronized.ref pats)
    6.59 -   HOL/Matrix_LP/Compute_Oracle/am_compiler.ML:val compiled_rewriter = Unsynchronized.ref (NONE:(term -> term)Option.option)
    6.60 -   HOL/Matrix_LP/Compute_Oracle/am_compiler.ML:        val buffer = Unsynchronized.ref ""
    6.61 -   HOL/Matrix_LP/Compute_Oracle/am_compiler.ML:                "       val s = Unsynchronized.ref (Continue p)",
    6.62 -   HOL/Matrix_LP/Compute_Oracle/am_ghc.ML:        val buffer = Unsynchronized.ref ""
    6.63 -   HOL/Matrix_LP/Compute_Oracle/am_ghc.ML:val guid_counter = Unsynchronized.ref 0
    6.64 -   HOL/Matrix_LP/Compute_Oracle/report.ML:    val report_depth = Unsynchronized.ref 0
    6.65 -   HOL/Random.thy:val seed = Unsynchronized.ref 
    6.66 -   HOL/Mutabelle/mutabelle_extra.ML:val random_seed = Unsynchronized.ref 1.0;
    6.67 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML:val data = Unsynchronized.ref ([] : (int * data) list)
    6.68 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML:val num_sledgehammer_calls = Unsynchronized.ref 0
    6.69 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML:          val reconstructor = Unsynchronized.ref ""
    6.70 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML:            Unsynchronized.ref (NONE : ((string * stature) * thm list) list option)
    6.71 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML:val proof_table = Unsynchronized.ref (Prooftab.empty: string list list Prooftab.table)
    6.72 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML:val num_successes = Unsynchronized.ref ([] : (int * int) list)
    6.73 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML:val num_failures = Unsynchronized.ref ([] : (int * int) list)
    6.74 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML:val num_found_proofs = Unsynchronized.ref ([] : (int * int) list)
    6.75 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML:val num_lost_proofs = Unsynchronized.ref ([] : (int * int) list)
    6.76 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML:val num_found_facts = Unsynchronized.ref ([] : (int * int) list)
    6.77 -   HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML:val num_lost_facts = Unsynchronized.ref ([] : (int * int) list)
    6.78 -   HOL/Statespace/DistinctTreeProver.thy:val da = Unsynchronized.ref refl;
    6.79 -   HOL/Tools/try0.ML:val auto = Unsynchronized.ref false
    6.80 -   HOL/Tools/Function/scnp_solve.ML:val solver = Unsynchronized.ref "auto";
    6.81 -   HOL/Tools/Function/function_core.ML:val trace = Unsynchronized.ref false
    6.82 -   HOL/Tools/Function/function_common.ML:val profile = Unsynchronized.ref false;
    6.83 -   HOL/Tools/sat_funcs.ML:  val trace_sat: bool Unsynchronized.ref    (* input: print trace messages *)
    6.84 -   HOL/Tools/sat_funcs.ML:  val solver: string Unsynchronized.ref  (* input: name of SAT solver to be used *)
    6.85 -   HOL/Tools/sat_funcs.ML:  val counter: int Unsynchronized.ref     (* output: number of resolution steps during last proof replay *)
    6.86 -   HOL/Tools/sat_funcs.ML:val trace_sat = Unsynchronized.ref false;
    6.87 -   HOL/Tools/sat_funcs.ML:val solver = Unsynchronized.ref "zchaff_with_proofs";
    6.88 -   HOL/Tools/sat_funcs.ML:val counter = Unsynchronized.ref 0;
    6.89 -   HOL/Tools/Sledgehammer/sledgehammer_provers.ML:val smt_weight_curve = Unsynchronized.ref (fn x : int => x * x)
    6.90 -   HOL/Tools/Sledgehammer/sledgehammer_isar.ML:val auto = Unsynchronized.ref false
    6.91 -   HOL/Tools/Sledgehammer/sledgehammer_isar.ML:val provers = Unsynchronized.ref ""
    6.92 -   HOL/Tools/Sledgehammer/sledgehammer_isar.ML:val timeout = Unsynchronized.ref 30
    6.93 -   HOL/Tools/Nitpick/nitpick.ML:    val state_ref = Unsynchronized.ref state
    6.94 -   HOL/Tools/Nitpick/nitpick.ML:    val simp_table = Unsynchronized.ref (const_simp_table ctxt subst)
    6.95 -   HOL/Tools/Nitpick/nitpick.ML:       ersatz_table = ersatz_table, skolems = Unsynchronized.ref [],
    6.96 -   HOL/Tools/Nitpick/nitpick.ML:       special_funs = Unsynchronized.ref [],
    6.97 -   HOL/Tools/Nitpick/nitpick.ML:       unrolled_preds = Unsynchronized.ref [], wf_cache = Unsynchronized.ref [],
    6.98 -   HOL/Tools/Nitpick/nitpick.ML:       constr_cache = Unsynchronized.ref []}
    6.99 -   HOL/Tools/Nitpick/nitpick.ML:    val too_big_scopes = Unsynchronized.ref []
   6.100 -   HOL/Tools/Nitpick/nitpick.ML:    val scopes = Unsynchronized.ref []
   6.101 -   HOL/Tools/Nitpick/nitpick.ML:    val generated_scopes = Unsynchronized.ref []
   6.102 -   HOL/Tools/Nitpick/nitpick.ML:    val generated_problems = Unsynchronized.ref ([] : rich_problem list)
   6.103 -   HOL/Tools/Nitpick/nitpick.ML:    val checked_problems = Unsynchronized.ref (SOME [])
   6.104 -   HOL/Tools/Nitpick/nitpick.ML:    val met_potential = Unsynchronized.ref 0
   6.105 -   HOL/Tools/Nitpick/nitpick_hol.ML:  val add_simps : const_table Unsynchronized.ref -> string -> term list -> unit
   6.106 -   HOL/Tools/Nitpick/nitpick_mono.ML:val trace = Unsynchronized.ref false
   6.107 -   HOL/Tools/Nitpick/nitpick_mono.ML:    max_fresh = Unsynchronized.ref 0, datatype_mcache = Unsynchronized.ref [],
   6.108 -   HOL/Tools/Nitpick/nitpick_mono.ML:    constr_mcache = Unsynchronized.ref []} : mdata)
   6.109 -   HOL/Tools/Nitpick/kodkod.ML:val created_temp_dir = Unsynchronized.ref false
   6.110 -   HOL/Tools/Nitpick/kodkod.ML:        val in_buf = Unsynchronized.ref Buffer.empty
   6.111 -   HOL/Tools/Nitpick/nitpick_isar.ML:val auto = Unsynchronized.ref false
   6.112 -   HOL/Tools/Nitpick/nitpick_model.ML:    val pool = Unsynchronized.ref []
   6.113 -   HOL/Tools/Nitpick/nitpick_model.ML:    val pool = Unsynchronized.ref []
   6.114 -   HOL/Tools/Meson/meson.ML:  let val ctxt0r = Unsynchronized.ref ctxt0   (* FIXME ??? *)
   6.115 -   HOL/Tools/Quickcheck/random_generators.ML:    val state = Unsynchronized.ref (seed'', [], fn () => Abs ("x", T1, t2 ()));
   6.116 -   HOL/Tools/Quickcheck/narrowing_generators.ML:    val current_size = Unsynchronized.ref 0
   6.117 -   HOL/Tools/Quickcheck/narrowing_generators.ML:    val current_result = Unsynchronized.ref Quickcheck.empty_result 
   6.118 -   HOL/Tools/Quickcheck/quickcheck_common.ML:    val current_size = Unsynchronized.ref 0
   6.119 -   HOL/Tools/Quickcheck/quickcheck_common.ML:    val current_result = Unsynchronized.ref Quickcheck.empty_result 
   6.120 -   HOL/Tools/Quickcheck/quickcheck_common.ML:    val current_result = Unsynchronized.ref Quickcheck.empty_result
   6.121 -   HOL/Tools/Predicate_Compile/predicate_compile_quickcheck.ML:val nrandom = Unsynchronized.ref 3;
   6.122 -   HOL/Tools/Predicate_Compile/predicate_compile_quickcheck.ML:val debug = Unsynchronized.ref false;
   6.123 -   HOL/Tools/Predicate_Compile/predicate_compile_quickcheck.ML:val no_higher_order_predicate = Unsynchronized.ref ([] : string list);
   6.124 -   HOL/Tools/Predicate_Compile/predicate_compile.ML:val present_graph = Unsynchronized.ref false
   6.125 -   HOL/Tools/Predicate_Compile/predicate_compile.ML:val intro_hook = Unsynchronized.ref NONE : (theory -> thm -> unit) option Unsynchronized.ref
   6.126 -   HOL/Tools/Predicate_Compile/code_prolog.ML:val trace = Unsynchronized.ref false
   6.127 -   HOL/Tools/sat_solver.ML:  val solvers = Unsynchronized.ref ([] : (string * solver) list);
   6.128 -   HOL/Tools/sat_solver.ML:      val last_ref_clause = Unsynchronized.ref (number_of_clauses - 1)
   6.129 -   HOL/Tools/sat_solver.ML:      val clause_table  = Unsynchronized.ref (Inttab.empty : int list Inttab.table)
   6.130 -   HOL/Tools/sat_solver.ML:      val empty_id      = Unsynchronized.ref ~1
   6.131 -   HOL/Tools/sat_solver.ML:      val clause_id_map = Unsynchronized.ref (Inttab.empty : int Inttab.table)
   6.132 -   HOL/Tools/sat_solver.ML:      val next_id = Unsynchronized.ref (number_of_clauses - 1)
   6.133 -   HOL/Tools/sat_solver.ML:      val clause_offset = Unsynchronized.ref ~1
   6.134 -   HOL/Tools/sat_solver.ML:      val clause_table  = Unsynchronized.ref (Inttab.empty : int list Inttab.table)
   6.135 -   HOL/Tools/sat_solver.ML:      val empty_id      = Unsynchronized.ref ~1
   6.136 -   HOL/Tools/prop_logic.ML:      val new = Unsynchronized.ref (maxidx fm' + 1)
   6.137 -   HOL/Tools/prop_logic.ML:    val next_idx_is_valid = Unsynchronized.ref false
   6.138 -   HOL/Tools/prop_logic.ML:    val next_idx = Unsynchronized.ref 0
   6.139 -   HOL/Tools/TFL/rules.ML:val tracing = Unsynchronized.ref false;
   6.140 -   HOL/Tools/TFL/rules.ML:     val tc_list = Unsynchronized.ref []: term list Unsynchronized.ref
   6.141 -   HOL/Tools/TFL/tfl.ML:val trace = Unsynchronized.ref false;
   6.142 -   HOL/Tools/TFL/tfl.ML:  let val slist = Unsynchronized.ref names
   6.143 -   HOL/Tools/TFL/tfl.ML:      val vname = Unsynchronized.ref "u"
   6.144 -   HOL/Tools/cnf_funcs.ML:    val var_id = Unsynchronized.ref 0  (* properly initialized below *)
   6.145 -   HOL/TPTP/TPTP_Parser/tptp_parser.ML:      val currentPos = Unsynchronized.ref 0
   6.146 -   HOL/TPTP/TPTP_Parser/ml_yacc_lib.ML:   datatype 'a str = EVAL of 'a * 'a str Unsynchronized.ref | UNEVAL of (unit->'a)
   6.147 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:val col = Unsynchronized.ref 0;
   6.148 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:val linep = Unsynchronized.ref 1;         (* Line pointer *)
   6.149 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:val eolpos = Unsynchronized.ref 0;
   6.150 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:	val yyb = Unsynchronized.ref "\n" 		(* buffer *)
   6.151 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:	val yybl = Unsynchronized.ref 1		(*buffer length *)
   6.152 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:	val yybufpos = Unsynchronized.ref 1		(* location of next character to use *)
   6.153 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:	val yygone = Unsynchronized.ref yygone0	(* position in file of beginning of buffer *)
   6.154 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:	val yydone = Unsynchronized.ref false		(* eof found yet? *)
   6.155 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:	val yybegin = Unsynchronized.ref 1		(*Current 'start state' for lexer *)
   6.156 -   HOL/TPTP/TPTP_Parser/tptp_lexyacc.ML:val s = Unsynchronized.ref "" and index = Unsynchronized.ref 0
   6.157 -   HOL/Decision_Procs/cooper_tac.ML:val trace = Unsynchronized.ref false;
   6.158 -   HOL/Decision_Procs/mir_tac.ML:val trace = Unsynchronized.ref false;
   6.159 -   HOL/Decision_Procs/ferrack_tac.ML:val trace = Unsynchronized.ref false;
   6.160 -   HOL/Nitpick_Examples/Mono_Nits.thy:val simp_table = Unsynchronized.ref (const_simp_table ctxt subst)
   6.161 -   HOL/Nitpick_Examples/Mono_Nits.thy:   skolems = Unsynchronized.ref [], special_funs = Unsynchronized.ref [],
   6.162 -   HOL/Nitpick_Examples/Mono_Nits.thy:   unrolled_preds = Unsynchronized.ref [], wf_cache = Unsynchronized.ref [],
   6.163 -   HOL/Nitpick_Examples/Mono_Nits.thy:   constr_cache = Unsynchronized.ref []}
   6.164 -   HOL/ex/SVC_Oracle.thy:    val vname = Unsynchronized.ref "V_a"
   6.165 -   HOL/ex/SVC_Oracle.thy:    val pairs = Unsynchronized.ref ([] : (term*term) list)
   6.166 -   HOL/ex/svc_funcs.ML: val trace = Unsynchronized.ref false;
   6.167 -   HOL/ex/svc_funcs.ML:    val nat_vars = Unsynchronized.ref ([] : string list)
   6.168 -
   6.169 ---- Provers are an internal part of Isabelle, where Isac should not conflict with
   6.170 -   Provers/blast.ML:    | Skolem of string * term option Unsynchronized.ref list
   6.171 -   Provers/blast.ML:  | Skolem of string * term option Unsynchronized.ref list
   6.172 -   Provers/blast.ML:     vars:   term option Unsynchronized.ref list,  (*variables occurring in branch*)
   6.173 -   Provers/blast.ML:  trail: term option Unsynchronized.ref list Unsynchronized.ref,
   6.174 -   Provers/blast.ML:      names = Unsynchronized.ref (Variable.names_of ctxt),
   6.175 -   Provers/blast.ML:      fullTrace = Unsynchronized.ref [],
   6.176 -   Provers/blast.ML:      trail = Unsynchronized.ref [],
   6.177 -   Provers/blast.ML:      ntrail = Unsynchronized.ref 0,
   6.178 -   Provers/blast.ML:      nclosed = Unsynchronized.ref 0, (*number of branches closed during the search*)
   6.179 -   Provers/blast.ML:      ntried = Unsynchronized.ref 1} (*number of branches created by splitting (counting from 1)*)
   6.180 -   Provers/blast.ML:                   NONE => let val t' = Var (Unsynchronized.ref NONE)
   6.181 -   Provers/blast.ML:  | t aconv (Var (Unsynchronized.ref (SOME u))) = t aconv u
   6.182 -   Provers/blast.ML:  | add_term_vars (Var (v as Unsynchronized.ref NONE), vars) = ins_var (v, vars)
   6.183 -   Provers/blast.ML:  | add_term_vars (Var (Unsynchronized.ref (SOME u)), vars) = add_term_vars (u, vars)
   6.184 -   Provers/blast.ML:  | add_vars_vars (Unsynchronized.ref (SOME u) :: vs, vars) =
   6.185 -   Provers/blast.ML:  | (Var (Unsynchronized.ref NONE)) => t
   6.186 -   Provers/blast.ML:  | (Var (Unsynchronized.ref (SOME u))) => norm u
   6.187 -   Provers/blast.ML:  let val alistVar = Unsynchronized.ref []
   6.188 -   Provers/blast.ML:      and alistTVar = Unsynchronized.ref []
   6.189 -   Provers/blast.ML:                   NONE => let val t' = Var (Unsynchronized.ref NONE)
   6.190 -   Provers/blast.ML:  let val name = Unsynchronized.ref "a"
   6.191 -   Provers/blast.ML:      val updated = Unsynchronized.ref []
   6.192 -   Provers/blast.ML:        | inst (Var(v as Unsynchronized.ref NONE)) = (updated := v :: (!updated);
   6.193 -   Provers/blast.ML:        Const (c, _) $ Var (Unsynchronized.ref (SOME (Const ("*False*", _)))) =>
   6.194 -   Provers/blast.ML:  | showTerm d (Var (Unsynchronized.ref NONE)) = dummyVar2
   6.195 -   Provers/blast.ML:      val alistVar = Unsynchronized.ref []
   6.196 -   Provers/blast.ML:      and alistTVar = Unsynchronized.ref []
   6.197 -   Provers/blast.ML:                       NONE => (alistVar := (ix, (Unsynchronized.ref NONE, bounds ts))
   6.198 -   Provers/trancl.ML:    val pred = Unsynchronized.ref [];
   6.199 -   Provers/trancl.ML:    val visited = Unsynchronized.ref [];
   6.200 -   Provers/trancl.ML:  val visited  = Unsynchronized.ref [];
   6.201 -   Provers/quasi.ML:    val pred = Unsynchronized.ref [];
   6.202 -   Provers/quasi.ML:    val visited = Unsynchronized.ref [];
   6.203 -   Provers/order.ML:  val finish : term list Unsynchronized.ref = Unsynchronized.ref []
   6.204 -   Provers/order.ML:  val visited : term list Unsynchronized.ref = Unsynchronized.ref []
   6.205 -   Provers/order.ML:  val visited : int list Unsynchronized.ref = Unsynchronized.ref []
   6.206 -   Provers/order.ML:    val pred = Unsynchronized.ref [];
   6.207 -   Provers/order.ML:    val visited = Unsynchronized.ref [];
   6.208 -
   6.209 -   Pure/library.ML:  val setmp_CRITICAL: 'a Unsynchronized.ref -> 'a -> ('b -> 'c) -> 'b -> 'c
   6.210 -   Pure/library.ML:  val random_seed = Unsynchronized.ref 1.0;
   6.211 -@  Pure/System/isar.ML:  val global_history = Unsynchronized.ref ([]: history);
   6.212 -@  Pure/System/isar.ML:  val global_state = Unsynchronized.ref Toplevel.toplevel;
   6.213 -   Pure/System/isar.ML:  val global_exn = Unsynchronized.ref (NONE: (exn * string) option);
   6.214 -   Pure/System/session.ML:val session = Unsynchronized.ref ([Context.PureN]: string list);
   6.215 -   Pure/System/session.ML:val session_finished = Unsynchronized.ref false;
   6.216 -   Pure/System/session.ML:val session_path = Unsynchronized.ref ([]: string list);
   6.217 -   Pure/System/session.ML:val remote_path = Unsynchronized.ref (NONE: Url.T option);
   6.218 -   Pure/System/isabelle_process.ML:val tracing_messages = Unsynchronized.ref 100;
   6.219 -   Pure/ML-Systems/compiler_polyml.ML:    val line = Unsynchronized.ref start_line;
   6.220 -   Pure/ML-Systems/compiler_polyml.ML:    val in_buffer = Unsynchronized.ref (String.explode (tune_source txt));
   6.221 -   Pure/ML-Systems/compiler_polyml.ML:    val out_buffer = Unsynchronized.ref ([]: string list);
   6.222 -   Pure/ML-Systems/polyml.ML:  val depth = Unsynchronized.ref 10;
   6.223 -   Pure/Syntax/printer.ML:val show_brackets_default = Unsynchronized.ref false;
   6.224 -   Pure/Syntax/printer.ML:val show_types_default = Unsynchronized.ref false;
   6.225 -   Pure/Syntax/printer.ML:val show_sorts_default = Unsynchronized.ref false;
   6.226 -   Pure/Syntax/printer.ML:val show_markup_default = Unsynchronized.ref false;
   6.227 -   Pure/Syntax/printer.ML:val show_question_marks_default = Unsynchronized.ref true;
   6.228 -   Pure/Syntax/syntax_trans.ML:val eta_contract_default = Unsynchronized.ref true;
   6.229 -   Pure/Syntax/syntax_phases.ML:    val reports = Unsynchronized.ref ([]: Position.report list);
   6.230 -   Pure/Syntax/syntax_phases.ML:        val reports = Unsynchronized.ref reports0;
   6.231 -   Pure/Syntax/ast.ML:    val passes = Unsynchronized.ref 0;
   6.232 -   Pure/Syntax/ast.ML:    val failed_matches = Unsynchronized.ref 0;
   6.233 -   Pure/Syntax/ast.ML:    val changes = Unsynchronized.ref 0;
   6.234 -   Pure/Proof/reconstruct.ML:val quiet_mode = Unsynchronized.ref true;
   6.235 -   Pure/Proof/extraction.ML:        val cache = Unsynchronized.ref ([] : (term * term) list);
   6.236 -   Pure/Isar/runtime.ML:val debug = Unsynchronized.ref false;
   6.237 -   Pure/Isar/token.ML:fun assignable (Token (x, y, Slot)) = Token (x, y, Assignable (Unsynchronized.ref NONE))
   6.238 -   Pure/Isar/token.ML:fun closure (Token (x, y, Assignable (Unsynchronized.ref v))) = Token (x, y, Value v)
   6.239 -   Pure/Isar/toplevel.ML:val quiet = Unsynchronized.ref false;
   6.240 -   Pure/Isar/toplevel.ML:val interact = Unsynchronized.ref false;
   6.241 -   Pure/Isar/toplevel.ML:val timing = Unsynchronized.ref false;
   6.242 -   Pure/Isar/toplevel.ML:val profiling = Unsynchronized.ref 0;
   6.243 -   Pure/Isar/toplevel.ML:val skip_proofs = Unsynchronized.ref false;
   6.244 -@  Pure/Isar/toplevel.ML:  val hooks = Unsynchronized.ref ([]: (transition -> state -> state -> unit) list);
   6.245 -   Pure/Isar/proof.ML:    val testing = Unsynchronized.ref false;
   6.246 -   Pure/Isar/proof.ML:    val rule = Unsynchronized.ref (NONE: thm option);
   6.247 -   Pure/Isar/outer_syntax.ML:val global_outer_syntax = Unsynchronized.ref empty_outer_syntax;
   6.248 -   Pure/Isar/keyword.ML:  Unsynchronized.ref (make_keywords ((Scan.empty_lexicon, Scan.empty_lexicon), Symtab.empty));
   6.249 -
   6.250 ---- ProofGeneral L"AUFT AUS ...
   6.251 -   Pure/ProofGeneral/proof_general_emacs.ML:val initialized = Unsynchronized.ref false;
   6.252 -   Pure/ProofGeneral/proof_general_pgip.ML:val pgmlsymbols_flag = Unsynchronized.ref true;
   6.253 -   Pure/ProofGeneral/proof_general_pgip.ML:val pgip_refid = Unsynchronized.ref NONE: string option Unsynchronized.ref;
   6.254 -   Pure/ProofGeneral/proof_general_pgip.ML:val pgip_refseq = Unsynchronized.ref NONE: int option Unsynchronized.ref;
   6.255 -   Pure/ProofGeneral/proof_general_pgip.ML:  val pgip_id = Unsynchronized.ref ""
   6.256 -   Pure/ProofGeneral/proof_general_pgip.ML:  val pgip_seq = Unsynchronized.ref 0
   6.257 -   Pure/ProofGeneral/proof_general_pgip.ML:val output_xml_fn = Unsynchronized.ref Output.physical_writeln
   6.258 -   Pure/ProofGeneral/proof_general_pgip.ML:val show_theorem_dependencies = Unsynchronized.ref false;
   6.259 -   Pure/ProofGeneral/proof_general_pgip.ML:val preferences = Unsynchronized.ref Preferences.pure_preferences;
   6.260 -   Pure/ProofGeneral/proof_general_pgip.ML:val currently_open_file = Unsynchronized.ref (NONE : pgipurl option)
   6.261 -   Pure/ProofGeneral/proof_general_pgip.ML:val initialized = Unsynchronized.ref false;
   6.262 -   Pure/ProofGeneral/proof_general_pgip.ML:    val pgip_output_channel = Unsynchronized.ref Output.physical_writeln
   6.263 -   Pure/ProofGeneral/preferences.ML:    'a Unsynchronized.ref -> string -> string -> preference
   6.264 -   Pure/ProofGeneral/preferences.ML:  val string_pref: string Unsynchronized.ref -> string -> string -> preference
   6.265 -   Pure/ProofGeneral/preferences.ML:  val real_pref: real Unsynchronized.ref -> string -> string -> preference
   6.266 -   Pure/ProofGeneral/preferences.ML:  val int_pref: int Unsynchronized.ref -> string -> string -> preference
   6.267 -   Pure/ProofGeneral/preferences.ML:  val nat_pref: int Unsynchronized.ref -> string -> string -> preference
   6.268 -   Pure/ProofGeneral/preferences.ML:  val bool_pref: bool Unsynchronized.ref -> string -> string -> preference
   6.269 -
   6.270 -   Pure/term_sharing.ML:    val typs = Unsynchronized.ref (Typtab.empty: unit Typtab.table);
   6.271 -   Pure/term_sharing.ML:    val terms = Unsynchronized.ref (Syntax_Termtab.empty: unit Syntax_Termtab.table);
   6.272 -   Pure/term_subst.ML:  let val maxidx = Unsynchronized.ref i
   6.273 -   Pure/term_subst.ML:  let val maxidx = Unsynchronized.ref i
   6.274 -   Pure/term_subst.ML:  | instantiateT_same instT ty = instT_same (Unsynchronized.ref ~1) (no_indexes1 instT) ty;
   6.275 -   Pure/term_subst.ML:  | instantiate_same insts tm = inst_same (Unsynchronized.ref ~1) (no_indexes2 insts) tm;
   6.276 -   Pure/pattern.ML:val trace_unify_fail = Unsynchronized.ref false;
   6.277 -   Pure/unify.ML:    (case rigid_occurs_term (Unsynchronized.ref [], env, v, u) of
   6.278 -   Pure/unify.ML:    if occurs_terms (Unsynchronized.ref [], env, v, [u]) then raise ASSIGN
   6.279 -   Pure/context.ML:val timing = Unsynchronized.ref false;
   6.280 -   Pure/context.ML:   {self: theory Unsynchronized.ref option,  (*dynamic self reference -- follows theory changes*)
   6.281 -   Pure/context.ML:        SOME (Unsynchronized.ref (Theory ({id = id', ...}, _, _, _))), id, ...}, _, _, _)) =
   6.282 -   Pure/context.ML:        val r = Unsynchronized.ref thy;
   6.283 -   Pure/context.ML:fun deref (Theory_Ref (Unsynchronized.ref thy)) = thy;
   6.284 -@  Pure/Concurrent/synchronized_sequential.ML:fun var _ x = Var (Unsynchronized.ref x);
   6.285 -   Pure/Concurrent/time_limit.ML:      val timeout = Unsynchronized.ref false;
   6.286 -   Pure/Concurrent/synchronized.ML:  var = Unsynchronized.ref x};
   6.287 -   Pure/Concurrent/future.ML:val queue = Unsynchronized.ref Task_Queue.empty;
   6.288 -   Pure/Concurrent/future.ML:val next = Unsynchronized.ref 0;
   6.289 -   Pure/Concurrent/future.ML:val scheduler = Unsynchronized.ref (NONE: Thread.thread option);
   6.290 -   Pure/Concurrent/future.ML:val canceled = Unsynchronized.ref ([]: group list);
   6.291 -   Pure/Concurrent/future.ML:val do_shutdown = Unsynchronized.ref false;
   6.292 -   Pure/Concurrent/future.ML:val max_workers = Unsynchronized.ref 0;
   6.293 -   Pure/Concurrent/future.ML:val max_active = Unsynchronized.ref 0;
   6.294 -   Pure/Concurrent/future.ML:val worker_trend = Unsynchronized.ref 0;
   6.295 -   Pure/Concurrent/future.ML:val status_ticks = Unsynchronized.ref 0;
   6.296 -   Pure/Concurrent/future.ML:val last_round = Unsynchronized.ref Time.zeroTime;
   6.297 -@  Pure/Concurrent/future.ML:val workers = Unsynchronized.ref ([]: (Thread.thread * worker_state Unsynchronized.ref) list);
   6.298 -   Pure/Concurrent/future.ML:val ML_statistics = Unsynchronized.ref false;
   6.299 -   Pure/Concurrent/future.ML:val forked_proofs = Unsynchronized.ref 0;
   6.300 -@  Pure/Concurrent/future.ML:    Unsynchronized.ref Working));
   6.301 -   Pure/Concurrent/lazy_sequential.ML:fun lazy e = Lazy (Unsynchronized.ref (Expr e));
   6.302 -   Pure/Concurrent/lazy_sequential.ML:fun value a = Lazy (Unsynchronized.ref (Result (Exn.Res a)));
   6.303 -   Pure/General/secure.ML:val secure = Unsynchronized.ref false;
   6.304 -   Pure/General/pretty.ML:val margin_default = Unsynchronized.ref 76;  (*right margin, or page width*)
   6.305 -   Pure/General/name_space.ML:val names_long_default = Unsynchronized.ref false;
   6.306 -   Pure/General/name_space.ML:val names_short_default = Unsynchronized.ref false;
   6.307 -   Pure/General/name_space.ML:val names_unique_default = Unsynchronized.ref true;
   6.308 -   Pure/General/position.ML:  val store_reports: report list Unsynchronized.ref -> T list -> ('a -> Markup.T list) -> 'a -> unit
   6.309 -   Pure/General/print_mode.ML:  val print_mode: string list Unsynchronized.ref  (*global template*)
   6.310 -   Pure/General/print_mode.ML:val print_mode = Unsynchronized.ref ([]: string list);
   6.311 -   Pure/General/output.ML:  val writeln_fn = Unsynchronized.ref physical_writeln;
   6.312 -   Pure/General/output.ML:  val urgent_message_fn = Unsynchronized.ref (fn s => ! writeln_fn s);
   6.313 -   Pure/General/output.ML:  val tracing_fn = Unsynchronized.ref (fn s => ! writeln_fn s);
   6.314 -   Pure/General/output.ML:  val warning_fn = Unsynchronized.ref (physical_writeln o prefix_lines "### ");
   6.315 -   Pure/General/output.ML:  val error_fn = Unsynchronized.ref (fn (_: serial, s) => physical_writeln (prefix_lines "*** " s));
   6.316 -   Pure/General/output.ML:  val prompt_fn = Unsynchronized.ref physical_stdout;
   6.317 -   Pure/General/output.ML:  val status_fn = Unsynchronized.ref (fn _: output => ());
   6.318 -   Pure/General/output.ML:  val report_fn = Unsynchronized.ref (fn _: output => ());
   6.319 -   Pure/General/output.ML:  val result_fn = Unsynchronized.ref (fn _: serial * output => ());
   6.320 -   Pure/General/output.ML:  val protocol_message_fn: (Properties.T -> output -> unit) Unsynchronized.ref =
   6.321 -@  Pure/General/output.ML:    Unsynchronized.ref (fn _ => fn _ => raise Fail "Output.protocol_message undefined in TTY mode");
   6.322 -   Pure/Tools/find_theorems.ML:val tac_limit = Unsynchronized.ref 5;
   6.323 -   Pure/Tools/find_theorems.ML:val limit = Unsynchronized.ref 40;
   6.324 -   Pure/raw_simplifier.ML:val simp_trace_depth_limit_default = Unsynchronized.ref 1;
   6.325 -   Pure/raw_simplifier.ML:      if depth = simp_trace_depth_limit_of context then Unsynchronized.ref false else exceeded), context));
   6.326 -   Pure/raw_simplifier.ML:val simp_trace_default = Unsynchronized.ref false;
   6.327 -   Pure/raw_simplifier.ML:  make_simpset ((Net.empty, [], (0, []), (0, Unsynchronized.ref false), NONE),
   6.328 -   Pure/raw_simplifier.ML:val debug_bounds = Unsynchronized.ref false;
   6.329 -   Pure/ROOT.ML:val quick_and_dirty = Unsynchronized.ref false;
   6.330 -   Pure/goal_display.ML:val goals_limit_default = Unsynchronized.ref 10;
   6.331 -   Pure/goal_display.ML:val show_main_goal_default = Unsynchronized.ref false;
   6.332 -   Pure/goal_display.ML:val show_consts_default = Unsynchronized.ref false;
   6.333 -   Pure/ML/ml_compiler_polyml.ML:      Unsynchronized.ref (toks |> map
   6.334 -   Pure/ML/ml_compiler_polyml.ML:    val writeln_buffer = Unsynchronized.ref Buffer.empty;
   6.335 -   Pure/ML/ml_compiler_polyml.ML:    val warnings = Unsynchronized.ref ([]: string list);
   6.336 -   Pure/ML/ml_compiler_polyml.ML:    val error_buffer = Unsynchronized.ref Buffer.empty;
   6.337 -@  Pure/goal.ML:val parallel_proofs = Unsynchronized.ref 1;
   6.338 -   Pure/goal.ML:val parallel_proofs_threshold = Unsynchronized.ref 50;
   6.339 -   Pure/tactical.ML:  val tracify: bool Unsynchronized.ref -> tactic -> tactic
   6.340 -   Pure/tactical.ML:val trace_REPEAT= Unsynchronized.ref false
   6.341 -   Pure/tactical.ML:and suppress_tracing = Unsynchronized.ref false;
   6.342 -   Pure/type.ML:    val tyvar_count = Unsynchronized.ref maxidx;
   6.343 -@  Pure/PIDE/document.ML:    (no_id, Future.new_group NONE, Unsynchronized.ref false));
   6.344 -@  Pure/PIDE/document.ML:      val execution' = (id, Future.new_group NONE, Unsynchronized.ref true);
   6.345 -   Pure/PIDE/document.ML:val timing = Unsynchronized.ref false;
   6.346 -   Pure/search.ML:val trace_DEPTH_FIRST = Unsynchronized.ref false;
   6.347 -   Pure/search.ML: let val countr = Unsynchronized.ref 0
   6.348 -   Pure/search.ML:val trace_DEEPEN = Unsynchronized.ref false;
   6.349 -   Pure/search.ML:val trace_BEST_FIRST = Unsynchronized.ref false;
   6.350 -   Pure/search.ML:val trace_ASTAR = Unsynchronized.ref false;
   6.351 -   Pure/Thy/thy_output.ML:val display_default = Unsynchronized.ref false;
   6.352 -   Pure/Thy/thy_output.ML:val quotes_default = Unsynchronized.ref false;
   6.353 -   Pure/Thy/thy_output.ML:val indent_default = Unsynchronized.ref 0;
   6.354 -   Pure/Thy/thy_output.ML:val source_default = Unsynchronized.ref false;
   6.355 -   Pure/Thy/thy_output.ML:val break_default = Unsynchronized.ref false;
   6.356 -   Pure/Thy/thy_output.ML:val modes = Unsynchronized.ref ([]: string list);
   6.357 -   Pure/Thy/thy_load.ML:  val master_path = Unsynchronized.ref Path.current;
   6.358 -   Pure/Thy/present.ML:val browser_info = Unsynchronized.ref empty_browser_info;
   6.359 -   Pure/Thy/present.ML:val suppress_tex_source = Unsynchronized.ref false;
   6.360 -   Pure/Thy/present.ML:val session_info = Unsynchronized.ref (NONE: session_info option);
   6.361 -   Pure/Thy/thy_info.ML:    Unsynchronized.ref (String_Graph.empty: (deps option * theory option) String_Graph.T);
   6.362 -@  Pure/proofterm.ML:val proofs = Unsynchronized.ref 2;
   6.363 -
   6.364 ---- Tools concerns external provers, Isac shall use in the future --- thus observe conflicts
   6.365 -   Sequents/prover.ML:val trace = Unsynchronized.ref false;
   6.366 -   Tools/Code/code_runtime.ML:val trace = Unsynchronized.ref false;
   6.367 -   Tools/WWW_Find/scgi_server.ML:val max_threads = Unsynchronized.ref 5;
   6.368 -   Tools/WWW_Find/scgi_server.ML:val servers = Unsynchronized.ref (Symtab.empty : (Mime.t option * handler) Symtab.table);
   6.369 -   Tools/WWW_Find/scgi_server.ML:    val threads = Unsynchronized.ref ([] : Thread.thread list);
   6.370 -   Tools/misc_legacy.ML:val gensym_seed = Unsynchronized.ref (0: int);
   6.371 -   Tools/Metis/metis.ML:local val rand = (*Unsynchronized.*)Unsynchronized.ref 0w1
   6.372 -   Tools/Metis/metis.ML:val withRef : 'r Unsynchronized.ref * 'r -> ('a -> 'b) -> 'a -> 'b
   6.373 -   Tools/Metis/metis.ML:  val tracePrint = Unsynchronized.ref tracePrintFn;
   6.374 -   Tools/Metis/metis.ML:  val generator = Unsynchronized.ref 0
   6.375 -   Tools/Metis/metis.ML:fun quickly v = Metis_Lazy (Unsynchronized.ref (Value v));
   6.376 -   Tools/Metis/metis.ML:fun delay f = Metis_Lazy (Unsynchronized.ref (Thunk f));
   6.377 -   Tools/Metis/metis.ML:      val cache = Unsynchronized.ref (Metis_Map.new cmp)
   6.378 -   Tools/Metis/metis.ML:val lineLength = Unsynchronized.ref initialLineLength;
   6.379 -   Tools/Metis/metis.ML:      val lastLine = Unsynchronized.ref (~1,"","","")
   6.380 -   Tools/Metis/metis.ML:                  val Unsynchronized.ref (n,_,l2,l3) = lastLine
   6.381 -   Tools/Metis/metis.ML:            val Unsynchronized.ref (n,l1,l2,l3) = lastLine
   6.382 -   Tools/Metis/metis.ML:    (Unsynchronized.ref o Metis_Print.Infixes)
   6.383 -   Tools/Metis/metis.ML:val negation : string Unsynchronized.ref = Unsynchronized.ref "~";
   6.384 -   Tools/Metis/metis.ML:val binders : string list Unsynchronized.ref = Unsynchronized.ref ["\\","!","?","?!"];
   6.385 -   Tools/Metis/metis.ML:val brackets : (string * string) list Unsynchronized.ref = Unsynchronized.ref [("[","]"),("{","}")];
   6.386 -   Tools/Metis/metis.ML:        val Unsynchronized.ref s = Metis_Term.negation
   6.387 -   Tools/Metis/metis.ML:  val counter : int Metis_StringMap.map Unsynchronized.ref = Unsynchronized.ref (Metis_StringMap.new ());
   6.388 -   Tools/Metis/metis.ML:        val Unsynchronized.ref m = counter
   6.389 -   Tools/Metis/metis.ML:  val counter : int Unsynchronized.ref = Unsynchronized.ref 0;
   6.390 -   Tools/Metis/metis.ML:        val Unsynchronized.ref i = counter
   6.391 -   Tools/Metis/metis.ML:       tableMap = Unsynchronized.ref (Metis_NameArityMap.new ())};
   6.392 -   Tools/Metis/metis.ML:      val Unsynchronized.ref m = tm
   6.393 -   Tools/Metis/metis.ML:      val r = Unsynchronized.ref 0
   6.394 -   Tools/Metis/metis.ML:            val Unsynchronized.ref n = r
   6.395 -   Tools/Metis/metis.ML:val showId = Unsynchronized.ref false;
   6.396 -
   6.397 -   Tools/coherent.ML:val verbose = Unsynchronized.ref false;
   6.398 -   Tools/coherent.ML:val show_facts = Unsynchronized.ref false;
   6.399 -   Tools/nbe.ML:val trace = Unsynchronized.ref false;
   6.400 -   Tools/quickcheck.ML:  val add_timing : (string * int) -> result Unsynchronized.ref -> unit
   6.401 -   Tools/quickcheck.ML:  val add_response : string list -> term list -> (bool * term list) option -> result Unsynchronized.ref -> unit
   6.402 -   Tools/quickcheck.ML:  val add_report : int -> report option -> result Unsynchronized.ref -> unit
   6.403 -   Tools/quickcheck.ML:val auto = Unsynchronized.ref false;
   6.404 -   Tools/solve_direct.ML:val auto = Unsynchronized.ref false;
   6.405 -   Tools/solve_direct.ML:val max_solutions = Unsynchronized.ref 5;
   6.406 -   Tools/try.ML:val auto_time_limit = Unsynchronized.ref 4.0
   6.407 -
   6.408 -   Tools/isac/Frontend/states.sml:val states = Unsynchronized.ref ([]:(iterID * (calcID * state) list) list);
   6.409 -!! Tools/isac/calcelems.sml:val theory'  = Unsynchronized.ref ([]:(theory' * theory) list);
   6.410 -!! Tools/isac/calcelems.sml:val isabthys = Unsynchronized.ref ([] : theory list);
   6.411 -!! Tools/isac/calcelems.sml:val knowthys = Unsynchronized.ref ([] : theory list);
   6.412 -!! Tools/isac/calcelems.sml:val progthys = Unsynchronized.ref ([] : theory list);
   6.413 -!! Tools/isac/calcelems.sml:val ruleset' = Unsynchronized.ref ([]:(rls' * (theory' * rls)) list);
   6.414 -!! Tools/isac/calcelems.sml:val calclist'= Unsynchronized.ref ([]: calc list);
   6.415 -!! Tools/isac/calcelems.sml:val thehier = Unsynchronized.ref ([] : thehier); (*WN101011 make argument, del*)
   6.416 -!! Tools/isac/calcelems.sml:val isab_thm_thy = Unsynchronized.ref ([] : (thmDeriv * term) list);
   6.417 -!! Tools/isac/calcelems.sml:val isabthys = Unsynchronized.ref ([] : theory list);
   6.418 -!! Tools/isac/calcelems.sml:val first_ProgLang_thy = Unsynchronized.ref (@{theory Pure});
   6.419 -!! Tools/isac/calcelems.sml:val first_Knowledge_thy = Unsynchronized.ref (@{theory Pure});
   6.420 -   Tools/isac/calcelems.sml:val trace_rewrite = Unsynchronized.ref false;
   6.421 -   Tools/isac/calcelems.sml:val depth = Unsynchronized.ref 99999;
   6.422 -   Tools/isac/calcelems.sml:val lim_rewrite = Unsynchronized.ref 99999;
   6.423 -   Tools/isac/calcelems.sml:val lim_deriv = Unsynchronized.ref 100;
   6.424 -   Tools/isac/calcelems.sml:val check_guhs_unique = Unsynchronized.ref true;
   6.425 -!? Tools/isac/ProgLang/Script.thy:val tacs = Unsynchronized.ref (distinct (remove op = ""
   6.426 -!? Tools/isac/ProgLang/Script.thy:val screxpr = Unsynchronized.ref (distinct (remove op = ""
   6.427 -!? Tools/isac/ProgLang/Script.thy:val listfuns = Unsynchronized.ref [(*_all_ functions in Isa99.List.thy *)
   6.428 -!? Tools/isac/ProgLang/Script.thy:val scrfuns = Unsynchronized.ref ([]: string list);
   6.429 -!? Tools/isac/ProgLang/Script.thy:val listexpr = Unsynchronized.ref (union op = (!listfuns) (!scrfuns));
   6.430 -!? Tools/isac/ProgLang/Script.thy:val notsimp = Unsynchronized.ref 
   6.431 -!? Tools/isac/ProgLang/Script.thy:val negotiable = Unsynchronized.ref ((!tacs (*@ !subpbls*)));
   6.432 -   Tools/isac/Knowledge/GCD_Poly_ML.thy:  val trace_div = Unsynchronized.ref true;
   6.433 -   Tools/isac/Knowledge/GCD_Poly_ML.thy:  val trace_div_invariant = Unsynchronized.ref false; (*.. true expects !trace_div = false *)
   6.434 -   Tools/isac/Knowledge/GCD_Poly_ML.thy:  val trace_Euclid = Unsynchronized.ref true;
   6.435 -!! Tools/isac/Interpret/inform.sml:val castab = Unsynchronized.ref ([]: castab);
   6.436 -   Tools/isac/Interpret/script.sml:val trace_script = Unsynchronized.ref false;
   6.437 -!! Tools/isac/Interpret/ptyps.sml:val pbltypes = Unsynchronized.ref ([(e_pblID,[])]:(pblID * ((string * (* field "#Given",..*)
   6.438 -!! Tools/isac/Interpret/ptyps.sml:val ptyps = Unsynchronized.ref ([e_Ptyp]:ptyps);
   6.439 -!! Tools/isac/Interpret/ptyps.sml:val mets = Unsynchronized.ref ([e_Mets]:mets);
   6.440 -   Tools/isac/Interpret/ctree.sml:> val pt = Unsynchronized.ref EmptyPtree;
   6.441 -!? Tools/isac/Interpret/ctree.sml:  val pt = Unsynchronized.ref Empty;
   6.442 -
   6.443 -   ZF/ind_syntax.ML:val trace = Unsynchronized.ref false;
   6.444 -   ZF/Datatype_ZF.thy:  val trace = Unsynchronized.ref false;
     7.1 --- a/doc-isac/mlehnfeld/master/mlehnfeld-ma.tex	Thu Jun 26 17:19:30 2014 +0200
     7.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3 @@ -1,14 +0,0 @@
     7.4 -\documentclass[11pt,a4paper]{report}
     7.5 - 
     7.6 -\usepackage{ucs}
     7.7 -\usepackage[utf8x]{inputenc}
     7.8 -\usepackage{paralist}
     7.9 -\bibliographystyle{alpha}
    7.10 -\usepackage{graphicx}
    7.11 - 
    7.12 -\title{TODO}
    7.13 -
    7.14 -\begin{document}
    7.15 -\maketitle
    7.16 -
    7.17 -\end{document}
     8.1 --- a/doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_calcs	Thu Jun 26 17:19:30 2014 +0200
     8.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.3 @@ -1,43 +0,0 @@
     8.4 -(DIVIDE, (Fields.inverse_class.divide, fn))--35 
     8.5 -(MINUS, (Groups.minus_class.minus, fn))--33 
     8.6 -(PLUS, (Groups.plus_class.plus, fn))--32 
     8.7 -(POWER, (Atools.pow, fn))--36 
     8.8 -(SQRT, (NthRoot.sqrt, fn))--10 
     8.9 -(TIMES, (Groups.times_class.times, fn))--34 
    8.10 -(Test.precond'_rootmet, (Test.precond'_rootmet, fn))--4 
    8.11 -(Test.precond'_rootpbl, (Test.precond'_rootpbl, fn))--5 
    8.12 -(Vars, (Tools.Vars, fn))--41 
    8.13 -(add_new_c, (Integrate.add'_new'_c, fn))--7 
    8.14 -(boollist2sum, (Atools.boollist2sum, fn))--37 
    8.15 -(contains_root, (Test.contains'_root, fn))--3 
    8.16 -(drop_questionmarks, (Partial_Fractions.drop'_questionmarks, fn))--1 
    8.17 -(equal, (HOL.eq, fn))--31 
    8.18 -(has_degree_in, (Poly.has'_degree'_in, fn))--19 
    8.19 -(ident, (Atools.ident, fn))--30 
    8.20 -(is_addUnordered, (Poly.is'_addUnordered, fn))--16 
    8.21 -(is_atom, (Atools.is'_atom, fn))--25 
    8.22 -(is_const, (Atools.is'_const, fn))--27 
    8.23 -(is_even, (Atools.is'_even, fn))--26 
    8.24 -(is_expanded, (Rational.is'_expanded, fn))--38 
    8.25 -(is_expanded_in, (Poly.is'_expanded'_in, fn))--21 
    8.26 -(is_f_x, (Integrate.is'_f'_x, fn))--6 
    8.27 -(is_multUnordered, (Poly.is'_multUnordered, fn))--17 
    8.28 -(is_normSqrtTerm_in, (RootEq.is_normSqrtTerm_in, fn))--13 
    8.29 -(is_poly_in, (Poly.is'_poly'_in, fn))--20 
    8.30 -(is_polyexp, (Poly.is'_polyexp, fn))--18 
    8.31 -(is_polyrat_in, (Poly.is'_polyrat'_in, fn))--22 
    8.32 -(is_ratequation_in, (RatEq.is_ratequation_in, fn))--9 
    8.33 -(is_rootRatAddTerm_in, (RootRatEq.is_rootRatAddTerm_in, fn))--8 
    8.34 -(is_rootTerm_in, (RootEq.is'_rootTerm'_in, fn))--11 
    8.35 -(is_root_free, (Test.is'_root'_free, fn))--2 
    8.36 -(is_sqrtTerm_in, (RootEq.is'_sqrtTerm'_in, fn))--12 
    8.37 -(le, (Orderings.ord_class.less, fn))--28 
    8.38 -(leq, (Orderings.ord_class.less_eq, fn))--29 
    8.39 -(lhs, (Tools.lhs, fn))--42 
    8.40 -(matches, (Tools.matches, fn))--39 
    8.41 -(matchsub, (Tools.matchsub, fn))--40 
    8.42 -(occur_exactly_in, (EqSystem.occur'_exactly'_in, fn))--15 
    8.43 -(occurs_in, (Atools.occurs'_in, fn))--23 
    8.44 -(primed, (Diff.primed, fn))--14 
    8.45 -(rhs, (Tools.rhs, fn))--43 
    8.46 -(some_occur_in, (Atools.some'_occur'_in, fn))--24 
    8.47 \ No newline at end of file
     9.1 --- a/doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_cas	Thu Jun 26 17:19:30 2014 +0200
     9.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.3 @@ -1,6 +0,0 @@
     9.4 -(Diff.Diff, ("Isac", ["derivative_of","function"], ["no_met"]))--1 
     9.5 -(Diff.Differentiate, ("Isac", ["named","derivative_of","function"], ["no_met"]))--4 
     9.6 -(Equation.solve, ("Isac", ["univariate","equation"], ["no_met"]))--3 
     9.7 -(Equation.solveTest, ("Test", ["univariate","equation","test"], ["no_met"]))--2 
     9.8 -(Simplify.Simplify, ("Isac", ["simplification"], ["no_met"]))--5 
     9.9 -(Simplify.Vereinfache, ("Isac", ["vereinfachen"], ["no_met"]))--6 
    9.10 \ No newline at end of file
    10.1 --- a/doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_mets	Thu Jun 26 17:19:30 2014 +0200
    10.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.3 @@ -1,102 +0,0 @@
    10.4 -Ptyp ("Berechnung", ["met_algein"], [
    10.5 -Ptyp ("erstNumerisch", ["met_algein_numsym"], []),
    10.6 -Ptyp ("erstSymbolisch", ["met_algein_symnum"], [])])--1 
    10.7 -
    10.8 -Ptyp ("Biegelinien", ["met_biege2"], [
    10.9 -Ptyp ("ausBelastung", ["met_biege_ausbelast"], []),
   10.10 -Ptyp ("setzeRandbedingungenEin", ["met_biege_setzrand"], [])])--2 
   10.11 -
   10.12 -Ptyp ("DiffApp", ["met_diffapp"], [
   10.13 -Ptyp ("find_values", ["met_diffapp_findvals"], []),
   10.14 -Ptyp ("make_fun_by_explicit", ["met_diffapp_funexp"], []),
   10.15 -Ptyp ("make_fun_by_new_variable", ["met_diffapp_funnew"], []),
   10.16 -Ptyp ("max_by_calculus", ["met_diffapp_max"], []),
   10.17 -Ptyp ("max_on_interval_by_calculus", ["met_diffapp_max_oninterval"], [])])--3 
   10.18 -
   10.19 -Ptyp ("EqSystem", ["met_eqsys"], [
   10.20 -Ptyp ("normalize", ["met_eqsys_norm"], [
   10.21 -Ptyp ("2x2", ["met_eqsys_norm_2x2"], []),
   10.22 -Ptyp ("4x4", ["met_eqsys_norm_4x4"], [])]),
   10.23 -Ptyp ("top_down_substitution", ["met_eqsys_topdown"], [
   10.24 -Ptyp ("2x2", ["met_eqsys_topdown_2x2"], []),
   10.25 -Ptyp ("4x4", ["met_eqsys_topdown_4x4"], [])])])--4 
   10.26 -
   10.27 -Ptyp ("Equation", ["met_equ"], [
   10.28 -Ptyp ("fromFunction", ["met_equ_fromfun"], []),
   10.29 -Ptyp ("solve_log", ["met_equ_log"], [])])--5 
   10.30 -
   10.31 -Ptyp ("IntegrierenUndKonstanteBestimmen", ["met_biege"], [
   10.32 -Ptyp ("1xIntegrieren", ["met_biege_intconst_1"], []),
   10.33 -Ptyp ("2xIntegrieren", ["met_biege_intconst_2"], []),
   10.34 -Ptyp ("4x4System", ["met_biege_intconst_4"], [])])--6 
   10.35 -
   10.36 -Ptyp ("IntegrierenUndKonstanteBestimmen2", ["met_biege_2"], [])--7 
   10.37 -
   10.38 -Ptyp ("LinEq", ["met_eqlin"], [
   10.39 -Ptyp ("solve_lineq_equation", ["met_eq_lin"], [])])--8 
   10.40 -
   10.41 -Ptyp ("PolyEq", ["met_polyeq"], [
   10.42 -Ptyp ("complete_square", ["met_polyeq_complsq"], []),
   10.43 -Ptyp ("normalize_poly", ["met_polyeq_norm"], []),
   10.44 -Ptyp ("solve_d0_polyeq_equation", ["met_polyeq_d0"], []),
   10.45 -Ptyp ("solve_d1_polyeq_equation", ["met_polyeq_d1"], []),
   10.46 -Ptyp ("solve_d2_polyeq_abc_equation", ["met_polyeq_d2_abc"], []),
   10.47 -Ptyp ("solve_d2_polyeq_bdvonly_equation", ["met_polyeq_d2_bdvonly"], []),
   10.48 -Ptyp ("solve_d2_polyeq_equation", ["met_polyeq_d22"], []),
   10.49 -Ptyp ("solve_d2_polyeq_pq_equation", ["met_polyeq_d2_pq"], []),
   10.50 -Ptyp ("solve_d2_polyeq_sqonly_equation", ["met_polyeq_d2_sqonly"], []),
   10.51 -Ptyp ("solve_d3_polyeq_equation", ["met_polyeq_d3"], [])])--9 
   10.52 -
   10.53 -Ptyp ("RatEq", ["met_rateq"], [
   10.54 -Ptyp ("solve_rat_equation", ["met_rat_eq"], [])])--10 
   10.55 -
   10.56 -Ptyp ("RootEq", ["met_rooteq"], [
   10.57 -Ptyp ("norm_sq_root_equation", ["met_rooteq_norm"], []),
   10.58 -Ptyp ("solve_left_sq_root_equation", ["met_rooteq_sq_left"], []),
   10.59 -Ptyp ("solve_right_sq_root_equation", ["met_rooteq_sq_right"], []),
   10.60 -Ptyp ("solve_sq_root_equation", ["met_rooteq_sq"], [])])--11 
   10.61 -
   10.62 -Ptyp ("RootRatEq", ["met_rootrateq"], [
   10.63 -Ptyp ("elim_rootrat_equation", ["met_rootrateq_elim"], [])])--12 
   10.64 -
   10.65 -Ptyp ("SignalProcessing", ["met_SP"], [
   10.66 -Ptyp ("Z_Transform", ["met_SP_Ztrans"], [
   10.67 -Ptyp ("Inverse", ["met_SP_Ztrans_inv"], []),
   10.68 -Ptyp ("Inverse_sub", ["met_SP_Ztrans_inv_sub"], [])])])--13 
   10.69 -
   10.70 -Ptyp ("Test", ["met_test"], [
   10.71 -Ptyp ("intsimp", ["met_test_intsimp"], []),
   10.72 -Ptyp ("norm_univar_equation", ["met_test_norm_univ"], []),
   10.73 -Ptyp ("solve_diophant", ["met_test_diophant"], []),
   10.74 -Ptyp ("solve_linear", ["met_test_solvelin"], []),
   10.75 -Ptyp ("solve_plain_square", ["met_test_eq_plain"], []),
   10.76 -Ptyp ("sqrt-equ-test", ["met_test_sqrt"], []),
   10.77 -Ptyp ("squ-equ-test-subpbl1", ["met_test_squ_sub"], []),
   10.78 -Ptyp ("squ-equ-test-subpbl2", ["met_test_squ_sub2"], []),
   10.79 -Ptyp ("squ-equ-test2", ["met_test_sqrt2"], []),
   10.80 -Ptyp ("square_equation", ["met_test_squeq"], []),
   10.81 -Ptyp ("square_equation...notTerminating", ["met_test_squ_nonterm"], []),
   10.82 -Ptyp ("square_equation1", ["met_test_eq1"], []),
   10.83 -Ptyp ("square_equation2", ["met_test_squ2"], [])])--14 
   10.84 -
   10.85 -Ptyp ("diff", ["met_diff"], [
   10.86 -Ptyp ("after_simplification", ["met_diff_after_simp"], []),
   10.87 -Ptyp ("diff_simpl", ["met_diff_simpl"], []),
   10.88 -Ptyp ("differentiate_equality", ["met_diff_equ"], []),
   10.89 -Ptyp ("differentiate_on_R", ["met_diff_onR"], []),
   10.90 -Ptyp ("integration", ["met_diffint"], [
   10.91 -Ptyp ("named", ["met_diffint_named"], [])])])--15 
   10.92 -
   10.93 -Ptyp ("e_metID", ["met_empty"], [])--16 
   10.94 -
   10.95 -Ptyp ("probe", ["met_probe"], [
   10.96 -Ptyp ("fuer_bruch", ["met_probe_bruch"], []),
   10.97 -Ptyp ("fuer_polynom", ["met_probe_poly"], [])])--17 
   10.98 -
   10.99 -Ptyp ("simplification", ["met_tsimp"], [
  10.100 -Ptyp ("for_polynomials", ["met_simp_poly"], [
  10.101 -Ptyp ("with_minus", ["met_simp_poly_minus"], []),
  10.102 -Ptyp ("with_parentheses", ["met_simp_poly_parenth"], []),
  10.103 -Ptyp ("with_parentheses_mult", ["met_simp_poly_parenth_mult"], [])]),
  10.104 -Ptyp ("of_rationals", ["met_simp_rat"], [
  10.105 -Ptyp ("to_partial_fraction", ["met_partial_fraction"], [])])])--18
  10.106 \ No newline at end of file
    11.1 --- a/doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_ptyps	Thu Jun 26 17:19:30 2014 +0200
    11.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.3 @@ -1,202 +0,0 @@
    11.4 -Ptyp ("Berechnung", [
    11.5 -{cas = NONE, guh = "pbl_algein", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {AlgEin}, where_ = []}], [
    11.6 -Ptyp ("numerischSymbolische", [
    11.7 -{cas = NONE, guh = "pbl_algein_numsym", init = ["e_pblID"], mathauthors = "[]", met = [["Berechnung","erstNumerisch"],["Berechnung","erstSymbolisch"]], ppc = ["(#Given, (KantenLaenge, k_k))","(#Given, (Querschnitt, q__q))","(#Given, (KantenUnten, u_u))","(#Given, (KantenSenkrecht, s_s))","(#Given, (KantenOben, o_o))","(#Find, (GesamtLaenge, l_l))"], prls = "e_rls", thy = {AlgEin}, where_ = []}], [])])--1 
    11.8 -
    11.9 -Ptyp ("Biegelinien", [
   11.10 -{cas = NONE, guh = "pbl_bieg", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen2"]], ppc = ["(#Given, (Traegerlaenge, l_l))","(#Given, (Streckenlast, q_q))","(#Find, (Biegelinie, b_b))","(#Relate, (Randbedingungen, r_b))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], [
   11.11 -Ptyp ("MomentBestimmte", [
   11.12 -{cas = NONE, guh = "pbl_bieg_mom", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen"]], ppc = ["(#Given, (Traegerlaenge, l_l))","(#Given, (Streckenlast, q_q))","(#Find, (Biegelinie, b_b))","(#Relate, (RandbedingungenBiegung, r_b))","(#Relate, (RandbedingungenMoment, r_m))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   11.13 -Ptyp ("MomentGegebene", [
   11.14 -{cas = NONE, guh = "pbl_bieg_momg", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen","2xIntegrieren"]], ppc = [], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   11.15 -Ptyp ("QuerkraftUndMomentBestimmte", [
   11.16 -{cas = NONE, guh = "pbl_bieg_momquer", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen","1xIntegrieren"]], ppc = [], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   11.17 -Ptyp ("einfache", [
   11.18 -{cas = NONE, guh = "pbl_bieg_einf", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen","4x4System"]], ppc = [], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   11.19 -Ptyp ("setzeRandbedingungen", [
   11.20 -{cas = NONE, guh = "pbl_bieg_randbed", init = ["e_pblID"], mathauthors = "[]", met = [["Biegelinien","setzeRandbedingungenEin"]], ppc = ["(#Given, (Funktionen, fun_s))","(#Given, (Randbedingungen, r_b))","(#Find, (Gleichungen, equs'''))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   11.21 -Ptyp ("vonBelastungZu", [
   11.22 -{cas = NONE, guh = "pbl_bieg_vonq", init = ["e_pblID"], mathauthors = "[]", met = [["Biegelinien","ausBelastung"]], ppc = ["(#Given, (Streckenlast, q_q))","(#Given, (FunktionsVariable, v_v))","(#Find, (Funktionen, funs'''))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], [])])--2 
   11.23 -
   11.24 -Ptyp ("SignalProcessing", [
   11.25 -{cas = NONE, guh = "pbl_SP", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Inverse_Z_Transform}, where_ = []}], [
   11.26 -Ptyp ("Z_Transform", [
   11.27 -{cas = NONE, guh = "pbl_SP_Ztrans", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Inverse_Z_Transform}, where_ = []}], [
   11.28 -Ptyp ("Inverse", [
   11.29 -{cas = NONE, guh = "pbl_SP_Ztrans_inv", init = ["e_pblID"], mathauthors = "[]", met = [["SignalProcessing","Z_Transform","Inverse"]], ppc = ["(#Given, (filterExpression, X_eq))","(#Find, (stepResponse, n_eq))"], prls = "e_rls", thy = {Inverse_Z_Transform}, where_ = []}], [])])])--3 
   11.30 -
   11.31 -Ptyp ("e_pblID", [
   11.32 -{cas = NONE, guh = "pbl_empty", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Pure}, where_ = []}], [])--4 
   11.33 -
   11.34 -Ptyp ("equation", [
   11.35 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "equation_prls", thy = {Equation}, where_ = ["matches (?a = ?b) e_e"]}], [
   11.36 -Ptyp ("diophantine", [
   11.37 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_dio", init = ["e_pblID"], mathauthors = "[]", met = [["LinEq","solve_lineq_equation"]], ppc = ["(#Given, (boolTestGiven, e_e))","(#Given, (intTestGiven, v_v))","(#Find, (boolTestFind, s_s))"], prls = "e_rls", thy = {DiophantEq}, where_ = []}], []),
   11.38 -Ptyp ("makeFunctionTo", [
   11.39 -{cas = NONE, guh = "pbl_equ_fromfun", init = ["e_pblID"], mathauthors = "[]", met = [["Equation","fromFunction"]], ppc = ["(#Given, (functionEq, fu_n))","(#Given, (substitution, su_b))","(#Find, (equality, equ'''))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   11.40 -Ptyp ("univariate", [
   11.41 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "univariate_equation_prls", thy = {Equation}, where_ = ["matches (?a = ?b) e_e"]}], [
   11.42 -Ptyp ("LINEAR", [
   11.43 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_lin", init = ["e_pblID"], mathauthors = "[]", met = [["LinEq","solve_lineq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "LinEq_prls", thy = {LinEq}, where_ = ["False","~ lhs e_e is_polyrat_in v_v","~ rhs e_e is_polyrat_in v_v","lhs e_e has_degree_in v_v = 1","rhs e_e has_degree_in v_v = 1"]}], []),
   11.44 -Ptyp ("expanded", [
   11.45 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_expand", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_expanded_in v_v"]}], [
   11.46 -Ptyp ("degree_2", [
   11.47 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_expand_deg2", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","complete_square"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["lhs e_e has_degree_in v_v = 2"]}], [])]),
   11.48 -Ptyp ("logarithmic", [
   11.49 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_equ_univ_log", init = ["e_pblID"], mathauthors = "[]", met = [["Equation","solve_log"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {LogExp}, where_ = ["matches (?a log ?v_v = ?b) e_e"]}], []),
   11.50 -Ptyp ("polynomial", [
   11.51 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["~ e_e is_ratequation_in v_v","~ lhs e_e is_rootTerm_in v_v","~ rhs e_e is_rootTerm_in v_v"]}], [
   11.52 -Ptyp ("degree_0", [
   11.53 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg0", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d0_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 0"]}], []),
   11.54 -Ptyp ("degree_1", [
   11.55 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg1", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d1_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 1"]}], []),
   11.56 -Ptyp ("degree_2", [
   11.57 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 2"]}], [
   11.58 -Ptyp ("abcFormula", [
   11.59 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_abc", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_abc_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a + ?v_ ^^^ 2 = 0) e_e | matches (?a + ?b * ?v_ ^^^ 2 = 0) e_e"]}], []),
   11.60 -Ptyp ("bdv_only", [
   11.61 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_bdvonly", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_bdvonly_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a * ?v_ + ?v_ ^^^ 2 = 0) e_e |
   11.62 -matches (?v_ + ?v_ ^^^ 2 = 0) e_e |
   11.63 -matches (?v_ + ?b * ?v_ ^^^ 2 = 0) e_e |
   11.64 -matches (?a * ?v_ + ?b * ?v_ ^^^ 2 = 0) e_e |
   11.65 -matches (?v_ ^^^ 2 = 0) e_e | matches (?b * ?v_ ^^^ 2 = 0) e_e"]}], []),
   11.66 -Ptyp ("pqFormula", [
   11.67 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_pq", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_pq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a + 1 * ?v_ ^^^ 2 = 0) e_e | matches (?a + ?v_ ^^^ 2 = 0) e_e"]}], []),
   11.68 -Ptyp ("sq_only", [
   11.69 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_sqonly", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_sqonly_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a + ?v_ ^^^ 2 = 0) e_e |
   11.70 -matches (?a + ?b * ?v_ ^^^ 2 = 0) e_e |
   11.71 -matches (?v_ ^^^ 2 = 0) e_e | matches (?b * ?v_ ^^^ 2 = 0) e_e","~ matches (?a + ?v_ + ?v_ ^^^ 2 = 0) e_e &
   11.72 -~ matches (?a + ?b * ?v_ + ?v_ ^^^ 2 = 0) e_e &
   11.73 -~ matches (?a + ?v_ + ?c * ?v_ ^^^ 2 = 0) e_e &
   11.74 -~ matches (?a + ?b * ?v_ + ?c * ?v_ ^^^ 2 = 0) e_e &
   11.75 -~ matches (?v_ + ?v_ ^^^ 2 = 0) e_e &
   11.76 -~ matches (?b * ?v_ + ?v_ ^^^ 2 = 0) e_e &
   11.77 -~ matches (?v_ + ?c * ?v_ ^^^ 2 = 0) e_e &
   11.78 -~ matches (?b * ?v_ + ?c * ?v_ ^^^ 2 = 0) e_e"]}], [])]),
   11.79 -Ptyp ("degree_3", [
   11.80 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg3", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d3_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 3"]}], []),
   11.81 -Ptyp ("degree_4", [
   11.82 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg4", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 4"]}], []),
   11.83 -Ptyp ("normalize", [
   11.84 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_norm", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","normalize_poly"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["~ matches (?a = 0) e_e | ~ lhs e_e is_poly_in v_v"]}], [])]),
   11.85 -Ptyp ("rational", [
   11.86 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_rat", init = ["e_pblID"], mathauthors = "[]", met = [["RatEq","solve_rat_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RatEq_prls", thy = {RatEq}, where_ = ["e_e is_ratequation_in v_v"]}], []),
   11.87 -Ptyp ("root'", [
   11.88 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootEq_prls", thy = {RootEq}, where_ = ["lhs e_e is_rootTerm_in v_v | rhs e_e is_rootTerm_in v_v"]}], [
   11.89 -Ptyp ("normalize", [
   11.90 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root_norm", init = ["e_pblID"], mathauthors = "[]", met = [["RootEq","norm_sq_root_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootEq_prls", thy = {RootEq}, where_ = ["lhs e_e is_sqrtTerm_in v_v & ~ lhs e_e is_normSqrtTerm_in v_v |
   11.91 -rhs e_e is_sqrtTerm_in v_v & ~ rhs e_e is_normSqrtTerm_in v_v"]}], []),
   11.92 -Ptyp ("sq", [
   11.93 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root_sq", init = ["e_pblID"], mathauthors = "[]", met = [["RootEq","solve_sq_root_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootEq_prls", thy = {RootEq}, where_ = ["lhs e_e is_sqrtTerm_in v_v & lhs e_e is_normSqrtTerm_in v_v |
   11.94 -rhs e_e is_sqrtTerm_in v_v & rhs e_e is_normSqrtTerm_in v_v"]}], [
   11.95 -Ptyp ("rat", [
   11.96 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root_sq_rat", init = ["e_pblID"], mathauthors = "[]", met = [["RootRatEq","elim_rootrat_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootRatEq_prls", thy = {RootRatEq}, where_ = ["lhs e_e is_rootRatAddTerm_in v_v | rhs e_e is_rootRatAddTerm_in v_v"]}], [])])])])])--5 
   11.97 -
   11.98 -Ptyp ("function", [
   11.99 -{cas = NONE, guh = "pbl_fun", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Diff}, where_ = []}], [
  11.100 -Ptyp ("derivative_of", [
  11.101 -{cas = (SOME Diff (f_f, v_v)), guh = "pbl_fun_deriv", init = ["e_pblID"], mathauthors = "[]", met = [["diff","differentiate_on_R"],["diff","after_simplification"]], ppc = ["(#Given, (functionTerm, f_f))","(#Given, (differentiateFor, v_v))","(#Find, (derivative, f_f'))"], prls = "e_rls", thy = {Diff}, where_ = []}], [
  11.102 -Ptyp ("named", [
  11.103 -{cas = (SOME Differentiate (f_f, v_v)), guh = "pbl_fun_deriv_nam", init = ["e_pblID"], mathauthors = "[]", met = [["diff","differentiate_equality"]], ppc = ["(#Given, (functionEq, f_f))","(#Given, (differentiateFor, v_v))","(#Find, (derivativeEq, f_f'))"], prls = "e_rls", thy = {Diff}, where_ = []}], [])]),
  11.104 -Ptyp ("integrate", [
  11.105 -{cas = (SOME Integrate (f_f, v_v)), guh = "pbl_fun_integ", init = ["e_pblID"], mathauthors = "[]", met = [["diff","integration"]], ppc = ["(#Given, (functionTerm, f_f))","(#Given, (integrateBy, v_v))","(#Find, (Integrate.antiDerivative, F_F))"], prls = "e_rls", thy = {Integrate}, where_ = []}], [
  11.106 -Ptyp ("named", [
  11.107 -{cas = (SOME Integrate (f_f, v_v)), guh = "pbl_fun_integ_nam", init = ["e_pblID"], mathauthors = "[]", met = [["diff","integration","named"]], ppc = ["(#Given, (functionTerm, f_f))","(#Given, (integrateBy, v_v))","(#Find, (antiDerivativeName, F_F))"], prls = "e_rls", thy = {Integrate}, where_ = []}], [])]),
  11.108 -Ptyp ("make", [
  11.109 -{cas = NONE, guh = "pbl_fun_make", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (functionOf, f_f))","(#Given, (boundVariable, v_v))","(#Given, (equalities, eqs))","(#Find, (functionEq, f_1))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [
  11.110 -Ptyp ("by_explicit", [
  11.111 -{cas = NONE, guh = "pbl_fun_max_expl", init = ["e_pblID"], mathauthors = "[]", met = [["DiffApp","make_fun_by_explicit"]], ppc = ["(#Given, (functionOf, f_f))","(#Given, (boundVariable, v_v))","(#Given, (equalities, eqs))","(#Find, (functionEq, f_1))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], []),
  11.112 -Ptyp ("by_new_variable", [
  11.113 -{cas = NONE, guh = "pbl_fun_max_newvar", init = ["e_pblID"], mathauthors = "[]", met = [["DiffApp","make_fun_by_new_variable"]], ppc = ["(#Given, (functionOf, f_f))","(#Given, (boundVariable, v_v))","(#Given, (equalities, eqs))","(#Find, (functionEq, f_1))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [])]),
  11.114 -Ptyp ("maximum_of", [
  11.115 -{cas = NONE, guh = "pbl_fun_max", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (fixedValues, f_ix))","(#Find, (maximum, m_m))","(#Find, (valuesFor, v_s))","(#Relate, (relations, r_s))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [
  11.116 -Ptyp ("on_interval", [
  11.117 -{cas = NONE, guh = "pbl_fun_max_interv", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (functionEq, t_t))","(#Given, (boundVariable, v_v))","(#Given, (interval, i_tv))","(#Find, (maxArgument, v_0))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [])])])--6 
  11.118 -
  11.119 -Ptyp ("probe", [
  11.120 -{cas = NONE, guh = "pbl_probe", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {PolyMinus}, where_ = []}], [
  11.121 -Ptyp ("bruch", [
  11.122 -{cas = (SOME Probe e_e w_w), guh = "pbl_probe_bruch", init = ["e_pblID"], mathauthors = "[]", met = [["probe","fuer_bruch"]], ppc = ["(#Given, (Pruefe, e_e))","(#Given, (mitWert, w_w))","(#Find, (Geprueft, p_p))"], prls = "prls_pbl_probe_bruch", thy = {PolyMinus}, where_ = ["e_e is_ratpolyexp"]}], []),
  11.123 -Ptyp ("polynom", [
  11.124 -{cas = (SOME Probe e_e w_w), guh = "pbl_probe_poly", init = ["e_pblID"], mathauthors = "[]", met = [["probe","fuer_polynom"]], ppc = ["(#Given, (Pruefe, e_e))","(#Given, (mitWert, w_w))","(#Find, (Geprueft, p_p))"], prls = "prls_pbl_probe_poly", thy = {PolyMinus}, where_ = ["e_e is_polyexp"]}], [])])--7 
  11.125 -
  11.126 -Ptyp ("simplification", [
  11.127 -{cas = (SOME Simplify t_t), guh = "pbl_simp", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Simplify}, where_ = []}], [
  11.128 -Ptyp ("polynomial", [
  11.129 -{cas = (SOME Simplify t_t), guh = "pbl_simp_poly", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Poly}, where_ = ["t_t is_polyexp"]}], []),
  11.130 -Ptyp ("rational", [
  11.131 -{cas = (SOME Simplify t_t), guh = "pbl_simp_rat", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","of_rationals"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Rational}, where_ = ["t_t is_ratpolyexp"]}], [
  11.132 -Ptyp ("partial_fraction", [
  11.133 -{cas = NONE, guh = "pbl_simp_rat_partfrac", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","of_rationals","to_partial_fraction"]], ppc = ["(#Given, (functionTerm, t_t))","(#Given, (solveFor, v_v))","(#Find, (decomposedFunction, p_p'''))"], prls = "e_rls", thy = {Partial_Fractions}, where_ = []}], [])])])--8 
  11.134 -
  11.135 -Ptyp ("system", [
  11.136 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], [
  11.137 -Ptyp ("LINEAR", [
  11.138 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], [
  11.139 -Ptyp ("2x2", [
  11.140 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_2x2", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_2x2_linear_system", thy = {EqSystem}, where_ = ["LENGTH e_s = 2","LENGTH v_s = 2"]}], [
  11.141 -Ptyp ("normalize", [
  11.142 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_2x2_norm", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","normalize","2x2"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], []),
  11.143 -Ptyp ("triangular", [
  11.144 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_2x2_tri", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","top_down_substitution","2x2"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_triangular", thy = {EqSystem}, where_ = ["tl v_s from v_s occur_exactly_in NTH 1 e_s","v_s from v_s occur_exactly_in NTH 2 e_s"]}], [])]),
  11.145 -Ptyp ("3x3", [
  11.146 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_3x3", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_3x3_linear_system", thy = {EqSystem}, where_ = ["LENGTH e_s = 3","LENGTH v_s = 3"]}], []),
  11.147 -Ptyp ("4x4", [
  11.148 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_4x4", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_4x4_linear_system", thy = {EqSystem}, where_ = ["LENGTH e_s = 4","LENGTH v_s = 4"]}], [
  11.149 -Ptyp ("normalize", [
  11.150 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_4x4_norm", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","normalize","4x4"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], []),
  11.151 -Ptyp ("triangular", [
  11.152 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_4x4_tri", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","top_down_substitution","4x4"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_tri_4x4_lin_sys", thy = {EqSystem}, where_ = ["NTH 1 v_s occurs_in NTH 1 e_s","NTH 2 v_s occurs_in NTH 2 e_s","NTH 3 v_s occurs_in NTH 3 e_s","NTH 4 v_s occurs_in NTH 4 e_s"]}], [])])])])--9 
  11.153 -
  11.154 -Ptyp ("test", [
  11.155 -{cas = NONE, guh = "pbl_test", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Test}, where_ = []}], [
  11.156 -Ptyp ("equation", [
  11.157 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_equ", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (?a = ?b) e_e"]}], [
  11.158 -Ptyp ("univariate", [
  11.159 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (?a = ?b) e_e"]}], [
  11.160 -Ptyp ("LINEAR", [
  11.161 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_lin", init = ["e_pblID"], mathauthors = "[]", met = [["Test","solve_linear"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (v_v = 0) e_e |
  11.162 -matches (?b * v_v = 0) e_e |
  11.163 -matches (?a + v_v = 0) e_e | matches (?a + ?b * v_v = 0) e_e"]}], []),
  11.164 -Ptyp ("normalize", [
  11.165 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_norm", init = ["e_pblID"], mathauthors = "[]", met = [["Test","norm_univar_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], []),
  11.166 -Ptyp ("plain_square", [
  11.167 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_plain2", init = ["e_pblID"], mathauthors = "[]", met = [["Test","solve_plain_square"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (?a + ?b * v_v ^^^ 2 = 0) e_e |
  11.168 -matches (?b * v_v ^^^ 2 = 0) e_e |
  11.169 -matches (?a + v_v ^^^ 2 = 0) e_e | matches (v_v ^^^ 2 = 0) e_e"]}], []),
  11.170 -Ptyp ("polynomial", [
  11.171 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_poly", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, v_v ^^^ 2 + p_p * v_v + q__q = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = ["False"]}], [
  11.172 -Ptyp ("degree_two", [
  11.173 -{cas = (SOME solve (v_v ^^^ 2 + p_p * v_v + q__q = 0, v_v)), guh = "pbl_test_uni_poly_deg2", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, v_v ^^^ 2 + p_p * v_v + q__q = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], [
  11.174 -Ptyp ("abc_formula", [
  11.175 -{cas = (SOME solve (a_a * x ^^^ 2 + b_b * x + c_c = 0, v_v)), guh = "pbl_test_uni_poly_deg2_abc", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, a_a * x ^^^ 2 + b_b * x + c_c = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], []),
  11.176 -Ptyp ("pq_formula", [
  11.177 -{cas = (SOME solve (v_v ^^^ 2 + p_p * v_v + q__q = 0, v_v)), guh = "pbl_test_uni_poly_deg2_pq", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, v_v ^^^ 2 + p_p * v_v + q__q = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], [])])]),
  11.178 -Ptyp ("sqroot-test", [
  11.179 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_roottest", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = ["precond_rootpbl v_v"]}], []),
  11.180 -Ptyp ("squareroot", [
  11.181 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_root", init = ["e_pblID"], mathauthors = "[]", met = [["Test","square_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "contains_root", thy = {Test}, where_ = ["precond_rootpbl v_v"]}], [])])]),
  11.182 -Ptyp ("inttype", [
  11.183 -{cas = NONE, guh = "pbl_test_intsimp", init = ["e_pblID"], mathauthors = "[]", met = [["Test","intsimp"]], ppc = ["(#Given, (intTestGiven, t_t))","(#Find, (intTestFind, s_s))"], prls = "e_rls", thy = {Test}, where_ = []}], [])])--10 
  11.184 -
  11.185 -Ptyp ("tool", [
  11.186 -{cas = NONE, guh = "pbl_tool", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {DiffApp}, where_ = []}], [
  11.187 -Ptyp ("find_values", [
  11.188 -{cas = NONE, guh = "pbl_tool_findvals", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (maxArgument, m_ax))","(#Given, (functionEq, f_f))","(#Given, (boundVariable, v_v))","(#Find, (valuesFor, v_ls))","(#Relate, (additionalRels, r_s))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [])])--11 
  11.189 -
  11.190 -Ptyp ("vereinfachen", [
  11.191 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinfache", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Simplify}, where_ = []}], [
  11.192 -Ptyp ("polynom", [
  11.193 -{cas = NONE, guh = "pbl_vereinf_poly", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {PolyMinus}, where_ = []}], [
  11.194 -Ptyp ("binom_klammer", [
  11.195 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinf_poly_klammer_mal", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials","with_parentheses_mult"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {PolyMinus}, where_ = ["t_t is_polyexp"]}], []),
  11.196 -Ptyp ("klammer", [
  11.197 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinf_poly_klammer", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials","with_parentheses"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "prls_pbl_vereinf_poly_klammer", thy = {PolyMinus}, where_ = ["t_t is_polyexp","~ (matchsub (?a * (?b + ?c)) t_t |
  11.198 -   matchsub (?a * (?b - ?c)) t_t |
  11.199 -   matchsub ((?b + ?c) * ?a) t_t | matchsub ((?b - ?c) * ?a) t_t)"]}], []),
  11.200 -Ptyp ("plus_minus", [
  11.201 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinf_poly_minus", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials","with_minus"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "prls_pbl_vereinf_poly", thy = {PolyMinus}, where_ = ["t_t is_polyexp","~ (matchsub (?a + (?b + ?c)) t_t |
  11.202 -   matchsub (?a + (?b - ?c)) t_t |
  11.203 -   matchsub (?a - (?b + ?c)) t_t | matchsub (?a + (?b - ?c)) t_t)","~ (matchsub (?a * (?b + ?c)) t_t |
  11.204 -   matchsub (?a * (?b - ?c)) t_t |
  11.205 -   matchsub ((?b + ?c) * ?a) t_t | matchsub ((?b - ?c) * ?a) t_t)"]}], [])])])--12 
    12.1 --- a/doc-isac/mlehnfeld/master/ordered-KEStore_Elems.get_rlss	Thu Jun 26 17:19:30 2014 +0200
    12.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.3 @@ -1,150 +0,0 @@
    12.4 -WN130922 Build_Thydata.thy:
    12.5 -  writeln "======= KEStore_Elems.get_rlss @{theory} ordered ======="; 
    12.6 -  KEStore_Elems.get_rlss @{theory}
    12.7 -    |> map check_kestore_rls |> enumerate_strings |> sort string_ord |> map writeln;
    12.8 -  writeln "======= end KEStore_Elems.get_rlss @{theory} ======="; 
    12.9 ---------------------------------------------------------------------------------------
   12.10 -======= length (KEStore_Elems = 119
   12.11 ---------------------------------------------------------------------------------------
   12.12 -Legend:
   12.13 -# (*a small difference to ! ruleset'*)
   12.14 -# -----RULESET: an entry missing here in comparison to ! ruleset'
   12.15 ---------------------------------------------------------------------------------------
   12.16 -======= KEStore_Elems.get_rlss @{theory} ordered =======
   12.17 -(LinEq_erls, (LinEq, Rls {#calc = 0, #rules = 26, ...))--67
   12.18 -(LinEq_simplify, (LinEq, Rls {#calc = 0, #rules = 3, ...))--65
   12.19 -(LinPoly_simplify, (LinEq, Rls {#calc = 4, #rules = 5, ...))--66
   12.20 -(PolyEq_erls, (PolyEq, Rls {#calc = 1, #rules = 42, ...))--46
   12.21 -(Poly_erls, (Poly, Rls {#calc = 11 (*0*), #rules = 25, ...))--115
   12.22 -(RatEq_eliminate, (RatEq, Rls {#calc = 0, #rules = 3, ...))--54
   12.23 -(RatEq_simplify, (RatEq, Rls {#calc = 0, #rules = 8, ...))--53
   12.24 -(RooRatEq_erls, (RootRatEq, Rls {#calc = 2, #rules = 43, ...))--50
   12.25 -(RootEq_erls, (RootEq, Rls {#calc = 0, #rules = 28, ...))--61
   12.26 -
   12.27 -(Root_erls, (Root, Rls {#calc = 0, #rules = 27, ...))--64
   12.28 -(Test_simplify, (Test, Rls {#calc = 4, #rules = 37, ...))--15
   12.29 -(ac_plus_times, (Test, Rls {#calc = 0, #rules = 6, ...))--9
   12.30 -(add_fractions_p, (Rational, Rrls {...}))--88
   12.31 -(add_fractions_p_rls, (Rational, Rls {#calc = 0, #rules = 1, ...))--87
   12.32 -(add_new_c, (Integrate, Seq {#calc = 0, #rules = 1, ...))--30
   12.33 -(ansatz_rls, (Partial_Fractions, Rls {#calc = 0, #rules = 2, ...))--4
   12.34 -(calc_add_mult_pow_, (Poly, Rls {#calc = 3, #rules = 3, ...))--99
   12.35 -(calc_rat_erls, (Rational, Rls {#calc = 2, #rules = 4, ...))--91
   12.36 -(calculate_Rational, (Rational, Rls {#calc = 1, #rules = 15, ...))--92
   12.37 -
   12.38 -(calculate_RootRat, (RootRat, Rls {#calc = 2, #rules = 19, ...))--51
   12.39 -(cancel_leading_coeff, (PolyEq, Rls {#calc = 0, #rules = 13, ...))--48
   12.40 -(cancel_p, (Rational, Rrls {...}))--89
   12.41 -(cancel_p_rls, (Rational, Rls {#calc = 0, #rules = 1, ...))--75
   12.42 ------RULESET: (collect_bdv, (PolyEq, Rls {#calc = 0, #rules = 18, ...))--35
   12.43 -(collect_numerals, (Poly, Rls {#calc = 3, #rules = 7, ...))--110
   12.44 -(collect_numerals_, (Poly, Rls {#calc = 1, #rules = 7, ...))--109
   12.45 -(complete_square, (PolyEq, Rls {#calc = 0, #rules = 5, ...))--47
   12.46 -(d0_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 2, ...))--44
   12.47 -(d1_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 3, ...))--43
   12.48 -
   12.49 -(d2_polyeq_abcFormula_simplify, (PolyEq, Rls {#calc = 0, #rules = 18, ...))--38
   12.50 -(d2_polyeq_bdv_only_simplify, (PolyEq, Rls {#calc = 0, #rules = 10, ...))--41
   12.51 -(d2_polyeq_pqFormula_simplify, (PolyEq, Rls {#calc = 0, #rules = 18, ...))--39
   12.52 -(d2_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 24, ...))--42
   12.53 -(d2_polyeq_sq_only_simplify, (PolyEq, Rls {#calc = 0, #rules = 6, ...))--40
   12.54 -(d3_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 21, ...))--37
   12.55 -(d4_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 1, ...))--36
   12.56 -(diff_conv, (Diff, Rls {#calc = 1, #rules = 10, ...))--33
   12.57 -(diff_rules, (Diff, Rls {#calc = 0, #rules = 17, ...))--35
   12.58 -(diff_sym_conv, (Diff, Rls {#calc = 1, #rules = 8, ...))--32
   12.59 -
   12.60 -(discard_minus, (Poly, Rls {#calc = 0, #rules = 2, ...))--103
   12.61 -(discard_parentheses, (Poly, Rls {#calc = 0, #rules = 2, ...))--107
   12.62 -(discard_parentheses1, (Poly, Rls {#calc = 0, #rules = 1, ...))--96
   12.63 -(e_rls, (KEStore (*Tools*), Rls {#calc = 0, #rules = 0, ...))--119
   12.64 -(e_rrls, (KEStore (*Tools*), Rrls {...}))--118
   12.65 -(equival_trans, (Partial_Fractions, Rls {#calc = 0, #rules = 2, ...))--2
   12.66 -(eval_rls, (DiffApp, Rls {#calc = 6, #rules = 17, ...))--5
   12.67 -(expand, (Poly, Rls {#calc = 0, #rules = 2, ...))--114
   12.68 -(expand_binoms, (Poly, Rls {#calc = 3, #rules = 29, ...))--105
   12.69 -(expand_binomtest, (Test, Rls {#calc = 3, #rules = 29, ...))--6
   12.70 -
   12.71 -(expand_poly, (Poly, Rls {#calc = 0, #rules = 9, ...))--113
   12.72 -(expand_poly_, (Poly, Rls {#calc = 0, #rules = 8, ...))--102
   12.73 -(expand_poly_rat_, (Poly, Rls {#calc = 0, #rules = 10, ...))--101
   12.74 -(expand_rootbinoms, (Root, Rls {#calc = 6, #rules = 33, ...))--62
   12.75 -(fasse_zusammen, (PolyMinus, Rls {#calc = 2, #rules = 24, ...))--73
   12.76 -(integration, (Integrate, Seq {#calc = 0, #rules = 3, ...))--28
   12.77 -(integration_rules, (Integrate, Rls {#calc = 1, #rules = 6, ...))--31
   12.78 -(inverse_z, (Inverse_Z_Transform, Rls {#calc = 0, #rules = 1, ...))--1
   12.79 -(isolate_bdv, (Test, Rls {#calc = 0, #rules = 6, ...))--12
   12.80 -(isolate_bdvs, (EqSystem, Rls {#calc = 0, #rules = 3, ...))--22
   12.81 -
   12.82 -(isolate_bdvs_4x4, (EqSystem, Rls {#calc = 0, #rules = 5, ...))--21
   12.83 -(isolate_root, (Test, Rls {#calc = 0, #rules = 6, ...))--13
   12.84 -(klammern_aufloesen, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))--70
   12.85 -(klammern_ausmultiplizieren, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))--69
   12.86 -(l_sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 16, ...))--58
   12.87 -(list_rls, (ListC (*DiffApp*), Rls {#calc = 0, #rules = 41, ...))--117
   12.88 -(make_polynomial, (Poly, Seq {#calc = 1, #rules = 11, ...))--106
   12.89 ------RULESET: (make_polynomial_in, (PolyEq, Seq {#calc = 0, #rules = 8, ...))--34
   12.90 -(make_polytest, (Test, Rls {#calc = 3, #rules = 25, ...))--7
   12.91 -(make_rat_poly_with_parentheses, (Poly, Seq {#calc = 1, #rules = 10, ...))--93
   12.92 -
   12.93 ------RULESET: (make_ratpoly_in, (PolyEq, Seq {#calc = 0, #rules = 5, ...))--33
   12.94 -(make_rooteq, (Root, Rls {#calc = 3, #rules = 25, ...))--63
   12.95 -(matches, (Test, Rls {#calc = 8, #rules = 20, ...))--11
   12.96 -(multiply_ansatz, (Partial_Fractions, Rls {#calc = 0, #rules = 1, ...))--3
   12.97 -(norm_Poly, (Poly, Seq {#calc = 1, #rules = 11, ...))--116
   12.98 -(norm_Rational, (Rational, Seq {#calc = 0, #rules = 6, ...))--80
   12.99 -(norm_Rational_noadd_fractions, (Integrate, Seq {#calc = 0, #rules = 6, ...))--26
  12.100 -(norm_Rational_parenthesized, (Rational, Seq {#calc = 0, #rules = 2, ...))--78
  12.101 -(norm_Rational_rls, (Rational, Rls {#calc = 0, #rules = 5, ...))--79
  12.102 -(norm_Rational_rls_noadd_fractions, (Integrate, Rls {#calc = 0, #rules = 4, ...))--25
  12.103 -
  12.104 -(norm_System, (EqSystem, Rls {#calc = 0, #rules = 9, ...))--17
  12.105 -(norm_System_noadd_fractions, (EqSystem, Rls {#calc = 0, #rules = 8, ...))--18
  12.106 -(norm_diff, (Diff, Rls {#calc = 0, #rules = 2, ...))--34
  12.107 -(norm_equation, (Test, Rls {#calc = 0, #rules = 1, ...))--10
  12.108 -(norm_rat_erls, (Rational, Rls {#calc = 1, #rules = 1, ...))--81
  12.109 -(order_add_mult, (Poly, Rls {#calc = 0, #rules = 6, ...))--111
  12.110 -(order_add_mult_System, (EqSystem, Rls {#calc = 0, #rules = 6, ...))--19
  12.111 ------RULESET: (order_add_mult_in, (PolyEq, Rls {#calc = 0, #rules = 6, ...))--36
  12.112 -(order_add_rls_, (Poly, Rls {#calc = 0, #rules = 1, ...))--94
  12.113 -(order_mult_rls_, (Poly, Rls {#calc = 0, #rules = 1, ...))--95
  12.114 -
  12.115 -(order_system, (EqSystem, Rls {#calc = 0, #rules = 1, ...))--20
  12.116 -(ordne_alphabetisch, (PolyMinus, Rls {#calc = 0, #rules = 8, ...))--74
  12.117 -(ordne_monome, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))--71
  12.118 -(polyeq_simplify, (PolyEq, Rls {#calc = 6, #rules = 12, ...))--45
  12.119 -(powers, (Rational, Rls {#calc = 1, #rules = 11, ...))--85
  12.120 -(powers_erls, (Rational, Rls {#calc = 4, #rules = 6, ...))--86
  12.121 -(r_sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 16, ...))--57
  12.122 -(rat_mult_div_pow, (Rational, Rls {#calc = 1, #rules = 8, ...))--76
  12.123 -(rat_mult_divide, (Rational, Rls {#calc = 1, #rules = 6, ...))--84
  12.124 -(rat_mult_poly, (Rational, Rls {#calc = 0, #rules = 2, ...))--77
  12.125 -
  12.126 -(rat_reduce_1, (Rational, Rls {#calc = 0, #rules = 2, ...))--82
  12.127 -(rateq_erls, (RatEq, Rls {#calc = 1, #rules = 41, ...))--55
  12.128 -(rational_erls, (Rational, Rls {#calc = 1, #rules = 35, ...))--90
  12.129 -(rearrange_assoc, (Test, Rls {#calc = 0, #rules = 2, ...))--8
  12.130 -(reduce_012, (Poly, Rls {#calc = 0, #rules = 7, ...))--108
  12.131 -(reduce_012_, (Poly, Rls {#calc = 0, #rules = 6, ...))--97
  12.132 -(reduce_012_mult_, (Poly, Rls {#calc = 0, #rules = 4, ...))--98
  12.133 -(reduce_0_1_2, (Rational, Rls {#calc = 0, #rules = 6, ...))--83
  12.134 -(rev_rew_p, (Poly, Seq {#calc = 3, #rules = 25, ...))--104
  12.135 -(rooteq_simplify, (RootEq, Rls {#calc = 6, #rules = 15, ...))--56
  12.136 -
  12.137 -(rooteq_srls, (RootEq, Rls {#calc = 0, #rules = 3, ...))--60
  12.138 -(rootrat_erls, (RootRat, Rls {#calc = 14, #rules = 41, ...))--52
  12.139 -(rootrat_solve, (RootRatEq, Rls {#calc = 0, #rules = 4, ...))--49
  12.140 -(separate_bdv2, (Integrate, Rls {#calc = 0, #rules = 22, ...))--27
  12.141 ------RULESET: (separate_bdvs, (PolyEq, Rls {#calc = 0, #rules = 23, ...))--32
  12.142 -(simplify_Integral, (Integrate, Seq {#calc = 1, #rules = 7, ...))--29
  12.143 -(simplify_System, (EqSystem, Seq {#calc = 1, #rules = 6, ...))--23
  12.144 -(simplify_System_parenthesized, (EqSystem, Seq {#calc = 1, #rules = 8, ...))--24
  12.145 -(simplify_power, (Poly, Rls {#calc = 0, #rules = 7, ...))--112
  12.146 -(simplify_power_, (Poly, Rls {#calc = 0, #rules = 8, ...))--100
  12.147 -
  12.148 -(sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 32, ...))--59
  12.149 -(testerls, (Test, Rls {#calc = 8, #rules = 19, ...))--16
  12.150 -(tval_rls, (Test, Rls {#calc = 11, #rules = 27, ...))--14
  12.151 -(univariate_equation_prls, (Equation, Rls {#calc = 1, #rules = 1, ...))--68
  12.152 -(verschoenere, (PolyMinus, Rls {#calc = 1, #rules = 10, ...))--72
  12.153 -======= end KEStore_Elems.get_rlss @{theory} =======
    13.1 --- a/doc-isac/mlehnfeld/master/ordered-calclist.Unsynchronized	Thu Jun 26 17:19:30 2014 +0200
    13.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.3 @@ -1,43 +0,0 @@
    13.4 -(DIVIDE, (Fields.inverse_class.divide, fn))--26 
    13.5 -(MINUS, (Groups.minus_class.minus, fn))--28 
    13.6 -(PLUS, (Groups.plus_class.plus, fn))--29 
    13.7 -(POWER, (Atools.pow, fn))--25 
    13.8 -(SQRT, (NthRoot.sqrt, fn))--16 
    13.9 -(TIMES, (Groups.times_class.times, fn))--27 
   13.10 -(Test.precond'_rootmet, (Test.precond'_rootmet, fn))--3 
   13.11 -(Test.precond'_rootpbl, (Test.precond'_rootpbl, fn))--2 
   13.12 -(Vars, (Tools.Vars, fn))--41 
   13.13 -(add_new_c, (Integrate.add'_new'_c, fn))--7 
   13.14 -(boollist2sum, (Atools.boollist2sum, fn))--24 
   13.15 -(contains_root, (Test.contains'_root, fn))--4 
   13.16 -(drop_questionmarks, (Partial_Fractions.drop'_questionmarks, fn))--9 
   13.17 -(equal, (HOL.eq, fn))--30 
   13.18 -(has_degree_in, (Poly.has'_degree'_in, fn))--20 
   13.19 -(ident, (Atools.ident, fn))--31 
   13.20 -(is_addUnordered, (Poly.is'_addUnordered, fn))--17 
   13.21 -(is_atom, (Atools.is'_atom, fn))--36 
   13.22 -(is_const, (Atools.is'_const, fn))--34 
   13.23 -(is_even, (Atools.is'_even, fn))--35 
   13.24 -(is_expanded, (Rational.is'_expanded, fn))--15 
   13.25 -(is_expanded_in, (Poly.is'_expanded'_in, fn))--22 
   13.26 -(is_f_x, (Integrate.is'_f'_x, fn))--6 
   13.27 -(is_multUnordered, (Poly.is'_multUnordered, fn))--18 
   13.28 -(is_normSqrtTerm_in, (RootEq.is_normSqrtTerm_in, fn))--12 
   13.29 -(is_poly_in, (Poly.is'_poly'_in, fn))--21 
   13.30 -(is_polyexp, (Poly.is'_polyexp, fn))--19 
   13.31 -(is_polyrat_in, (Poly.is'_polyrat'_in, fn))--23 
   13.32 -(is_ratequation_in, (RatEq.is_ratequation_in, fn))--11 
   13.33 -(is_rootRatAddTerm_in, (RootRatEq.is_rootRatAddTerm_in, fn))--10 
   13.34 -(is_rootTerm_in, (RootEq.is'_rootTerm'_in, fn))--14 
   13.35 -(is_root_free, (Test.is'_root'_free, fn))--5 
   13.36 -(is_sqrtTerm_in, (RootEq.is'_sqrtTerm'_in, fn))--13 
   13.37 -(le, (Orderings.ord_class.less, fn))--33 
   13.38 -(leq, (Orderings.ord_class.less_eq, fn))--32 
   13.39 -(lhs, (Tools.lhs, fn))--40 
   13.40 -(matches, (Tools.matches, fn))--43 
   13.41 -(matchsub, (Tools.matchsub, fn))--42 
   13.42 -(occur_exactly_in, (EqSystem.occur'_exactly'_in, fn))--1 
   13.43 -(occurs_in, (Atools.occurs'_in, fn))--38 
   13.44 -(primed, (Diff.primed, fn))--8 
   13.45 -(rhs, (Tools.rhs, fn))--39 
   13.46 -(some_occur_in, (Atools.some'_occur'_in, fn))--37
   13.47 \ No newline at end of file
    14.1 --- a/doc-isac/mlehnfeld/master/ordered-castab.Unsynchronized	Thu Jun 26 17:19:30 2014 +0200
    14.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.3 @@ -1,6 +0,0 @@
    14.4 -(Diff.Diff, ("Isac", ["derivative_of","function"], ["no_met"]))--2 
    14.5 -(Diff.Differentiate, ("Isac", ["named","derivative_of","function"], ["no_met"]))--1 
    14.6 -(Equation.solve, ("Isac", ["univariate","equation"], ["no_met"]))--3 
    14.7 -(Equation.solveTest, ("Test", ["univariate","equation","test"], ["no_met"]))--4 
    14.8 -(Simplify.Simplify, ("Isac", ["simplification"], ["no_met"]))--6 
    14.9 -(Simplify.Vereinfache, ("Isac", ["vereinfachen"], ["no_met"]))--5 
   14.10 \ No newline at end of file
    15.1 --- a/doc-isac/mlehnfeld/master/ordered-mets.Unsynchronized	Thu Jun 26 17:19:30 2014 +0200
    15.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.3 @@ -1,102 +0,0 @@
    15.4 -Ptyp ("Berechnung", ["met_algein"], [
    15.5 -Ptyp ("erstNumerisch", ["met_algein_numsym"], []),
    15.6 -Ptyp ("erstSymbolisch", ["met_algein_symnum"], [])])--1 
    15.7 -
    15.8 -Ptyp ("Biegelinien", ["met_biege2"], [
    15.9 -Ptyp ("ausBelastung", ["met_biege_ausbelast"], []),
   15.10 -Ptyp ("setzeRandbedingungenEin", ["met_biege_setzrand"], [])])--2 
   15.11 -
   15.12 -Ptyp ("DiffApp", ["met_diffapp"], [
   15.13 -Ptyp ("find_values", ["met_diffapp_findvals"], []),
   15.14 -Ptyp ("make_fun_by_explicit", ["met_diffapp_funexp"], []),
   15.15 -Ptyp ("make_fun_by_new_variable", ["met_diffapp_funnew"], []),
   15.16 -Ptyp ("max_by_calculus", ["met_diffapp_max"], []),
   15.17 -Ptyp ("max_on_interval_by_calculus", ["met_diffapp_max_oninterval"], [])])--3 
   15.18 -
   15.19 -Ptyp ("EqSystem", ["met_eqsys"], [
   15.20 -Ptyp ("normalize", ["met_eqsys_norm"], [
   15.21 -Ptyp ("2x2", ["met_eqsys_norm_2x2"], []),
   15.22 -Ptyp ("4x4", ["met_eqsys_norm_4x4"], [])]),
   15.23 -Ptyp ("top_down_substitution", ["met_eqsys_topdown"], [
   15.24 -Ptyp ("2x2", ["met_eqsys_topdown_2x2"], []),
   15.25 -Ptyp ("4x4", ["met_eqsys_topdown_4x4"], [])])])--4 
   15.26 -
   15.27 -Ptyp ("Equation", ["met_equ"], [
   15.28 -Ptyp ("fromFunction", ["met_equ_fromfun"], []),
   15.29 -Ptyp ("solve_log", ["met_equ_log"], [])])--5 
   15.30 -
   15.31 -Ptyp ("IntegrierenUndKonstanteBestimmen", ["met_biege"], [
   15.32 -Ptyp ("1xIntegrieren", ["met_biege_intconst_1"], []),
   15.33 -Ptyp ("2xIntegrieren", ["met_biege_intconst_2"], []),
   15.34 -Ptyp ("4x4System", ["met_biege_intconst_4"], [])])--6 
   15.35 -
   15.36 -Ptyp ("IntegrierenUndKonstanteBestimmen2", ["met_biege_2"], [])--7 
   15.37 -
   15.38 -Ptyp ("LinEq", ["met_eqlin"], [
   15.39 -Ptyp ("solve_lineq_equation", ["met_eq_lin"], [])])--8 
   15.40 -
   15.41 -Ptyp ("PolyEq", ["met_polyeq"], [
   15.42 -Ptyp ("complete_square", ["met_polyeq_complsq"], []),
   15.43 -Ptyp ("normalize_poly", ["met_polyeq_norm"], []),
   15.44 -Ptyp ("solve_d0_polyeq_equation", ["met_polyeq_d0"], []),
   15.45 -Ptyp ("solve_d1_polyeq_equation", ["met_polyeq_d1"], []),
   15.46 -Ptyp ("solve_d2_polyeq_abc_equation", ["met_polyeq_d2_abc"], []),
   15.47 -Ptyp ("solve_d2_polyeq_bdvonly_equation", ["met_polyeq_d2_bdvonly"], []),
   15.48 -Ptyp ("solve_d2_polyeq_equation", ["met_polyeq_d22"], []),
   15.49 -Ptyp ("solve_d2_polyeq_pq_equation", ["met_polyeq_d2_pq"], []),
   15.50 -Ptyp ("solve_d2_polyeq_sqonly_equation", ["met_polyeq_d2_sqonly"], []),
   15.51 -Ptyp ("solve_d3_polyeq_equation", ["met_polyeq_d3"], [])])--9 
   15.52 -
   15.53 -Ptyp ("RatEq", ["met_rateq"], [
   15.54 -Ptyp ("solve_rat_equation", ["met_rat_eq"], [])])--10 
   15.55 -
   15.56 -Ptyp ("RootEq", ["met_rooteq"], [
   15.57 -Ptyp ("norm_sq_root_equation", ["met_rooteq_norm"], []),
   15.58 -Ptyp ("solve_left_sq_root_equation", ["met_rooteq_sq_left"], []),
   15.59 -Ptyp ("solve_right_sq_root_equation", ["met_rooteq_sq_right"], []),
   15.60 -Ptyp ("solve_sq_root_equation", ["met_rooteq_sq"], [])])--11 
   15.61 -
   15.62 -Ptyp ("RootRatEq", ["met_rootrateq"], [
   15.63 -Ptyp ("elim_rootrat_equation", ["met_rootrateq_elim"], [])])--12 
   15.64 -
   15.65 -Ptyp ("SignalProcessing", ["met_SP"], [
   15.66 -Ptyp ("Z_Transform", ["met_SP_Ztrans"], [
   15.67 -Ptyp ("Inverse", ["met_SP_Ztrans_inv"], []),
   15.68 -Ptyp ("Inverse_sub", ["met_SP_Ztrans_inv_sub"], [])])])--13 
   15.69 -
   15.70 -Ptyp ("Test", ["met_test"], [
   15.71 -Ptyp ("intsimp", ["met_test_intsimp"], []),
   15.72 -Ptyp ("norm_univar_equation", ["met_test_norm_univ"], []),
   15.73 -Ptyp ("solve_diophant", ["met_test_diophant"], []),
   15.74 -Ptyp ("solve_linear", ["met_test_solvelin"], []),
   15.75 -Ptyp ("solve_plain_square", ["met_test_eq_plain"], []),
   15.76 -Ptyp ("sqrt-equ-test", ["met_test_sqrt"], []),
   15.77 -Ptyp ("squ-equ-test-subpbl1", ["met_test_squ_sub"], []),
   15.78 -Ptyp ("squ-equ-test-subpbl2", ["met_test_squ_sub2"], []),
   15.79 -Ptyp ("squ-equ-test2", ["met_test_sqrt2"], []),
   15.80 -Ptyp ("square_equation", ["met_test_squeq"], []),
   15.81 -Ptyp ("square_equation...notTerminating", ["met_test_squ_nonterm"], []),
   15.82 -Ptyp ("square_equation1", ["met_test_eq1"], []),
   15.83 -Ptyp ("square_equation2", ["met_test_squ2"], [])])--14 
   15.84 -
   15.85 -Ptyp ("diff", ["met_diff"], [
   15.86 -Ptyp ("after_simplification", ["met_diff_after_simp"], []),
   15.87 -Ptyp ("diff_simpl", ["met_diff_simpl"], []),
   15.88 -Ptyp ("differentiate_equality", ["met_diff_equ"], []),
   15.89 -Ptyp ("differentiate_on_R", ["met_diff_onR"], []),
   15.90 -Ptyp ("integration", ["met_diffint"], [
   15.91 -Ptyp ("named", ["met_diffint_named"], [])])])--15 
   15.92 -
   15.93 -Ptyp ("e_metID", ["met_empty"], [])--16 
   15.94 -
   15.95 -Ptyp ("probe", ["met_probe"], [
   15.96 -Ptyp ("fuer_bruch", ["met_probe_bruch"], []),
   15.97 -Ptyp ("fuer_polynom", ["met_probe_poly"], [])])--17 
   15.98 -
   15.99 -Ptyp ("simplification", ["met_tsimp"], [
  15.100 -Ptyp ("for_polynomials", ["met_simp_poly"], [
  15.101 -Ptyp ("with_minus", ["met_simp_poly_minus"], []),
  15.102 -Ptyp ("with_parentheses", ["met_simp_poly_parenth"], []),
  15.103 -Ptyp ("with_parentheses_mult", ["met_simp_poly_parenth_mult"], [])]),
  15.104 -Ptyp ("of_rationals", ["met_simp_rat"], [
  15.105 -Ptyp ("to_partial_fraction", ["met_partial_fraction"], [])])])--18
  15.106 \ No newline at end of file
    16.1 --- a/doc-isac/mlehnfeld/master/ordered-ptyps.Unsynchronized	Thu Jun 26 17:19:30 2014 +0200
    16.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.3 @@ -1,202 +0,0 @@
    16.4 -Ptyp ("Berechnung", [
    16.5 -{cas = NONE, guh = "pbl_algein", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {AlgEin}, where_ = []}], [
    16.6 -Ptyp ("numerischSymbolische", [
    16.7 -{cas = NONE, guh = "pbl_algein_numsym", init = ["e_pblID"], mathauthors = "[]", met = [["Berechnung","erstNumerisch"],["Berechnung","erstSymbolisch"]], ppc = ["(#Given, (KantenLaenge, k_k))","(#Given, (Querschnitt, q__q))","(#Given, (KantenUnten, u_u))","(#Given, (KantenSenkrecht, s_s))","(#Given, (KantenOben, o_o))","(#Find, (GesamtLaenge, l_l))"], prls = "e_rls", thy = {AlgEin}, where_ = []}], [])])--1 
    16.8 -
    16.9 -Ptyp ("Biegelinien", [
   16.10 -{cas = NONE, guh = "pbl_bieg", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen2"]], ppc = ["(#Given, (Traegerlaenge, l_l))","(#Given, (Streckenlast, q_q))","(#Find, (Biegelinie, b_b))","(#Relate, (Randbedingungen, r_b))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], [
   16.11 -Ptyp ("MomentBestimmte", [
   16.12 -{cas = NONE, guh = "pbl_bieg_mom", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen"]], ppc = ["(#Given, (Traegerlaenge, l_l))","(#Given, (Streckenlast, q_q))","(#Find, (Biegelinie, b_b))","(#Relate, (RandbedingungenBiegung, r_b))","(#Relate, (RandbedingungenMoment, r_m))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   16.13 -Ptyp ("MomentGegebene", [
   16.14 -{cas = NONE, guh = "pbl_bieg_momg", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen","2xIntegrieren"]], ppc = [], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   16.15 -Ptyp ("QuerkraftUndMomentBestimmte", [
   16.16 -{cas = NONE, guh = "pbl_bieg_momquer", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen","1xIntegrieren"]], ppc = [], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   16.17 -Ptyp ("einfache", [
   16.18 -{cas = NONE, guh = "pbl_bieg_einf", init = ["e_pblID"], mathauthors = "[]", met = [["IntegrierenUndKonstanteBestimmen","4x4System"]], ppc = [], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   16.19 -Ptyp ("setzeRandbedingungen", [
   16.20 -{cas = NONE, guh = "pbl_bieg_randbed", init = ["e_pblID"], mathauthors = "[]", met = [["Biegelinien","setzeRandbedingungenEin"]], ppc = ["(#Given, (Funktionen, fun_s))","(#Given, (Randbedingungen, r_b))","(#Find, (Gleichungen, equs'''))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   16.21 -Ptyp ("vonBelastungZu", [
   16.22 -{cas = NONE, guh = "pbl_bieg_vonq", init = ["e_pblID"], mathauthors = "[]", met = [["Biegelinien","ausBelastung"]], ppc = ["(#Given, (Streckenlast, q_q))","(#Given, (FunktionsVariable, v_v))","(#Find, (Funktionen, funs'''))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], [])])--2 
   16.23 -
   16.24 -Ptyp ("SignalProcessing", [
   16.25 -{cas = NONE, guh = "pbl_SP", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Inverse_Z_Transform}, where_ = []}], [
   16.26 -Ptyp ("Z_Transform", [
   16.27 -{cas = NONE, guh = "pbl_SP_Ztrans", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Inverse_Z_Transform}, where_ = []}], [
   16.28 -Ptyp ("Inverse", [
   16.29 -{cas = NONE, guh = "pbl_SP_Ztrans_inv", init = ["e_pblID"], mathauthors = "[]", met = [["SignalProcessing","Z_Transform","Inverse"]], ppc = ["(#Given, (filterExpression, X_eq))","(#Find, (stepResponse, n_eq))"], prls = "e_rls", thy = {Inverse_Z_Transform}, where_ = []}], [])])])--3 
   16.30 -
   16.31 -Ptyp ("e_pblID", [
   16.32 -{cas = NONE, guh = "pbl_empty", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Pure}, where_ = []}], [])--4 
   16.33 -
   16.34 -Ptyp ("equation", [
   16.35 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "equation_prls", thy = {Equation}, where_ = ["matches (?a = ?b) e_e"]}], [
   16.36 -Ptyp ("diophantine", [
   16.37 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_dio", init = ["e_pblID"], mathauthors = "[]", met = [["LinEq","solve_lineq_equation"]], ppc = ["(#Given, (boolTestGiven, e_e))","(#Given, (intTestGiven, v_v))","(#Find, (boolTestFind, s_s))"], prls = "e_rls", thy = {DiophantEq}, where_ = []}], []),
   16.38 -Ptyp ("makeFunctionTo", [
   16.39 -{cas = NONE, guh = "pbl_equ_fromfun", init = ["e_pblID"], mathauthors = "[]", met = [["Equation","fromFunction"]], ppc = ["(#Given, (functionEq, fu_n))","(#Given, (substitution, su_b))","(#Find, (equality, equ'''))"], prls = "e_rls", thy = {Biegelinie}, where_ = []}], []),
   16.40 -Ptyp ("univariate", [
   16.41 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "univariate_equation_prls", thy = {Equation}, where_ = ["matches (?a = ?b) e_e"]}], [
   16.42 -Ptyp ("LINEAR", [
   16.43 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_lin", init = ["e_pblID"], mathauthors = "[]", met = [["LinEq","solve_lineq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "LinEq_prls", thy = {LinEq}, where_ = ["False","~ lhs e_e is_polyrat_in v_v","~ rhs e_e is_polyrat_in v_v","lhs e_e has_degree_in v_v = 1","rhs e_e has_degree_in v_v = 1"]}], []),
   16.44 -Ptyp ("expanded", [
   16.45 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_expand", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_expanded_in v_v"]}], [
   16.46 -Ptyp ("degree_2", [
   16.47 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_expand_deg2", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","complete_square"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["lhs e_e has_degree_in v_v = 2"]}], [])]),
   16.48 -Ptyp ("logarithmic", [
   16.49 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_equ_univ_log", init = ["e_pblID"], mathauthors = "[]", met = [["Equation","solve_log"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {LogExp}, where_ = ["matches (?a log ?v_v = ?b) e_e"]}], []),
   16.50 -Ptyp ("polynomial", [
   16.51 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["~ e_e is_ratequation_in v_v","~ lhs e_e is_rootTerm_in v_v","~ rhs e_e is_rootTerm_in v_v"]}], [
   16.52 -Ptyp ("degree_0", [
   16.53 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg0", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d0_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 0"]}], []),
   16.54 -Ptyp ("degree_1", [
   16.55 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg1", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d1_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 1"]}], []),
   16.56 -Ptyp ("degree_2", [
   16.57 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 2"]}], [
   16.58 -Ptyp ("abcFormula", [
   16.59 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_abc", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_abc_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a + ?v_ ^^^ 2 = 0) e_e | matches (?a + ?b * ?v_ ^^^ 2 = 0) e_e"]}], []),
   16.60 -Ptyp ("bdv_only", [
   16.61 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_bdvonly", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_bdvonly_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a * ?v_ + ?v_ ^^^ 2 = 0) e_e |
   16.62 -matches (?v_ + ?v_ ^^^ 2 = 0) e_e |
   16.63 -matches (?v_ + ?b * ?v_ ^^^ 2 = 0) e_e |
   16.64 -matches (?a * ?v_ + ?b * ?v_ ^^^ 2 = 0) e_e |
   16.65 -matches (?v_ ^^^ 2 = 0) e_e | matches (?b * ?v_ ^^^ 2 = 0) e_e"]}], []),
   16.66 -Ptyp ("pqFormula", [
   16.67 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_pq", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_pq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a + 1 * ?v_ ^^^ 2 = 0) e_e | matches (?a + ?v_ ^^^ 2 = 0) e_e"]}], []),
   16.68 -Ptyp ("sq_only", [
   16.69 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg2_sqonly", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d2_polyeq_sqonly_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a + ?v_ ^^^ 2 = 0) e_e |
   16.70 -matches (?a + ?b * ?v_ ^^^ 2 = 0) e_e |
   16.71 -matches (?v_ ^^^ 2 = 0) e_e | matches (?b * ?v_ ^^^ 2 = 0) e_e","~ matches (?a + ?v_ + ?v_ ^^^ 2 = 0) e_e &
   16.72 -~ matches (?a + ?b * ?v_ + ?v_ ^^^ 2 = 0) e_e &
   16.73 -~ matches (?a + ?v_ + ?c * ?v_ ^^^ 2 = 0) e_e &
   16.74 -~ matches (?a + ?b * ?v_ + ?c * ?v_ ^^^ 2 = 0) e_e &
   16.75 -~ matches (?v_ + ?v_ ^^^ 2 = 0) e_e &
   16.76 -~ matches (?b * ?v_ + ?v_ ^^^ 2 = 0) e_e &
   16.77 -~ matches (?v_ + ?c * ?v_ ^^^ 2 = 0) e_e &
   16.78 -~ matches (?b * ?v_ + ?c * ?v_ ^^^ 2 = 0) e_e"]}], [])]),
   16.79 -Ptyp ("degree_3", [
   16.80 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg3", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","solve_d3_polyeq_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 3"]}], []),
   16.81 -Ptyp ("degree_4", [
   16.82 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_deg4", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["matches (?a = 0) e_e","lhs e_e is_poly_in v_v","lhs e_e has_degree_in v_v = 4"]}], []),
   16.83 -Ptyp ("normalize", [
   16.84 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_poly_norm", init = ["e_pblID"], mathauthors = "[]", met = [["PolyEq","normalize_poly"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "PolyEq_prls", thy = {PolyEq}, where_ = ["~ matches (?a = 0) e_e | ~ lhs e_e is_poly_in v_v"]}], [])]),
   16.85 -Ptyp ("rational", [
   16.86 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_rat", init = ["e_pblID"], mathauthors = "[]", met = [["RatEq","solve_rat_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RatEq_prls", thy = {RatEq}, where_ = ["e_e is_ratequation_in v_v"]}], []),
   16.87 -Ptyp ("root'", [
   16.88 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootEq_prls", thy = {RootEq}, where_ = ["lhs e_e is_rootTerm_in v_v | rhs e_e is_rootTerm_in v_v"]}], [
   16.89 -Ptyp ("normalize", [
   16.90 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root_norm", init = ["e_pblID"], mathauthors = "[]", met = [["RootEq","norm_sq_root_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootEq_prls", thy = {RootEq}, where_ = ["lhs e_e is_sqrtTerm_in v_v & ~ lhs e_e is_normSqrtTerm_in v_v |
   16.91 -rhs e_e is_sqrtTerm_in v_v & ~ rhs e_e is_normSqrtTerm_in v_v"]}], []),
   16.92 -Ptyp ("sq", [
   16.93 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root_sq", init = ["e_pblID"], mathauthors = "[]", met = [["RootEq","solve_sq_root_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootEq_prls", thy = {RootEq}, where_ = ["lhs e_e is_sqrtTerm_in v_v & lhs e_e is_normSqrtTerm_in v_v |
   16.94 -rhs e_e is_sqrtTerm_in v_v & rhs e_e is_normSqrtTerm_in v_v"]}], [
   16.95 -Ptyp ("rat", [
   16.96 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_equ_univ_root_sq_rat", init = ["e_pblID"], mathauthors = "[]", met = [["RootRatEq","elim_rootrat_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "RootRatEq_prls", thy = {RootRatEq}, where_ = ["lhs e_e is_rootRatAddTerm_in v_v | rhs e_e is_rootRatAddTerm_in v_v"]}], [])])])])])--5 
   16.97 -
   16.98 -Ptyp ("function", [
   16.99 -{cas = NONE, guh = "pbl_fun", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Diff}, where_ = []}], [
  16.100 -Ptyp ("derivative_of", [
  16.101 -{cas = (SOME Diff (f_f, v_v)), guh = "pbl_fun_deriv", init = ["e_pblID"], mathauthors = "[]", met = [["diff","differentiate_on_R"],["diff","after_simplification"]], ppc = ["(#Given, (functionTerm, f_f))","(#Given, (differentiateFor, v_v))","(#Find, (derivative, f_f'))"], prls = "e_rls", thy = {Diff}, where_ = []}], [
  16.102 -Ptyp ("named", [
  16.103 -{cas = (SOME Differentiate (f_f, v_v)), guh = "pbl_fun_deriv_nam", init = ["e_pblID"], mathauthors = "[]", met = [["diff","differentiate_equality"]], ppc = ["(#Given, (functionEq, f_f))","(#Given, (differentiateFor, v_v))","(#Find, (derivativeEq, f_f'))"], prls = "e_rls", thy = {Diff}, where_ = []}], [])]),
  16.104 -Ptyp ("integrate", [
  16.105 -{cas = (SOME Integrate (f_f, v_v)), guh = "pbl_fun_integ", init = ["e_pblID"], mathauthors = "[]", met = [["diff","integration"]], ppc = ["(#Given, (functionTerm, f_f))","(#Given, (integrateBy, v_v))","(#Find, (Integrate.antiDerivative, F_F))"], prls = "e_rls", thy = {Integrate}, where_ = []}], [
  16.106 -Ptyp ("named", [
  16.107 -{cas = (SOME Integrate (f_f, v_v)), guh = "pbl_fun_integ_nam", init = ["e_pblID"], mathauthors = "[]", met = [["diff","integration","named"]], ppc = ["(#Given, (functionTerm, f_f))","(#Given, (integrateBy, v_v))","(#Find, (antiDerivativeName, F_F))"], prls = "e_rls", thy = {Integrate}, where_ = []}], [])]),
  16.108 -Ptyp ("make", [
  16.109 -{cas = NONE, guh = "pbl_fun_make", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (functionOf, f_f))","(#Given, (boundVariable, v_v))","(#Given, (equalities, eqs))","(#Find, (functionEq, f_1))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [
  16.110 -Ptyp ("by_explicit", [
  16.111 -{cas = NONE, guh = "pbl_fun_max_expl", init = ["e_pblID"], mathauthors = "[]", met = [["DiffApp","make_fun_by_explicit"]], ppc = ["(#Given, (functionOf, f_f))","(#Given, (boundVariable, v_v))","(#Given, (equalities, eqs))","(#Find, (functionEq, f_1))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], []),
  16.112 -Ptyp ("by_new_variable", [
  16.113 -{cas = NONE, guh = "pbl_fun_max_newvar", init = ["e_pblID"], mathauthors = "[]", met = [["DiffApp","make_fun_by_new_variable"]], ppc = ["(#Given, (functionOf, f_f))","(#Given, (boundVariable, v_v))","(#Given, (equalities, eqs))","(#Find, (functionEq, f_1))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [])]),
  16.114 -Ptyp ("maximum_of", [
  16.115 -{cas = NONE, guh = "pbl_fun_max", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (fixedValues, f_ix))","(#Find, (maximum, m_m))","(#Find, (valuesFor, v_s))","(#Relate, (relations, r_s))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [
  16.116 -Ptyp ("on_interval", [
  16.117 -{cas = NONE, guh = "pbl_fun_max_interv", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (functionEq, t_t))","(#Given, (boundVariable, v_v))","(#Given, (interval, i_tv))","(#Find, (maxArgument, v_0))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [])])])--6 
  16.118 -
  16.119 -Ptyp ("probe", [
  16.120 -{cas = NONE, guh = "pbl_probe", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {PolyMinus}, where_ = []}], [
  16.121 -Ptyp ("bruch", [
  16.122 -{cas = (SOME Probe e_e w_w), guh = "pbl_probe_bruch", init = ["e_pblID"], mathauthors = "[]", met = [["probe","fuer_bruch"]], ppc = ["(#Given, (Pruefe, e_e))","(#Given, (mitWert, w_w))","(#Find, (Geprueft, p_p))"], prls = "prls_pbl_probe_bruch", thy = {PolyMinus}, where_ = ["e_e is_ratpolyexp"]}], []),
  16.123 -Ptyp ("polynom", [
  16.124 -{cas = (SOME Probe e_e w_w), guh = "pbl_probe_poly", init = ["e_pblID"], mathauthors = "[]", met = [["probe","fuer_polynom"]], ppc = ["(#Given, (Pruefe, e_e))","(#Given, (mitWert, w_w))","(#Find, (Geprueft, p_p))"], prls = "prls_pbl_probe_poly", thy = {PolyMinus}, where_ = ["e_e is_polyexp"]}], [])])--7 
  16.125 -
  16.126 -Ptyp ("simplification", [
  16.127 -{cas = (SOME Simplify t_t), guh = "pbl_simp", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Simplify}, where_ = []}], [
  16.128 -Ptyp ("polynomial", [
  16.129 -{cas = (SOME Simplify t_t), guh = "pbl_simp_poly", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Poly}, where_ = ["t_t is_polyexp"]}], []),
  16.130 -Ptyp ("rational", [
  16.131 -{cas = (SOME Simplify t_t), guh = "pbl_simp_rat", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","of_rationals"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Rational}, where_ = ["t_t is_ratpolyexp"]}], [
  16.132 -Ptyp ("partial_fraction", [
  16.133 -{cas = NONE, guh = "pbl_simp_rat_partfrac", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","of_rationals","to_partial_fraction"]], ppc = ["(#Given, (functionTerm, t_t))","(#Given, (solveFor, v_v))","(#Find, (decomposedFunction, p_p'''))"], prls = "e_rls", thy = {Partial_Fractions}, where_ = []}], [])])])--8 
  16.134 -
  16.135 -Ptyp ("system", [
  16.136 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], [
  16.137 -Ptyp ("LINEAR", [
  16.138 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], [
  16.139 -Ptyp ("2x2", [
  16.140 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_2x2", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_2x2_linear_system", thy = {EqSystem}, where_ = ["LENGTH e_s = 2","LENGTH v_s = 2"]}], [
  16.141 -Ptyp ("normalize", [
  16.142 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_2x2_norm", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","normalize","2x2"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], []),
  16.143 -Ptyp ("triangular", [
  16.144 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_2x2_tri", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","top_down_substitution","2x2"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_triangular", thy = {EqSystem}, where_ = ["tl v_s from v_s occur_exactly_in NTH 1 e_s","v_s from v_s occur_exactly_in NTH 2 e_s"]}], [])]),
  16.145 -Ptyp ("3x3", [
  16.146 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_3x3", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_3x3_linear_system", thy = {EqSystem}, where_ = ["LENGTH e_s = 3","LENGTH v_s = 3"]}], []),
  16.147 -Ptyp ("4x4", [
  16.148 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_4x4", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_4x4_linear_system", thy = {EqSystem}, where_ = ["LENGTH e_s = 4","LENGTH v_s = 4"]}], [
  16.149 -Ptyp ("normalize", [
  16.150 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_4x4_norm", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","normalize","4x4"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "e_rls", thy = {EqSystem}, where_ = []}], []),
  16.151 -Ptyp ("triangular", [
  16.152 -{cas = (SOME solveSystem e_s v_s), guh = "pbl_equsys_lin_4x4_tri", init = ["e_pblID"], mathauthors = "[]", met = [["EqSystem","top_down_substitution","4x4"]], ppc = ["(#Given, (equalities, e_s))","(#Given, (solveForVars, v_s))","(#Find, (solution, ss'''))"], prls = "prls_tri_4x4_lin_sys", thy = {EqSystem}, where_ = ["NTH 1 v_s occurs_in NTH 1 e_s","NTH 2 v_s occurs_in NTH 2 e_s","NTH 3 v_s occurs_in NTH 3 e_s","NTH 4 v_s occurs_in NTH 4 e_s"]}], [])])])])--9 
  16.153 -
  16.154 -Ptyp ("test", [
  16.155 -{cas = NONE, guh = "pbl_test", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {Test}, where_ = []}], [
  16.156 -Ptyp ("equation", [
  16.157 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_equ", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (?a = ?b) e_e"]}], [
  16.158 -Ptyp ("univariate", [
  16.159 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (?a = ?b) e_e"]}], [
  16.160 -Ptyp ("LINEAR", [
  16.161 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_lin", init = ["e_pblID"], mathauthors = "[]", met = [["Test","solve_linear"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (v_v = 0) e_e |
  16.162 -matches (?b * v_v = 0) e_e |
  16.163 -matches (?a + v_v = 0) e_e | matches (?a + ?b * v_v = 0) e_e"]}], []),
  16.164 -Ptyp ("normalize", [
  16.165 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_norm", init = ["e_pblID"], mathauthors = "[]", met = [["Test","norm_univar_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], []),
  16.166 -Ptyp ("plain_square", [
  16.167 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_plain2", init = ["e_pblID"], mathauthors = "[]", met = [["Test","solve_plain_square"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "matches", thy = {Test}, where_ = ["matches (?a + ?b * v_v ^^^ 2 = 0) e_e |
  16.168 -matches (?b * v_v ^^^ 2 = 0) e_e |
  16.169 -matches (?a + v_v ^^^ 2 = 0) e_e | matches (v_v ^^^ 2 = 0) e_e"]}], []),
  16.170 -Ptyp ("polynomial", [
  16.171 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_poly", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, v_v ^^^ 2 + p_p * v_v + q__q = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = ["False"]}], [
  16.172 -Ptyp ("degree_two", [
  16.173 -{cas = (SOME solve (v_v ^^^ 2 + p_p * v_v + q__q = 0, v_v)), guh = "pbl_test_uni_poly_deg2", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, v_v ^^^ 2 + p_p * v_v + q__q = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], [
  16.174 -Ptyp ("abc_formula", [
  16.175 -{cas = (SOME solve (a_a * x ^^^ 2 + b_b * x + c_c = 0, v_v)), guh = "pbl_test_uni_poly_deg2_abc", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, a_a * x ^^^ 2 + b_b * x + c_c = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], []),
  16.176 -Ptyp ("pq_formula", [
  16.177 -{cas = (SOME solve (v_v ^^^ 2 + p_p * v_v + q__q = 0, v_v)), guh = "pbl_test_uni_poly_deg2_pq", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, v_v ^^^ 2 + p_p * v_v + q__q = 0))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = []}], [])])]),
  16.178 -Ptyp ("sqroot-test", [
  16.179 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_roottest", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "e_rls", thy = {Test}, where_ = ["precond_rootpbl v_v"]}], []),
  16.180 -Ptyp ("squareroot", [
  16.181 -{cas = (SOME solve (e_e, v_v)), guh = "pbl_test_uni_root", init = ["e_pblID"], mathauthors = "[]", met = [["Test","square_equation"]], ppc = ["(#Given, (equality, e_e))","(#Given, (solveFor, v_v))","(#Find, (solutions, v_v'i'))"], prls = "contains_root", thy = {Test}, where_ = ["precond_rootpbl v_v"]}], [])])]),
  16.182 -Ptyp ("inttype", [
  16.183 -{cas = NONE, guh = "pbl_test_intsimp", init = ["e_pblID"], mathauthors = "[]", met = [["Test","intsimp"]], ppc = ["(#Given, (intTestGiven, t_t))","(#Find, (intTestFind, s_s))"], prls = "e_rls", thy = {Test}, where_ = []}], [])])--10 
  16.184 -
  16.185 -Ptyp ("tool", [
  16.186 -{cas = NONE, guh = "pbl_tool", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {DiffApp}, where_ = []}], [
  16.187 -Ptyp ("find_values", [
  16.188 -{cas = NONE, guh = "pbl_tool_findvals", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (maxArgument, m_ax))","(#Given, (functionEq, f_f))","(#Given, (boundVariable, v_v))","(#Find, (valuesFor, v_ls))","(#Relate, (additionalRels, r_s))"], prls = "e_rls", thy = {DiffApp}, where_ = []}], [])])--11 
  16.189 -
  16.190 -Ptyp ("vereinfachen", [
  16.191 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinfache", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {Simplify}, where_ = []}], [
  16.192 -Ptyp ("polynom", [
  16.193 -{cas = NONE, guh = "pbl_vereinf_poly", init = ["e_pblID"], mathauthors = "[]", met = [], ppc = [], prls = "e_rls", thy = {PolyMinus}, where_ = []}], [
  16.194 -Ptyp ("binom_klammer", [
  16.195 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinf_poly_klammer_mal", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials","with_parentheses_mult"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "e_rls", thy = {PolyMinus}, where_ = ["t_t is_polyexp"]}], []),
  16.196 -Ptyp ("klammer", [
  16.197 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinf_poly_klammer", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials","with_parentheses"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "prls_pbl_vereinf_poly_klammer", thy = {PolyMinus}, where_ = ["t_t is_polyexp","~ (matchsub (?a * (?b + ?c)) t_t |
  16.198 -   matchsub (?a * (?b - ?c)) t_t |
  16.199 -   matchsub ((?b + ?c) * ?a) t_t | matchsub ((?b - ?c) * ?a) t_t)"]}], []),
  16.200 -Ptyp ("plus_minus", [
  16.201 -{cas = (SOME Vereinfache t_t), guh = "pbl_vereinf_poly_minus", init = ["e_pblID"], mathauthors = "[]", met = [["simplification","for_polynomials","with_minus"]], ppc = ["(#Given, (Term, t_t))","(#Find, (normalform, n_n))"], prls = "prls_pbl_vereinf_poly", thy = {PolyMinus}, where_ = ["t_t is_polyexp","~ (matchsub (?a + (?b + ?c)) t_t |
  16.202 -   matchsub (?a + (?b - ?c)) t_t |
  16.203 -   matchsub (?a - (?b + ?c)) t_t | matchsub (?a + (?b - ?c)) t_t)","~ (matchsub (?a * (?b + ?c)) t_t |
  16.204 -   matchsub (?a * (?b - ?c)) t_t |
  16.205 -   matchsub ((?b + ?c) * ?a) t_t | matchsub ((?b - ?c) * ?a) t_t)"]}], [])])])--12 
    17.1 --- a/doc-isac/mlehnfeld/master/ordered-ruleset.Unsynchronized	Thu Jun 26 17:19:30 2014 +0200
    17.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.3 @@ -1,150 +0,0 @@
    17.4 -WN130922 Build_Thydata.thy:
    17.5 -  writeln "======= ! ruleset' ordered =======";
    17.6 -  ! ruleset' |> rev (*!!!!!*) 
    17.7 -    |> map check_kestore_rls |> enumerate_strings |> sort string_ord |> map writeln;
    17.8 -  writeln "======= end ! ruleset' =======";
    17.9 ---------------------------------------------------------------------------------------
   17.10 -======= length (! ruleset')   = 123
   17.11 ---------------------------------------------------------------------------------------
   17.12 -Legend:
   17.13 -# (*a small difference to KEStore_Elems.get_rlss*)
   17.14 -# -----RULESET: an entry missing here in comparison to KEStore_Elems.get_rlss
   17.15 ---------------------------------------------------------------------------------------
   17.16 -======= ! ruleset' ordered =======
   17.17 -(LinEq_erls, (LinEq, Rls {#calc = 0, #rules = 26, ...))--92
   17.18 -(LinEq_simplify, (LinEq, Rls {#calc = 0, #rules = 3, ...))--90
   17.19 -(LinPoly_simplify, (LinEq, Rls {#calc = 4, #rules = 5, ...))--91
   17.20 -(PolyEq_erls, (PolyEq, Rls {#calc = 1, #rules = 42, ...))--47
   17.21 -(Poly_erls, (Poly, Rls {#calc = 0 (*11*), #rules = 25, ...))--118
   17.22 -(RatEq_eliminate, (RatEq, Rls {#calc = 0, #rules = 3, ...))--64
   17.23 -(RatEq_simplify, (RatEq, Rls {#calc = 0, #rules = 8, ...))--63
   17.24 -(RooRatEq_erls, (RootRatEq, Rls {#calc = 2, #rules = 43, ...))--54
   17.25 -(RootEq_erls, (RootEq, Rls {#calc = 0, #rules = 28, ...))--71
   17.26 -
   17.27 -(Root_erls, (Root, Rls {#calc = 0, #rules = 27, ...))--95
   17.28 -(Test_simplify, (Test, Rls {#calc = 4, #rules = 37, ...))--10
   17.29 -(ac_plus_times, (Test, Rls {#calc = 0, #rules = 6, ...))--4
   17.30 -(add_fractions_p, (Rational, Rrls {...}))--85
   17.31 -(add_fractions_p_rls, (Rational, Rls {#calc = 0, #rules = 1, ...))--84
   17.32 -(add_new_c, (Integrate, Seq {#calc = 0, #rules = 1, ...))--25
   17.33 -(ansatz_rls, (Partial_Fractions, Rls {#calc = 0, #rules = 2, ...))--52
   17.34 -(calc_add_mult_pow_, (Poly, Rls {#calc = 3, #rules = 3, ...))--102
   17.35 -(calc_rat_erls, (Rational, Rls {#calc = 2, #rules = 4, ...))--88
   17.36 -(calculate_Rational, (Rational, Rls {#calc = 1, #rules = 15, ...))--89
   17.37 -
   17.38 -(calculate_RootRat, (RootRat, Rls {#calc = 2, #rules = 19, ...))--61
   17.39 -(cancel_leading_coeff, (PolyEq, Rls {#calc = 0, #rules = 13, ...))--49
   17.40 -(cancel_p, (Rational, Rrls {...}))--86
   17.41 -(cancel_p_rls, (Rational, Rls {#calc = 0, #rules = 1, ...))--72
   17.42 -(collect_bdv, (PolyEq, Rls {#calc = 0, #rules = 18, ...))--35
   17.43 -(collect_numerals, (Poly, Rls {#calc = 3, #rules = 7, ...))--113
   17.44 -(collect_numerals_, (Poly, Rls {#calc = 1, #rules = 7, ...))--112
   17.45 -(complete_square, (PolyEq, Rls {#calc = 0, #rules = 5, ...))--48
   17.46 -(d0_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 2, ...))--45
   17.47 -(d1_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 3, ...))--44
   17.48 -
   17.49 -(d2_polyeq_abcFormula_simplify, (PolyEq, Rls {#calc = 0, #rules = 18, ...))--39
   17.50 -(d2_polyeq_bdv_only_simplify, (PolyEq, Rls {#calc = 0, #rules = 10, ...))--42
   17.51 -(d2_polyeq_pqFormula_simplify, (PolyEq, Rls {#calc = 0, #rules = 18, ...))--40
   17.52 -(d2_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 24, ...))--43
   17.53 -(d2_polyeq_sq_only_simplify, (PolyEq, Rls {#calc = 0, #rules = 6, ...))--41
   17.54 -(d3_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 21, ...))--38
   17.55 -(d4_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 1, ...))--37
   17.56 -(diff_conv, (Diff, Rls {#calc = 1, #rules = 10, ...))--29
   17.57 -(diff_rules, (Diff, Rls {#calc = 0, #rules = 2, ...))--31
   17.58 -(diff_sym_conv, (Diff, Rls {#calc = 1, #rules = 8, ...))--28
   17.59 -
   17.60 -(discard_minus, (Poly, Rls {#calc = 0, #rules = 2, ...))--106
   17.61 -(discard_parentheses, (Poly, Rls {#calc = 0, #rules = 2, ...))--110
   17.62 -(discard_parentheses1, (Poly, Rls {#calc = 0, #rules = 1, ...))--99
   17.63 -(e_rls, (Tools (*KEStore*), Rls {#calc = 0, #rules = 0, ...))--123
   17.64 -(e_rrls, (Tools (*KEStore*), Rrls {...}))--122
   17.65 -(equival_trans, (Partial_Fractions, Rls {#calc = 0, #rules = 2, ...))--50
   17.66 -(eval_rls, (DiffApp, Rls {#calc = 0, #rules = 19, ...))--27
   17.67 -(expand, (Poly, Rls {#calc = 0, #rules = 2, ...))--117
   17.68 -(expand_binoms, (Poly, Rls {#calc = 3, #rules = 29, ...))--108
   17.69 -(expand_binomtest, (Test, Rls {#calc = 3, #rules = 29, ...))--1
   17.70 -
   17.71 -(expand_poly, (Poly, Rls {#calc = 0, #rules = 9, ...))--116
   17.72 -(expand_poly_, (Poly, Rls {#calc = 0, #rules = 8, ...))--105
   17.73 -(expand_poly_rat_, (Poly, Rls {#calc = 0, #rules = 10, ...))--104
   17.74 -(expand_rootbinoms, (Root, Rls {#calc = 6, #rules = 33, ...))--93
   17.75 -(fasse_zusammen, (PolyMinus, Rls {#calc = 2, #rules = 24, ...))--59
   17.76 -(integration, (Integrate, Seq {#calc = 0, #rules = 3, ...))--23
   17.77 -(integration_rules, (Integrate, Rls {#calc = 1, #rules = 6, ...))--26
   17.78 ------KESTORE: (inverse_z, (Inverse_Z_Transform, Rls {#calc = 0, #rules = 1, ...))--1
   17.79 -(isolate_bdv, (Test, Rls {#calc = 0, #rules = 6, ...))--7
   17.80 -(isolate_bdvs, (EqSystem, Rls {#calc = 0, #rules = 3, ...))--16
   17.81 -
   17.82 -(isolate_bdvs_4x4, (EqSystem, Rls {#calc = 0, #rules = 5, ...))--15
   17.83 -(isolate_root, (Test, Rls {#calc = 0, #rules = 6, ...))--8
   17.84 -(klammern_aufloesen, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))--56
   17.85 -(klammern_ausmultiplizieren, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))--55
   17.86 -(l_sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 16, ...))--68
   17.87 -(list_rls, (DiffApp (*ListC*), Rls {#calc = 8, #rules = 53, ...))--121
   17.88 -(make_polynomial, (Poly, Seq {#calc = 1, #rules = 11, ...))--109
   17.89 -(make_polynomial_in, (PolyEq, Seq {#calc = 0, #rules = 8, ...))--34
   17.90 -(make_polytest, (Test, Rls {#calc = 3, #rules = 25, ...))--2
   17.91 -(make_rat_poly_with_parentheses, (Poly, Seq {#calc = 1, #rules = 10, ...))--96
   17.92 -
   17.93 -(make_ratpoly_in, (PolyEq, Seq {#calc = 0, #rules = 5, ...))--33
   17.94 -(make_rooteq, (Root, Rls {#calc = 3, #rules = 25, ...))--94
   17.95 -(matches, (Test, Rls {#calc = 8, #rules = 20, ...))--6
   17.96 -(multiply_ansatz, (Partial_Fractions, Rls {#calc = 0, #rules = 1, ...))--51
   17.97 -(norm_Poly, (Poly, Seq {#calc = 1, #rules = 11, ...))--119
   17.98 -(norm_Rational, (Rational, Seq {#calc = 0, #rules = 6, ...))--77
   17.99 -(norm_Rational_noadd_fractions, (Integrate, Seq {#calc = 0, #rules = 6, ...))--21
  17.100 -(norm_Rational_parenthesized, (Rational, Seq {#calc = 0, #rules = 2, ...))--75
  17.101 -(norm_Rational_rls, (Rational, Rls {#calc = 0, #rules = 5, ...))--76
  17.102 -(norm_Rational_rls_noadd_fractions, (Integrate, Rls {#calc = 0, #rules = 4, ...))--20
  17.103 -
  17.104 -(norm_System, (EqSystem, Rls {#calc = 0, #rules = 9, ...))--11
  17.105 -(norm_System_noadd_fractions, (EqSystem, Rls {#calc = 0, #rules = 8, ...))--12
  17.106 -(norm_diff, (Diff, Rls {#calc = 0, #rules = 2, ...))--30
  17.107 -(norm_equation, (Test, Rls {#calc = 0, #rules = 1, ...))--5
  17.108 -(norm_rat_erls, (Rational, Rls {#calc = 1, #rules = 1, ...))--78
  17.109 -(order_add_mult, (Poly, Rls {#calc = 0, #rules = 6, ...))--114
  17.110 -(order_add_mult_System, (EqSystem, Rls {#calc = 0, #rules = 6, ...))--13
  17.111 -(order_add_mult_in, (PolyEq, Rls {#calc = 0, #rules = 6, ...))--36
  17.112 -(order_add_rls_, (Poly, Rls {#calc = 0, #rules = 1, ...))--97
  17.113 -(order_mult_rls_, (Poly, Rls {#calc = 0, #rules = 1, ...))--98
  17.114 -
  17.115 -(order_system, (EqSystem, Rls {#calc = 0, #rules = 1, ...))--14
  17.116 -(ordne_alphabetisch, (PolyMinus, Rls {#calc = 0, #rules = 8, ...))--60
  17.117 -(ordne_monome, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))--57
  17.118 -(polyeq_simplify, (PolyEq, Rls {#calc = 6, #rules = 12, ...))--46
  17.119 -(powers, (Rational, Rls {#calc = 1, #rules = 11, ...))--82
  17.120 -(powers_erls, (Rational, Rls {#calc = 4, #rules = 6, ...))--83
  17.121 -(r_sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 16, ...))--67
  17.122 -(rat_mult_div_pow, (Rational, Rls {#calc = 1, #rules = 8, ...))--73
  17.123 -(rat_mult_divide, (Rational, Rls {#calc = 1, #rules = 6, ...))--81
  17.124 -(rat_mult_poly, (Rational, Rls {#calc = 0, #rules = 2, ...))--74
  17.125 -
  17.126 -(rat_reduce_1, (Rational, Rls {#calc = 0, #rules = 2, ...))--79
  17.127 -(rateq_erls, (RatEq, Rls {#calc = 1, #rules = 41, ...))--65
  17.128 -(rational_erls, (Rational, Rls {#calc = 1, #rules = 35, ...))--87
  17.129 -(rearrange_assoc, (Test, Rls {#calc = 0, #rules = 2, ...))--3
  17.130 -(reduce_012, (Poly, Rls {#calc = 0, #rules = 7, ...))--111
  17.131 -(reduce_012_, (Poly, Rls {#calc = 0, #rules = 6, ...))--100
  17.132 -(reduce_012_mult_, (Poly, Rls {#calc = 0, #rules = 4, ...))--101
  17.133 -(reduce_0_1_2, (Rational, Rls {#calc = 0, #rules = 6, ...))--80
  17.134 -(rev_rew_p, (Poly, Seq {#calc = 3, #rules = 25, ...))--107
  17.135 -(rooteq_simplify, (RootEq, Rls {#calc = 6, #rules = 15, ...))--66
  17.136 -
  17.137 -(rooteq_srls, (RootEq, Rls {#calc = 0, #rules = 3, ...))--70
  17.138 -(rootrat_erls, (RootRat, Rls {#calc = 14, #rules = 41, ...))--62
  17.139 -(rootrat_solve, (RootRatEq, Rls {#calc = 0, #rules = 4, ...))--53
  17.140 -(separate_bdv2, (Integrate, Rls {#calc = 0, #rules = 22, ...))--22
  17.141 -(separate_bdvs, (PolyEq, Rls {#calc = 0, #rules = 23, ...))--32
  17.142 -(simplify_Integral, (Integrate, Seq {#calc = 1, #rules = 7, ...))--24
  17.143 -(simplify_System, (EqSystem, Seq {#calc = 1, #rules = 6, ...))--17
  17.144 -(simplify_System_parenthesized, (EqSystem, Seq {#calc = 1, #rules = 8, ...))--18
  17.145 -(simplify_power, (Poly, Rls {#calc = 0, #rules = 7, ...))--115
  17.146 -(simplify_power_, (Poly, Rls {#calc = 0, #rules = 8, ...))--103
  17.147 -
  17.148 -(sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 32, ...))--69
  17.149 -(testerls, (Test, Rls {#calc = 8, #rules = 19, ...))--19
  17.150 -(tval_rls, (Test, Rls {#calc = 11, #rules = 27, ...))--9
  17.151 -(univariate_equation_prls, (Equation, Rls {#calc = 1, #rules = 1, ...))--120
  17.152 -(verschoenere, (PolyMinus, Rls {#calc = 1, #rules = 10, ...))--58
  17.153 -======= end ! ruleset' =======
    18.1 --- a/doc-isac/mlehnfeld/master/ruleset.Unsynchronized-1	Thu Jun 26 17:19:30 2014 +0200
    18.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.3 @@ -1,39 +0,0 @@
    18.4 -ruleset.Unsynchronized-1 and ruleset.Unsynchronized-2 are copies from ~/.isabelle/../log/Isac,
    18.5 -where log/Isac was created by two different session Isac. and the output stems from ...
    18.6 ---------------------------------------------------------------------------------------
    18.7 -Build_Thydata.thy:
    18.8 -  writeln "======= begin ! ruleset' =======";
    18.9 -  ! ruleset' |> rev (*!!!!!*) 
   18.10 -    |> map check_kestore_rls |> map writeln;
   18.11 -  writeln "======= ! ruleset' ordered =======";
   18.12 ---------------------------------------------------------------------------------------
   18.13 -
   18.14 -======= begin ! ruleset' =======
   18.15 -(expand_binomtest, (Test, Rls {#calc = 3, #rules = 29, ...))
   18.16 -(make_polytest, (Test, Rls {#calc = 3, #rules = 25, ...))
   18.17 -(rearrange_assoc, (Test, Rls {#calc = 0, #rules = 2, ...))
   18.18 -(ac_plus_times, (Test, Rls {#calc = 0, #rules = 6, ...))
   18.19 -(norm_equation, (Test, Rls {#calc = 0, #rules = 1, ...))
   18.20 ------ ruleset.Unsynchronized-2: (inverse_z, (Inverse_Z_Transform, Rls {#calc = 0, #rules = 1, ...))
   18.21 -(matches, (Test, Rls {#calc = 8, #rules = 20, ...))
   18.22 -(isolate_bdv, (Test, Rls {#calc = 0, #rules = 6, ...))
   18.23 -(isolate_root, (Test, Rls {#calc = 0, #rules = 6, ...))
   18.24 -(tval_rls, (Test, Rls {#calc = 11, #rules = 27, ...))
   18.25 -(Test_simplify, (Test, Rls {#calc = 4, #rules = 37, ...))
   18.26 ------ ruleset.Unsynchronized-2: (testerls, (Test, Rls {#calc = 8, #rules = 19, ...))
   18.27 -(norm_System, (EqSystem, Rls {#calc = 0, #rules = 9, ...))
   18.28 -(norm_System_noadd_fractions, (EqSystem, Rls {#calc = 0, #rules = 8, ...))
   18.29 -(order_add_mult_System, (EqSystem, Rls {#calc = 0, #rules = 6, ...))
   18.30 -(order_system, (EqSystem, Rls {#calc = 0, #rules = 1, ...))
   18.31 -(isolate_bdvs_4x4, (EqSystem, Rls {#calc = 0, #rules = 5, ...))
   18.32 -(isolate_bdvs, (EqSystem, Rls {#calc = 0, #rules = 3, ...))
   18.33 -(simplify_System, (EqSystem, Seq {#calc = 1, #rules = 6, ...))
   18.34 -(simplify_System_parenthesized, (EqSystem, Seq {#calc = 1, #rules = 8, ...))
   18.35 -(testerls, (Test, Rls {#calc = 8, #rules = 19, ...))
   18.36 -(norm_Rational_rls_noadd_fractions, (Integrate, Rls {#calc = 0, #rules = 4, ...))
   18.37 -(norm_Rational_noadd_fractions, (Integrate, Seq {#calc = 0, #rules = 6, ...))
   18.38 -(separate_bdv2, (Integrate, Rls {#calc = 0, #rules = 22, ...))
   18.39 -:
   18.40 -:
   18.41 -:
   18.42 -======= ! ruleset' ordered =======
    19.1 --- a/doc-isac/mlehnfeld/master/ruleset.Unsynchronized-2	Thu Jun 26 17:19:30 2014 +0200
    19.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.3 @@ -1,135 +0,0 @@
    19.4 -WN130922 Build_Thydata.thy:
    19.5 -  writeln "======= begin ! ruleset' =======";
    19.6 -  ! ruleset' |> rev (*!!!!!*) 
    19.7 -    |> map check_kestore_rls |> map writeln;
    19.8 -  writeln "======= ! ruleset' ordered =======";
    19.9 ---------------------------------------------------------------------------------------
   19.10 -======= length (! ruleset')   = 124
   19.11 ---------------------------------------------------------------------------------------
   19.12 -======= begin ! ruleset' =======
   19.13 -(expand_binomtest, (Test, Rls {#calc = 3, #rules = 29, ...))
   19.14 -(make_polytest, (Test, Rls {#calc = 3, #rules = 25, ...))
   19.15 -(rearrange_assoc, (Test, Rls {#calc = 0, #rules = 2, ...))
   19.16 -(ac_plus_times, (Test, Rls {#calc = 0, #rules = 6, ...))
   19.17 -(norm_equation, (Test, Rls {#calc = 0, #rules = 1, ...))
   19.18 -(inverse_z, (Inverse_Z_Transform, Rls {#calc = 0, #rules = 1, ...))
   19.19 -(matches, (Test, Rls {#calc = 8, #rules = 20, ...))
   19.20 -(isolate_bdv, (Test, Rls {#calc = 0, #rules = 6, ...))
   19.21 -(isolate_root, (Test, Rls {#calc = 0, #rules = 6, ...))
   19.22 -(tval_rls, (Test, Rls {#calc = 11, #rules = 27, ...))
   19.23 -(Test_simplify, (Test, Rls {#calc = 4, #rules = 37, ...))
   19.24 -(testerls, (Test, Rls {#calc = 8, #rules = 19, ...))
   19.25 -(norm_System, (EqSystem, Rls {#calc = 0, #rules = 9, ...))
   19.26 -(norm_System_noadd_fractions, (EqSystem, Rls {#calc = 0, #rules = 8, ...))
   19.27 -(order_add_mult_System, (EqSystem, Rls {#calc = 0, #rules = 6, ...))
   19.28 -(order_system, (EqSystem, Rls {#calc = 0, #rules = 1, ...))
   19.29 -(isolate_bdvs_4x4, (EqSystem, Rls {#calc = 0, #rules = 5, ...))
   19.30 -(isolate_bdvs, (EqSystem, Rls {#calc = 0, #rules = 3, ...))
   19.31 -(simplify_System, (EqSystem, Seq {#calc = 1, #rules = 6, ...))
   19.32 -(simplify_System_parenthesized, (EqSystem, Seq {#calc = 1, #rules = 8, ...))
   19.33 ------ ruleset.Unsynchronized-1: (testerls, (Test, Rls {#calc = 8, #rules = 19, ...))
   19.34 -(norm_Rational_rls_noadd_fractions, (Integrate, Rls {#calc = 0, #rules = 4, ...))
   19.35 -(norm_Rational_noadd_fractions, (Integrate, Seq {#calc = 0, #rules = 6, ...))
   19.36 -(separate_bdv2, (Integrate, Rls {#calc = 0, #rules = 22, ...))
   19.37 -(integration, (Integrate, Seq {#calc = 0, #rules = 3, ...))
   19.38 -(simplify_Integral, (Integrate, Seq {#calc = 1, #rules = 7, ...))
   19.39 -(add_new_c, (Integrate, Seq {#calc = 0, #rules = 1, ...))
   19.40 -(integration_rules, (Integrate, Rls {#calc = 1, #rules = 6, ...))
   19.41 -(eval_rls, (DiffApp, Rls {#calc = 0, #rules = 19, ...))
   19.42 -(diff_sym_conv, (Diff, Rls {#calc = 1, #rules = 8, ...))
   19.43 -(diff_conv, (Diff, Rls {#calc = 1, #rules = 10, ...))
   19.44 -(norm_diff, (Diff, Rls {#calc = 0, #rules = 2, ...))
   19.45 -(diff_rules, (Diff, Rls {#calc = 0, #rules = 2, ...))
   19.46 -(separate_bdvs, (PolyEq, Rls {#calc = 0, #rules = 23, ...))
   19.47 -(make_ratpoly_in, (PolyEq, Seq {#calc = 0, #rules = 5, ...))
   19.48 -(make_polynomial_in, (PolyEq, Seq {#calc = 0, #rules = 8, ...))
   19.49 -(collect_bdv, (PolyEq, Rls {#calc = 0, #rules = 18, ...))
   19.50 -(order_add_mult_in, (PolyEq, Rls {#calc = 0, #rules = 6, ...))
   19.51 -(d4_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 1, ...))
   19.52 -(d3_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 21, ...))
   19.53 -(d2_polyeq_abcFormula_simplify, (PolyEq, Rls {#calc = 0, #rules = 18, ...))
   19.54 -(d2_polyeq_pqFormula_simplify, (PolyEq, Rls {#calc = 0, #rules = 18, ...))
   19.55 -(d2_polyeq_sq_only_simplify, (PolyEq, Rls {#calc = 0, #rules = 6, ...))
   19.56 -(d2_polyeq_bdv_only_simplify, (PolyEq, Rls {#calc = 0, #rules = 10, ...))
   19.57 -(d2_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 24, ...))
   19.58 -(d1_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 3, ...))
   19.59 -(d0_polyeq_simplify, (PolyEq, Rls {#calc = 0, #rules = 2, ...))
   19.60 -(polyeq_simplify, (PolyEq, Rls {#calc = 6, #rules = 12, ...))
   19.61 -(PolyEq_erls, (PolyEq, Rls {#calc = 1, #rules = 42, ...))
   19.62 -(complete_square, (PolyEq, Rls {#calc = 0, #rules = 5, ...))
   19.63 -(cancel_leading_coeff, (PolyEq, Rls {#calc = 0, #rules = 13, ...))
   19.64 -(equival_trans, (Partial_Fractions, Rls {#calc = 0, #rules = 2, ...))
   19.65 -(multiply_ansatz, (Partial_Fractions, Rls {#calc = 0, #rules = 1, ...))
   19.66 -(ansatz_rls, (Partial_Fractions, Rls {#calc = 0, #rules = 2, ...))
   19.67 -(rootrat_solve, (RootRatEq, Rls {#calc = 0, #rules = 4, ...))
   19.68 -(RooRatEq_erls, (RootRatEq, Rls {#calc = 2, #rules = 43, ...))
   19.69 -(klammern_ausmultiplizieren, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))
   19.70 -(klammern_aufloesen, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))
   19.71 -(ordne_monome, (PolyMinus, Rls {#calc = 0, #rules = 4, ...))
   19.72 -(verschoenere, (PolyMinus, Rls {#calc = 1, #rules = 10, ...))
   19.73 -(fasse_zusammen, (PolyMinus, Rls {#calc = 2, #rules = 24, ...))
   19.74 -(ordne_alphabetisch, (PolyMinus, Rls {#calc = 0, #rules = 8, ...))
   19.75 -(calculate_RootRat, (RootRat, Rls {#calc = 2, #rules = 19, ...))
   19.76 -(rootrat_erls, (RootRat, Rls {#calc = 14, #rules = 41, ...))
   19.77 -(RatEq_simplify, (RatEq, Rls {#calc = 0, #rules = 8, ...))
   19.78 -(RatEq_eliminate, (RatEq, Rls {#calc = 0, #rules = 3, ...))
   19.79 -(rateq_erls, (RatEq, Rls {#calc = 1, #rules = 41, ...))
   19.80 -(rooteq_simplify, (RootEq, Rls {#calc = 6, #rules = 15, ...))
   19.81 -(r_sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 16, ...))
   19.82 -(l_sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 16, ...))
   19.83 -(sqrt_isolate, (RootEq, Rls {#calc = 0, #rules = 32, ...))
   19.84 -(rooteq_srls, (RootEq, Rls {#calc = 0, #rules = 3, ...))
   19.85 -(RootEq_erls, (RootEq, Rls {#calc = 0, #rules = 28, ...))
   19.86 -(cancel_p_rls, (Rational, Rls {#calc = 0, #rules = 1, ...))
   19.87 -(rat_mult_div_pow, (Rational, Rls {#calc = 1, #rules = 8, ...))
   19.88 -(rat_mult_poly, (Rational, Rls {#calc = 0, #rules = 2, ...))
   19.89 -(norm_Rational_parenthesized, (Rational, Seq {#calc = 0, #rules = 2, ...))
   19.90 -(norm_Rational_rls, (Rational, Rls {#calc = 0, #rules = 5, ...))
   19.91 -(norm_Rational, (Rational, Seq {#calc = 0, #rules = 6, ...))
   19.92 -(norm_rat_erls, (Rational, Rls {#calc = 1, #rules = 1, ...))
   19.93 -(rat_reduce_1, (Rational, Rls {#calc = 0, #rules = 2, ...))
   19.94 -(reduce_0_1_2, (Rational, Rls {#calc = 0, #rules = 6, ...))
   19.95 -(rat_mult_divide, (Rational, Rls {#calc = 1, #rules = 6, ...))
   19.96 -(powers, (Rational, Rls {#calc = 1, #rules = 11, ...))
   19.97 -(powers_erls, (Rational, Rls {#calc = 4, #rules = 6, ...))
   19.98 -(add_fractions_p_rls, (Rational, Rls {#calc = 0, #rules = 1, ...))
   19.99 -(add_fractions_p, (Rational, Rrls {...}))
  19.100 -(cancel_p, (Rational, Rrls {...}))
  19.101 -(rational_erls, (Rational, Rls {#calc = 1, #rules = 35, ...))
  19.102 -(calc_rat_erls, (Rational, Rls {#calc = 2, #rules = 4, ...))
  19.103 -(calculate_Rational, (Rational, Rls {#calc = 1, #rules = 15, ...))
  19.104 -(LinEq_simplify, (LinEq, Rls {#calc = 0, #rules = 3, ...))
  19.105 -(LinPoly_simplify, (LinEq, Rls {#calc = 4, #rules = 5, ...))
  19.106 -(LinEq_erls, (LinEq, Rls {#calc = 0, #rules = 26, ...))
  19.107 -(expand_rootbinoms, (Root, Rls {#calc = 6, #rules = 33, ...))
  19.108 -(make_rooteq, (Root, Rls {#calc = 3, #rules = 25, ...))
  19.109 -(Root_erls, (Root, Rls {#calc = 0, #rules = 27, ...))
  19.110 -(make_rat_poly_with_parentheses, (Poly, Seq {#calc = 1, #rules = 10, ...))
  19.111 -(order_add_rls_, (Poly, Rls {#calc = 0, #rules = 1, ...))
  19.112 -(order_mult_rls_, (Poly, Rls {#calc = 0, #rules = 1, ...))
  19.113 -(discard_parentheses1, (Poly, Rls {#calc = 0, #rules = 1, ...))
  19.114 -(reduce_012_, (Poly, Rls {#calc = 0, #rules = 6, ...))
  19.115 -(reduce_012_mult_, (Poly, Rls {#calc = 0, #rules = 4, ...))
  19.116 -(calc_add_mult_pow_, (Poly, Rls {#calc = 3, #rules = 3, ...))
  19.117 -(simplify_power_, (Poly, Rls {#calc = 0, #rules = 8, ...))
  19.118 -(expand_poly_rat_, (Poly, Rls {#calc = 0, #rules = 10, ...))
  19.119 -(expand_poly_, (Poly, Rls {#calc = 0, #rules = 8, ...))
  19.120 -(discard_minus, (Poly, Rls {#calc = 0, #rules = 2, ...))
  19.121 -(rev_rew_p, (Poly, Seq {#calc = 3, #rules = 25, ...))
  19.122 -(expand_binoms, (Poly, Rls {#calc = 3, #rules = 29, ...))
  19.123 -(make_polynomial, (Poly, Seq {#calc = 1, #rules = 11, ...))
  19.124 -(discard_parentheses, (Poly, Rls {#calc = 0, #rules = 2, ...))
  19.125 -(reduce_012, (Poly, Rls {#calc = 0, #rules = 7, ...))
  19.126 -(collect_numerals_, (Poly, Rls {#calc = 1, #rules = 7, ...))
  19.127 -(collect_numerals, (Poly, Rls {#calc = 3, #rules = 7, ...))
  19.128 -(order_add_mult, (Poly, Rls {#calc = 0, #rules = 6, ...))
  19.129 -(simplify_power, (Poly, Rls {#calc = 0, #rules = 7, ...))
  19.130 -(expand_poly, (Poly, Rls {#calc = 0, #rules = 9, ...))
  19.131 -(expand, (Poly, Rls {#calc = 0, #rules = 2, ...))
  19.132 -(Poly_erls, (Poly, Rls {#calc = 0, #rules = 25, ...))
  19.133 -(norm_Poly, (Poly, Seq {#calc = 1, #rules = 11, ...))
  19.134 -(univariate_equation_prls, (Equation, Rls {#calc = 1, #rules = 1, ...))
  19.135 -(list_rls, (DiffApp, Rls {#calc = 8, #rules = 53, ...))
  19.136 -(e_rrls, (Tools, Rrls {...}))
  19.137 -(e_rls, (Tools, Rls {#calc = 0, #rules = 0, ...))
  19.138 -======= ! ruleset' ordered =======
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/doc-isac/mlehnfeld/master/thesis/README	Mon Jun 30 16:14:30 2014 +0200
    20.3 @@ -0,0 +1,7 @@
    20.4 +LaTeXing doesn't work:
    20.5 +
    20.6 +   $ pdflatex thesis
    20.7 +
    20.8 +Probably there are problems with Debian packages. FH template see
    20.9 +
   20.10 +   http://staff.fh-hagenberg.at/burger/diplomarbeit/ 
    21.1 Binary file doc-isac/mlehnfeld/overview.odg has changed
    22.1 --- a/doc-isac/mlehnfeld/presentation.tex	Thu Jun 26 17:19:30 2014 +0200
    22.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.3 @@ -1,469 +0,0 @@
    22.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 $
    22.5 -
    22.6 -\documentclass{beamer}
    22.7 -
    22.8 -% This file is a solution template for:
    22.9 -
   22.10 -% - Talk at a conference/colloquium.
   22.11 -% - Talk length is about 20min.
   22.12 -% - Style is ornate.
   22.13 -
   22.14 -
   22.15 -
   22.16 -% Copyright 2004 by Till Tantau <tantau@users.sourceforge.net>.
   22.17 -%
   22.18 -% In principle, this file can be redistributed and/or modified under
   22.19 -% the terms of the GNU Public License, version 2.
   22.20 -%
   22.21 -% However, this file is supposed to be a template to be modified
   22.22 -% for your own needs. For this reason, if you use this file as a
   22.23 -% template and not specifically distribute it as part of a another
   22.24 -% package/program, I grant the extra permission to freely copy and
   22.25 -% modify this file as you see fit and even to delete this copyright
   22.26 -% notice.
   22.27 -
   22.28 -
   22.29 -\mode<presentation>
   22.30 -{
   22.31 -  \usetheme{Hannover}
   22.32 -  % or ...
   22.33 -
   22.34 -  \setbeamercovered{transparent}
   22.35 -  % or whatever (possibly just delete it)
   22.36 -}
   22.37 -
   22.38 -%\usepackage{setspace} %for "\begin{onehalfspace}"
   22.39 -\usepackage[english]{babel}
   22.40 -% or whatever
   22.41 -
   22.42 -\usepackage[utf8]{inputenc}
   22.43 -% or whatever
   22.44 -
   22.45 -\usepackage{times}
   22.46 -\usepackage[T1]{fontenc}
   22.47 -% Or whatever. Note that the encoding and the font should match. If T1
   22.48 -% does not look nice, try deleting the line with the fontenc.
   22.49 -
   22.50 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   22.51 -\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
   22.52 -
   22.53 -\title[\isac: Computation \& Deduction] % (optional, use only with long paper titles)
   22.54 -{Integrating Computation and Deduction\\
   22.55 -  in the \isac-System}
   22.56 -
   22.57 -\subtitle{Projektpraktikum: Introducing Isabelle's Contexts}
   22.58 -
   22.59 -\author[Lehnfeld] % (optional, use only with lots of authors)
   22.60 -{Mathias~Lehnfeld}
   22.61 -% - Give the names in the same order as the appear in the paper.
   22.62 -% - Use the \inst{?} command only if the authors have different
   22.63 -%   affiliation.
   22.64 -
   22.65 -\institute % (optional, but mostly needed)
   22.66 -{
   22.67 -  Vienna University of Technology\\
   22.68 -  Institute of Computer Languages
   22.69 -}
   22.70 -% - Use the \inst command only if there are several affiliations.
   22.71 -% - Keep it simple, no one is interested in your street address.
   22.72 -
   22.73 -% \date[CFP 2003] % (optional, should be abbreviation of conference name)
   22.74 -% {Conference on Fabulous Presentations, 2003}
   22.75 -% - Either use conference name or its abbreviation.
   22.76 -% - Not really informative to the audience, more for people (including
   22.77 -%   yourself) who are reading the slides online
   22.78 -
   22.79 -% \subject{Theoretical Computer Science}
   22.80 -% This is only inserted into the PDF information catalog. Can be left
   22.81 -% out.
   22.82 -
   22.83 -
   22.84 -
   22.85 -% If you have a file called "university-logo-filename.xxx", where xxx
   22.86 -% is a graphic format that can be processed by latex or pdflatex,
   22.87 -% resp., then you can add a logo as follows:
   22.88 -
   22.89 -% \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename}
   22.90 -% \logo{\pgfuseimage{university-logo}}
   22.91 -
   22.92 -
   22.93 -
   22.94 -% Delete this, if you do not want the table of contents to pop up at
   22.95 -% the beginning of each subsection:
   22.96 -\AtBeginSubsection[]
   22.97 -{
   22.98 -  \begin{frame}<beamer>{Outline}
   22.99 -    \tableofcontents[currentsection,currentsubsection]
  22.100 -  \end{frame}
  22.101 -}
  22.102 -
  22.103 -
  22.104 -% If you wish to uncover everything in a step-wise fashion, uncomment
  22.105 -% the following command:
  22.106 -
  22.107 -%\beamerdefaultoverlayspecification{<+->}
  22.108 -
  22.109 -
  22.110 -\begin{document}
  22.111 -
  22.112 -\begin{frame}
  22.113 -  \titlepage
  22.114 -\end{frame}
  22.115 -
  22.116 -\begin{frame}{Outline}
  22.117 -  \tableofcontents
  22.118 -  % You might wish to add the option [pausesections]
  22.119 -\end{frame}
  22.120 -
  22.121 -
  22.122 -% Structuring a talk is a difficult task and the following structure
  22.123 -% may not be suitable. Here are some rules that apply for this
  22.124 -% solution:
  22.125 -
  22.126 -% - Exactly two or three sections (other than the summary).
  22.127 -% - At *most* three subsections per section.
  22.128 -% - Talk about 30s to 2min per frame. So there should be between about
  22.129 -%   15 and 30 frames, all told.
  22.130 -
  22.131 -% - A conference audience is likely to know very little of what you
  22.132 -%   are going to talk about. So *simplify*!
  22.133 -% - In a 20min talk, getting the main ideas across is hard
  22.134 -%   enough. Leave out details, even if it means being less precise than
  22.135 -%   you think necessary.
  22.136 -% - If you omit details that are vital to the proof/implementation,
  22.137 -%   just say so once. Everybody will be happy with that.
  22.138 -
  22.139 -\section[Introduction]{Introduction: Isabelle and \isac}
  22.140 -%\subsection[Isabelle \& \isac]{Isabelle and \isac}
  22.141 -\begin{frame}
  22.142 -  \frametitle{Isabelle and \isac}
  22.143 -The task of this ``Projektpraktikum'' (6 ECTS) was to
  22.144 -\begin{itemize}
  22.145 -\item study the concept of ``context'' in the theorem prover \textbf{Isabelle} from TU Munich
  22.146 -\item study basic concepts of the math assistant \sisac{} from TU Graz
  22.147 -\pause
  22.148 -\item redesign \sisac{} with respect to contexts
  22.149 -  \begin{itemize}
  22.150 -  \item use contexts for type inference of user input
  22.151 -  \item handle preconditions of specifications
  22.152 -  \item clarify the transfer of context data from sub-programs to the calling program
  22.153 -  \end{itemize}
  22.154 -\pause
  22.155 -\item introduce contexts to \sisac{} according to the new design
  22.156 -\item use the coding standards of Isabelle2011 for new code.
  22.157 -\end{itemize}
  22.158 -\end{frame}
  22.159 -
  22.160 -%\subsection[Computation \& Deduction]{Computation and Deduction in a Lucas-Interpreter}
  22.161 -\begin{frame}
  22.162 -  \frametitle{Computation and Deduction in a Lucas-Interpreter}
  22.163 -    \includegraphics[width=100mm]{overview.pdf}
  22.164 -\end{frame}
  22.165 -
  22.166 -\section[Contributions]{Contributions of the project to \isac}
  22.167 -\subsection[Contexts]{Isabelle's Contexts, advantages and use}
  22.168 -\begin{frame}
  22.169 -  \frametitle{Advantages of Isabelle's Contexts}
  22.170 -Isabelle's context replaced theories because \dots:
  22.171 -\begin{itemize}
  22.172 -\item theories are static containers of \textit{all} logical data
  22.173 -\item contexts are \textit{dynamic} containers of logical data:
  22.174 -  \begin{itemize}
  22.175 -  \item functions for storing and retrieving various logical data
  22.176 -  \item functions for type inference
  22.177 -  \item provide data for Isabelle's automated provers
  22.178 -  \end{itemize}
  22.179 -%\item e.g. theories have no direct functions for type inference
  22.180 -%\item replace function \texttt{parseNEW}
  22.181 -%\item assumptions \& environment $\rightarrow$ context
  22.182 -\item allow to conform with scopes for subprograms.
  22.183 -\end{itemize}
  22.184 -\end{frame}
  22.185 -
  22.186 -\begin{frame}
  22.187 -  \frametitle{Isabelle's context mechanism}
  22.188 -    \texttt{\small{
  22.189 -      \begin{tabbing}
  22.190 -xx\=xx\=in\=\kill
  22.191 -%xx\=xx\=xx\=xx\=\kill
  22.192 -%datatype Isac\_Ctxt =\\
  22.193 -%\>\>Env of term * term\\
  22.194 -%\>| Asm of term;\\
  22.195 -%\\
  22.196 -structure ContextData =  \alert{Proof\_Data}\\
  22.197 -\>~(\alert{type T} = term list\\
  22.198 -\>\>\alert{fun init \_} = []);\\
  22.199 -\\
  22.200 -%local\\
  22.201 -%\>fun insert\_ctxt data = ContextData\alert{.map} (fn xs => distinct (data@xs));\\
  22.202 -%in\\
  22.203 -%\>fun insert\_assumptions asms = map (fn t => Asm t) asms |> insert\_ctxt;\\
  22.204 -%\>fun insert\_environments envs = map (fn t => Env t) envs |> insert\_ctxt;\\
  22.205 -%end\\
  22.206 -fun insert\_assumptions asms = \\
  22.207 -\>\>\>ContextData\alert{.map} (fn xs => distinct (asms@xs));\\
  22.208 -\\
  22.209 -%local\\
  22.210 -%\>fun unpack\_asms (Asm t::ts) = t::(unpack\_asms ts)\\
  22.211 -%\>\>| unpack\_asms (Env \_::ts) = unpack\_asms ts\\
  22.212 -%\>\>| unpack\_asms [] = [];\\
  22.213 -%\>fun unpack\_envs (Env t::ts) = t::(unpack\_envs ts)\\
  22.214 -%\>\>| unpack\_envs (Asm \_::ts) = unpack\_envs ts\\
  22.215 -%\>\>| unpack\_envs [] = [];\\
  22.216 -%in\\
  22.217 -%\>fun get\_assumptions ctxt = ContextData.get ctxt |> unpack\_asms;\\
  22.218 -%\>fun get\_environments ctxt = ContextData.get ctxt |> unpack\_envs;\\
  22.219 -%end
  22.220 -fun get\_assumptions ctxt = ContextData\alert{.get} ctxt;\\
  22.221 -\\
  22.222 -\\
  22.223 -val declare\_constraints : \\
  22.224 -\>\>\>term -> Proof.context -> Proof.context
  22.225 -      \end{tabbing}
  22.226 -    }}
  22.227 -\end{frame}
  22.228 -
  22.229 -\begin{frame}
  22.230 -  \frametitle{Usage of Contexts}
  22.231 -    \texttt{\footnotesize{
  22.232 -      \begin{tabbing}
  22.233 -xx\=xx\=xx\=xx\=xx\=\kill
  22.234 -fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
  22.235 -\>  let\\
  22.236 -\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
  22.237 -\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
  22.238 -\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
  22.239 -\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
  22.240 -\>\>\>\>\>         then transfer fas to\_ctxt\\
  22.241 -\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
  22.242 -\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
  22.243 -\\
  22.244 -fun parse thy str =\\
  22.245 -\>(let val t = (\alert{typ\_a2real} o numbers\_to\_string)\\
  22.246 -\>\>\>\>(\alert{Syntax.read\_term\_global thy} str)\\
  22.247 -\>\>in SOME (cterm\_of thy t) end)\\
  22.248 -\>\>\>handle \_ => NONE;\\
  22.249 -\\
  22.250 -fun parseNEW ctxt str = \\
  22.251 -\>\>\>SOME (\alert{Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
  22.252 -\>\>\>handle \_ => NONE;
  22.253 -      \end{tabbing}
  22.254 -    }}
  22.255 -
  22.256 -
  22.257 -\end{frame}
  22.258 -
  22.259 -\subsection[Redesign]{Redesign of \isac{} using contexts}
  22.260 -\begin{frame}
  22.261 -  \frametitle{Redesign of \isac{} using contexts}
  22.262 -\begin{center} DEMO \end{center}
  22.263 -\end{frame}
  22.264 -
  22.265 -\begin{frame}
  22.266 -  \frametitle{Deduction simplifies computation}
  22.267 -\small{
  22.268 -%\begin{onehalfspace}
  22.269 -\begin{tabbing}
  22.270 -xxx\=xxx\=\kill
  22.271 -     \`$\mathit{(some)}\;\mathit{assumptions}$\\
  22.272 -$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
  22.273 -%     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
  22.274 -%\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
  22.275 -%\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
  22.276 -\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
  22.277 -     \`$x\not=3\land x\not=0$\\
  22.278 -\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  22.279 -\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
  22.280 -%\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  22.281 -%\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  22.282 -\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  22.283 -\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
  22.284 -\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
  22.285 -\>\>$[x = 0, x = \frac{6}{5}]$ \\
  22.286 -     \`$x = 0\land x = \frac{6}{5}$\\
  22.287 -\>$[\alert{x = 0}, x = \frac{6}{5}]$ \\
  22.288 -     \`\alert{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
  22.289 -\>$[x = \frac{6}{5}]$ \\
  22.290 -$[x = \frac{6}{5}]$
  22.291 -\end{tabbing}
  22.292 -}
  22.293 -%\end{onehalfspace}
  22.294 -\end{frame}
  22.295 -
  22.296 -\begin{frame}
  22.297 -  \frametitle{More ``deduction'', \\less ``computation''}
  22.298 -\footnotesize{\tt
  22.299 -\begin{tabbing}
  22.300 -xx\=xx\=xx\=xx\=xx\=xx\=\kill
  22.301 -Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
  22.302 -\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
  22.303 -\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
  22.304 -\>\>     (L\_L::bool list) =                                   \\
  22.305 -\>\>\>            (SubProblem (Test',                           \\
  22.306 -\>\>\>\>                         [linear,univariate,equation,test]\\
  22.307 -\>\>\>\>                         [Test,solve\_linear])             \\
  22.308 -\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
  22.309 -\>  in \alert{Check\_elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
  22.310 -\end{tabbing}
  22.311 -}
  22.312 -\small{
  22.313 -``Deductive'' part of Lucas-Interpretation relives the ``computational'' part: \alert{one statement becomes obsolete~!}
  22.314 -}
  22.315 -\end{frame}
  22.316 -
  22.317 -
  22.318 -\begin{frame}
  22.319 -  \frametitle{Redesign of \isac{} using contexts}
  22.320 -Advantages of the redesign:
  22.321 -\begin{itemize}
  22.322 -\item type inference by \textit{local} contexts\\
  22.323 -\pause
  22.324 -     \alert{now user-input without type constraints~!}
  22.325 -\pause
  22.326 -\item consistent handling of logical data
  22.327 -  \begin{itemize}
  22.328 -  \item preconditions and partiality conditions in contexts
  22.329 -  \item transfer of context data into subprograms clarified
  22.330 -  \item transfer of context data from subprograms clarified
  22.331 -  \end{itemize}
  22.332 -\pause
  22.333 -     \alert{now some statements become obsolete.}\\
  22.334 -\end{itemize}
  22.335 -\pause
  22.336 -Now Lucas-interpretation shifts efforts from ``computation'' further to ``deduction''.
  22.337 -\end{frame}
  22.338 -
  22.339 -
  22.340 -
  22.341 -\subsection[Code Improvement]{Improvement of functional code}
  22.342 -\begin{frame}
  22.343 -  \frametitle{Improvement of functional code}
  22.344 -  \begin{itemize}
  22.345 -  \item \textbf{code conventions}: Isabelle2011 published coding standards first time
  22.346 -  \item \textbf{combinators}: Isabelle2011 introduced a library containing the following combinators:
  22.347 -\\\vspace{0.2cm}
  22.348 -\tiny{\tt%
  22.349 -  val |$>$ : 'a * ('a -$>$ 'b) -$>$ 'b\\
  22.350 -  val |-$>$ : ('c * 'a) * ('c -$>$ 'a -$>$ 'b) -$>$ 'b\\
  22.351 -  val |$>>$ : ('a * 'c) * ('a -$>$ 'b) -$>$ 'b * 'c\\
  22.352 -  val ||$>$ : ('c * 'a) * ('a -$>$ 'b) -$>$ 'c * 'b\\
  22.353 -  val ||$>>$ : ('c * 'a) * ('a -$>$ 'd * 'b) -$>$ ('c * 'd) * 'b\\
  22.354 -  val \#$>$ : ('a -$>$ 'b) * ('b -$>$ 'c) -$>$ 'a -$>$ 'c\\
  22.355 -  val \#-$>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'b -$>$ 'd) -$>$ 'a -$>$ 'd\\
  22.356 -  val \#$>>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'd) -$>$ 'a -$>$ 'd * 'b\\
  22.357 -  val \#\#$>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'd) -$>$ 'a -$>$ 'c * 'd\\
  22.358 -  val \#\#$>>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'e * 'd) -$>$ 'a -$>$ ('c * 'e) * 'd\\
  22.359 -}
  22.360 -  \end{itemize}
  22.361 -\end{frame}
  22.362 -
  22.363 -\begin{frame}
  22.364 -  \frametitle{Example with combinators}
  22.365 -    \texttt{\footnotesize{
  22.366 -      \begin{tabbing}
  22.367 -xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
  22.368 -fun prep\_ori [] \_ \_ = ([], e\_ctxt)\\
  22.369 -\>| prep\_ori fmz thy pbt =\\
  22.370 -\>\>\>let\\
  22.371 -\>\>\>\>val ctxt = ProofContext.init\_global thy \\
  22.372 -\>\>\>\>\> |> fold declare\_constraints fmz\\
  22.373 -\>\>\>\>val ori = \\
  22.374 -\>\>\>\>\> map (add\_field thy pbt o split\_dts o the o parseNEW ctxt) fmz\\
  22.375 -\>\>\>\>\>\> |> add\_variants\\
  22.376 -\>\>\>\>val maxv = map fst ori |> max\\
  22.377 -\>\>\>\>val maxv = if maxv = 0 then 1 else maxv\\
  22.378 -\>\>\>\>val oris = coll\_variants ori\\
  22.379 -\>\>\>\>\> |> map (replace\_0 maxv |> apfst)\\
  22.380 -\>\>\>\>\> |> add\_id\\
  22.381 -\>\>\>\>\> |> map flattup\\
  22.382 -\>\>\>in (oris, ctxt) end;
  22.383 -      \end{tabbing}
  22.384 -    }}
  22.385 -\dots which probably can be further polished.
  22.386 -\end{frame}
  22.387 -
  22.388 -%\subsection[Future Development]{Preparation of Future Development}
  22.389 -%\begin{frame}
  22.390 -%  \frametitle{Preparation of Future Development}
  22.391 -%
  22.392 -%%  "Script Solve_root_equation (e_e::bool) (v_v::real) =       " ^
  22.393 -%%  " (let e_e = ((Try (Rewrite_Set norm_equation False)) @@    " ^
  22.394 -%%  "            (Try (Rewrite_Set Test_simplify False))) e_e;  " ^
  22.395 -%%  "     (L_L::bool list) =                                    " ^
  22.396 -%%  "            (SubProblem (Test',                            " ^
  22.397 -%%  "                         [linear,univariate,equation,test]," ^
  22.398 -%%  "                         [Test,solve_linear])              " ^
  22.399 -%%  "                        [BOOL e_e, REAL v_v])              " ^
  22.400 -%%  "  in Check_elementwise L_L {(v_v::real). Assumptions})     "
  22.401 -%\end{frame}
  22.402 -%
  22.403 -%\begin{frame}
  22.404 -%  \frametitle{Preparation of Future Development}
  22.405 -%    \begin{itemize}
  22.406 -%    \item logical data for Isabelle provers in contexts
  22.407 -%    \item \isac{} programming language more compact\\
  22.408 -%      $\rightarrow$ context built automatically
  22.409 -%    \end{itemize}
  22.410 -%\end{frame}
  22.411 -
  22.412 -
  22.413 -\section[Problems]{Problems encountered in the project}
  22.414 -\begin{frame}
  22.415 -  \frametitle{Problems encountered in the project}
  22.416 -    \begin{itemize}
  22.417 -    \item new Isabelle release in February 2011: update \sisac{} first
  22.418 -\pause
  22.419 -    \item lines of code (LOC) in Isabelle and \sisac{}\\ \vspace{0.2cm}
  22.420 -\textit{
  22.421 -    \begin{tabular}{lrl}
  22.422 -      src/ & 1700 & $\,$k LOC\\
  22.423 -      src/Pure/ & 70 & k LOC\\
  22.424 -      src/Provers/ & 8 & k LOC\\
  22.425 -      src/Tools/ & 800 & k LOC\\
  22.426 -      src/Tools/isac/ & 37 & k LOC\\
  22.427 -      src/Tools/isac/Knowledge & 16 & k LOC
  22.428 -    \end{tabular}
  22.429 -}
  22.430 -\pause
  22.431 -    \item changes scattered throughout the code ($\rightarrow$ grep)
  22.432 -\pause
  22.433 -    \item documentation of Isabelle very ``technical'' (no API)
  22.434 -\pause
  22.435 -   \item documentation of \sisac{} not up to date
  22.436 -    \end{itemize}
  22.437 -\end{frame}
  22.438 -
  22.439 -%\begin{frame}
  22.440 -%  \frametitle{Lines of Code}
  22.441 -%    \begin{tabular}{lr}
  22.442 -%      src/ & 1700 k \\
  22.443 -%      src/Pure/ & 70 k \\
  22.444 -%      src/Provers/ & 8 k \\
  22.445 -%      src/Tools/ & 800 k \\
  22.446 -%      src/Tools/isac/ & 37 k \\
  22.447 -%      src/Tools/isac/Knowledge & 16 k \\
  22.448 -%    \end{tabular}
  22.449 -%\end{frame}
  22.450 -
  22.451 -\section{Summary}
  22.452 -\begin{frame}
  22.453 -  \frametitle{Summary}
  22.454 -The project succeeded in all goals:
  22.455 -\begin{itemize}
  22.456 -\item implemented Isabelle's contexts in \sisac{} such that
  22.457 -\item user input requires no type constraints anymore
  22.458 -\item consistent logical data is prepared for Isabelle's provers
  22.459 -\end{itemize}
  22.460 -\pause
  22.461 -The course of the project was close to the plan:
  22.462 -\begin{itemize}
  22.463 -\item faster in writing new code
  22.464 -\item slower in integrating the code into \sisac
  22.465 -\end{itemize}
  22.466 -\pause
  22.467 -The project provided essential prerequisites for further development of the Lucas-interpreter.
  22.468 -\end{frame}
  22.469 -
  22.470 -\end{document}
  22.471 -
  22.472 -
    23.1 --- a/doc-isac/mlehnfeld/projektbericht.tex	Thu Jun 26 17:19:30 2014 +0200
    23.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.3 @@ -1,575 +0,0 @@
    23.4 -\documentclass[a4paper,12pt]{article}
    23.5 -%
    23.6 -\usepackage[ngerman]{babel}
    23.7 -\usepackage[utf8]{inputenc}
    23.8 -\usepackage{ngerman}
    23.9 -\usepackage{graphicx}
   23.10 -\bibliographystyle{alpha}
   23.11 -
   23.12 -\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   23.13 -\def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
   23.14 -
   23.15 -\begin{document}
   23.16 -
   23.17 -\title{\Large {\bf Verbindung von 'Computation' und 'Deduction' im \isac{}-System}\\~\\
   23.18 -	Projektpraktikum am Institut für Computersprachen,\\Technische Universit\"at Wien\\
   23.19 -\vspace{0.7cm}
   23.20 -\large{Betreuer: Univ.-Prof. Dr. Jens Knoop}}
   23.21 -\author{Mathias Lehnfeld\\
   23.22 -	{\tt mathias.lehnfeld@gmx.at}}
   23.23 -%pdflatex creates an empty page 1 and the titlepage on page 2 ?!?...
   23.24 -%\thanks{Betreuer: Univ.-Prof. Dr. Jens Knoop, Technische Universit\"at Wien\\
   23.25 -%        Dr. Walther Neuper, Technische Universit\"at Graz}
   23.26 -\date{30. Mai 2011}
   23.27 -\maketitle
   23.28 -\clearpage
   23.29 -\tableofcontents
   23.30 -\clearpage
   23.31 -
   23.32 -
   23.33 -\section{Zur Aufgabenstellung}
   23.34 -Das \sisac{}-Projekt entwickelt einen {\it math assistant} aufbauend auf den
   23.35 -{\it theorem prover} Isabelle. Der Kern des \sisac{}-Systems ist ein
   23.36 -{\it Lucas-Interpreter}, der automatisch Benutzerführung für schrittweises
   23.37 -Problemlösen erzeugt: Der nächste Schritt wird von einem Programm
   23.38 -berechnet ({\it computation}); {\it deduction} wird gefordert, wenn der Benutzer
   23.39 -eine Formel eingibt (die Ableitbarkeit der Formel aus dem {\it context} ist
   23.40 -zu beweisen).\\
   23.41 -\\
   23.42 -Die Aufgabenstellung im Rahmen des Projektpraktikums besteht darin, das
   23.43 -in Isabelle verfügbare Konzept {\it context} in den Lucas-Interpreter
   23.44 -einzubauen. Dies schließt grundlegende Design-Überlegungen ein, verlangt
   23.45 -tiefes Eindringen in den umfangreichen Code von zwei Softwareprodukten,
   23.46 -{\it Isabelle} und \sisac{} und bedeutet daher Zusammenarbeit mit den jeweiligen
   23.47 -Entwicklerteams.\\
   23.48 -\\
   23.49 -Ein erfolgreicher Einbau der Isabelle-{\it context}s in den
   23.50 -Lucas-Interpreter wird \sisac{}s Fähigkeit, Benutzereingaben zu
   23.51 -interpretieren, wesentlich erweitern: {\it context}s stellen Isabelles
   23.52 -automatischen Beweisern die notwendigen Daten bereit.
   23.53 -
   23.54 -
   23.55 -\section{Planung des Projektes}
   23.56 -\subsection{Ist-Zustand vor dem Projekt}
   23.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.
   23.58 -
   23.59 -\subsection{Geplanter Soll-Zustand nach dem Projekt}
   23.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.
   23.61 -
   23.62 -\subsection{Zeitplanung f\"ur das Projekt}
   23.63 -Die Planung f\"ur das Projekt sah folgende Meilensteine vor (Details siehe \ref{ms-desc}):
   23.64 -\begin{enumerate}
   23.65 -\item \textbf{Voraussetzungen zum Arbeitsbeginn schaffen} (10.02. -- 18.02.)
   23.66 -  %Beschreibung siehe \ref{ms1_desc}
   23.67 -\item \textbf{\isac{} auf die letzte Isabelle-Release updaten} (21.02. -- 25.02.)
   23.68 -  %Beschreibung siehe \ref{ms2_desc}
   23.69 -\item \textbf{Parsen aus \textit{contexts}} (28.02. -- 04.03.)
   23.70 -  %Beschreibung siehe \ref{ms3_desc}
   23.71 -\item \textbf{Spezifikationsphase mit \textit{context}s} (07.03. -- 11.03.)
   23.72 -  %Beschreibung siehe \ref{ms4_desc}
   23.73 -\item \textbf{L\"osungsphase mit \textit{context}s} (14.03. -- 18.03.)
   23.74 -  %Beschreibung siehe \ref{ms5_desc}
   23.75 -\end{enumerate}
   23.76 -
   23.77 -\section{Konzepte und L\"osungen}
   23.78 -\subsection{Architektur von \isac}
   23.79 -Die Grafik auf Seite \pageref{architektur} gibt einen \"Uberblick \"uber die Architektur von \sisac:
   23.80 -
   23.81 -\begin{figure} [htb]
   23.82 -\begin{center}
   23.83 -    \includegraphics[width=120mm]{overview.pdf}
   23.84 -\end{center}
   23.85 -\caption{Lucas-interpreter und Isabelle}
   23.86 -\label{architektur}
   23.87 -\end{figure}
   23.88 -Die Mathematik-Engine von \sisac{} ist nach dem Konzept eines ``Lucas-Interpreters'' (LI) gebaut. Ein LI interpretiert drei Arten von Daten:
   23.89 -\begin{enumerate}
   23.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.
   23.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.
   23.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.
   23.93 -\end{enumerate}
   23.94 -
   23.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}:
   23.96 -
   23.97 -\begin{enumerate}
   23.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.
   23.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.
  23.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.
  23.101 -\end{enumerate}
  23.102 -
  23.103 -\subsection{Isabelles Konzept von ``contexts''}
  23.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:
  23.105 -
  23.106 -{\tt
  23.107 -\begin{tabbing}
  23.108 -xx\=xx\=in\=\kill
  23.109 -structure ContextData =  {Proof\_Data}\\
  23.110 -\>~({type T} = term list\\
  23.111 -\>\>{fun init \_} = []);\\
  23.112 -\\
  23.113 -fun insert\_assumptions asms = \\
  23.114 -\>\>\>ContextData{.map} (fn xs => distinct (asms@xs));\\
  23.115 -\\
  23.116 -fun get\_assumptions ctxt = ContextData{.get} ctxt;\\
  23.117 -\\
  23.118 -\\
  23.119 -val declare\_constraints : \\
  23.120 -\>\>\>term -> Proof.context -> Proof.context
  23.121 -\end{tabbing}
  23.122 -}
  23.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.
  23.124 -
  23.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:
  23.126 -{\tt
  23.127 -\begin{tabbing}
  23.128 -xx\=xx\=xx\=xx\=xx\=\kill
  23.129 -fun parseNEW ctxt str = \\
  23.130 -\>\>\>SOME ({Syntax.read\_term ctxt} str |> numbers\_to\_string)\\
  23.131 -\>\>\>handle \_ => NONE;
  23.132 -      \end{tabbing}
  23.133 -}
  23.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}:
  23.135 -{\tt
  23.136 -\begin{tabbing}
  23.137 -xx\=xx\=xx\=xx\=xx\=\kill
  23.138 -fun parse thy str =\\
  23.139 -\>(let val t = ({typ\_a2real} o numbers\_to\_string)\\
  23.140 -\>\>\>\>({Syntax.read\_term\_global thy} str)\\
  23.141 -\>\>in SOME (cterm\_of thy t) end)\\
  23.142 -\>\>\>handle \_ => NONE;\\
  23.143 -      \end{tabbing}
  23.144 -}
  23.145 -
  23.146 -\subsection{Die Initialisierung von ``contexts''}\label{init-ctxt}
  23.147 -``Contexts'' werden an zwei Stellen von Lucas-Interpretation initialisiert: am Beginn der Spezifikationsphase und zu Beginn der L\"osungsphase.
  23.148 -
  23.149 -\begin{enumerate}
  23.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.
  23.151 -
  23.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.
  23.153 -
  23.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
  23.155 -  \begin{enumerate}
  23.156 -  \item den Typdeklarationen aller in der Spezifikation vorkommenden Variablen mittels \textit{declare\_constraints}
  23.157 -  \item den ``preconditions'' des (interaktiv oder automatisch) spezifizierten Programmes, genauer: mit den ``preconditions'' des zugeh\"origen Guards, der meist gleich der Spezifikation ist
  23.158 -  \end{enumerate}
  23.159 -\end{enumerate}
  23.160 -
  23.161 -
  23.162 -\subsection{Aufbau von ``contexts'' in der Interpretation}\label{partiality}
  23.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.
  23.164 -
  23.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!).
  23.166 -
  23.167 -\subsection{Transfer von ``contexts'' aus Subprogrammen}\label{transfer}
  23.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:
  23.169 -{\tt
  23.170 -\begin{tabbing}
  23.171 -xx\=xx\=xx\=xx\=xx\=\kill
  23.172 -fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\
  23.173 -\>  let\\
  23.174 -\>\>    val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\
  23.175 -\>\>    fun transfer [] to\_ctxt = to\_ctxt\\
  23.176 -\>\>\>      | transfer (from\_asm::fas) to\_ctxt =\\
  23.177 -\>\>\>\>\>          if inter op = (vars from\_asm) to\_vars = []\\
  23.178 -\>\>\>\>\>         then transfer fas to\_ctxt\\
  23.179 -\>\>\>\>\>          else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\
  23.180 -\>  in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\
  23.181 -      \end{tabbing}
  23.182 -}
  23.183 -Folgende Daten werden aus dem Sub-``context'' in den ``context'' des aufrufenden Programmes zur\"uckgegeben:
  23.184 -\begin{enumerate}
  23.185 -\item die R\"uckgabewerte des Subprogrammes, sofern sie vom Typ \textit{bool} sind
  23.186 -\item alle \textit{assumptions}, die eine Variable enthalten, die auch einer der R\"uckgabewerte enth\"alt
  23.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.
  23.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:
  23.189 -\end{enumerate}
  23.190 -
  23.191 -\begin{tabbing}
  23.192 -xxx\=xxx\=\kill
  23.193 -     \`$\mathit{(some)}\;\mathit{assumptions}$\\
  23.194 -$\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\
  23.195 -     \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\
  23.196 -\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\
  23.197 -\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\
  23.198 -\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ 
  23.199 -     \`$x\not=3\land x\not=0$\\
  23.200 -\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  23.201 -\>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\
  23.202 -\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\
  23.203 -\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  23.204 -\>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\
  23.205 -\>\>$-6 * x + 5 * x ^ 2 = 0$ \\
  23.206 -\>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\
  23.207 -\>\>$[x = 0, x = \frac{6}{5}]$ \\
  23.208 -     \`$x = 0\land x = \frac{6}{5}$\\
  23.209 -\>$[{x = 0}, x = \frac{6}{5}]$ \\
  23.210 -     \`{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\
  23.211 -\>$[x = \frac{6}{5}]$ \\
  23.212 -$[x = \frac{6}{5}]$
  23.213 -\end{tabbing}
  23.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:
  23.215 -{\tt
  23.216 -\begin{tabbing}
  23.217 -xx\=xx\=xx\=xx\=xx\=xx\=\kill
  23.218 -Script Solve\_root\_equation (e\_e::bool) (v\_v::real) =      \\
  23.219 -\> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@   \\
  23.220 -\>\>\>            (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\
  23.221 -\>\>     (L\_L::bool list) =                                   \\
  23.222 -\>\>\>            (SubProblem (Test',                           \\
  23.223 -\>\>\>\>                         [linear,univariate,equation,test]\\
  23.224 -\>\>\>\>                         [Test,solve\_linear])             \\
  23.225 -\>\>\>\>                        [BOOL e\_e, REAL v\_v])             \\
  23.226 -\>  in {Check\_Elementwise L\_L \{(v\_v::real). Assumptions\}})\\      
  23.227 -\end{tabbing}
  23.228 -}
  23.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.
  23.230 -
  23.231 -\subsection{\"Uberblick: ``contexts'' bei Lucas-Interpretation}
  23.232 -
  23.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}.
  23.234 -
  23.235 -\paragraph{Formulierung der Aufgabenstellung und Spezifikation}~\\
  23.236 -
  23.237 -Erklärung siehe \ref{init-ctxt-spec}.
  23.238 -\begin{verbatim}
  23.239 -val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
  23.240 -val (dI',pI',mI') =
  23.241 -  ("Test", ["sqroot-test","univariate","equation","test"],
  23.242 -   ["Test","squ-equ-test-subpbl1"]);
  23.243 -val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
  23.244 -\end{verbatim}
  23.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.\\
  23.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.
  23.247 -\begin{verbatim}
  23.248 -val ctxt = get_ctxt pt p;
  23.249 -val SOME known_x = parseNEW ctxt "x + y + z";
  23.250 -val SOME unknown = parseNEW ctxt "a + b + c";
  23.251 -\end{verbatim}
  23.252 -Dies erzeugt folgenden Output:
  23.253 -\begin{verbatim}
  23.254 -val ctxt = <context>: Proof.context
  23.255 -val known_x =
  23.256 -   Const ("Groups.plus_class.plus",
  23.257 -       "RealDef.real => RealDef.real => RealDef.real") $
  23.258 -     (Const ("Groups.plus_class.plus",
  23.259 -         "RealDef.real => RealDef.real => RealDef.real") $
  23.260 -       Free ("x", "RealDef.real") $ Free ("y", "RealDef.real")) $
  23.261 -     Free ("z", "RealDef.real"):
  23.262 -   term
  23.263 -val unknown =
  23.264 -   Const ("Groups.plus_class.plus", "'a => 'a => 'a") $
  23.265 -     (Const ("Groups.plus_class.plus", "'a => 'a => 'a")
  23.266 -       $ Free ("a", "'a") $ Free ("b", "'a")) $
  23.267 -     Free ("c", "'a"):
  23.268 -   term
  23.269 -\end{verbatim}
  23.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}.
  23.271 -
  23.272 -\paragraph{Beginn der Interpretation}~\\
  23.273 -
  23.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:
  23.275 -\begin{verbatim}
  23.276 -get_assumptions_ pt p |> terms2strs
  23.277 -\end{verbatim}
  23.278 -Output:
  23.279 -\begin{verbatim}
  23.280 -val it = ["precond_rootmet x"]: string list
  23.281 -\end{verbatim}
  23.282 -
  23.283 -\paragraph{Bearbeitung eines Subproblems}~\\
  23.284 -
  23.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.\\
  23.286 -In einem Zwischenschritt bestehen die lokalen Assumptions aus der Annahme, dass die Gleichung mit der Gleichheitsregel zu matchen ist:
  23.287 -\begin{verbatim}
  23.288 -["matches (?a = ?b) (-1 + x = 0)"]: string list
  23.289 -\end{verbatim}
  23.290 -Nach künstlichem Einfügen zweier Assumptions und Beendigung des Subproblems steht eine Lösung für \textit{x} in den Assumptions:\\
  23.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}\\
  23.292 -\\
  23.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}).
  23.294 -
  23.295 -\paragraph{Abschluss der Berechnung}~\\
  23.296 -
  23.297 -Nach den letzten Aufrufen der Mathematik-Engine stehen alle Schritte fest:
  23.298 -\begin{verbatim}[
  23.299 -(([], Frm), solve (x + 1 = 2, x)),
  23.300 -(([1], Frm), x + 1 = 2),
  23.301 -(([1], Res), x + 1 + -1 * 2 = 0),
  23.302 -(([2], Res), -1 + x = 0),
  23.303 -(([3], Pbl), solve (-1 + x = 0, x)),
  23.304 -(([3,1], Frm), -1 + x = 0),
  23.305 -(([3,1], Res), x = 0 + -1 * -1),
  23.306 -(([3,2], Res), x = 1),
  23.307 -(([3], Res), [x = 1]),
  23.308 -(([4], Res), [x = 1]),
  23.309 -(([], Res), [x = 1])] 
  23.310 -\end{verbatim}
  23.311 -
  23.312 -\section{Beschreibung der Meilensteine}\label{ms-desc}
  23.313 -\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}\label{ms1_desc}
  23.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.
  23.315 -
  23.316 -\subsection{\isac{} auf die letzte Isabelle-Release updaten}\label{ms2_desc}
  23.317 -Die Arbeit mit den Isabelle {\it context}s wird Anfragen in isabelle-dev@
  23.318 -erfordern. isabelle-dev@ beantwortet Fragen i.A. nur f\"ur die aktuelle
  23.319 -Release. Überraschenderweise wurde zwei Wochen vor Beginn des Projektpraktikums eine neue Release
  23.320 -veröffentlicht. Daher muss auf diese vor Arbeitsbeginn upgedatet werden.
  23.321 -
  23.322 -\subsection{Parsen aus {\it context}s}\label{ms3_desc}
  23.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.
  23.324 -
  23.325 -\subsection{Spezifikationsphase mit {\it context}s}\label{ms4_desc}
  23.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.
  23.327 -
  23.328 -\subsection{L\"osungsphase mit {\it context}s}\label{ms5_desc}
  23.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.
  23.330 -
  23.331 -\section{Bericht zum Projektverlauf}
  23.332 -
  23.333 -\subsection{Voraussetzungen zum Arbeitsbeginn schaffen}
  23.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.
  23.335 -
  23.336 -\subsection{\isac{} auf die letzte Isabelle-Release updaten}
  23.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.\\
  23.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.
  23.339 -
  23.340 -\subsection{Parsen aus {\it context}s}
  23.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.
  23.342 -
  23.343 -\subsection{Spezifikationsphase mit {\it context}s}
  23.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.
  23.345 -Insgesamt verlief diese Phase trotz der langwierigen Fehlersuche nicht viel langsamer als geplant.
  23.346 -
  23.347 -\subsection{L\"osungsphase mit {\it context}s}
  23.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.
  23.349 -
  23.350 -
  23.351 -\section{Abschließende Bemerkungen}
  23.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.
  23.353 -
  23.354 -Der %nicht zuletzt 
  23.355 -durch das überraschend notwendig gewordene Update 
  23.356 -von Isabelle2009-2 auf Isabelle2011
  23.357 -bedingte zähe Verlauf bis ich endlich wirklich an der eigentlichen Aufgabenstellung arbeiten konnte, %war etwas ernüchternd, 
  23.358 -verlange einies Umdisponieren,
  23.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.
  23.360 -
  23.361 -Die Zusammenarbeit mit \sisac-Entwicklung an der Technischen Universit\"at Graz \"uber Herrn Neuper hat %jedenfalls 
  23.362 -sehr gut funktioniert und aus meiner Sicht haben wir uns sehr gut verstanden. Das hat ein produktives %entspanntes 
  23.363 -Arbeitsklima ermöglicht.
  23.364 -
  23.365 -%Abgesehen von der zeitlichen Verzögerung des Projektes freue ich mich über den erfolgreichen Abschluss der geplanten Aufgaben und deren interessanten Charakter.
  23.366 -
  23.367 -\clearpage
  23.368 -
  23.369 -\bibliography{bib}
  23.370 -
  23.371 -\clearpage
  23.372 -
  23.373 -\appendix
  23.374 -%\section*{Anhang}
  23.375 -\section{Demobeispiel}\label{demo-code}
  23.376 -\begin{verbatim}
  23.377 -
  23.378 -theory All_Ctxt imports Isac begin
  23.379 -
  23.380 -text {* all changes of context are demonstrated in a mini example.
  23.381 -  see test/../mstools.sml --- all ctxt changes in minimsubpbl x+1=2 --- *}
  23.382 -
  23.383 -section {* start of the mini example *}
  23.384 -
  23.385 -ML {*
  23.386 -  val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
  23.387 -  val (dI',pI',mI') =
  23.388 -    ("Test", ["sqroot-test","univariate","equation","test"],
  23.389 -     ["Test","squ-equ-test-subpbl1"]);
  23.390 -  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
  23.391 -*}
  23.392 -
  23.393 -section {* start of specify phase *}
  23.394 -
  23.395 -text {* variables known from formalisation provide type-inference 
  23.396 -  for further input *}
  23.397 -
  23.398 -ML {*
  23.399 -  val ctxt = get_ctxt pt p;
  23.400 -  val SOME known_x = parseNEW ctxt "x + y + z";
  23.401 -  val SOME unknown = parseNEW ctxt "a + b + c";
  23.402 -*}
  23.403 -
  23.404 -ML {*
  23.405 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.406 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.407 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.408 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.409 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.410 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.411 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.412 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.413 -*}
  23.414 -
  23.415 -section {* start interpretation of method *}
  23.416 -
  23.417 -text {* preconditions are known at start of
  23.418 -        interpretation of (root-)method *}
  23.419 -
  23.420 -ML {*
  23.421 -  get_assumptions_ pt p |> terms2strs;
  23.422 -*}
  23.423 -
  23.424 -ML {*
  23.425 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.426 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.427 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.428 -*}
  23.429 -
  23.430 -section {* start a subproblem: specification *}
  23.431 -
  23.432 -text {* variables known from arguments of (sub-)method
  23.433 -        provide type-inference for further input *}
  23.434 -
  23.435 -ML {*
  23.436 -  val ctxt = get_ctxt pt p;
  23.437 -  val SOME known_x = parseNEW ctxt "x+y+z";
  23.438 -  val SOME unknown = parseNEW ctxt "a+b+c";
  23.439 -*}
  23.440 -
  23.441 -ML {*
  23.442 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.443 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.444 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.445 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.446 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.447 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.448 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.449 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
  23.450 -*}
  23.451 -
  23.452 -section {* interpretation of subproblem's method *}
  23.453 -
  23.454 -text {* preconds are known at start of interpretation of (sub-)method *}
  23.455 -
  23.456 -ML {*
  23.457 - get_assumptions_ pt p |> terms2strs
  23.458 -*}
  23.459 -
  23.460 -ML {*
  23.461 - val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
  23.462 -*}
  23.463 -
  23.464 -ML {*
  23.465 -  "artifically inject assumptions";
  23.466 -  val (SOME (iform, cform), SOME (ires, cres)) = get_obj g_loc pt (fst p);
  23.467 -  val ctxt = insert_assumptions [str2term "x < sub_asm_out",
  23.468 -                                 str2term "a < sub_asm_local"] cres;
  23.469 -  val pt = update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
  23.470 -*}
  23.471 -
  23.472 -ML {* 
  23.473 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.474 -val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.475 -*}
  23.476 -
  23.477 -section {* finish subproblem, return to calling method*}
  23.478 -
  23.479 -text {* transfer non-local assumptions and result from sub-method
  23.480 -        to root-method.
  23.481 -        non-local assumptions are those contaning a variable known
  23.482 -        in root-method.
  23.483 -*}
  23.484 -
  23.485 -ML {*
  23.486 -  terms2strs (get_assumptions_ pt p);
  23.487 -*}
  23.488 -
  23.489 -ML {*
  23.490 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.491 -  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  23.492 -*}
  23.493 -
  23.494 -section {* finish Lucas interpretation *}
  23.495 -
  23.496 -text {* assumptions collected during lucas-interpretation
  23.497 -        for proof of postcondition *}
  23.498 -
  23.499 -ML {*
  23.500 -  terms2strs (get_assumptions_ pt p);
  23.501 -*}
  23.502 -
  23.503 -ML {*
  23.504 -  show_pt pt;
  23.505 -*}
  23.506 -
  23.507 -end
  23.508 -\end{verbatim}
  23.509 -
  23.510 -\section{Stundenliste}
  23.511 -
  23.512 -\subsection*{Voraussetzungen zum Arbeitsbeginn schaffen}
  23.513 -\begin{tabular}[t]{lll}
  23.514 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  23.515 -    10.02.2011 & 2:00 & Besprechung der Problemstellung \\
  23.516 -    11.02.2011 & 1:30 & {\it context}s studieren, Isabelle/Mercurial Installation \\
  23.517 -    18.02.2011 & 0:15 & meld/tortoisehg installieren \\
  23.518 -    20.02.2011 & 1:00 & Projektbeschreibung, jedit Probleme \\
  23.519 -    25.02.2011 & 1:00 & Ausarbeitung Meilensteine \\
  23.520 -    26.02.2011 & 1:00 & Ausarbeitung Ist-/Soll-Zustand, {\it context}s studieren\\
  23.521 -    28.02.2011 & 1:15 & Einführungsbeispiel {\it context}s \\
  23.522 -    28.02.2011 & 1:15 & Projektplan erstellen, formatieren \\
  23.523 -    01.03.2011 & 1:00 & Projektplan überarbeiten, Stundenlisten \\
  23.524 -\end{tabular}
  23.525 -
  23.526 -\subsection*{\isac{} auf die letzte Isabelle-Release updaten}
  23.527 -\begin{tabular}[t]{lll}
  23.528 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  23.529 -    18.02.2011 & 2:45 & Anpassungen an Isabelle2011 \\
  23.530 -    20.02.2011 & 2:45 & Update auf Isabelle2011, Fehlersuche \\
  23.531 -    21.02.2011 & 6:30 & ... \\
  23.532 -    25.02.2011 & 5:30 & ... \\
  23.533 -    26.02.2011 & 4:30 & ... \\
  23.534 -    03.03.2011 & 5:00 & ... \\
  23.535 -    04.03.2011 & 6:00 & Tests reparieren \\
  23.536 -\end{tabular}
  23.537 -
  23.538 -\subsection*{Parsen aus \textit{contexts}}
  23.539 -\begin{tabular}[t]{lll}
  23.540 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  23.541 -    02.03.2011 & 1:30 & vorbereitendes Übungsbeispiel \\
  23.542 -    03.03.2011 & 1:00 & ... \\
  23.543 -    04.03.2011 & 5:00 & Funktion {\tt parseNEW} schreiben \\
  23.544 -    05.03.2011 & 3:00 & Funktion {\tt vars} anpassen, {\tt declare\_constraints} neu \\
  23.545 -    07.03.2011 & 8:45 & {\tt parseNEW}, Spezifikationen studieren \\
  23.546 -    08.03.2011 & 6:00 & {\it context} in zentrale Datenstrukturen einbauen \\
  23.547 -    09.03.2011 & 2:00 & Fehlersuche {\it context}-Integration \\
  23.548 -\end{tabular}
  23.549 -
  23.550 -\subsection*{Spezifikationsphase mit \textit{context}s}
  23.551 -\begin{tabular}[t]{lll}
  23.552 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  23.553 -    10.03.2011 & 2:30 & {\it context} in {\tt prep\_ori} und {\tt appl\_add} einbauen\\
  23.554 -    11.03.2011 & 5:45 & {\tt appl\_add} überarbeiten \\
  23.555 -    12.03.2011 & 5:15 & Fehlersuche \\
  23.556 -    14.03.2011 & 2:00 & ... \\
  23.557 -    16.03.2011 & 2:30 & ... \\
  23.558 -    17.03.2011 & 1:45 & ... \\
  23.559 -    18.03.2011 & 4:45 & ..., Optimierung \\
  23.560 -    19.03.2011 & 5:30 & ... \\
  23.561 -    21.03.2011 & 3:00 & Abschluss Spezifikationsphase \\
  23.562 -\end{tabular}
  23.563 -
  23.564 -\subsection*{L\"osungsphase mit \textit{context}s}
  23.565 -\begin{tabular}[t]{lll}
  23.566 -    {\bf Datum} & {\bf Stunden} & {\bf Beschreibung} \\
  23.567 -    22.03.2011 & 4:30 & {\it context} in Funktion {\tt solve} einbauen\\
  23.568 -    23.03.2011 & 4:45 & Tests reparieren \\
  23.569 -    24.03.2011 & 3:30 & ... \\
  23.570 -    25.03.2011 & 2:00 & ... \\
  23.571 -    03.04.2011 & 4:00 & ... \\
  23.572 -    05.04.2011 & 8:00 & Optimierung \\
  23.573 -    06.04.2011 & 7:15 & L\"osung Exponentenoperator \\
  23.574 -    07.04.2011 & 7:00 & ... \\
  23.575 -    12.04.2011 & 3:30 & Projektbericht \\
  23.576 -\end{tabular}
  23.577 -
  23.578 -\end{document}