doc-src/isac/jrocnik/eJMT-paper/jrocnik_eJMT.tex
author Walther Neuper <neuper@ist.tugraz.at>
Wed, 12 Sep 2012 21:14:15 +0200
changeset 42504 fea5b11e1646
parent 42503 67921e3c60ff
child 42506 480aee713e3d
permissions -rwxr-xr-x
jrocnik: reworked up to \sect.3.5

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