doc-src/isac/jrocnik/eJMT-paper/jrocnik_eJMT.tex
author Walther Neuper <neuper@ist.tugraz.at>
Fri, 02 Nov 2012 12:20:49 +0100
changeset 48771 be1eb98aea30
parent 48770 4adc77632fa5
child 48772 c581bee50081
permissions -rwxr-xr-x
jrocnik: finished intro + conclusion

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