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