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