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