doc-src/isac/jrocnik/eJMT-paper/jrocnik_eJMT.tex
author Jan Rocnik <jan.rocnik@student.tugraz.at>
Tue, 11 Sep 2012 22:27:50 +0200
changeset 42502 07dcff533c1d
parent 42501 988e6bd123c4
child 42503 67921e3c60ff
permissions -rwxr-xr-x
jrocnik: paper: rework on 3.5 completed, severell style changes (no more paragraph or example enviroments, smaller sizes in example code). additional some rewrites in 3.3
     1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     2 % Electronic Journal of Mathematics and Technology (eJMT) %
     3 % style sheet for LaTeX.  Please do not modify sections   %
     4 % or commands marked 'eJMT'.                              %
     5 %                                                         %
     6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     7 %                                                         %
     8 % eJMT commands                                           %
     9 %                                                         %
    10 \documentclass[12pt,a4paper]{article}%                    %
    11 \usepackage{times}                                        %
    12 \usepackage{amsfonts,amsmath,amssymb}                     %
    13 \usepackage[a4paper]{geometry}                            %
    14 \usepackage{fancyhdr}                                     %
    15 \usepackage{color}                                        %
    16 \usepackage[pdftex]{hyperref} % see note below            %
    17 \usepackage{graphicx}%                                    %
    18 \hypersetup{                                              %
    19     a4paper,                                              %
    20     breaklinks                                            %
    21 }                                                         %
    22 %                                                         %
    23 \newtheorem{theorem}{Theorem}                             %
    24 \newtheorem{acknowledgement}[theorem]{Acknowledgement}    %
    25 \newtheorem{algorithm}[theorem]{Algorithm}                %
    26 \newtheorem{axiom}[theorem]{Axiom}                        %
    27 \newtheorem{case}[theorem]{Case}                          %
    28 \newtheorem{claim}[theorem]{Claim}                        %
    29 \newtheorem{conclusion}[theorem]{Conclusion}              %
    30 \newtheorem{condition}[theorem]{Condition}                %
    31 \newtheorem{conjecture}[theorem]{Conjecture}              %
    32 \newtheorem{corollary}[theorem]{Corollary}                %
    33 \newtheorem{criterion}[theorem]{Criterion}                %
    34 \newtheorem{definition}[theorem]{Definition}              %
    35 \newtheorem{example}[theorem]{Example}                    %
    36 \newtheorem{exercise}[theorem]{Exercise}                  %
    37 \newtheorem{lemma}[theorem]{Lemma}                        %
    38 \newtheorem{notation}[theorem]{Notation}                  %
    39 \newtheorem{problem}[theorem]{Problem}                    %
    40 \newtheorem{proposition}[theorem]{Proposition}            %
    41 \newtheorem{remark}[theorem]{Remark}                      %
    42 \newtheorem{solution}[theorem]{Solution}                  %
    43 \newtheorem{summary}[theorem]{Summary}                    %
    44 \newenvironment{proof}[1][Proof]{\noindent\textbf{#1.} }  %
    45 {\ \rule{0.5em}{0.5em}}                                   %
    46 %                                                         %
    47 % eJMT page dimensions                                    %
    48 %                                                         %
    49 \geometry{left=2cm,right=2cm,top=3.2cm,bottom=4cm}        %
    50 %                                                         %
    51 % eJMT header & footer                                    %
    52 %                                                         %
    53 \newcounter{ejmtFirstpage}                                %
    54 \setcounter{ejmtFirstpage}{1}                             %
    55 \pagestyle{empty}                                         %
    56 \setlength{\headheight}{14pt}                             %
    57 \geometry{left=2cm,right=2cm,top=3.2cm,bottom=4cm}        %
    58 \pagestyle{fancyplain}                                    %
    59 \fancyhf{}                                                %
    60 \fancyhead[c]{\small The Electronic Journal of Mathematics%
    61 \ and Technology, Volume 1, Number 1, ISSN 1933-2823}     %
    62 \cfoot{%                                                  %
    63   \ifnum\value{ejmtFirstpage}=0%                          %
    64     {\vtop to\hsize{\hrule\vskip .2cm\thepage}}%          %
    65   \else\setcounter{ejmtFirstpage}{0}\fi%                  %
    66 }                                                         %
    67 %                                                         %
    68 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    69 %
    70 % Please place your own definitions here
    71 %
    72 \def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    73 \def\sisac{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
    74 
    75 \usepackage{color}
    76 \definecolor{lgray}{RGB}{238,238,238}
    77 
    78 %
    79 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    80 %                                                         %
    81 % How to use hyperref                                     %
    82 % -------------------                                     %
    83 %                                                         %
    84 % Probably the only way you will need to use the hyperref %
    85 % package is as follows.  To make some text, say          %
    86 % "My Text Link", into a link to the URL                  %
    87 % http://something.somewhere.com/mystuff, use             %
    88 %                                                         %
    89 % \href{http://something.somewhere.com/mystuff}{My Text Link}
    90 %                                                         %
    91 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    92 %
    93 \begin{document}
    94 %
    95 % document title
    96 %
    97 \title{Trials with TP-based Programming
    98 \\
    99 for Interactive Course Material}%
   100 %
   101 % Single author.  Please supply at least your name,
   102 % email address, and affiliation here.
   103 %
   104 \author{\begin{tabular}{c}
   105 \textit{Jan Ro\v{c}nik} \\
   106 jan.rocnik@student.tugraz.at \\
   107 IST, SPSC\\
   108 Graz University of Technologie\\
   109 Austria\end{tabular}
   110 }%
   111 %
   112 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   113 %                                                         %
   114 % eJMT commands - do not change these                     %
   115 %                                                         %
   116 \date{}                                                   %
   117 \maketitle                                                %
   118 %                                                         %
   119 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   120 %
   121 % abstract
   122 %
   123 \begin{abstract}
   124 
   125 Traditional course material in engineering disciplines lacks an
   126 important component, interactive support for step-wise problem
   127 solving. Theorem-Proving (TP) technology is appropriate for one part
   128 of such support, in checking user-input. For the other part of such
   129 support, guiding the learner towards a solution, another kind of
   130 technology is required. %TODO ... connect to prototype ...
   131 
   132 A prototype combines TP with a programming language, the latter
   133 interpreted in a specific way: certain statements in a program, called
   134 tactics, are treated as breakpoints where control is handed over to
   135 the user. An input formula is checked by TP (using logical context
   136 built up by the interpreter); and if a learner gets stuck, a program
   137 describing the steps towards a solution of a problem ``knows the next
   138 step''. This kind of interpretation is called Lucas-Interpretation for
   139 \emph{TP-based programming languages}.
   140 
   141 This paper describes the prototype's TP-based programming language
   142 within a case study creating interactive material for an advanced
   143 course in Signal Processing: implementation of definitions and
   144 theorems in TP, formal specification of a problem and step-wise
   145 development of the program solving the problem. Experiences with the
   146 ork flow in iterative development with testing and identifying errors
   147 are described, too. The description clarifies the components missing
   148 in the prototype's language as well as deficiencies experienced during
   149 programming.
   150 \par
   151 These experiences are particularly notable, because the author is the
   152 first programmer using the language beyond the core team which
   153 developed the prototype's TP-based language interpreter.
   154 %
   155 \end{abstract}%
   156 %
   157 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   158 %                                                         %
   159 % eJMT command                                            %
   160 %                                                         %
   161 \thispagestyle{fancy}                                     %
   162 %                                                         %
   163 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   164 %
   165 % Please use the following to indicate sections, subsections,
   166 % etc.  Please also use \subsubsection{...}, \paragraph{...}
   167 % and \subparagraph{...} as necessary.
   168 %
   169 
   170 \section{Introduction}\label{intro}
   171 
   172 % \paragraph{Didactics of mathematics} 
   173 %WN: wenn man in einem high-quality paper von 'didactics' spricht, 
   174 %WN muss man am state-of-the-art ankn"upfen -- siehe
   175 %WN W.Neuper, On the Emergence of TP-based Educational Math Assistants
   176 % faces a specific issue, a gap
   177 % between (1) introduction of math concepts and skills and (2)
   178 % application of these concepts and skills, which usually are separated
   179 % into different units in curricula (for good reasons). For instance,
   180 % (1) teaching partial fraction decomposition is separated from (2)
   181 % application for inverse Z-transform in signal processing.
   182 % 
   183 % \par This gap is an obstacle for applying math as an fundamental
   184 % thinking technology in engineering: In (1) motivation is lacking
   185 % because the question ``What is this stuff good for?'' cannot be
   186 % treated sufficiently, and in (2) the ``stuff'' is not available to
   187 % students in higher semesters as widespread experience shows.
   188 % 
   189 % \paragraph{Motivation} taken by this didactic issue on the one hand,
   190 % and ongoing research and development on a novel kind of educational
   191 % mathematics assistant at Graz University of
   192 % Technology~\footnote{http://www.ist.tugraz.at/isac/} promising to
   193 % scope with this issue on the other hand, several institutes are
   194 % planning to join their expertise: the Institute for Information
   195 % Systems and Computer Media (IICM), the Institute for Software
   196 % Technology (IST), the Institutes for Mathematics, the Institute for
   197 % Signal Processing and Speech Communication (SPSC), the Institute for
   198 % Structural Analysis and the Institute of Electrical Measurement and
   199 % Measurement Signal Processing.
   200 %WN diese Information ist f"ur das Paper zu spezielle, zu aktuell 
   201 %WN und damit zu verg"anglich.
   202 % \par This thesis is the first attempt to tackle the above mentioned
   203 % issue, it focuses on Telematics, because these specific studies focus
   204 % on mathematics in \emph{STEOP}, the introductory orientation phase in
   205 % Austria. \emph{STEOP} is considered an opportunity to investigate the
   206 % impact of {\sisac}'s prototype on the issue and others.
   207 % 
   208 
   209 Traditional course material in engineering disciplines lacks an
   210 important component, interactive support for step-wise problem
   211 solving. Theorem-Proving (TP) technology can provide such support by
   212 specific services. An important part of such services is called
   213 ``next-step-guidance'', generated by a specific kind of ``TP-based
   214 programming language''. In the
   215 {\sisac}-project~\footnote{http://www.ist.tugraz.at/projects/isac/} such
   216 a language is prototyped in line with~\cite{plmms10} and built upon
   217 the theorem prover
   218 Isabelle~\cite{Nipkow-Paulson-Wenzel:2002}\footnote{http://isabelle.in.tum.de/}.
   219 The TP services are coordinated by a specific interpreter for the
   220 programming language, called
   221 Lucas-Interpreter~\cite{wn:lucas-interp-12}. The language and the
   222 interpreter will be briefly re-introduced in order to make the paper
   223 self-contained.
   224 
   225 \paragraph{The main part} of the paper is an account of first experiences
   226 with programming in this TP-based language. The experience was gained
   227 in a case study by the author. The author was considered an ideal
   228 candidate for this study for the following reasons: as a student in
   229 Telematics (computer science with focus on Signal Processing) he had
   230 general knowledge in programming as well as specific domain knowledge
   231 in Signal Processing; and he was not involved in the development of
   232 {\sisac}'s programming language and interpeter, thus a novice to the
   233 language.
   234 
   235 \paragraph{The goal} of the case study was (1) some TP-based programs for
   236 interactive course material for a specific ``Adavanced Signal
   237 Processing Lab'' in a higher semester, (2) respective program
   238 development with as little advice from the {\sisac}-team and (3) records
   239 and comments for the main steps of development in an Isabelle theory;
   240 this theory should provide guidelines for future programmers. An
   241 excerpt from this theory is the main part of this paper.
   242 \par
   243 The paper will use the problem in Fig.\ref{fig-interactive} as a
   244 running example:
   245 \begin{figure} [htb]
   246 \begin{center}
   247 \includegraphics[width=140mm]{fig/isac-Ztrans-math-3}
   248 %\includegraphics[width=140mm]{fig/isac-Ztrans-math}
   249 \caption{Step-wise problem solving guided by the TP-based program}
   250 \label{fig-interactive}
   251 \end{center}
   252 \end{figure}
   253 
   254 The problem is from the domain of Signal Processing and requests to
   255 determine the inverse Z-transform for a given term. Fig.\ref{fig-interactive}
   256 also shows the beginning of the interactive construction of a solution
   257 for the problem. This construction is done in the right window named
   258 ``Worksheet''.
   259 \par
   260 User-interaction on the Worksheet is {\em checked} and {\em guided} by
   261 TP services:
   262 \begin{enumerate}
   263 \item Formulas input by the user are {\em checked} by TP: such a
   264 formula establishes a proof situation --- the prover has to derive the
   265 formula from the logical context. The context is built up from the
   266 formal specification of the problem (here hidden from the user) by the
   267 Lucas-Interpreter.
   268 \item If the user gets stuck, the program developed below in this
   269 paper ``knows the next step'' from behind the scenes. How the latter
   270 TP-service is exploited by dialogue authoring is out of scope of this
   271 paper and can be studied in~\cite{gdaroczy-EP-13}.
   272 \end{enumerate} It should be noted that the programmer using the
   273 TP-based language is not concerned with interaction at all; we will
   274 see that the program contains neither input-statements nor
   275 output-statements. Rather, interaction is handled by services
   276 generated automatically.
   277 \par
   278 So there is a clear separation of concerns: Dialogues are
   279 adapted by dialogue authors (in Java-based tools), using automatically
   280 generated TP services, while the TP-based program is written by
   281 mathematics experts (in Isabelle/ML). The latter is concern of this
   282 paper.
   283 
   284 \paragraph{The paper is structed} as follows: The introduction
   285 \S\ref{intro} is followed by a brief re-introduction of the TP-based
   286 programming language in \S\ref{PL}, which extends the executable
   287 fragment of Isabelle's language (\S\ref{PL-isab}) by tactics which
   288 play a specific role in Lucas-Interpretation and in providing the TP
   289 services (\S\ref{PL-tacs}). The main part in \S\ref{trial} describes
   290 the main steps in developing the program for the running example:
   291 prepare domain knowledge, implement the formal specification of the
   292 problem, prepare the environment for the program, implement the
   293 program. The workflow of programming, debugging and testing is
   294 described in \S\ref{workflow}. The conclusion \S\ref{conclusion} will
   295 give directions identified for future development. 
   296 
   297 
   298 \section{\isac's Prototype for a Programming Language}\label{PL} 
   299 The prototype's language extends the executable fragment in the
   300 language of the theorem prover
   301 Isabelle~\cite{Nipkow-Paulson-Wenzel:2002}\footnote{http://isabelle.in.tum.de/}
   302 by tactics which have a specific role in Lucas-Interpretation.
   303 
   304 \subsection{The Executable Fragment of Isabelle's Language}\label{PL-isab}
   305 The executable fragment consists of data-type and function
   306 definitions.  It's usability even suggests that fragment for
   307 introductory courses \cite{nipkow-prog-prove}. HOL is a typed logic
   308 whose type system resembles that of functional programming
   309 languages. Thus there are
   310 \begin{description}
   311 \item[base types,] in particular \textit{bool}, the type of truth
   312 values, \textit{nat}, \textit{int}, \textit{complex}, and the types of
   313 natural, integer and complex numbers respectively in mathematics.
   314 \item[type constructors] allow to define arbitrary types, from
   315 \textit{set}, \textit{list} to advanced data-structures like
   316 \textit{trees}, red-black-trees etc.
   317 \item[function types,] denoted by $\Rightarrow$.
   318 \item[type variables,] denoted by $^\prime a, ^\prime b$ etc, provide
   319 type polymorphism. Isabelle automatically computes the type of each
   320 variable in a term by use of Hindley-Milner type inference
   321 \cite{pl:hind97,Milner-78}.
   322 \end{description}
   323 
   324 \textbf{Terms} are formed as in functional programming by applying
   325 functions to arguments. If $f$ is a function of type
   326 $\tau_1\Rightarrow \tau_2$ and $t$ is a term of type $\tau_1$ then
   327 $f\;t$ is a term of type~$\tau_2$. $t\;::\;\tau$ means that term $t$
   328 has type $\tau$. There are many predefined infix symbols like $+$ and
   329 $\leq$ most of which are overloaded for various types.
   330 
   331 HOL also supports some basic constructs from functional programming:
   332 {\it\label{isabelle-stmts}
   333 \begin{tabbing} 123\=\kill
   334 \>$( \; {\tt if} \; b \; {\tt then} \; t_1 \; {\tt else} \; t_2 \;)$\\
   335 \>$( \; {\tt let} \; x=t \; {\tt in} \; u \; )$\\
   336 \>$( \; {\tt case} \; t \; {\tt of} \; {\it pat}_1
   337   \Rightarrow t_1 \; |\dots| \; {\it pat}_n\Rightarrow t_n \; )$
   338 \end{tabbing} }
   339 \noindent The running example's program uses some of these elements
   340 (marked by {\tt tt-font} on p.\pageref{s:impl}): for instance {\tt
   341 let}\dots{\tt in} in lines {\rm 02} \dots {\rm 13}. In fact, the whole program
   342 is an Isabelle term with specific function constants like {\tt
   343 program}, {\tt Take}, {\tt Rewrite}, {\tt Subproblem} and {\tt
   344 Rewrite\_Set} in lines {\rm 01, 03. 04, 07, 10} and {\rm 11, 12}
   345 respectively.
   346 
   347 % Terms may also contain $\lambda$-abstractions. For example, $\lambda
   348 % x. \; x$ is the identity function.
   349 
   350 %JR warum auskommentiert? WN2...
   351 %WN2 weil ein Punkt wie dieser in weiteren Zusammenh"angen innerhalb
   352 %WN2 des Papers auftauchen m"usste; nachdem ich einen solchen
   353 %WN2 Zusammenhang _noch_ nicht sehe, habe ich den Punkt _noch_ nicht
   354 %WN2 gel"oscht.
   355 %WN2 Wenn der Punkt nicht weiter gebraucht wird, nimmt er nur wertvollen
   356 %WN2 Platz f"ur Anderes weg.
   357 
   358 \textbf{Formulae} are terms of type \textit{bool}. There are the basic
   359 constants \textit{True} and \textit{False} and the usual logical
   360 connectives (in decreasing order of precedence): $\neg, \land, \lor,
   361 \rightarrow$.
   362 
   363 \textbf{Equality} is available in the form of the infix function $=$
   364 of type $a \Rightarrow a \Rightarrow {\it bool}$. It also works for
   365 formulas, where it means ``if and only if''.
   366 
   367 \textbf{Quantifiers} are written $\forall x. \; P$ and $\exists x. \;
   368 P$.  Quantifiers lead to non-executable functions, so functions do not
   369 always correspond to programs, for instance, if comprising \\$(
   370 \;{\it if} \; \exists x.\;P \; {\it then} \; e_1 \; {\it else} \; e_2
   371 \;)$.
   372 
   373 \subsection{\isac's Tactics for Lucas-Interpretation}\label{PL-tacs}
   374 The prototype extends Isabelle's language by specific statements
   375 called tactics~\footnote{{\sisac}'s tactics are different from
   376 Isabelle's tactics: the former concern steps in a calculation, the
   377 latter concern proof steps.}  and tacticals. For the programmer these
   378 statements are functions with the following signatures:
   379 
   380 \begin{description}
   381 \item[Rewrite:] ${\it theorem}\Rightarrow{\it term}\Rightarrow{\it
   382 term} * {\it term}\;{\it list}$:
   383 this tactic appplies {\it theorem} to a {\it term} yielding a {\it
   384 term} and a {\it term list}, the list are assumptions generated by
   385 conditional rewriting. For instance, the {\it theorem}
   386 $b\not=0\land c\not=0\Rightarrow\frac{a\cdot c}{b\cdot c}=\frac{a}{b}$
   387 applied to the {\it term} $\frac{2\cdot x}{3\cdot x}$ yields
   388 $(\frac{2}{3}, [x\not=0])$.
   389 
   390 \item[Rewrite\_Set:] ${\it ruleset}\Rightarrow{\it
   391 term}\Rightarrow{\it term} * {\it term}\;{\it list}$:
   392 this tactic appplies {\it ruleset} to a {\it term}; {\it ruleset} is
   393 a confluent and terminating term rewrite system, in general. If
   394 none of the rules ({\it theorem}s) is applicable on interpretation
   395 of this tactic, an exception is thrown.
   396 
   397 % \item[Rewrite\_Inst:] ${\it substitution}\Rightarrow{\it
   398 % theorem}\Rightarrow{\it term}\Rightarrow{\it term} * {\it term}\;{\it
   399 % list}$:
   400 % 
   401 % \item[Rewrite\_Set\_Inst:] ${\it substitution}\Rightarrow{\it
   402 % ruleset}\Rightarrow{\it term}\Rightarrow{\it term} * {\it term}\;{\it
   403 % list}$:
   404 
   405 \item[Substitute:] ${\it substitution}\Rightarrow{\it
   406 term}\Rightarrow{\it term}$: allows to access sub-terms.
   407 
   408 \item[Take:] ${\it term}\Rightarrow{\it term}$:
   409 this tactic has no effect in the program; but it creates a side-effect
   410 by Lucas-Interpretation (see below) and writes {\it term} to the
   411 Worksheet.
   412 
   413 \item[Subproblem:] ${\it theory} * {\it specification} * {\it
   414 method}\Rightarrow{\it argument}\;{\it list}\Rightarrow{\it term}$:
   415 this tactic is a generalisation of a function call: it takes an
   416 \textit{argument list} as usual, and additionally a triple consisting
   417 of an Isabelle \textit{theory}, an implicit \textit{specification} of the
   418 program and a \textit{method} containing data for Lucas-Interpretation,
   419 last not least a program (as an explicit specification)~\footnote{In
   420 interactive tutoring these three items can be determined explicitly
   421 by the user.}.
   422 \end{description}
   423 The tactics play a specific role in
   424 Lucas-Interpretation~\cite{wn:lucas-interp-12}: they are treated as
   425 break-points where, as a side-effect, a line is added to a calculation
   426 as a protocol for proceeding towards a solution in step-wise problem
   427 solving. At the same points Lucas-Interpretation serves interactive
   428 tutoring and control is handed over to the user. The user is free to
   429 investigate underlying knowledge, applicable theorems, etc.  And the
   430 user can proceed constructing a solution by input of a tactic to be
   431 applied or by input of a formula; in the latter case the
   432 Lucas-Interpreter has built up a logical context (initialised with the
   433 precondition of the formal specification) such that Isabelle can
   434 derive the formula from this context --- or give feedback, that no
   435 derivation can be found.
   436 
   437 \subsection{Tacticals as Control Flow Statements}
   438 The flow of control in a program can be determined by {\tt if then else}
   439 and {\tt case of} as mentioned on p.\pageref{isabelle-stmts} and also
   440 by additional tacticals:
   441 \begin{description}
   442 \item[Repeat:] ${\it tactic}\Rightarrow{\it term}\Rightarrow{\it
   443 term}$: iterates over tactics which take a {\it term} as argument as
   444 long as a tactic is applicable (for instance, {\tt Rewrite\_Set} might
   445 not be applicable).
   446 
   447 \item[Try:] ${\it tactic}\Rightarrow{\it term}\Rightarrow{\it term}$:
   448 if {\it tactic} is applicable, then it is applied to {\it term},
   449 otherwise {\it term} is passed on without changes.
   450 
   451 \item[Or:] ${\it tactic}\Rightarrow{\it tactic}\Rightarrow{\it
   452 term}\Rightarrow{\it term}$: If the first {\it tactic} is applicable,
   453 it is applied to the first {\it term} yielding another {\it term},
   454 otherwise the second {\it tactic} is applied; if none is applicable an
   455 exception is raised.
   456 
   457 \item[@@:] ${\it tactic}\Rightarrow{\it tactic}\Rightarrow{\it
   458 term}\Rightarrow{\it term}$: applies the first {\it tactic} to the
   459 first {\it term} yielding an intermediate term (not appearing in the
   460 signature) to which the second {\it tactic} is applied.
   461 
   462 \item[While:] ${\it term::bool}\Rightarrow{\it tactic}\Rightarrow{\it
   463 term}\Rightarrow{\it term}$: if the first {\it term} is true, then the
   464 {\it tactic} is applied to the first {\it term} yielding an
   465 intermediate term (not appearing in the signature); the intermediate
   466 term is added to the environment the first {\it term} is evaluated in
   467 etc as long as the first {\it term} is true.
   468 \end{description}
   469 The tacticals are not treated as break-points by Lucas-Interpretation
   470 and thus do not contribute to the calculation nor to interaction.
   471 
   472 \section{Concepts and Tasks in TP-based Programming}\label{trial}
   473 %\section{Development of a Program on Trial}
   474 
   475 This section presents all the concepts involved in TP-based
   476 programming and all the tasks to be accomplished by programmers. The
   477 presentation uses the running example which has been introduced in
   478 Fig.\ref{fig-interactive} on p.\pageref{fig-interactive}.
   479 
   480 \subsection{Mechanization of Math --- Domain Engineering}\label{isabisac}
   481 
   482 %WN was Fachleute unter obigem Titel interessiert findet sich
   483 %WN unterhalb des auskommentierten Textes.
   484 
   485 %WN der Text unten spricht Benutzer-Aspekte anund ist nicht speziell
   486 %WN auf Computer-Mathematiker fokussiert.
   487 % \paragraph{As mentioned in the introduction,} a prototype of an
   488 % educational math assistant called
   489 % {{\sisac}}\footnote{{{\sisac}}=\textbf{Isa}belle for
   490 % \textbf{C}alculations, see http://www.ist.tugraz.at/isac/.} bridges
   491 % the gap between (1) introducation and (2) application of mathematics:
   492 % {{\sisac}} is based on Computer Theorem Proving (TP), a technology which
   493 % requires each fact and each action justified by formal logic, so
   494 % {{{\sisac}{}}} makes justifications transparent to students in
   495 % interactive step-wise problem solving. By that way {{\sisac}} already
   496 % can serve both:
   497 % \begin{enumerate}
   498 %   \item Introduction of math stuff (in e.g. partial fraction
   499 % decomposition) by stepwise explaining and exercising respective
   500 % symbolic calculations with ``next step guidance (NSG)'' and rigorously
   501 % checking steps freely input by students --- this also in context with
   502 % advanced applications (where the stuff to be taught in higher
   503 % semesters can be skimmed through by NSG), and
   504 %   \item Application of math stuff in advanced engineering courses
   505 % (e.g. problems to be solved by inverse Z-transform in a Signal
   506 % Processing Lab) and now without much ado about basic math techniques
   507 % (like partial fraction decomposition): ``next step guidance'' supports
   508 % students in independently (re-)adopting such techniques.
   509 % \end{enumerate} 
   510 % Before the question is answers, how {{\sisac}}
   511 % accomplishes this task from a technical point of view, some remarks on
   512 % the state-of-the-art is given, therefor follow up Section~\ref{emas}.
   513 % 
   514 % \subsection{Educational Mathematics Assistants (EMAs)}\label{emas}
   515 % 
   516 % \paragraph{Educational software in mathematics} is, if at all, based
   517 % on Computer Algebra Systems (CAS, for instance), Dynamic Geometry
   518 % Systems (DGS, for instance \footnote{GeoGebra http://www.geogebra.org}
   519 % \footnote{Cinderella http://www.cinderella.de/}\footnote{GCLC
   520 % http://poincare.matf.bg.ac.rs/~janicic/gclc/}) or spread-sheets. These
   521 % base technologies are used to program math lessons and sometimes even
   522 % exercises. The latter are cumbersome: the steps towards a solution of
   523 % such an interactive exercise need to be provided with feedback, where
   524 % at each step a wide variety of possible input has to be foreseen by
   525 % the programmer - so such interactive exercises either require high
   526 % development efforts or the exercises constrain possible inputs.
   527 % 
   528 % \subparagraph{A new generation} of educational math assistants (EMAs)
   529 % is emerging presently, which is based on Theorem Proving (TP). TP, for
   530 % instance Isabelle and Coq, is a technology which requires each fact
   531 % and each action justified by formal logic. Pushed by demands for
   532 % \textit{proven} correctness of safety-critical software TP advances
   533 % into software engineering; from these advancements computer
   534 % mathematics benefits in general, and math education in particular. Two
   535 % features of TP are immediately beneficial for learning:
   536 % 
   537 % \paragraph{TP have knowledge in human readable format,} that is in
   538 % standard predicate calculus. TP following the LCF-tradition have that
   539 % knowledge down to the basic definitions of set, equality,
   540 % etc~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL.html};
   541 % following the typical deductive development of math, natural numbers
   542 % are defined and their properties
   543 % proven~\footnote{http://isabelle.in.tum.de/dist/library/HOL/Number\_Theory/Primes.html},
   544 % etc. Present knowledge mechanized in TP exceeds high-school
   545 % mathematics by far, however by knowledge required in software
   546 % technology, and not in other engineering sciences.
   547 % 
   548 % \paragraph{TP can model the whole problem solving process} in
   549 % mathematical problem solving {\em within} a coherent logical
   550 % framework. This is already being done by three projects, by
   551 % Ralph-Johan Back, by ActiveMath and by Carnegie Mellon Tutor.
   552 % \par
   553 % Having the whole problem solving process within a logical coherent
   554 % system, such a design guarantees correctness of intermediate steps and
   555 % of the result (which seems essential for math software); and the
   556 % second advantage is that TP provides a wealth of theories which can be
   557 % exploited for mechanizing other features essential for educational
   558 % software.
   559 % 
   560 % \subsubsection{Generation of User Guidance in EMAs}\label{user-guid}
   561 % 
   562 % One essential feature for educational software is feedback to user
   563 % input and assistance in coming to a solution.
   564 % 
   565 % \paragraph{Checking user input} by ATP during stepwise problem solving
   566 % is being accomplished by the three projects mentioned above
   567 % exclusively. They model the whole problem solving process as mentioned
   568 % above, so all what happens between formalized assumptions (or formal
   569 % specification) and goal (or fulfilled postcondition) can be
   570 % mechanized. Such mechanization promises to greatly extend the scope of
   571 % educational software in stepwise problem solving.
   572 % 
   573 % \paragraph{NSG (Next step guidance)} comprises the system's ability to
   574 % propose a next step; this is a challenge for TP: either a radical
   575 % restriction of the search space by restriction to very specific
   576 % problem classes is required, or much care and effort is required in
   577 % designing possible variants in the process of problem solving
   578 % \cite{proof-strategies-11}.
   579 % \par
   580 % Another approach is restricted to problem solving in engineering
   581 % domains, where a problem is specified by input, precondition, output
   582 % and postcondition, and where the postcondition is proven by ATP behind
   583 % the scenes: Here the possible variants in the process of problem
   584 % solving are provided with feedback {\em automatically}, if the problem
   585 % is described in a TP-based programing language: \cite{plmms10} the
   586 % programmer only describes the math algorithm without caring about
   587 % interaction (the respective program is functional and even has no
   588 % input or output statements!); interaction is generated as a
   589 % side-effect by the interpreter --- an efficient separation of concern
   590 % between math programmers and dialog designers promising application
   591 % all over engineering disciplines.
   592 % 
   593 % 
   594 % \subsubsection{Math Authoring in Isabelle/ISAC\label{math-auth}}
   595 % Authoring new mathematics knowledge in {{\sisac}} can be compared with
   596 % ``application programing'' of engineering problems; most of such
   597 % programing uses CAS-based programing languages (CAS = Computer Algebra
   598 % Systems; e.g. Mathematica's or Maple's programing language).
   599 % 
   600 % \paragraph{A novel type of TP-based language} is used by {{\sisac}{}}
   601 % \cite{plmms10} for describing how to construct a solution to an
   602 % engineering problem and for calling equation solvers, integration,
   603 % etc~\footnote{Implementation of CAS-like functionality in TP is not
   604 % primarily concerned with efficiency, but with a didactic question:
   605 % What to decide for: for high-brow algorithms at the state-of-the-art
   606 % or for elementary algorithms comprehensible for students?} within TP;
   607 % TP can ensure ``systems that never make a mistake'' \cite{casproto} -
   608 % are impossible for CAS which have no logics underlying.
   609 % 
   610 % \subparagraph{Authoring is perfect} by writing such TP based programs;
   611 % the application programmer is not concerned with interaction or with
   612 % user guidance: this is concern of a novel kind of program interpreter
   613 % called Lucas-Interpreter. This interpreter hands over control to a
   614 % dialog component at each step of calculation (like a debugger at
   615 % breakpoints) and calls automated TP to check user input following
   616 % personalized strategies according to a feedback module.
   617 % \par
   618 % However ``application programing with TP'' is not done with writing a
   619 % program: according to the principles of TP, each step must be
   620 % justified. Such justifications are given by theorems. So all steps
   621 % must be related to some theorem, if there is no such theorem it must
   622 % be added to the existing knowledge, which is organized in so-called
   623 % \textbf{theories} in Isabelle. A theorem must be proven; fortunately
   624 % Isabelle comprises a mechanism (called ``axiomatization''), which
   625 % allows to omit proofs. Such a theorem is shown in
   626 % Example~\ref{eg:neuper1}.
   627 
   628 The running example requires to determine the inverse $\cal
   629 Z$-transform for a class of functions. The domain of Signal Processing
   630 is accustomed to specific notation for the resulting functions, which
   631 are absolutely summable and are called TODO: $u[n]$, where $u$ is the
   632 function, $n$ is the argument and the brackets indicate that the
   633 arguments are TODO. Surprisingly, Isabelle accepts the rules for
   634 ${\cal Z}^{-1}$ in this traditional notation~\footnote{Isabelle
   635 experts might be particularly surprised, that the brackets do not
   636 cause errors in typing (as lists).}:
   637 %\vbox{
   638 % \begin{example}
   639   \label{eg:neuper1}
   640   {\small\begin{tabbing}
   641   123\=123\=123\=123\=\kill
   642   \hfill \\
   643   \>axiomatization where \\
   644   \>\>  rule1: ``${\cal Z}^{-1}\;1 = \delta [n]$'' and\\
   645   \>\>  rule2: ``$\vert\vert z \vert\vert > 1 \Rightarrow {\cal Z}^{-1}\;z / (z - 1) = u [n]$'' and\\
   646   \>\>  rule3: ``$\vert\vert$ z $\vert\vert$ < 1 ==> z / (z - 1) = -u [-n - 1]'' and \\
   647 %TODO
   648   \>\>  rule4: ``$\vert\vert$ z $\vert\vert$ > $\vert\vert$ $\alpha$ $\vert\vert$ ==> z / (z - $\alpha$) = $\alpha^n$ $\cdot$ u [n]'' and\\
   649 %TODO
   650   \>\>  rule5: ``$\vert\vert$ z $\vert\vert$ < $\vert\vert$ $\alpha$ $\vert\vert$ ==> z / (z - $\alpha$) = -($\alpha^n$) $\cdot$ u [-n - 1]'' and\\
   651 %TODO
   652   \>\>  rule6: ``$\vert\vert$ z $\vert\vert$ > 1 ==> z/(z - 1)$^2$ = n $\cdot$ u [n]''\\
   653 %TODO
   654   \end{tabbing}
   655   }
   656 % \end{example}
   657 %}
   658 These 6 rules can be used as conditional rewrite rules, depending on
   659 the respective convergence radius. Satisfaction from accordance with traditional notation
   660 contrasts with the above word {\em axiomatization}: As TP-based, the
   661 programming language expects these rules as {\em proved} theorems, and
   662 not as axioms implemented in the above brute force manner; otherwise
   663 all the verification efforts envisaged (like proof of the
   664 post-condition, see below) would be meaningless.
   665 
   666 Isabelle provides a large body of knowledge, rigorously proven from
   667 the basic axioms of mathematics~\footnote{This way of rigorously
   668 deriving all knowledge from first principles is called the
   669 LCF-paradigm in TP.}. In the case of the Z-Transform the most advanced
   670 knowledge can be found in the theoris on Multivariate
   671 Analysis~\footnote{http://isabelle.in.tum.de/dist/library/HOL/HOL-Multivariate\_Analysis}. However,
   672 building up knowledge such that a proof for the above rules would be
   673 reasonably short and easily comprehensible, still requires lots of
   674 work (and is definitely out of scope of our case study).
   675 
   676 At the state-of-the-art in mechanization of knowledge in engineering
   677 sciences, the process does not stop with the mechanization of
   678 mathematics traditionally used in these sciences. Rather, ``Formal
   679 Methods''~\cite{ fm-03} are expected to proceed to formal and explicit
   680 description of physical items.  Signal Processing, for instance is
   681 concerned with physical devices for signal acquisition and
   682 reconstruction, which involve measuring a physical signal, storing it,
   683 and possibly later rebuilding the original signal or an approximation
   684 thereof. For digital systems, this typically includes sampling and
   685 quantization; devices for signal compression, including audio
   686 compression, image compression, and video compression, etc.  ``Domain
   687 engineering''\cite{db:dom-eng} is concerned with {\em specification}
   688 of these devices' components and features; this part in the process of
   689 mechanization is only at the beginning in domains like Signal
   690 Processing.
   691 
   692 TP-based programming, concern of this paper, is determined to
   693 add ``algorithmic knowledge'' in Fig.\ref{fig:mathuni} on
   694 p.\pageref{fig:mathuni}.  As we shall see below, TP-based programming
   695 starts with a formal {\em specification} of the problem to be solved.
   696 \begin{figure}
   697   \begin{center}
   698     \includegraphics[width=110mm]{../../fig/jrocnik/math-universe-small}
   699     \caption{The three-dimensional universe of mathematics knowledge}
   700     \label{fig:mathuni}
   701   \end{center}
   702 \end{figure}
   703 The language for both axes is defined in the axis at the bottom, deductive
   704 knowledge, in {\sisac} represented by Isabelle's theories.
   705 
   706 \subsection{Preparation of Simplifiers for the Program}\label{simp}
   707 
   708 If it is clear how the later calculation should look like and when
   709 which mathematic rule should be applied, it can be started to find ways of
   710 simplifications. This includes in e.g. the simplification of reational 
   711 expressions or also rewrites of an expession.
   712 \par
   713 Obligate is the use of the function \texttt{drop\_questionmarks} 
   714 which excludes irrelevant symbols out of the expression. (Irrelevant symbols may 
   715 be result out of the system during the calculation. The function has to be
   716 applied for two reasons. First two make every placeholder in a expression 
   717 useable as a constant and second to provide a better view at the frontend.) 
   718 \par
   719 Most rewrites are represented through rulesets this
   720 rulesets tell the machine which terms have to be rewritten into which
   721 representation. In the upcoming programm a rewrite can be applied only in using
   722 such rulesets on existing terms.
   723 \paragraph{The core} of our implemented problem is the Z-Transformation
   724 (remember the description of the running example, introduced by
   725 Fig.\ref{fig-interactive} on p.\pageref{fig-interactive}) due the fact that the
   726 transformation itself would require higher math which isn't yet avaible in our system we decided to choose the way like it is applied in labratory and problem classes at our university - by applying transformation rules (collected in
   727 transformation tables).
   728 \par
   729 Rules, in {\sisac{}}'s programming language can be designed by the use of
   730 axiomatization. In this axiomatization we declare how a term has to look like
   731 (left side) to be rewritten into another form (right side). Every line of this 
   732 axiomatizations starts with the name of the rule.
   733 
   734 %\begin{example}
   735 {\footnotesize
   736   \label{eg:ruledef}
   737 %  \hfill\\
   738   \begin{verbatim}
   739   axiomatization where
   740     rule1: ``1 = $\delta$[n]'' and
   741     rule2: ``|| z || > 1 ==> z / (z - 1) = u [n]'' and
   742     rule3: ``|| z || < 1 ==> z / (z - 1) = -u [-n - 1]''\end{verbatim}
   743 %\end{example}
   744 }
   745 
   746 Rules can be summarized in a ruleset (collection of rules) and afterwards tried to be applied to a given expression as puttet over in following code.
   747 
   748 %\begin{example}
   749 %  \hfill\\
   750   \label{eg:ruleapp}
   751   \begin{enumerate}
   752 
   753   \item Store rules in ruleset:
   754   {\footnotesize\begin{verbatim}
   755   val inverse_Z = append_rls "inverse_Z" e_rls
   756     [ Thm ("rule1",num_str @{thm rule1}),
   757       Thm ("rule2",num_str @{thm rule2}),
   758       Thm ("rule3",num_str @{thm rule3})
   759     ];\end{verbatim}}
   760 
   761   \item Define exression:
   762   {\footnotesize\begin{verbatim}
   763   val sample_term = str2term "z/(z-1)+z/(z-</delta>)+1";\end{verbatim}}
   764 
   765   \item Apply ruleset:
   766   {\footnotesize\begin{verbatim}
   767   val SOME (sample_term', asm) = 
   768     rewrite_set_ thy true inverse_Z sample_term;\end{verbatim}}
   769 
   770   \end{enumerate}
   771 %\end{example}
   772  
   773 The use of rulesets makes it much easier to develop our designated applications,
   774 but the programmer has to be careful and patient. When applying rulesets
   775 two important issues have to be mentionend:
   776 \begin{enumerate}
   777 \item How often the rules have to be applied? In case of
   778 transformations it is quite clear that we use them once but other fields
   779 reuqire to apply rules until a special condition is reached (e.g.
   780 a simplification is finished when there is nothing to be done left).
   781 \item The order in which rules are applied often takes a big effect
   782 and has to be evaluated for each purpose once again.
   783 \end{enumerate}
   784 In the special case of Signal Processing the rules defined in the
   785 Example upwards have to be applied in a dedicated order to transform all 
   786 constants first of all. After this first transformation step has been done it no 
   787 mather which rule fit's next.
   788 
   789 \subsection{Preparation of ML-Functions}\label{funs}
   790 The prototype's Lucas-Interpreter uses the {\sisac}-rewrite-engine for
   791 all kinds of evaluation. Some functionality required in programming,
   792 however, cannot be accomplished by rewriting. So the prototype has a
   793 mechanism to call ML-functions during rewriting, and the programmer has
   794 to use this mechanism.
   795 
   796 In the running example's program on p.\pageref{s:impl} the lines {\rm
   797 05} and {\rm 06} contain such functions; we go into the details with
   798 \textit{argument\_in X\_z;}. This function fetches the argument from a
   799 function application: Line {\rm 03} in the example calculation on
   800 p.\pageref{exp-calc} is created by line {\rm 06} of the example
   801 program on p.\pageref{s:impl} where the program's environment assigns
   802 the value \textit{X z} to the variable \textit{X\_z}; so the function
   803 shall extract the argument \textit{z}.
   804 
   805 \medskip In order to be recognised as a function constant in the
   806 program source the constant needs to be declared in a theory, here in
   807 \textit{Build\_Inverse\_Z\_Transform.thy}; then it can be parsed in
   808 the context \textit{ctxt} of that theory:
   809 {\footnotesize
   810 \begin{verbatim}
   811    consts
   812      argument'_in     :: "real => real"            ("argument'_in _" 10)
   813    
   814    ML {* val SOME t = parse ctxt "argument_in (X z)"; *}
   815 
   816    val t = Const ("Build_Inverse_Z_Transform.argument'_in", "RealDef.real ⇒ RealDef.real") 
   817              $ (Free ("X", "RealDef.real ⇒ RealDef.real") $ Free ("z", "RealDef.real")): term
   818 \end{verbatim}}
   819 
   820 \noindent Parsing produces a term \texttt{t} in internal
   821 representation~\footnote{The attentive reader realizes the delicate
   822 differences between interal and extermal representation even in the
   823 strings, i.e \texttt{'\_}}, consisting of \texttt{Const
   824 ("argument'\_in", type)} and the two variables \texttt{Free ("X",
   825 type)} and \texttt{Free ("z", type)}, \texttt{\$} is the term
   826 constructor. The function body below is implemented directly in ML,
   827 i.e in an \texttt{ML \{* *\}} block; the function definition provides
   828 a unique prefix \texttt{eval\_} to the function name:
   829 
   830 {\footnotesize
   831 \begin{verbatim}
   832    ML {*
   833      fun eval_argument_in _ 
   834        "Build_Inverse_Z_Transform.argument'_in" 
   835        (t as (Const ("Build_Inverse_Z_Transform.argument'_in", _) $ (f $ arg))) _ =
   836          if is_Free arg (*could be something to be simplified before*)
   837          then SOME (term2str t ^ " = " ^ term2str arg, Trueprop $ (mk_equality (t, arg)))
   838          else NONE
   839      | eval_argument_in _ _ _ _ = NONE;
   840    *}
   841 \end{verbatim}}
   842 
   843 \noindent The function body creates either creates \texttt{NONE}
   844 telling the rewrite-engine to search for the next redex, or creates an
   845 ad-hoc theorem for rewriting, thus the programmer needs to adopt many
   846 technicalities of Isabelle, for instance, the \textit{Trueprop}
   847 constant.
   848 
   849 \bigskip This sub-task particularly sheds light on basic issues in the
   850 design of a programming language, the integration of diffent language
   851 layers, the layer of Isabelle/Isar and Isabelle/ML.
   852 
   853 Another point of improvement for the prototype is the rewrite-engine: The
   854 program on p.\pageref{s:impl} would not allow to contract the two lines {\rm 05}
   855 and {\rm 06} to
   856 
   857 {\small\it\label{s:impl}
   858 \begin{tabbing}
   859 123l\=123\=123\=123\=123\=123\=123\=((x\=123\=(x \=123\=123\=\kill
   860 \>{\rm 05/6}\>\>\>  (z::real) = argument\_in (lhs X\_eq) ;
   861 \end{tabbing}}
   862 
   863 \noindent because nested function calls would require creating redexes
   864 inside-out; however, the prototype's rewrite-engine only works top down
   865 from the root of a term down to the leaves.
   866 
   867 How all these ugly technicalities are to be checked in the prototype is 
   868 shown in \S\ref{flow-prep} below.
   869 
   870 % \paragraph{Explicit Problems} require explicit methods to solve them, and within
   871 % this methods we have some explicit steps to do. This steps can be unique for
   872 % a special problem or refindable in other problems. No mather what case, such
   873 % steps often require some technical functions behind. For the solving process
   874 % of the Inverse Z Transformation and the corresponding partial fraction it was
   875 % neccessary to build helping functions like \texttt{get\_denominator},
   876 % \texttt{get\_numerator} or \texttt{argument\_in}. First two functions help us
   877 % to filter the denominator or numerator out of a fraction, last one helps us to
   878 % get to know the bound variable in a equation.
   879 % \par
   880 % By taking \texttt{get\_denominator} as an example, we want to explain how to 
   881 % implement new functions into the existing system and how we can later use them
   882 % in our program.
   883 % 
   884 % \subsubsection{Find a place to Store the Function}
   885 % 
   886 % The whole system builds up on a well defined structure of Knowledge. This
   887 % Knowledge sets up at the Path:
   888 % \begin{center}\ttfamily src/Tools/isac/Knowledge\normalfont\end{center}
   889 % For implementing the Function \texttt{get\_denominator} (which let us extract
   890 % the denominator out of a fraction) we have choosen the Theory (file)
   891 % \texttt{Rational.thy}.
   892 % 
   893 % \subsubsection{Write down the new Function}
   894 % 
   895 % In upper Theory we now define the new function and its purpose:
   896 % \begin{verbatim}
   897 %   get_denominator :: "real => real"
   898 % \end{verbatim}
   899 % This command tells the machine that a function with the name
   900 % \texttt{get\_denominator} exists which gets a real expression as argument and
   901 % returns once again a real expression. Now we are able to implement the function
   902 % itself, upcoming example now shows the implementation of
   903 % \texttt{get\_denominator}.
   904 % 
   905 % %\begin{example}
   906 %   \label{eg:getdenom}
   907 %   \begin{verbatim}
   908 % 
   909 % 01  (*
   910 % 02   *("get_denominator",
   911 % 03   *  ("Rational.get_denominator", eval_get_denominator ""))
   912 % 04   *)
   913 % 05  fun eval_get_denominator (thmid:string) _ 
   914 % 06            (t as Const ("Rational.get_denominator", _) $
   915 % 07                (Const ("Rings.inverse_class.divide", _) $num 
   916 % 08                  $denom)) thy = 
   917 % 09          SOME (mk_thmid thmid "" 
   918 % 10              (Print_Mode.setmp [] 
   919 % 11                (Syntax.string_of_term (thy2ctxt thy)) denom) "", 
   920 % 12              Trueprop $ (mk_equality (t, denom)))
   921 % 13    | eval_get_denominator _ _ _ _ = NONE;\end{verbatim}
   922 % %\end{example}
   923 % 
   924 % Line \texttt{07} and \texttt{08} are describing the mode of operation the best -
   925 % there is a fraction\\ (\ttfamily Rings.inverse\_class.divide\normalfont) 
   926 % splittet
   927 % into its two parts (\texttt{\$num \$denom}). The lines before are additionals
   928 % commands for declaring the function and the lines after are modeling and 
   929 % returning a real variable out of \texttt{\$denom}.
   930 % 
   931 % \subsubsection{Add a test for the new Function}
   932 % 
   933 % \paragraph{Everytime when adding} a new function it is essential also to add
   934 % a test for it. Tests for all functions are sorted in the same structure as the
   935 % knowledge it self and can be found up from the path:
   936 % \begin{center}\ttfamily test/Tools/isac/Knowledge\normalfont\end{center}
   937 % This tests are nothing very special, as a first prototype the functionallity
   938 % of a function can be checked by evaluating the result of a simple expression
   939 % passed to the function. Example~\ref{eg:getdenomtest} shows the test for our
   940 % \textit{just} created function \texttt{get\_denominator}.
   941 % 
   942 % %\begin{example}
   943 % \label{eg:getdenomtest}
   944 % \begin{verbatim}
   945 % 
   946 % 01 val thy = @{theory Isac};
   947 % 02 val t = term_of (the (parse thy "get_denominator ((a +x)/b)"));
   948 % 03 val SOME (_, t') = eval_get_denominator "" 0 t thy;
   949 % 04 if term2str t' = "get_denominator ((a + x) / b) = b" then ()
   950 % 05 else error "get_denominator ((a + x) / b) = b" \end{verbatim}
   951 % %\end{example}
   952 % 
   953 % \begin{description}
   954 % \item[01] checks if the proofer set up on our {\sisac{}} System.
   955 % \item[02] passes a simple expression (fraction) to our suddenly created
   956 %           function.
   957 % \item[04] checks if the resulting variable is the correct one (in this case
   958 %           ``b'' the denominator) and returns.
   959 % \item[05] handels the error case and reports that the function is not able to
   960 %           solve the given problem.
   961 % \end{description}
   962 
   963 \subsection{Specification of the Problem}\label{spec}
   964 %WN <--> \chapter 7 der Thesis
   965 %WN die Argumentation unten sollte sich NUR auf Verifikation beziehen..
   966 
   967 The problem of the running example is textually described in
   968 Fig.\ref{fig-interactive} on p.\pageref{fig-interactive}. The {\em
   969 formal} specification of this problem, in traditional mathematical
   970 notation, could look like is this:
   971 
   972 %WN Hier brauchen wir die Spezifikation des 'running example' ...
   973 %JR Habe input, output und precond vom Beispiel eingefügt brauche aber Hilfe bei
   974 %JR der post condition - die existiert für uns ja eigentlich nicht aka
   975 %JR haben sie bis jetzt nicht beachtet WN...
   976 %WN2 Mein Vorschlag ist, das TODO zu lassen und deutlich zu kommentieren.
   977 %JR2 done
   978 
   979   \label{eg:neuper2}
   980   {\small\begin{tabbing}
   981   123,\=postcond \=: \= $\forall \,A^\prime\, u^\prime \,v^\prime.\,$\=\kill
   982   \hfill \\
   983   Specification:\\
   984     \>input    \>: filterExpression $X=\frac{3}{(z-\frac{1}{4}+-\frac{1}{8}*\frac{1}{z}}$\\
   985   \>precond  \>: filterExpression continius on $\mathbb{R}$ \\
   986   \>output   \>: stepResponse $x[n]$ \\
   987   \>postcond \>: TODO\\ \end{tabbing}}
   988 
   989 %JR wie besprochen, kein remark, keine begründung, nur simples "nicht behandelt"
   990 
   991 % \begin{remark}
   992 %    Defining the postcondition requires a high amount mathematical 
   993 %    knowledge, the difficult part in our case is not to set up this condition 
   994 %    nor it is more to define it in a way the interpreter is able to handle it. 
   995 %    Due the fact that implementing that mechanisms is quite the same amount as 
   996 %    creating the programm itself, it is not avaible in our prototype.
   997 %    \label{rm:postcond}
   998 % \end{remark}
   999 
  1000 \paragraph{The implementation} of the formal specification in the present
  1001 prototype, still bar-bones without support for authoring:
  1002 %WN Kopie von Inverse_Z_Transform.thy, leicht versch"onert:
  1003 {\footnotesize\label{exp-spec}
  1004 \begin{verbatim}
  1005    01  store_specification
  1006    02    (prepare_specification
  1007    03      ["Jan Rocnik"]
  1008    04      "pbl_SP_Ztrans_inv"
  1009    05      thy
  1010    06      ( ["Inverse", "Z_Transform", "SignalProcessing"],
  1011    07        [ ("#Given", ["filterExpression X_eq"]),
  1012    08          ("#Pre"  , ["X_eq is_continuous"]),
  1013    09          ("#Find" , ["stepResponse n_eq"]),
  1014    10          ("#Post" , [" TODO "])],
  1015    11        append_rls Erls [Calc ("Atools.is_continuous", eval_is_continuous)], 
  1016    12        NONE, 
  1017    13        [["SignalProcessing","Z_Transform","Inverse"]]));
  1018 \end{verbatim}}
  1019 Although the above details are partly very technical, we explain them
  1020 in order to document some intricacies of TP-based programming in the
  1021 present state of the {\sisac} prototype:
  1022 \begin{description}
  1023 \item[01..02]\textit{store\_specification:} stores the result of the
  1024 function \textit{prep\_specification} in a global reference
  1025 \textit{Unsynchronized.ref}, which causes principal conflicts with
  1026 Isabelle's asyncronous document model~\cite{Wenzel-11:doc-orient} and
  1027 parallel execution~\cite{Makarius-09:parall-proof} and is under
  1028 reconstruction already.
  1029 
  1030 \textit{prep\_pbt:} translates the specification to an internal format
  1031 which allows efficient processing; see for instance line {\rm 07}
  1032 below.
  1033 \item[03..04] are the ``mathematics author'' holding the copy-rights
  1034 and a unique identifier for the specification within {\sisac},
  1035 complare line {\rm 06}.
  1036 \item[05] is the Isabelle \textit{theory} required to parse the
  1037 specification in lines {\rm 07..10}.
  1038 \item[06] is a key into the tree of all specifications as presented to
  1039 the user (where some branches might be hidden by the dialog
  1040 component).
  1041 \item[07..10] are the specification with input, pre-condition, output
  1042 and post-condition respectively; the post-condition is not handled in
  1043 the prototype presently. (Follow up Remark~\ref{rm:postcond})
  1044 \item[11] creates a term rewriting system (abbreviated \textit{rls} in
  1045 {\sisac}) which evaluates the pre-condition for the actual input data.
  1046 Only if the evaluation yields \textit{True}, a program con be started.
  1047 \item[12]\textit{NONE:} could be \textit{SOME ``solve ...''} for a
  1048 problem associated to a function from Computer Algebra (like an
  1049 equation solver) which is not the case here.
  1050 \item[13] is the specific key into the tree of programs addressing a
  1051 method which is able to find a solution which satiesfies the
  1052 post-condition of the specification.
  1053 \end{description}
  1054 
  1055 
  1056 %WN die folgenden Erkl"arungen finden sich durch "grep -r 'datatype pbt' *"
  1057 %WN ...
  1058 %  type pbt = 
  1059 %     {guh  : guh,         (*unique within this isac-knowledge*)
  1060 %      mathauthors: string list, (*copyright*)
  1061 %      init  : pblID,      (*to start refinement with*)
  1062 %      thy   : theory,     (* which allows to compile that pbt
  1063 %			  TODO: search generalized for subthy (ref.p.69*)
  1064 %      (*^^^ WN050912 NOT used during application of the problem,
  1065 %       because applied terms may be from 'subthy' as well as from super;
  1066 %       thus we take 'maxthy'; see match_ags !*)
  1067 %      cas   : term option,(*'CAS-command'*)
  1068 %      prls  : rls,        (* for preds in where_*)
  1069 %      where_: term list,  (* where - predicates*)
  1070 %      ppc   : pat list,
  1071 %      (*this is the model-pattern; 
  1072 %       it contains "#Given","#Where","#Find","#Relate"-patterns
  1073 %       for constraints on identifiers see "fun cpy_nam"*)
  1074 %      met   : metID list}; (* methods solving the pbt*)
  1075 %
  1076 %WN weil dieser Code sehr unaufger"aumt ist, habe ich die Erkl"arungen
  1077 %WN oben selbst geschrieben.
  1078 
  1079 
  1080 
  1081 
  1082 %WN das w"urde ich in \sec\label{progr} verschieben und
  1083 %WN das SubProblem partial fractions zum Erkl"aren verwenden.
  1084 % Such a specification is checked before the execution of a program is
  1085 % started, the same applies for sub-programs. In the following example
  1086 % (Example~\ref{eg:subprob}) shows the call of such a subproblem:
  1087 % 
  1088 % \vbox{
  1089 %   \begin{example}
  1090 %   \label{eg:subprob}
  1091 %   \hfill \\
  1092 %   {\ttfamily \begin{tabbing}
  1093 %   ``(L\_L::bool list) = (\=SubProblem (\=Test','' \\
  1094 %   ``\>\>[linear,univariate,equation,test],'' \\
  1095 %   ``\>\>[Test,solve\_linear])'' \\
  1096 %   ``\>[BOOL equ, REAL z])'' \\
  1097 %   \end{tabbing}
  1098 %   }
  1099 %   {\small\textit{
  1100 %     \noindent If a program requires a result which has to be
  1101 % calculated first we can use a subproblem to do so. In our specific
  1102 % case we wanted to calculate the zeros of a fraction and used a
  1103 % subproblem to calculate the zeros of the denominator polynom.
  1104 %     }}
  1105 %   \end{example}
  1106 % }
  1107 
  1108 \subsection{Implementation of the Method}\label{meth}
  1109 
  1110 The methods represent the different ways a problem can be solved. This can
  1111 include mathematical tactics as well as tactics taught in different courses.
  1112 Declaring the Method itself gives us the possibilities to describe the way of 
  1113 calculation in deep, as well we get the oppertunities to build in different
  1114 rulesets.
  1115 
  1116 {\footnotesize
  1117 \begin{verbatim}
  1118 01 store_met
  1119 02  (prep_met thy "SP_InverseZTransformation_classic" [] e_metID
  1120 03  (["SignalProcessing", "Z_Transform", "Inverse"], 
  1121 04   [("#Given" ,["filterExpression (X_eq::bool)"]),
  1122 05    ("#Find"  ,["stepResponse (n_eq::bool)"])],
  1123 06   {rew_ord'="tless_true",
  1124 07    rls = rls, 
  1125 08    calc = [],
  1126 09    srls = e_rls,
  1127 10    prls = e_rls,
  1128 11    crls = e_rls,
  1129 12    errpats = [],
  1130 13    nrls = e_rls},
  1131 14   "empty_program"
  1132 15  ));
  1133 \end{verbatim}
  1134 }
  1135 
  1136 The above code is again very technical and goes hard in detail. Unfortunataly
  1137 most declerations are not essential for a basic programm but leads us to a huge
  1138 range of powerful possibilities.
  1139 
  1140 \begin{description}
  1141 \item[01..02] stores the method with the given name into the system under a global
  1142 reference.
  1143 \item[03] specifies the topic within which context the method can be found.
  1144 \item[04..05] as the requirements for different methods can be deviant we 
  1145 declare what is \emph{given} and and what to \emph{find} for this specific method.
  1146 The code again helds on the topic of the case studie, where the inverse 
  1147 z-transformation does a switch between a term describing a electrical filter into
  1148 its step response. Also the datatype has to be declared (bool - due the fact that 
  1149 we handle equations).
  1150 \item[06] \emph{rewrite order} is the order of this rls (ruleset), where one 
  1151 theorem of it is used for rewriting one single step.
  1152 \item[07] \texttt{rls} is the currently used ruleset for this method. This set
  1153 has already been defined before.
  1154 \item[08] we would have the possiblitiy to add this method to a predefined tree of
  1155 calculations, i.eg. if it would be a sub of a bigger problem, here we leave it
  1156 independend.
  1157 \item[09] The \emph{source ruleset}, can be used to evaluate list expressions in 
  1158 the source.
  1159 \item[10] \emph{predicates ruleset} can be used to indicates predicates within 
  1160 model patterns.
  1161 \item[11] The \emph{check ruleset} summarizes rules for checking formulas 
  1162 elementwise.
  1163 \item[12] \emph{error patterns} which are expected in this kind of method can be
  1164 pre-specified to recognize them during the method.
  1165 \item[13] finally the \emph{canonical ruleset}, declares the canonical simplifier 
  1166 of the specific method.
  1167 \item[14] for this code snipset we don't specify the programm itself and keep it 
  1168 empty. Follow up \S\ref{progr} for informations on how to implement this
  1169 \textit{main} part.
  1170 \end{description}
  1171 
  1172 \subsection{Implementation of the TP-based Program}\label{progr} 
  1173 So finally all the prerequisites are described and the very topic can
  1174 be addressed. The program below comes back to the running example: it
  1175 computes a solution for the problem from Fig.\ref{fig-interactive} on
  1176 p.\pageref{fig-interactive}. The reader is reminded of
  1177 \S\ref{PL-isab}, the introduction of the programming language:
  1178 
  1179 {\footnotesize\it\label{s:impl}
  1180 \begin{tabbing}
  1181 123l\=123\=123\=123\=123\=123\=123\=((x\=123\=(x \=123\=123\=\kill
  1182 \>{\rm 00}\>val program =\\
  1183 \>{\rm 01}\>  "{\tt Program} InverseZTransform (X\_eq::bool) =   \\
  1184 \>{\rm 02}\>\>  {\tt let}                                       \\
  1185 \>{\rm 03}\>\>\>  X\_eq = {\tt Take} X\_eq ;   \\
  1186 \>{\rm 04}\>\>\>  X\_eq = {\tt Rewrite} ruleZY X\_eq ; \\
  1187 \>{\rm 05}\>\>\>  (X\_z::real) = lhs X\_eq ;       \\ %no inside-out evaluation
  1188 \>{\rm 06}\>\>\>  (z::real) = argument\_in X\_z; \\
  1189 \>{\rm 07}\>\>\>  (part\_frac::real) = {\tt SubProblem} \\
  1190 \>{\rm 08}\>\>\>\>\>\>\>\>  ( Isac, [partial\_fraction, rational, simplification], [] )\\
  1191 %\>{\rm 10}\>\>\>\>\>\>\>\>\>  [simplification, of\_rationals, to\_partial\_fraction] ) \\
  1192 \>{\rm 09}\>\>\>\>\>\>\>\>  [ (rhs X\_eq)::real, z::real ]; \\
  1193 \>{\rm 10}\>\>\>  (X'\_eq::bool) = {\tt Take} ((X'::real =$>$ bool) z = ZZ\_1 part\_frac) ; \\
  1194 \>{\rm 11}\>\>\>  X'\_eq = (({\tt Rewrite\_Set} ruleYZ) @@   \\
  1195 \>{\rm 12}\>\>\>\>\>  $\;\;$ ({\tt Rewrite\_Set} inverse\_z)) X'\_eq \\
  1196 \>{\rm 13}\>\>  {\tt in } \\
  1197 \>{\rm 14}\>\>\>  X'\_eq"
  1198 \end{tabbing}}
  1199 % ORIGINAL FROM Inverse_Z_Transform.thy
  1200 % "Script InverseZTransform (X_eq::bool) =            "^(*([], Frm), Problem (Isac, [Inverse, Z_Transform, SignalProcessing])*)
  1201 % "(let X = Take X_eq;                                "^(*([1], Frm), X z = 3 / (z - 1 / 4 + -1 / 8 * (1 / z))*)
  1202 % "  X' = Rewrite ruleZY False X;                     "^(*([1], Res), ?X' z = 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
  1203 % "  (X'_z::real) = lhs X';                           "^(*            ?X' z*)
  1204 % "  (zzz::real) = argument_in X'_z;                  "^(*            z *)
  1205 % "  (funterm::real) = rhs X';                        "^(*            3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
  1206 %
  1207 % "  (pbz::real) = (SubProblem (Isac',                "^(**)
  1208 % "    [partial_fraction,rational,simplification],    "^
  1209 % "    [simplification,of_rationals,to_partial_fraction]) "^
  1210 % "    [REAL funterm, REAL zzz]);                     "^(*([2], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
  1211 %
  1212 % "  (pbz_eq::bool) = Take (X'_z = pbz);              "^(*([3], Frm), ?X' z = 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
  1213 % "  pbz_eq = Rewrite ruleYZ False pbz_eq;            "^(*([3], Res), ?X' z = 4 * (?z / (z - 1 / 2)) + -4 * (?z / (z - -1 / 4))*)
  1214 % "  pbz_eq = drop_questionmarks pbz_eq;              "^(*               4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
  1215 % "  (X_zeq::bool) = Take (X_z = rhs pbz_eq);         "^(*([4], Frm), X_z = 4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
  1216 % "  n_eq = (Rewrite_Set inverse_z False) X_zeq;      "^(*([4], Res), X_z = 4 * (1 / 2) ^^^ ?n * ?u [?n] + -4 * (-1 / 4) ^^^ ?n * ?u [?n]*)
  1217 % "  n_eq = drop_questionmarks n_eq                   "^(*            X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
  1218 % "in n_eq)"                                            (*([], Res), X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
  1219 The program is represented as a string and part of the method in
  1220 \S\ref{meth}.  As mentioned in \S\ref{PL} the program is purely
  1221 functional and lacks any input statements and output statements. So
  1222 the steps of calculation towards a solution (and interactive tutoring
  1223 in step-wise problem solving) are created as a side-effect by
  1224 Lucas-Interpretation.  The side-effects are triggered by the tactics
  1225 \texttt{Take}, \texttt{Rewrite}, \texttt{SubProblem} and
  1226 \texttt{Rewrite\_Set} in the above lines {\rm 03, 04, 07, 10, 11} and
  1227 {\rm 12} respectively. These tactics produce the lines in the
  1228 calculation on p.\pageref{flow-impl}.
  1229 
  1230 The above lines {\rm 05, 06} do not contain a tactics, so they do not
  1231 immediately contribute to the calculation on p.\pageref{flow-impl};
  1232 rather, they compute actual arguments for the \texttt{SubProblem} in
  1233 line {\rm 09}~\footnote{The tactics also are break-points for the
  1234 interpreter, where control is handed over to the user in interactive
  1235 tutoring.}. Line {\rm 11} contains tactical \textit{@@}.
  1236 
  1237 \medskip The above program also indicates the dominant role of interactive
  1238 selection of knowledge in the three-dimensional universe of
  1239 mathematics as depicted in Fig.\ref{fig:mathuni} on
  1240 p.\pageref{fig:mathuni}, The \texttt{SubProblem} in the above lines
  1241 {\rm 07..09} is more than a function call with the actual arguments
  1242 \textit{[ (rhs X\_eq)::real, z::real ]}. The programmer has to determine
  1243 three items:
  1244 
  1245 \begin{enumerate}
  1246 \item the theory, in the example \textit{Isac} because different
  1247 methods can be selected in Pt.3 below, which are defined in different
  1248 theories with \textit{Isac} collecting them.
  1249 \item the specification identified by \textit{[partial\_fraction,
  1250 rational, simplification]} in the tree of specifications; this
  1251 specification is analogous to the specification of the main program
  1252 described in \S\ref{spec}; the problem is to find a ``partial fraction
  1253 decomposition'' for a univariate rational polynomial.
  1254 \item the method in the above example is \textit{[ ]}, i.e. empty,
  1255 which supposes the interpreter to select one of the methods predefined
  1256 in the specification, for instance in line {\rm 13} in the running
  1257 example's specification on p.\pageref{exp-spec}~\footnote{The freedom
  1258 (or obligation) for selection carries over to the student in
  1259 interactive tutoring.}.
  1260 \end{enumerate}
  1261 
  1262 The program code, above presented as a string, is parsed by Isabelle's
  1263 parser --- the program is an Isabelle term. This fact is expected to
  1264 simplify verification tasks in the future; on the other hand, this
  1265 fact causes troubles in error detectetion which are discussed as part
  1266 of the workflow in the subsequent section.
  1267 
  1268 \section{Workflow of Programming in the Prototype}\label{workflow}
  1269 The new prover IDE Isabelle/jEdit~\cite{makar-jedit-12} is a great
  1270 step forward for interactive theory and proof development. The
  1271 {\sisac}-prototype re-uses this IDE as a programming environment.  The
  1272 experiences from this re-use show, that the essential components are
  1273 available from Isabelle/jEdit. However, additional tools and features
  1274 are required to acchieve acceptable usability.
  1275 
  1276 So notable experiences are reported here, also as a requirement
  1277 capture for further development of TP-based languages and respective
  1278 IDEs.
  1279 
  1280 \subsection{Preparations and Trials}\label{flow-prep}
  1281 The many sub-tasks to be accomplished {\em before} the first line of
  1282 program code can be written and tested suggest an approach which
  1283 step-wise establishes the prerequisites. The case study underlying
  1284 this paper~\cite{jrocnik-bakk} documents the approach in a separate
  1285 Isabelle theory,
  1286 \textit{Build\_Inverse\_Z\_Transform.thy}~\footnote{http://www.ist.tugraz.at/projects/isac/publ/Build\_Inverse\_Z\_Transform.thy}. Part
  1287 II in the study comprises this theory, \LaTeX ed from the theory by
  1288 use of Isabelle's document preparation system. This paper resembles
  1289 the approach in \S\ref{isabisac} to \S\ref{meth}, which in actual
  1290 implementation work involves several iterations.
  1291 
  1292 \bigskip For instance, only the last step, implementing the program
  1293 described in \S\ref{meth}, reveals details required. Let us assume,
  1294 this is the ML-function \textit{argument\_in} required in line {\rm 06}
  1295 of the example program on p.\pageref{s:impl}; how this function needs
  1296 to be implemented in the prototype has been discussed in \S\ref{funs}
  1297 already.
  1298 
  1299 Now let us assume, that calling this function from the program code
  1300 does not work; so testing this function is required in order to find out
  1301 the reason: type errors, a missing entry of the function somewhere or
  1302 even more nasty technicalities \dots
  1303 
  1304 {\footnotesize
  1305 \begin{verbatim}
  1306    ML {*
  1307      val SOME t = parseNEW ctxt "argument_in (X (z::real))";
  1308      val SOME (str, t') = eval_argument_in "" 
  1309        "Build_Inverse_Z_Transform.argument'_in" t 0;
  1310    *}
  1311    ML {*
  1312      term2str t';
  1313    *}
  1314    val it = "(argument_in X z) = z": string
  1315 \end{verbatim}}
  1316 
  1317 \noindent So, this works: we get an ad-hoc theorem, which used in
  1318 rewriting would reduce \texttt{argument\_in X z} to \texttt{z}. Now we check this
  1319 reduction and create a rule-set \texttt{rls} for that purpose:
  1320 
  1321 {\footnotesize
  1322 \begin{verbatim}
  1323    ML {*
  1324      val rls = append_rls "test" e_rls 
  1325        [Calc ("Build_Inverse_Z_Transform.argument'_in", eval_argument_in "")]
  1326    *}
  1327    ML {*
  1328      val SOME (t', asm) = rewrite_set_ @{theory} rls t;
  1329    *}
  1330    val t' = Free ("z", "RealDef.real"): term
  1331    val asm = []: term list
  1332 \end{verbatim}}
  1333 
  1334 \noindent The resulting term \texttt{t'} is \texttt{Free ("z",
  1335 "RealDef.real")}, i.e the variable \texttt{z}, so all is
  1336 perfect. Probably we have forgotten to store this function correctly~?
  1337 We review the respective \texttt{calclist} (again an
  1338 \textit{Unsynchronized.ref} to be removed in order to adjust to
  1339 IsabelleIsar's asyncronous document model):
  1340 
  1341 {\footnotesize
  1342 \begin{verbatim}
  1343    calclist:= overwritel (! calclist, 
  1344     [("argument_in",("Build_Inverse_Z_Transform.argument'_in", eval_argument_in "")),
  1345      ...
  1346      ]);
  1347 \end{verbatim}}
  1348 
  1349 \noindent The entry is perfect. So what is the reason~? Ah, probably there
  1350 is something messed up with the many rule-sets in the method, see \S\ref{meth} ---
  1351 right, the function \texttt{argument\_in} is not contained in the respective
  1352 rule-set \textit{srls} \dots this just as an example of the intricacies in
  1353 debugging a program in the present state of the prototype.
  1354 
  1355 \subsection{Implementation in Isabelle/{\isac}}\label{flow-impl}
  1356 Given all the prerequisites from \S\ref{isabisac} to \S\ref{meth},
  1357 usually developed within several iterations, the program can be
  1358 assembled; on p.\pageref{s:impl} there is the complete program of the
  1359 running example.
  1360 
  1361 The completion of this program required efforts for several weeks
  1362 (after some months of familiarisation with {\sisac}), caused by the
  1363 abundance of intricacies indicated above. Also writing the program is
  1364 not pleasant, given Isabelle/Isar/ without add-ons for
  1365 programming. Already writing and parsing a few lines of program code
  1366 is a challenge: the program is an Isabelle term; Isabelle's parser,
  1367 however, is not meant for huge terms like the program of the running
  1368 example. So reading out the specific error (usually type errors) from
  1369 Isabelle's message is difficult.
  1370 
  1371 \medskip Testing the evaluation of the program has to rely on very
  1372 simple tools. Step-wise execution is modelled by a function
  1373 \texttt{me}, short for mathematics-engine~\footnote{The interface used
  1374 by the fron-end which created the calculation on
  1375 p.\pageref{fig-interactive} is different from this function}:
  1376 %the following is a simplification of the actual function 
  1377 
  1378 {\footnotesize
  1379 \begin{verbatim}
  1380    ML {* me; *}
  1381    val it = tac -> ctree * pos -> mout * tac * ctree * pos
  1382 \end{verbatim}} 
  1383 
  1384 \noindent This function takes as arguments a tactic \texttt{tac} which
  1385 determines the next step, the step applied to the interpreter-state
  1386 \texttt{ctree * pos} as last argument taken. The interpreter-state is
  1387 a pair of a tree \texttt{ctree} representing the calculation created
  1388 (see the example below) and a position \texttt{pos} in the
  1389 calculation. The function delivers a quadrupel, beginning with the new
  1390 formula \texttt{mout} and the next tactic followed by the new
  1391 interpreter-state.
  1392 
  1393 This function allows to stepwise check the program:
  1394 
  1395 {\footnotesize
  1396 \begin{verbatim}
  1397    ML {*
  1398      val fmz =
  1399        ["filterExpression (X z = 3 / ((z::real) + 1/10 - 1/50*(1/z)))",
  1400         "stepResponse (x[n::real]::bool)"];     
  1401      val (dI,pI,mI) =
  1402        ("Isac", 
  1403         ["Inverse", "Z_Transform", "SignalProcessing"], 
  1404         ["SignalProcessing","Z_Transform","Inverse"]);
  1405                 
  1406      val (mout, tac, ctree, pos)  = CalcTreeTEST [(fmz, (dI, pI, mI))];
  1407      val (mout, tac, ctree, pos)  = me tac (ctree, pos);
  1408      val (mout, tac, ctree, pos)  = me tac (ctree, pos);
  1409      val (mout, tac, ctree, pos)  = me tac (ctree, pos);
  1410      ...
  1411 \end{verbatim}} 
  1412 
  1413 \noindent Several douzens of calls for \texttt{me} are required to
  1414 create the lines in the calculation below (including the sub-problems
  1415 not shown). When an error occurs, the reason might be located
  1416 many steps before: if evaluation by rewriting, as done by the prototype,
  1417 fails, then first nothing happens --- the effects come later and
  1418 cause unpleasant checks.
  1419 
  1420 The checks comprise watching the rewrite-engine for many different
  1421 kinds of rule-sets (see \S\ref{meth}), the interpreter-state, in
  1422 particular the environment and the context at the states position ---
  1423 all checks have to rely on simple functions accessing the
  1424 \texttt{ctree}. So getting the calculation below (which resembles the
  1425 calculation in Fig.\ref{fig-interactive} on p.\pageref{fig-interactive})
  1426 finished successfully is a relief:
  1427 
  1428 {\small\it\label{exp-calc}
  1429 \begin{tabbing}
  1430 123l\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=123\=\kill
  1431 \>{\rm 01}\> $\bullet$  \> {\tt Problem } (Inverse\_Z\_Transform, [Inverse, Z\_Transform, SignalProcessing])       \`\\
  1432 \>{\rm 02}\>\> $\vdash\;\;X z = \frac{3}{z - \frac{1}{4} - \frac{1}{8} \cdot z^{-1}}$       \`{\footnotesize {\tt Take} X\_eq}\\
  1433 \>{\rm 03}\>\> $X z = \frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}$          \`{\footnotesize {\tt Rewrite} ruleZY X\_eq}\\
  1434 \>{\rm 04}\>\> $\bullet$\> {\tt Problem } [partial\_fraction,rational,simplification]        \`{\footnotesize {\tt SubProblem} \dots}\\
  1435 \>{\rm 05}\>\>\>  $\vdash\;\;\frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}=$    \`- - -\\
  1436 \>{\rm 06}\>\>\>  $\frac{24}{-1 + -2 \cdot z + 8 \cdot z^2}$                                   \`- - -\\
  1437 \>{\rm 07}\>\>\>  $\bullet$\> solve ($-1 + -2 \cdot z + 8 \cdot z^2,\;z$ )                      \`- - -\\
  1438 \>{\rm 08}\>\>\>\>   $\vdash$ \> $\frac{3}{z + \frac{-1}{4} + \frac{-1}{8} \cdot \frac{1}{z}}=0$ \`- - -\\
  1439 \>{\rm 09}\>\>\>\>   $z = \frac{2+\sqrt{-4+8}}{16}\;\lor\;z = \frac{2-\sqrt{-4+8}}{16}$           \`- - -\\
  1440 \>{\rm 10}\>\>\>\>   $z = \frac{1}{2}\;\lor\;z =$ \_\_\_                                           \`- - -\\
  1441 \>        \>\>\>\>   \_\_\_                                                                        \`- - -\\
  1442 \>{\rm 11}\>\> \dots\> $\frac{4}{z - \frac{1}{2}} + \frac{-4}{z - \frac{-1}{4}}$                   \`\\
  1443 \>{\rm 12}\>\> $X^\prime z = {\cal Z}^{-1} (\frac{4}{z - \frac{1}{2}} + \frac{-4}{z - \frac{-1}{4}})$ \`{\footnotesize {\tt Take} ((X'::real =$>$ bool) z = ZZ\_1 part\_frac)}\\
  1444 \>{\rm 13}\>\> $X^\prime z = {\cal Z}^{-1} (4\cdot\frac{z}{z - \frac{1}{2}} + -4\cdot\frac{z}{z - \frac{-1}{4}})$ \`{\footnotesize{\tt Rewrite\_Set} ruleYZ X'\_eq }\\
  1445 \>{\rm 14}\>\> $X^\prime z = 4\cdot(\frac{1}{2})^n \cdot u [n] + -4\cdot(\frac{-1}{4})^n \cdot u [n]$  \`{\footnotesize {\tt Rewrite\_Set} inverse\_z X'\_eq}\\
  1446 \>{\rm 15}\> \dots\> $X^\prime z = 4\cdot(\frac{1}{2})^n \cdot u [n] + -4\cdot(\frac{-1}{4})^n \cdot u [n]$ \`{\footnotesize {\tt Check\_Postcond}}
  1447 \end{tabbing}}
  1448 % ORIGINAL FROM Inverse_Z_Transform.thy
  1449 %    "Script InverseZTransform (X_eq::bool) =            "^(*([], Frm), Problem (Isac, [Inverse, Z_Transform, SignalProcessing])*)
  1450 %    "(let X = Take X_eq;                                "^(*([1], Frm), X z = 3 / (z - 1 / 4 + -1 / 8 * (1 / z))*)
  1451 %    "  X' = Rewrite ruleZY False X;                     "^(*([1], Res), ?X' z = 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
  1452 %    "  (X'_z::real) = lhs X';                           "^(*            ?X' z*)
  1453 %    "  (zzz::real) = argument_in X'_z;                  "^(*            z *)
  1454 %    "  (funterm::real) = rhs X';                        "^(*            3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))*)
  1455 % 
  1456 %    "  (pbz::real) = (SubProblem (Isac',                "^(**)
  1457 %    "    [partial_fraction,rational,simplification],    "^
  1458 %    "    [simplification,of_rationals,to_partial_fraction]) "^
  1459 %    "    [REAL funterm, REAL zzz]);                     "^(*([2], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
  1460 % 
  1461 %    "  (pbz_eq::bool) = Take (X'_z = pbz);              "^(*([3], Frm), ?X' z = 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
  1462 %    "  pbz_eq = Rewrite ruleYZ False pbz_eq;            "^(*([3], Res), ?X' z = 4 * (?z / (z - 1 / 2)) + -4 * (?z / (z - -1 / 4))*)
  1463 %    "  pbz_eq = drop_questionmarks pbz_eq;              "^(*               4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
  1464 %    "  (X_zeq::bool) = Take (X_z = rhs pbz_eq);         "^(*([4], Frm), X_z = 4 * (z / (z - 1 / 2)) + -4 * (z / (z - -1 / 4))*)
  1465 %    "  n_eq = (Rewrite_Set inverse_z False) X_zeq;      "^(*([4], Res), X_z = 4 * (1 / 2) ^^^ ?n * ?u [?n] + -4 * (-1 / 4) ^^^ ?n * ?u [?n]*)
  1466 %    "  n_eq = drop_questionmarks n_eq                   "^(*            X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
  1467 %    "in n_eq)"                                            (*([], Res), X_z = 4 * (1 / 2) ^^^ n * u [n] + -4 * (-1 / 4) ^^^ n * u [n]*)
  1468 
  1469 \subsection{Transfer into the Isabelle/{\isac} Knowledge}\label{flow-trans}
  1470 Finally \textit{Build\_Inverse\_Z\_Transform.thy} has got the job done
  1471 and the knowledge accumulated in it can be distributed to appropriate
  1472 theories: the program to \textit{Inverse\_Z\_Transform.thy}, the
  1473 sub-problem accomplishing the partial fraction decomposition to
  1474 \textit{Partial\_Fractions.thy}. Since there are hacks into Isabelle's
  1475 internals, this kind of distribution is not trivial. For instance, the
  1476 function \texttt{argument\_in} in \S\ref{funs} explicitly contains a
  1477 string with the theory it has been defined in, so this string needs to
  1478 be updated from \texttt{Build\_Inverse\_Z\_Transform} to
  1479 \texttt{Atools} if that function is transferred to theory
  1480 \textit{Atools.thy}.
  1481 
  1482 In order to obtain the functionality presented in Fig.\ref{fig-interactive} on p.\pageref{fig-interactive} data must be exported from SML-structures to XML.
  1483 This process is also rather bare-bones without authoring tools and is
  1484 described in detail in the {\sisac} wiki~\footnote{http://www.ist.tugraz.at/isac/index.php/Generate\_representations\_for\_ISAC\_Knowledge}.
  1485 
  1486 % \newpage
  1487 % -------------------------------------------------------------------
  1488 % 
  1489 % Material, falls noch Platz bleibt ...
  1490 % 
  1491 % -------------------------------------------------------------------
  1492 % 
  1493 % 
  1494 % \subsubsection{Trials on Notation and Termination}
  1495 % 
  1496 % \paragraph{Technical notations} are a big problem for our piece of software,
  1497 % but the reason for that isn't a fault of the software itself, one of the
  1498 % troubles comes out of the fact that different technical subtopics use different
  1499 % symbols and notations for a different purpose. The most famous example for such
  1500 % a symbol is the complex number $i$ (in cassique math) or $j$ (in technical
  1501 % math). In the specific part of signal processing one of this notation issues is
  1502 % the use of brackets --- we use round brackets for analoge signals and squared
  1503 % brackets for digital samples. Also if there is no problem for us to handle this
  1504 % fact, we have to tell the machine what notation leads to wich meaning and that
  1505 % this purpose seperation is only valid for this special topic - signal
  1506 % processing.
  1507 % \subparagraph{In the programming language} itself it is not possible to declare
  1508 % fractions, exponents, absolutes and other operators or remarks in a way to make
  1509 % them pretty to read; our only posssiblilty were ASCII characters and a handfull
  1510 % greek symbols like: $\alpha, \beta, \gamma, \phi,\ldots$.
  1511 % \par
  1512 % With the upper collected knowledge it is possible to check if we were able to
  1513 % donate all required terms and expressions.
  1514 % 
  1515 % \subsubsection{Definition and Usage of Rules}
  1516 % 
  1517 % \paragraph{The core} of our implemented problem is the Z-Transformation, due
  1518 % the fact that the transformation itself would require higher math which isn't
  1519 % yet avaible in our system we decided to choose the way like it is applied in
  1520 % labratory and problem classes at our university - by applying transformation
  1521 % rules (collected in transformation tables).
  1522 % \paragraph{Rules,} in {\sisac{}}'s programming language can be designed by the
  1523 % use of axiomatizations like shown in Example~\ref{eg:ruledef}
  1524 % 
  1525 % \begin{example}
  1526 %   \label{eg:ruledef}
  1527 %   \hfill\\
  1528 %   \begin{verbatim}
  1529 %   axiomatization where
  1530 %     rule1: ``1 = $\delta$[n]'' and
  1531 %     rule2: ``|| z || > 1 ==> z / (z - 1) = u [n]'' and
  1532 %     rule3: ``|| z || < 1 ==> z / (z - 1) = -u [-n - 1]''
  1533 %   \end{verbatim}
  1534 % \end{example}
  1535 % 
  1536 % This rules can be collected in a ruleset and applied to a given expression as
  1537 % follows in Example~\ref{eg:ruleapp}.
  1538 % 
  1539 % \begin{example}
  1540 %   \hfill\\
  1541 %   \label{eg:ruleapp}
  1542 %   \begin{enumerate}
  1543 %   \item Store rules in ruleset:
  1544 %   \begin{verbatim}
  1545 %   val inverse_Z = append_rls "inverse_Z" e_rls
  1546 %     [ Thm ("rule1",num_str @{thm rule1}),
  1547 %       Thm ("rule2",num_str @{thm rule2}),
  1548 %       Thm ("rule3",num_str @{thm rule3})
  1549 %     ];\end{verbatim}
  1550 %   \item Define exression:
  1551 %   \begin{verbatim}
  1552 %   val sample_term = str2term "z/(z-1)+z/(z-</delta>)+1";\end{verbatim}
  1553 %   \item Apply ruleset:
  1554 %   \begin{verbatim}
  1555 %   val SOME (sample_term', asm) = 
  1556 %     rewrite_set_ thy true inverse_Z sample_term;\end{verbatim}
  1557 %   \end{enumerate}
  1558 % \end{example}
  1559 % 
  1560 % The use of rulesets makes it much easier to develop our designated applications,
  1561 % but the programmer has to be careful and patient. When applying rulesets
  1562 % two important issues have to be mentionend:
  1563 % \subparagraph{How often} the rules have to be applied? In case of
  1564 % transformations it is quite clear that we use them once but other fields
  1565 % reuqire to apply rules until a special condition is reached (e.g.
  1566 % a simplification is finished when there is nothing to be done left).
  1567 % \subparagraph{The order} in which rules are applied often takes a big effect
  1568 % and has to be evaluated for each purpose once again.
  1569 % \par
  1570 % In our special case of Signal Processing and the rules defined in
  1571 % Example~\ref{eg:ruledef} we have to apply rule~1 first of all to transform all
  1572 % constants. After this step has been done it no mather which rule fit's next.
  1573 % 
  1574 % \subsubsection{Helping Functions}
  1575 % 
  1576 % \paragraph{New Programms require,} often new ways to get through. This new ways
  1577 % means that we handle functions that have not been in use yet, they can be 
  1578 % something special and unique for a programm or something famous but unneeded in
  1579 % the system yet. In our dedicated example it was for example neccessary to split
  1580 % a fraction into numerator and denominator; the creation of such function and
  1581 % even others is described in upper Sections~\ref{simp} and \ref{funs}.
  1582 % 
  1583 % \subsubsection{Trials on equation solving}
  1584 % %simple eq and problem with double fractions/negative exponents
  1585 % \paragraph{The Inverse Z-Transformation} makes it neccessary to solve
  1586 % equations degree one and two. Solving equations in the first degree is no 
  1587 % problem, wether for a student nor for our machine; but even second degree
  1588 % equations can lead to big troubles. The origin of this troubles leads from
  1589 % the build up process of our equation solving functions; they have been
  1590 % implemented some time ago and of course they are not as good as we want them to
  1591 % be. Wether or not following we only want to show how cruel it is to build up new
  1592 % work on not well fundamentials.
  1593 % \subparagraph{A simple equation solving,} can be set up as shown in the next
  1594 % example:
  1595 % 
  1596 % \begin{example}
  1597 % \begin{verbatim}
  1598 %   
  1599 %   val fmz =
  1600 %     ["equality (-1 + -2 * z + 8 * z ^^^ 2 = (0::real))",
  1601 %      "solveFor z",
  1602 %      "solutions L"];                                    
  1603 % 
  1604 %   val (dI',pI',mI') =
  1605 %     ("Isac", 
  1606 %       ["abcFormula","degree_2","polynomial","univariate","equation"],
  1607 %       ["no_met"]);\end{verbatim}
  1608 % \end{example}
  1609 % 
  1610 % Here we want to solve the equation: $-1+-2\cdot z+8\cdot z^{2}=0$. (To give
  1611 % a short overview on the commands; at first we set up the equation and tell the
  1612 % machine what's the bound variable and where to store the solution. Second step 
  1613 % is to define the equation type and determine if we want to use a special method
  1614 % to solve this type.) Simple checks tell us that the we will get two results for
  1615 % this equation and this results will be real.
  1616 % So far it is easy for us and for our machine to solve, but
  1617 % mentioned that a unvariate equation second order can have three different types
  1618 % of solutions it is getting worth.
  1619 % \subparagraph{The solving of} all this types of solutions is not yet supported.
  1620 % Luckily it was needed for us; but something which has been needed in this 
  1621 % context, would have been the solving of an euation looking like:
  1622 % $-z^{-2}+-2\cdot z^{-1}+8=0$ which is basically the same equation as mentioned
  1623 % before (remember that befor it was no problem to handle for the machine) but
  1624 % now, after a simple equivalent transformation, we are not able to solve
  1625 % it anymore.
  1626 % \subparagraph{Error messages} we get when we try to solve something like upside
  1627 % were very confusing and also leads us to no special hint about a problem.
  1628 % \par The fault behind is, that we have no well error handling on one side and
  1629 % no sufficient formed equation solving on the other side. This two facts are
  1630 % making the implemention of new material very difficult.
  1631 % 
  1632 % \subsection{Formalization of missing knowledge in Isabelle}
  1633 % 
  1634 % \paragraph{A problem} behind is the mechanization of mathematic
  1635 % theories in TP-bases languages. There is still a huge gap between
  1636 % these algorithms and this what we want as a solution - in Example
  1637 % Signal Processing. 
  1638 % 
  1639 % \vbox{
  1640 %   \begin{example}
  1641 %     \label{eg:gap}
  1642 %     \[
  1643 %       X\cdot(a+b)+Y\cdot(c+d)=aX+bX+cY+dY
  1644 %     \]
  1645 %     {\small\textit{
  1646 %       \noindent A very simple example on this what we call gap is the
  1647 % simplification above. It is needles to say that it is correct and also
  1648 % Isabelle for fills it correct - \emph{always}. But sometimes we don't
  1649 % want expand such terms, sometimes we want another structure of
  1650 % them. Think of a problem were we now would need only the coefficients
  1651 % of $X$ and $Y$. This is what we call the gap between mechanical
  1652 % simplification and the solution.
  1653 %     }}
  1654 %   \end{example}
  1655 % }
  1656 % 
  1657 % \paragraph{We are not able to fill this gap,} until we have to live
  1658 % with it but first have a look on the meaning of this statement:
  1659 % Mechanized math starts from mathematical models and \emph{hopefully}
  1660 % proceeds to match physics. Academic engineering starts from physics
  1661 % (experimentation, measurement) and then proceeds to mathematical
  1662 % modeling and formalization. The process from a physical observance to
  1663 % a mathematical theory is unavoidable bound of setting up a big
  1664 % collection of standards, rules, definition but also exceptions. These
  1665 % are the things making mechanization that difficult.
  1666 % 
  1667 % \vbox{
  1668 %   \begin{example}
  1669 %     \label{eg:units}
  1670 %     \[
  1671 %       m,\ kg,\ s,\ldots
  1672 %     \]
  1673 %     {\small\textit{
  1674 %       \noindent Think about some units like that one's above. Behind
  1675 % each unit there is a discerning and very accurate definition: One
  1676 % Meter is the distance the light travels, in a vacuum, through the time
  1677 % of 1 / 299.792.458 second; one kilogram is the weight of a
  1678 % platinum-iridium cylinder in paris; and so on. But are these
  1679 % definitions usable in a computer mechanized world?!
  1680 %     }}
  1681 %   \end{example}
  1682 % }
  1683 % 
  1684 % \paragraph{A computer} or a TP-System builds on programs with
  1685 % predefined logical rules and does not know any mathematical trick
  1686 % (follow up example \ref{eg:trick}) or recipe to walk around difficult
  1687 % expressions. 
  1688 % 
  1689 % \vbox{
  1690 %   \begin{example}
  1691 %     \label{eg:trick}
  1692 %   \[ \frac{1}{j\omega}\cdot\left(e^{-j\omega}-e^{j3\omega}\right)= \]
  1693 %   \[ \frac{1}{j\omega}\cdot e^{-j2\omega}\cdot\left(e^{j\omega}-e^{-j\omega}\right)=
  1694 %      \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$\frac{1}{j}\,\left(e^{j\omega}-e^{-j\omega}\right)$}= \]
  1695 %   \[ \frac{1}{\omega}\, e^{-j2\omega}\cdot\colorbox{lgray}{$2\, sin(\omega)$} \]
  1696 %     {\small\textit{
  1697 %       \noindent Sometimes it is also useful to be able to apply some
  1698 % \emph{tricks} to get a beautiful and particularly meaningful result,
  1699 % which we are able to interpret. But as seen in this example it can be
  1700 % hard to find out what operations have to be done to transform a result
  1701 % into a meaningful one.
  1702 %     }}
  1703 %   \end{example}
  1704 % }
  1705 % 
  1706 % \paragraph{The only possibility,} for such a system, is to work
  1707 % through its known definitions and stops if none of these
  1708 % fits. Specified on Signal Processing or any other application it is
  1709 % often possible to walk through by doing simple creases. This creases
  1710 % are in general based on simple math operational but the challenge is
  1711 % to teach the machine \emph{all}\footnote{Its pride to call it
  1712 % \emph{all}.} of them. Unfortunately the goal of TP Isabelle is to
  1713 % reach a high level of \emph{all} but it in real it will still be a
  1714 % survey of knowledge which links to other knowledge and {{\sisac}{}} a
  1715 % trainer and helper but no human compensating calculator. 
  1716 % \par
  1717 % {{{\sisac}{}}} itself aims to adds \emph{Algorithmic Knowledge} (formal
  1718 % specifications of problems out of topics from Signal Processing, etc.)
  1719 % and \emph{Application-oriented Knowledge} to the \emph{deductive} axis of
  1720 % physical knowledge. The result is a three-dimensional universe of
  1721 % mathematics seen in Figure~\ref{fig:mathuni}.
  1722 % 
  1723 % \begin{figure}
  1724 %   \begin{center}
  1725 %     \includegraphics{fig/universe}
  1726 %     \caption{Didactic ``Math-Universe'': Algorithmic Knowledge (Programs) is
  1727 %              combined with Application-oriented Knowledge (Specifications) and Deductive Knowledge (Axioms, Definitions, Theorems). The Result
  1728 %              leads to a three dimensional math universe.\label{fig:mathuni}}
  1729 %   \end{center}
  1730 % \end{figure}
  1731 % 
  1732 % %WN Deine aktuelle Benennung oben wird Dir kein Fachmann abnehmen;
  1733 % %WN bitte folgende Bezeichnungen nehmen:
  1734 % %WN 
  1735 % %WN axis 1: Algorithmic Knowledge (Programs)
  1736 % %WN axis 2: Application-oriented Knowledge (Specifications)
  1737 % %WN axis 3: Deductive Knowledge (Axioms, Definitions, Theorems)
  1738 % %WN 
  1739 % %WN und bitte die R"ander von der Grafik wegschneiden (was ich f"ur *.pdf
  1740 % %WN nicht hinkriege --- weshalb ich auch die eJMT-Forderung nicht ganz
  1741 % %WN verstehe, separierte PDFs zu schicken; ich w"urde *.png schicken)
  1742 % 
  1743 % %JR Ränder und beschriftung geändert. Keine Ahnung warum eJMT sich pdf's
  1744 % %JR wünschen, würde ebenfalls png oder ähnliches verwenden, aber wenn pdf's
  1745 % %JR gefordert werden WN2...
  1746 % %WN2 meiner Meinung nach hat sich eJMT unklar ausgedr"uckt (z.B. kann
  1747 % %WN2 man meines Wissens pdf-figures nicht auf eine bestimmte Gr"osse
  1748 % %WN2 zusammenschneiden um die R"ander weg zu bekommen)
  1749 % %WN2 Mein Vorschlag ist, in umserem tex-file bei *.png zu bleiben und
  1750 % %WN2 png + pdf figures mitzuschicken.
  1751 % 
  1752 % \subsection{Notes on Problems with Traditional Notation}
  1753 % 
  1754 % \paragraph{During research} on these topic severely problems on
  1755 % traditional notations have been discovered. Some of them have been
  1756 % known in computer science for many years now and are still unsolved,
  1757 % one of them aggregates with the so called \emph{Lambda Calculus},
  1758 % Example~\ref{eg:lamda} provides a look on the problem that embarrassed
  1759 % us.
  1760 % 
  1761 % \vbox{
  1762 %   \begin{example}
  1763 %     \label{eg:lamda}
  1764 % 
  1765 %   \[ f(x)=\ldots\;  \quad R \rightarrow \quad R \]
  1766 % 
  1767 % 
  1768 %   \[ f(p)=\ldots\;  p \in \quad R \]
  1769 % 
  1770 %     {\small\textit{
  1771 %       \noindent Above we see two equations. The first equation aims to
  1772 % be a mapping of an function from the reel range to the reel one, but
  1773 % when we change only one letter we get the second equation which
  1774 % usually aims to insert a reel point $p$ into the reel function. In
  1775 % computer science now we have the problem to tell the machine (TP) the
  1776 % difference between this two notations. This Problem is called
  1777 % \emph{Lambda Calculus}.
  1778 %     }}
  1779 %   \end{example}
  1780 % }
  1781 % 
  1782 % \paragraph{An other problem} is that terms are not full simplified in
  1783 % traditional notations, in {{\sisac}} we have to simplify them complete
  1784 % to check weather results are compatible or not. in e.g. the solutions
  1785 % of an second order linear equation is an rational in {{\sisac}} but in
  1786 % tradition we keep fractions as long as possible and as long as they
  1787 % aim to be \textit{beautiful} (1/8, 5/16,...).
  1788 % \subparagraph{The math} which should be mechanized in Computer Theorem
  1789 % Provers (\emph{TP}) has (almost) a problem with traditional notations
  1790 % (predicate calculus) for axioms, definitions, lemmas, theorems as a
  1791 % computer program or script is not able to interpret every Greek or
  1792 % Latin letter and every Greek, Latin or whatever calculations
  1793 % symbol. Also if we would be able to handle these symbols we still have
  1794 % a problem to interpret them at all. (Follow up \hbox{Example
  1795 % \ref{eg:symbint1}})
  1796 % 
  1797 % \vbox{
  1798 %   \begin{example}
  1799 %     \label{eg:symbint1}
  1800 %     \[
  1801 %       u\left[n\right] \ \ldots \ unitstep
  1802 %     \]
  1803 %     {\small\textit{
  1804 %       \noindent The unitstep is something we need to solve Signal
  1805 % Processing problem classes. But in {{{\sisac}{}}} the rectangular
  1806 % brackets have a different meaning. So we abuse them for our
  1807 % requirements. We get something which is not defined, but usable. The
  1808 % Result is syntax only without semantic.
  1809 %     }}
  1810 %   \end{example}
  1811 % }
  1812 % 
  1813 % In different problems, symbols and letters have different meanings and
  1814 % ask for different ways to get through. (Follow up \hbox{Example
  1815 % \ref{eg:symbint2}}) 
  1816 % 
  1817 % \vbox{
  1818 %   \begin{example}
  1819 %     \label{eg:symbint2}
  1820 %     \[
  1821 %       \widehat{\ }\ \widehat{\ }\ \widehat{\ } \  \ldots \  exponent
  1822 %     \]
  1823 %     {\small\textit{
  1824 %     \noindent For using exponents the three \texttt{widehat} symbols
  1825 % are required. The reason for that is due the development of
  1826 % {{{\sisac}{}}} the single \texttt{widehat} and also the double were
  1827 % already in use for different operations.
  1828 %     }}
  1829 %   \end{example}
  1830 % }
  1831 % 
  1832 % \paragraph{Also the output} can be a problem. We are familiar with a
  1833 % specified notations and style taught in university but a computer
  1834 % program has no knowledge of the form proved by a professor and the
  1835 % machines themselves also have not yet the possibilities to print every
  1836 % symbol (correct) Recent developments provide proofs in a human
  1837 % readable format but according to the fact that there is no money for
  1838 % good working formal editors yet, the style is one thing we have to
  1839 % live with.
  1840 % 
  1841 % \section{Problems rising out of the Development Environment}
  1842 % 
  1843 % fehlermeldungen! TODO
  1844 
  1845 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\end{verbatim}
  1846 
  1847 \section{Conclusion}\label{conclusion}
  1848 This paper gives a first experience report about programming with a
  1849 TP-based programming language.
  1850 
  1851 \medskip A brief re-introduction of the novel kind of programming
  1852 language by example of the {\sisac}-prototype makes the paper
  1853 self-contained. The main section describes all the main concepts
  1854 involved in TP-based programming and all the sub-tasks concerning
  1855 respective implementation: mechanisation of mathematics and domain
  1856 modelling, implementation of term rewriting systems for the
  1857 rewriting-engine, formal (implicit) specification of the problem to be
  1858 (explicitly) described by the program, implement the many components
  1859 required for Lucas-Interpretation and finally implementation of the
  1860 program itself.
  1861 
  1862 The many concepts and sub-tasks involved in programming require a
  1863 comprehensive workflow; first experiences with the workflow as
  1864 supported by the present prototype are described as well: Isabelle +
  1865 Isar + jEdit provide appropriate components for establishing an
  1866 efficient development environment integrating computation and
  1867 deduction. However, the present state of the prototype is far off a
  1868 state appropriate for wide-spread use: the prototype of the program
  1869 language lacks expressiveness and elegance, the prototype of the
  1870 development environment is hardly usable: error messages still address
  1871 the developer of the prototype's interpreter rather than the
  1872 application programmer, implementation of the many settings for the
  1873 Lucas-Interpreter is cumbersome.
  1874 
  1875 From these experiences a successful proof of concept can be concluded:
  1876 programming arbitrary problems from engineering sciences is possible,
  1877 in principle even in the prototype. Furthermore the experiences allow
  1878 to conclude detailed requirements for further development:
  1879 \begin{itemize}
  1880 \item Clarify underlying logics such that programming is smoothly
  1881 integrated with verification of the program; the post-condition should
  1882 be proved more or less automatically, otherwise working engineers
  1883 would not encounter such programming.
  1884 \item Combine the prototype's programming language with Isabelle's
  1885 powerful function package and probably with more of SML's
  1886 pattern-matching features; include parallel execution on multi-core
  1887 machines into the language desing.
  1888 \item Extend the prototype's Lucas-Interpreter such that it also
  1889 handles functions defined by use of Isabelle's functions package; and
  1890 generalize Isabelle's code generator such that efficient code for the
  1891 whole of the defined programming language can be generated (for
  1892 multi-core machines).
  1893 \item Develop an efficient development environment with
  1894 integration of programming and proving, with management not only of
  1895 Isabelle theories, but also of large collections of specifications and
  1896 of programs.
  1897 \end{itemize} 
  1898 Provided successful accomplishment, these points provide distinguished
  1899 components for virtual workbenches appealing to practictioner of
  1900 engineering in the near future.
  1901 
  1902 \medskip And all programming with a TP-based language will
  1903 subsequently create interactive tutoring as a side-effect:
  1904 Lucas-Interpretation not only provides an interactive programming
  1905 environment, Lucas-Interpretation also can provide TP-based services
  1906 for a flexible dialog component with adaptive user guidance for
  1907 independent and inquiry-based learning.
  1908 
  1909 
  1910 \bibliographystyle{alpha}
  1911 \bibliography{references}
  1912 
  1913 \end{document}