doc-src/isac/mat-eng-de.tex
author Alexandra Hirn <alexandra.hirn@hotmail.com>
Mon, 26 Jul 2010 14:46:45 +0200
branchlatex-isac-doc
changeset 37882 d354cdcc0a5d
parent 37877 3b63f6bcf05f
child 37886 de15b4d5a6a4
permissions -rw-r--r--
translation until chapter 6
ahirn@37877
     1
\documentclass[11pt,a4paper,headline,headcount,towside,nocenter]{report}
ahirn@37877
     2
\usepackage{latexsym} 
alexandra@37882
     3
ahirn@37877
     4
%\usepackage{ngerman}
ahirn@37877
     5
%\grmn@dq@error ...and \dq \string #1 is undefined}
ahirn@37877
     6
%l.989 ...tch the problem type \\{\tt["squareroot",
ahirn@37877
     7
%                                                  "univ
ahirn@37877
     8
\bibliographystyle{alpha}
ahirn@37877
     9
ahirn@37877
    10
\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
ahirn@37877
    11
ahirn@37877
    12
\title{\isac --- Interface for\\
ahirn@37877
    13
  Developers of Math Knowledge\\[1.0ex]
ahirn@37877
    14
  and\\[1.0ex]
ahirn@37877
    15
  Tools for Experiments in\\
ahirn@37877
    16
  Symbolic Computation\\[1.0ex]}
ahirn@37877
    17
\author{The \isac-Team\\
ahirn@37877
    18
  \tt isac-users@ist.tugraz.at\\[1.0ex]}
ahirn@37877
    19
\date{\today}
ahirn@37877
    20
ahirn@37877
    21
\begin{document}
ahirn@37877
    22
\maketitle
ahirn@37877
    23
\newpage
ahirn@37877
    24
\tableofcontents
ahirn@37877
    25
\newpage
ahirn@37877
    26
\listoftables
ahirn@37877
    27
\newpage
ahirn@37877
    28
ahirn@37877
    29
\chapter{Einleitung}
ahirn@37877
    30
\section{``Authoring'' und ``Tutoring''}
ahirn@37877
    31
{TO DO} Mathematik lernen -- verschiedene Autoren -- Isabelle
ahirn@37877
    32
Die Grundlage f\"ur \isac{} bildet Isabelle. Dies ist ein ``theorem prover'', der von L. Paulson und T. Nipkow entwickelt wird und Hard- und Software pr\"uft.
ahirn@37877
    33
\section{Der Inhalt des Dokuments}
ahirn@37877
    34
\paragraph{TO DO} {Als Anleitung:} Dieses Dokument beschreibt das Kerngebiet (KE) von \isac{}, das Gebiet der mathematics engine (ME) im Kerngebiet und die verschiedenen Funktionen wie das Umschreiben und der Vergleich.
ahirn@37877
    35
ahirn@37877
    36
\isac{} und KE wurden in SML geschrieben, die Sprache in Verbindung mit dem Vorg\"anger des Theorem Provers Isabelle entwickelt. So kam es, dass in diesem Dokument die Ebene ASCII als SML Code pr\"asentiert wird. Der Leser wird vermutlich erkennen, dass der \isac{} Benutzer eine vollkommen andere Sichtweise auf eine grafische Benutzeroberfl\"ache bekommt.
ahirn@37877
    37
ahirn@37877
    38
Das Dokument ist eigenst\"andig; Basiswissen \"uber SML (für eine Einf\"uhrung siehe \cite{Paulson:91}), Terme und Umschreibung wird vorrausgesetzt.
ahirn@37877
    39
ahirn@37877
    40
%The interfaces will be moderately exended during the first phase of development of the mathematics knowledge. The work on the subprojects defined should {\em not} create interfaces of any interest to a user or another author of knowledge except identifiers (of type string) for theorems, rulesets etc.
ahirn@37877
    41
ahirn@37877
    42
Hinweis: SML Code, Verzeichnis, Dateien sind {\tt in 'tt' geschrieben}; besonders in {\tt ML>} ist das Kerngebiet schnell.
ahirn@37877
    43
ahirn@37877
    44
\paragraph{Versuchen Sie es!}  Ein weiteres Anliegen dieses Textes ist, dem Leser Tipps f\"ur Versuche mit den Anwendungen zu geben.
ahirn@37877
    45
ahirn@37877
    46
\section{Gleich am Computer ausprobieren!}\label{get-started}
ahirn@37877
    47
\paragraph{TO DO screenshot} Bevor Sie mit Ihren Versuchen beginnen, m\"ochten wir Ihnen noch einige Hinweise geben.
ahirn@37877
    48
\begin{itemize}
ahirn@37877
    49
 \item System starten
ahirn@37877
    50
 \item Shell aufmachen und die Datei mat-eng-de.sml \"offnen.
ahirn@37877
    51
 \item $>$  :  Hinter diesem Zeichen (``Prompt'') stehen jene, die Sie selbst eingeben bzw. mit Copy und Paste aus der Datei kopieren.
ahirn@37877
    52
 \item Die Eingabe wird mit ``;'' und ``Enter'' abgeschlossen.
ahirn@37877
    53
 \item Zeilen, die nicht mit Prompt beginnen, werden vom Computer ausgegeben.
ahirn@37877
    54
 
ahirn@37877
    55
\end{itemize}
ahirn@37877
    56
ahirn@37877
    57
\part{Experimentelle Ann\"aherung}
ahirn@37877
    58
ahirn@37877
    59
\chapter{Terme und Theorien}
ahirn@37877
    60
Wie bereits erw\"ahnt, geht es um Computer-Mathematik. In den letzten Jahren hat die ``computer science'' grosse Fortschritte darin gemacht, Mathematik auf dem Computer verst\"andlich darzustellen. Dies gilt f\"ur mathematische Formeln, f\"ur die Beschreibung von Problem (behandelt in Abs.\ref{pbl}), f\"ur L\"osungsmethoden (behandelt in Abs.\ref{met}) etc. Wir beginnen mit mathematischen Formeln --- gleich zum Ausprobieren wie in Abs.\ref{get-started} oben vorbereitet.
ahirn@37877
    61
ahirn@37877
    62
\section{Von der Formel zum Term}
ahirn@37877
    63
Um ein Beispiel zu nennen: Die Formel $a+b\cdot 3$ l\"asst sich in lesbarer Form so eingeben:
ahirn@37877
    64
{\footnotesize\begin{verbatim}
ahirn@37877
    65
  > "a + b * 3";
ahirn@37877
    66
  val it = "a + b * 3" : string
ahirn@37877
    67
\end{verbatim}}
ahirn@37877
    68
\noindent ``a + b * 3'' ist also ein String (=Zeichenfolge). In dieser Form weiss der Computer nicht, dass z.B. eine Multiplikation {\em vor} einer Addition zu rechnen ist. Isabelle braucht Formeln in einer anderen Form; Diese kann man mit der Funktion ``str2term'' (= string to term) umrechnen:
ahirn@37877
    69
{\footnotesize\begin{verbatim}
ahirn@37877
    70
  > str2term "a + b * 3";
ahirn@37877
    71
  val it =
ahirn@37877
    72
     Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
ahirn@37877
    73
           Free ("a", "RealDef.real") $
ahirn@37877
    74
        (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
ahirn@37877
    75
           ...) : Term.term
ahirn@37877
    76
\end{verbatim}}
ahirn@37877
    77
\noindent Jene Form braucht Isabelle intern zum rechnen. Sie heisst Term und ist nicht lesbar, daf\"ur aber speicherbar mit Hilfe von ``val'' (=value) 
ahirn@37877
    78
{\footnotesize\begin{verbatim}
ahirn@37877
    79
  > val term = str2term "a + b * 3";
ahirn@37877
    80
  val term =  
ahirn@37877
    81
     Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
ahirn@37877
    82
           Free ("a", "RealDef.real") $
ahirn@37877
    83
        (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
ahirn@37877
    84
           ...) : Term.term
ahirn@37877
    85
\end{verbatim}
ahirn@37877
    86
Der gespeicherte Term kann einer Funktion ``atomty'' \"ubergeben werden, die jenen in einer abstrakten Struktur zeigt:
ahirn@37877
    87
{\footnotesize\begin{verbatim}
ahirn@37877
    88
  > atomty term;
ahirn@37877
    89
 
ahirn@37877
    90
  ***
ahirn@37877
    91
  *** Const (op +, [real, real] => real)
ahirn@37877
    92
  *** . Free (a, real)
ahirn@37877
    93
  *** . Const (op *, [real, real] => real)
ahirn@37877
    94
  *** . . Free (b, real)
ahirn@37877
    95
  *** . . Free (3, real)
ahirn@37877
    96
  ***
ahirn@37877
    97
 
ahirn@37877
    98
  val it = () : unit
ahirn@37877
    99
\end{verbatim}%size
ahirn@37877
   100
ahirn@37877
   101
ahirn@37877
   102
\section{``Theory'' und ``Parsing``}
ahirn@37877
   103
Die theory gibt an, welcher Ausdruck wo steht. Eine derzeitige theory wird intern als \texttt{thy} gekennzeichnet. Jene theory, die alles Wissen ent\"ahlt ist \isac{}. 
ahirn@37877
   104
ahirn@37877
   105
{\footnotesize\begin{verbatim}
ahirn@37877
   106
  > Isac.thy;
ahirn@37877
   107
       val it =
ahirn@37877
   108
          {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
ahirn@37877
   109
          Sum_Type, Relation, Record, Inductive, Transitive_Closure,
ahirn@37877
   110
          Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
ahirn@37877
   111
          SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
ahirn@37877
   112
          Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
ahirn@37877
   113
          IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
ahirn@37877
   114
          Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
ahirn@37877
   115
          RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
ahirn@37877
   116
          Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
ahirn@37877
   117
          Float, ComplexI, Descript, Atools, Simplify, Poly, Rational, PolyMinus,
ahirn@37877
   118
          Equation, LinEq, Root, RootEq, RatEq, RootRat, RootRatEq, PolyEq, Vect,
ahirn@37877
   119
          Calculus, Trig, LogExp, Diff, DiffApp, Integrate, EqSystem, Biegelinie,
ahirn@37877
   120
          AlgEin, Test, Isac} : Theory.theory
ahirn@37877
   121
\end{verbatim}
ahirn@37877
   122
Die, die ein Mal enth\"alt ist groups.thy. Suchen Sie nach '*' unter der Adresse:
ahirn@37877
   123
ahirn@37877
   124
http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/HOL/Groups.html
ahirn@37877
   125
Hier wird Ihnen erkl\"art, wie das Mal vom Computer gelesen wird.
ahirn@37877
   126
{\footnotesize\begin{verbatim}
ahirn@37877
   127
  > Group.thy
ahirn@37877
   128
      fixes f :: "'a => 'a => 'a" (infixl "*" 70)
ahirn@37877
   129
      assumes assoc [ac_simps]: "a * b * c = a * (b * c)"
ahirn@37877
   130
\end{verbatim}
ahirn@37877
   131
Der ''infix`` ist der Operator, der zwischen zwei Argumenten steht. 70 bedeutet, dass Mal eine hohe Priorit\"at hat (bei einem Plus liegt der Wert bei 50 oder 60). 
ahirn@37877
   132
ahirn@37877
   133
Parsing entsteht durch einen string und eine theory. Es verwendet Informationen, die in der theory von Isabelle enthalten sind.
ahirn@37877
   134
{\footnotesize\begin{verbatim}
ahirn@37877
   135
  > parse;
ahirn@37877
   136
       val it = fn : Theory.theory -> string -> Thm.cterm Library.option
ahirn@37877
   137
\end{verbatim}
ahirn@37877
   138
Dieser term kann wieder in seine einzelnen Teile zerlegt werden.
ahirn@37877
   139
{\footnotesize\begin{verbatim}
ahirn@37877
   140
   > val it = (term_of o the) it;
ahirn@37877
   141
        val it =
ahirn@37877
   142
           Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
ahirn@37877
   143
               Free ("a", "RealDef.real") $
ahirn@37877
   144
           (Const ("op *", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
ahirn@37877
   145
               ...) : Term.term
ahirn@37877
   146
\end{verbatim}
ahirn@37877
   147
ahirn@37877
   148
\paragraph{Versuchen Sie es!} Das mathematische Wissen w\"achst, indem man zu den Urspr\"ungen schaut. In den folgenden Beispielen werden verschiedene Meldungen genauer erkl\"art.
ahirn@37877
   149
ahirn@37877
   150
{\footnotesize\begin{verbatim}
ahirn@37877
   151
   > (*-1-*);
ahirn@37877
   152
   > parse HOL.thy "2^^^3";
ahirn@37877
   153
      *** Inner lexical error at: "^^^3"
ahirn@37877
   154
      val it = None : Thm.cterm Library.option         
ahirn@37877
   155
\end{verbatim}
ahirn@37877
   156
''Inner lexical error`` bedeutet, dass ein Fehler aufgetreten ist, vermutlich hat man sich vertippt.
ahirn@37877
   157
ahirn@37877
   158
{\footnotesize\begin{verbatim}
ahirn@37877
   159
   > (*-2-*);
ahirn@37877
   160
   > parse HOL.thy "d_d x (a + x)";
ahirn@37877
   161
      val it = None : Thm.cterm Library.option               
ahirn@37877
   162
\end{verbatim}
ahirn@37877
   163
Fehlt ''Inner lexical error`` wurde der Parse nicht gefunden.
ahirn@37877
   164
ahirn@37877
   165
{\footnotesize\begin{verbatim}
ahirn@37877
   166
   > (*-3-*);
ahirn@37877
   167
   > parse Rational.thy "2^^^3";
ahirn@37877
   168
      val it = Some "2 ^^^ 3" : Thm.cterm Library.option               
ahirn@37877
   169
\end{verbatim}
ahirn@37877
   170
ahirn@37877
   171
{\footnotesize\begin{verbatim}
ahirn@37877
   172
   > (*-4-*);
ahirn@37877
   173
   > val Some t4 = parse Rational.thy "d_d x (a + x)";
ahirn@37877
   174
      val t4 = "d_d x (a + x)" : Thm.cterm              
ahirn@37877
   175
\end{verbatim}
ahirn@37877
   176
ahirn@37877
   177
{\footnotesize\begin{verbatim}
ahirn@37877
   178
   > (*-5-*);
ahirn@37877
   179
   > val Some t5 = parse Diff.thy  "d_d x (a + x)";
ahirn@37877
   180
      val t5 = "d_d x (a + x)" : Thm.cterm             
ahirn@37877
   181
\end{verbatim}
ahirn@37877
   182
ahirn@37877
   183
Der Pase liefert hier einen ''zu sch\"onen`` Ausdruck in Form eines cterms, der wie ein string aussieht. Am verl\"asslichsten sind terme, die sich selbst erzeugen lassen.
ahirn@37877
   184
ahirn@37877
   185
\section{Details von Termen}
ahirn@37877
   186
Mit Hilfe der darunterliegenden Darstellung sieht man, dass ein cterm in einen term umgewandelt werden kann.
ahirn@37877
   187
{\footnotesize\begin{verbatim}
ahirn@37877
   188
   > term_of;
ahirn@37877
   189
      val it = fn : Thm.cterm -> Term.term
ahirn@37877
   190
\end{verbatim}
ahirn@37877
   191
Durch die Umwandlung eines cterms in einen term sieht man die einzelnen Teile des Terms. ''Free`` bedeutet, dass man die Variable \"andern kann.
ahirn@37877
   192
{\footnotesize\begin{verbatim}
ahirn@37877
   193
   > term_of t4;
ahirn@37877
   194
      val it =
ahirn@37877
   195
         Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
ahirn@37877
   196
         ...: Term.term
ahirn@37877
   197
ahirn@37877
   198
\end{verbatim}
ahirn@37877
   199
In diesem Fall sagt uns das ''Const``, dass die Variable eine Konstante ist, also ein Fixwert ist und immer die selbe Funktion hat.
ahirn@37877
   200
{\footnotesize\begin{verbatim}
ahirn@37877
   201
   > term_of t5;
ahirn@37877
   202
      val it =
ahirn@37877
   203
         Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $ ... $
ahirn@37877
   204
         ... : Term.term
ahirn@37877
   205
\end{verbatim}
ahirn@37877
   206
Sollten verschiedene Teile des Output nicht sichtbar sein, kann die Schriftgr\"osse ge\"andert werden.
ahirn@37877
   207
{\footnotesize\begin{verbatim}
ahirn@37877
   208
   > print_depth;
ahirn@37877
   209
      val it = fn : int -> unit
ahirn@37877
   210
 \end{verbatim}
ahirn@37877
   211
Zuerst gibt man die Schriftgr\"osse ein, danach den term, der gr\"osser werden soll.
ahirn@37877
   212
{\footnotesize\begin{verbatim}
ahirn@37877
   213
   > print_depth 10;
ahirn@37877
   214
      val it = () : unit
ahirn@37877
   215
   > term_of t4;
ahirn@37877
   216
         val it =
ahirn@37877
   217
            Free ("d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
ahirn@37877
   218
                Free ("x", "RealDef.real") $
ahirn@37877
   219
            (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
ahirn@37877
   220
                Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
ahirn@37877
   221
         : Term.term
ahirn@37877
   222
ahirn@37877
   223
   > print_depth 10;
ahirn@37877
   224
         val it = () : unit
ahirn@37877
   225
   > term_of t5;
ahirn@37877
   226
         val it =
ahirn@37877
   227
            Const ("Diff.d_d", "[RealDef.real, RealDef.real] => RealDef.real") $
ahirn@37877
   228
                Free ("x", "RealDef.real") $
ahirn@37877
   229
            (Const ("op +", "[RealDef.real, RealDef.real] => RealDef.real") $
ahirn@37877
   230
                Free ("a", "RealDef.real") $ Free ("x", "RealDef.real"))
ahirn@37877
   231
         : Term.term
ahirn@37877
   232
\end{verbatim}
ahirn@37877
   233
ahirn@37877
   234
Eine andere Variante um den Unterschied der beiden Terme zu sehen ist folgende: 
ahirn@37877
   235
{\footnotesize\begin{verbatim}
ahirn@37877
   236
   > (*-4-*) val thy = Rational.thy;
ahirn@37877
   237
      val thy =
ahirn@37877
   238
         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
ahirn@37877
   239
         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
ahirn@37877
   240
         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
ahirn@37877
   241
         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
ahirn@37877
   242
         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
ahirn@37877
   243
         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
ahirn@37877
   244
         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
ahirn@37877
   245
         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
ahirn@37877
   246
         Ring_and_Field, Complex_Numbers, Real, ListG, Tools, Script, Typefix,
ahirn@37877
   247
         Float, ComplexI, Descript, Atools, Simplify, Poly, Rational}
ahirn@37877
   248
     : Theory.theory
ahirn@37877
   249
   > ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
ahirn@37877
   250
 
ahirn@37877
   251
      ***
ahirn@37877
   252
      *** Free (d_d, [real, real] => real)
ahirn@37877
   253
      *** . Free (x, real)
ahirn@37877
   254
      *** . Const (op +, [real, real] => real)
ahirn@37877
   255
      *** . . Free (a, real)
ahirn@37877
   256
      *** . . Free (x, real)
ahirn@37877
   257
      ***
ahirn@37877
   258
 
ahirn@37877
   259
      val it = () : unit
ahirn@37877
   260
ahirn@37877
   261
ahirn@37877
   262
   > (*-5-*) val thy = Diff.thy;
ahirn@37877
   263
      val thy =
ahirn@37877
   264
         {ProtoPure, CPure, HOL, Set, Typedef, Fun, Product_Type, Lfp, Gfp,
ahirn@37877
   265
         Sum_Type, Relation, Record, Inductive, Transitive_Closure,
ahirn@37877
   266
         Wellfounded_Recursion, NatDef, Nat, NatArith, Divides, Power,
ahirn@37877
   267
         SetInterval, Finite_Set, Equiv, IntDef, Int, Datatype_Universe,
ahirn@37877
   268
         Datatype, Numeral, Bin, IntArith, Wellfounded_Relations, Recdef, IntDiv,
ahirn@37877
   269
         IntPower, NatBin, NatSimprocs, Relation_Power, PreList, List, Map,
ahirn@37877
   270
         Hilbert_Choice, Main, Lubs, PNat, PRat, PReal, RealDef, RealOrd,
ahirn@37877
   271
         RealInt, RealBin, RealArith0, RealArith, RComplete, RealAbs, RealPow,
ahirn@37877
   272
         Ring_and_Field, Complex_Numbers, Real, Calculus, Trig, ListG, Tools,
ahirn@37877
   273
         Script, Typefix, Float, ComplexI, Descript, Atools, Simplify, Poly,
ahirn@37877
   274
         Equation, LinEq, Root, RootEq, Rational, RatEq, RootRat, RootRatEq,
ahirn@37877
   275
         PolyEq, LogExp, Diff} : Theory.theory
ahirn@37877
   276
 
ahirn@37877
   277
   > ((atomty) o term_of o the o (parse thy)) "d_d x (a + x)";
ahirn@37877
   278
 
ahirn@37877
   279
      ***
ahirn@37877
   280
      *** Const (Diff.d_d, [real, real] => real)
ahirn@37877
   281
      *** . Free (x, real)
ahirn@37877
   282
      *** . Const (op +, [real, real] => real)
ahirn@37877
   283
      *** . . Free (a, real)
ahirn@37877
   284
      *** . . Free (x, real)
ahirn@37877
   285
      ***
ahirn@37877
   286
 
ahirn@37877
   287
      val it = () : unit
ahirn@37877
   288
\end{verbatim}
ahirn@37877
   289
ahirn@37877
   290
ahirn@37877
   291
{\chapter{''Rewriting``}}
ahirn@37877
   292
{\section{}}
ahirn@37877
   293
Bei Rewriting handelt es sich um die Vereinfachung eines Terms in vielen kleinen Schritten und nach bestimmten Regeln. Der Computer wendet dabei hintereinander verschiedene Rechengesetze an, weil er den Term ansonsten nicht l\"osen kann.
ahirn@37877
   294
ahirn@37877
   295
{\footnotesize\begin{verbatim}
ahirn@37877
   296
> rewrite_;
ahirn@37877
   297
val it = fn
ahirn@37877
   298
:
ahirn@37877
   299
   Theory.theory ->
ahirn@37877
   300
   ((Term.term * Term.term) list -> Term.term * Term.term -> bool) ->
ahirn@37877
   301
   rls ->
ahirn@37877
   302
   bool ->
ahirn@37877
   303
   Thm.thm -> Term.term -> (Term.term * Term.term list) Library.option
ahirn@37877
   304
ahirn@37877
   305
> rewrite;
ahirn@37877
   306
val it = fn
ahirn@37877
   307
:
ahirn@37877
   308
   theory' ->
ahirn@37877
   309
   rew_ord' ->
ahirn@37877
   310
   rls' -> bool -> thm' -> cterm' -> (string * string list) Library.option
ahirn@37877
   311
ahirn@37877
   312
\end{verbatim}
ahirn@37877
   313
\textbf{Versuchen Sie es!} Um zu sehen, wie der Computer vorgeht und welche Rechengesetze er anwendet, zeigen wir Ihnen durch Differenzieren von (a + a * (2 + b)), die einzelnen Schritte. Sie k\"onnen nat\"urlichauch selbst einige Beispiele ausprobieren!
ahirn@37877
   314
ahirn@37877
   315
Zuerst legt man fest, dass es sich um eine Differenzierung handelt.
ahirn@37877
   316
{\footnotesize\begin{verbatim}
ahirn@37877
   317
   > val thy' = "Diff.thy";
ahirn@37877
   318
      val thy' = "Diff.thy" : string
ahirn@37877
   319
\end{verbatim}
ahirn@37877
   320
Dann gibt man die zu l\"osende Rechnung ein.
ahirn@37877
   321
{\footnotesize\begin{verbatim}
ahirn@37877
   322
   > val ct = "d_d x (a + a * (2 + b))";
ahirn@37877
   323
      val ct = "d_d x (a + a * (2 + b))" : string
ahirn@37877
   324
\end{verbatim}
ahirn@37877
   325
Anschließend gibt man bekannt, dass die Summenregel angewandt werden soll.
ahirn@37877
   326
{\footnotesize\begin{verbatim}
ahirn@37877
   327
   > val thm = ("diff_sum","");
ahirn@37877
   328
      val thm = ("diff_sum", "") : string * string
ahirn@37877
   329
\end{verbatim}
ahirn@37877
   330
Schliesslich wird die erste Ableitung angezeigt.
ahirn@37877
   331
{\footnotesize\begin{verbatim}
ahirn@37877
   332
   > val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
ahirn@37877
   333
                        [("bdv","x::real")] thm ct;#
ahirn@37877
   334
      val ct = "d_d x a + d_d x (a * (2 + b))" : cterm'
ahirn@37877
   335
\end{verbatim}
ahirn@37877
   336
Will man auch die zweite Ableitung sehen, geht man so vor:
ahirn@37877
   337
{\footnotesize\begin{verbatim}
ahirn@37877
   338
   > val thm = ("diff_prod_const","");
ahirn@37877
   339
      val thm = ("diff_prod_const", "") : string * string
ahirn@37877
   340
\end{verbatim} 
ahirn@37877
   341
Auch die zweite Ableitung wird sichtbar.
ahirn@37877
   342
{\footnotesize\begin{verbatim}
ahirn@37877
   343
   > val Some (ct,_) = rewrite_inst thy' "tless_true" "eval_rls" true
ahirn@37877
   344
                        [("bdv","x::real")] thm ct;#
ahirn@37877
   345
      val ct = "d_d x a + a * d_d x (2 + b)" : cterm'
ahirn@37877
   346
\end{verbatim}
ahirn@37877
   347
alexandra@37882
   348
{\section{M\"oglichkeiten von Rewriting}
alexandra@37882
   349
Es gibt verscheidene Varianten von Rewriting, die alle eine bestimmte Bedeutung haben.
alexandra@37882
   350
\textit{rewrite\_inst} bedeutet, dass die Liste der Terme vor dem Rewriting durch ein ''Theorem`` (ein mathematischer Begriff f\"ur einen Satz) ersetzt wird.
alexandra@37882
   351
{\footnotesize\begin{verbatim}
alexandra@37882
   352
> rewrite_inst;
alexandra@37882
   353
val it = fn
alexandra@37882
   354
:
alexandra@37882
   355
   theory' ->
alexandra@37882
   356
   rew_ord' ->
alexandra@37882
   357
   rls' ->
alexandra@37882
   358
   bool -> 'a -> thm' -> cterm' -> (cterm' * cterm' list) Library.option
alexandra@37882
   359
\end{verbatim}
alexandra@37882
   360
Mit Hilfe von \textit{rewrite\_set} werden Terme, die normalerweise nur mit einem Thoerem vereinfacht dargestellt werden, mit einem ganzen ''rule set`` (=Regelsatz, weiter unten erkl\"art) umgeschrieben.
alexandra@37882
   361
{\footnotesize\begin{verbatim}
alexandra@37882
   362
   > rewrite_set;
alexandra@37882
   363
      val it = fn
alexandra@37882
   364
      : theory' -> bool -> rls' -> cterm' -> (string * string list) Library.option
alexandra@37882
   365
\end{verbatim}
alexandra@37882
   366
\textit{rewrite\_set\_inst} ist eine Kombination der beiden oben genannten M\"oglichkeiten.
alexandra@37882
   367
{\footnotesize\begin{verbatim}
alexandra@37882
   368
   > rewrite_set_inst;
alexandra@37882
   369
      val it = fn
alexandra@37882
   370
      :
alexandra@37882
   371
         theory' ->
alexandra@37882
   372
         bool -> subs' -> rls' -> cterm' -> (string * string list) Library.option
alexandra@37882
   373
\end{verbatim}
alexandra@37882
   374
Wenn man sehen m\"ochte, wie Rewriting bei den einzelnen Theorems funktioniert, kann man dies mit \textit{trace\_rewrite} versuchen.
alexandra@37882
   375
{\footnotesize\begin{verbatim}
alexandra@37882
   376
   > toggle;
alexandra@37882
   377
      val it = fn : bool ref -> bool
alexandra@37882
   378
   > toggle trace_rewrite;
alexandra@37882
   379
      val it = true : bool
alexandra@37882
   380
   > toggle trace_rewrite;
alexandra@37882
   381
      val it = false : bool
alexandra@37882
   382
\end{verbatim}
alexandra@37882
   383
 
alexandra@37882
   384
\section{Rule sets}
alexandra@37882
   385
Einige der oben genannten Varianten von Rewriting beziehen sich nicht nur auf einen Theorem, sondern auf einen ganzen Block von Theorems, die man als Rule set bezeichnet.
alexandra@37882
   386
Dieser wird so lange angewendet, bis ein Element davon f\"ur Rewriting verwendet werden kann. Sollte der Begriff ''terminate`` fehlen, wird das Rule set nicht beendet und l\"auft weiter.
alexandra@37882
   387
Ein Beispiel f\"ur einen Regelsatz ist folgendes:
alexandra@37882
   388
\footnotesize\begin{verbatim}
alexandra@37882
   389
???????????
alexandra@37882
   390
\end{verbatim}
ahirn@37877
   391
alexandra@37882
   392
\footnotesize\begin{verbatim}
alexandra@37882
   393
   > sym;
alexandra@37882
   394
      val it = "?s = ?t ==> ?t = ?s" : Thm.thm
alexandra@37882
   395
   > rearrange_assoc;
alexandra@37882
   396
      val it =
alexandra@37882
   397
         Rls
alexandra@37882
   398
            {id = "rearrange_assoc",
alexandra@37882
   399
               scr = Script (Free ("empty_script", "RealDef.real")),
alexandra@37882
   400
               calc = [],
alexandra@37882
   401
               erls =
alexandra@37882
   402
               Rls
alexandra@37882
   403
                  {id = "e_rls",
alexandra@37882
   404
                     scr = EmptyScr,
alexandra@37882
   405
                     calc = [],
alexandra@37882
   406
                     erls = Erls,
alexandra@37882
   407
                     srls = Erls,
alexandra@37882
   408
                     rules = [],
alexandra@37882
   409
                     rew_ord = ("dummy_ord", fn),
alexandra@37882
   410
                     preconds = []},
alexandra@37882
   411
               srls =
alexandra@37882
   412
               Rls
alexandra@37882
   413
                  {id = "e_rls",
alexandra@37882
   414
                     scr = EmptyScr,
alexandra@37882
   415
                     calc = [],
alexandra@37882
   416
                     erls = Erls,
alexandra@37882
   417
                     srls = Erls,
alexandra@37882
   418
                     rules = [],
alexandra@37882
   419
                     rew_ord = ("dummy_ord", fn),
alexandra@37882
   420
                     preconds = []},
alexandra@37882
   421
               rules =
alexandra@37882
   422
               [Thm ("sym_radd_assoc", "?m1 + (?n1 + ?k1) = ?m1 + ?n1 + ?k1"  [.]),
alexandra@37882
   423
                  Thm
alexandra@37882
   424
                     ("sym_rmult_assoc",
alexandra@37882
   425
                        "?m1 * (?n1 * ?k1) = ?m1 * ?n1 * ?k1"  [.])],
alexandra@37882
   426
               rew_ord = ("e_rew_ord", fn),
alexandra@37882
   427
               preconds = []} : rls
alexandra@37882
   428
\end{verbatim}
ahirn@37877
   429
ahirn@37877
   430
alexandra@37882
   431
\section{Berechnung von Konstanten}
alexandra@37882
   432
Sobald Konstanten in dem Bereich des Subterms sind, k\"onnen sie von einer Funktion berechnet werden:
alexandra@37882
   433
\footnotesize\begin{verbatim}
alexandra@37882
   434
   > calculate;
alexandra@37882
   435
      val it = fn
alexandra@37882
   436
      :
alexandra@37882
   437
         theory' ->
alexandra@37882
   438
         string *
alexandra@37882
   439
         (
alexandra@37882
   440
         string ->
alexandra@37882
   441
         Term.term -> Theory.theory -> (string * Term.term) Library.option) ->
alexandra@37882
   442
         cterm' -> (string * thm') Library.option
ahirn@37877
   443
alexandra@37882
   444
   > calculate_;
alexandra@37882
   445
      val it = fn
alexandra@37882
   446
      :
alexandra@37882
   447
         Theory.theory ->
alexandra@37882
   448
         string *
alexandra@37882
   449
         (
alexandra@37882
   450
         string ->
alexandra@37882
   451
         Term.term -> Theory.theory -> (string * Term.term) Library.option) ->
alexandra@37882
   452
         Term.term -> (Term.term * (string * Thm.thm)) Library.option
alexandra@37882
   453
\end{verbatim}
alexandra@37882
   454
Man bekommt das Ergebnis und die Theorem bezieht sich darauf. Daher sind die folgenden mathematischen Rechnungen m\"oglich:
alexandra@37882
   455
\footnotesize\begin{verbatim}
alexandra@37882
   456
   > calclist;
alexandra@37882
   457
      val it =
alexandra@37882
   458
         [("Vars", ("Tools.Vars", fn)), ("matches", ("Tools.matches", fn)),
alexandra@37882
   459
            ("lhs", ("Tools.lhs", fn)), ("plus", ("op +", fn)),
alexandra@37882
   460
            ("times", ("op *", fn)), ("divide_", ("HOL.divide", fn)),
alexandra@37882
   461
            ("power_", ("Atools.pow", fn)), ("is_const", ("Atools.is'_const", fn)),
alexandra@37882
   462
            ("le", ("op <", fn)), ("leq", ("op <=", fn)),
alexandra@37882
   463
            ("ident", ("Atools.ident", fn)), ("sqrt", ("Root.sqrt", fn)),
alexandra@37882
   464
            ("Test.is_root_free", ("is'_root'_free", fn)),
alexandra@37882
   465
            ("Test.contains_root", ("contains'_root", fn))]
alexandra@37882
   466
      :
alexandra@37882
   467
         (
alexandra@37882
   468
         string *
alexandra@37882
   469
         (
alexandra@37882
   470
         string *
alexandra@37882
   471
         (
alexandra@37882
   472
         string ->
alexandra@37882
   473
         Term.term -> Theory.theory -> (string * Term.term) Library.option))) list
alexandra@37882
   474
\end{verbatim}
alexandra@37882
   475
Diese werden so angewendet:
alexandra@37882
   476
\footnotesize\begin{verbatim}
alexandra@37882
   477
\end{verbatim}
ahirn@37877
   478
ahirn@37877
   479
ahirn@37877
   480
alexandra@37882
   481
\chapter{Termordnung}
alexandra@37882
   482
Die Anordnungen der Begriffe sind unverzichtbar f\"ur den Gebrauch des Umschreibens von normalen Funktionen und von normalen Formeln, die n\"otig sind um passende Modelle für Probleme zu finden.
alexandra@37882
   483
alexandra@37882
   484
\section{Beispiel f\"ur Termordnungen}
alexandra@37882
   485
Es ist nicht unbedeutend eine Verbindung $<$ zu Termen herzustellen, die wirklich eine Ordnung besitzen, wie eine \"ubergehende und antisymmetrische Verbindung. Diese Ordnungen sind selbstaufrufende Bahnordnungen.
alexandra@37882
   486
Hier ein Beispiel:
alexandra@37882
   487
alexandra@37882
   488
{\footnotesize\begin{verbatim}
alexandra@37882
   489
   > sqrt_right;
alexandra@37882
   490
      val it = fn : bool -> Theory.theory -> subst -> Term.term * Term.term -> b       ool
alexandra@37882
   491
   > tless_true;
alexandra@37882
   492
      val it = fn : subst -> Term.term * Term.term -> bool
alexandra@37882
   493
\end{verbatim}
alexandra@37882
   494
alexandra@37882
   495
Das bool Argument gibt Ihnen die M\"oglichkeit die Kontrolle zu den zugeh\"origen Unterordunungen zur\"uck zu verfolgen, damit sich die Unterordnungen, die 'true' sind als strings anzeigen lassen.
alexandra@37882
   496
alexandra@37882
   497
alexandra@37882
   498
\chapter{Methods}
alexandra@37882
   499
Methods werden dazu verwendet, Probleme von \texttt{type} zu l\"osen. Sie sind in einer anderen Programmiersprache beschrieben. Die Sprache sieht einfach aus, hat aber im Hintergrund einen enormen Pr\"ufauffwand. So muss sich der Programmierer nicht mit technischen Details befassen, gleichzeitig k\"onnen aber auch keine falschen Anweisungen eingegeben werden.
alexandra@37882
   500
alexandra@37882
   501
\section{Der ''Syntax`` des Scriptes}
alexandra@37882
   502
Syntax beschreibt den Zusammenhang der einzelnen Zeichen und Zeichenfolgen mit den Theorien.
alexandra@37882
   503
Er kann so definiert werden:
alexandra@37882
   504
\begin{tabbing}
alexandra@37882
   505
123\=123\=expr ::=\=$|\;\;$\=\kill
alexandra@37882
   506
\>script ::= {\tt Script} id arg$\,^*$ = body\\
alexandra@37882
   507
\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
alexandra@37882
   508
\>\>body ::= expr\\
alexandra@37882
   509
\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
alexandra@37882
   510
\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
alexandra@37882
   511
\>\>\>$|\;$\>listexpr\\
alexandra@37882
   512
\>\>\>$|\;$\>id\\
alexandra@37882
   513
\>\>\>$|\;$\>seqex id\\
alexandra@37882
   514
\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
alexandra@37882
   515
\>\>\>$|\;$\>{\tt Repeat} seqex\\
alexandra@37882
   516
\>\>\>$|\;$\>{\tt Try} seqex\\
alexandra@37882
   517
\>\>\>$|\;$\>seqex {\tt Or} seqex\\
alexandra@37882
   518
\>\>\>$|\;$\>seqex {\tt @@} seqex\\
alexandra@37882
   519
\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
alexandra@37882
   520
\>\>type ::= id\\
alexandra@37882
   521
\>\>tac ::= id
alexandra@37882
   522
\end{tabbing}}
ahirn@37877
   523
ahirn@37877
   524
ahirn@37877
   525
ahirn@37877
   526
\newpage
ahirn@37877
   527
------------------------------- ALTER TEXT -------------------------------
ahirn@37877
   528
ahirn@37877
   529
\chapter{The hierarchy of problem types}\label{pbt}
ahirn@37877
   530
\section{The standard-function for 'matching'}
ahirn@37877
   531
Matching \cite{nipk:rew-all-that} is a technique used within rewriting, and used by \isac{} also for (a generalized) 'matching' a problem with a problem type. The function which tests for matching has the following signature:
ahirn@37877
   532
{\footnotesize\begin{verbatim}
ahirn@37877
   533
   ML> matches;
ahirn@37877
   534
   val it = fn : theory -> term -> term -> bool
ahirn@37877
   535
\end{verbatim}}%size
ahirn@37877
   536
where the first of the two {\tt term} arguments is the particular term to be tested, and the second one is the pattern:
ahirn@37877
   537
{\footnotesize\begin{verbatim}
ahirn@37877
   538
   ML> val t = (term_of o the o (parse thy)) "#3 * x^^^#2 = #1";
ahirn@37877
   539
   val t = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("#1","RealDef.real") : term
ahirn@37877
   540
   ML>
ahirn@37877
   541
   ML> val p = (term_of o the o (parse thy)) "a * b^^^#2 = c";
ahirn@37877
   542
   val p = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("c","RealDef.real") : term
ahirn@37877
   543
   ML> atomt p;
ahirn@37877
   544
   *** -------------
ahirn@37877
   545
   *** Const ( op =)
ahirn@37877
   546
   *** . Const ( op *)
ahirn@37877
   547
   *** . . Free ( a, )
ahirn@37877
   548
   *** . . Const ( RatArith.pow)
ahirn@37877
   549
   *** . . . Free ( b, )
ahirn@37877
   550
   *** . . . Free ( #2, )
ahirn@37877
   551
   *** . Free ( c, )
ahirn@37877
   552
   val it = () : unit
ahirn@37877
   553
   ML>
ahirn@37877
   554
   ML> free2var;
ahirn@37877
   555
   val it = fn : term -> term
ahirn@37877
   556
   ML>
ahirn@37877
   557
   ML> val pat = free2var p;
ahirn@37877
   558
   val pat = Const (#,#) $ (# $ # $ (# $ #)) $ Var ((#,#),"RealDef.real") : term
ahirn@37877
   559
   ML> Sign.string_of_term (sign_of thy) pat;
ahirn@37877
   560
   val it = "?a * ?b ^^^ #2 = ?c" : cterm' 
ahirn@37877
   561
   ML> atomt pat;
ahirn@37877
   562
   *** -------------
ahirn@37877
   563
   *** Const ( op =)
ahirn@37877
   564
   *** . Const ( op *)
ahirn@37877
   565
   *** . . Var ((a, 0), )
ahirn@37877
   566
   *** . . Const ( RatArith.pow)
ahirn@37877
   567
   *** . . . Var ((b, 0), )
ahirn@37877
   568
   *** . . . Free ( #2, )
ahirn@37877
   569
   *** . Var ((c, 0), )
ahirn@37877
   570
   val it = () : unit
ahirn@37877
   571
\end{verbatim}}%size % $ 
ahirn@37877
   572
Note that the pattern {\tt pat} contains so-called {\it scheme variables} decorated with a {\tt ?} (analoguous to theorems). The pattern is generated by the function {\tt free2var}. This format of the pattern is necessary in order to obtain results like these:
ahirn@37877
   573
{\footnotesize\begin{verbatim}
ahirn@37877
   574
   ML> matches thy t pat;
ahirn@37877
   575
   val it = true : bool
ahirn@37877
   576
   ML>
ahirn@37877
   577
   ML> val t2 = (term_of o the o (parse thy)) "x^^^#2 = #1";
ahirn@37877
   578
   val t2 = Const (#,#) $ (# $ # $ Free #) $ Free ("#1","RealDef.real") : term
ahirn@37877
   579
   ML> matches thy t2 pat;
ahirn@37877
   580
   val it = false : bool    
ahirn@37877
   581
   ML>
ahirn@37877
   582
   ML> val pat2 = (term_of o the o (parse thy)) "?u^^^#2 = ?v";
ahirn@37877
   583
   val pat2 = Const (#,#) $ (# $ # $ Free #) $ Var ((#,#),"RealDef.real") : term
ahirn@37877
   584
   ML> matches thy t2 pat2;
ahirn@37877
   585
   val it = true : bool 
ahirn@37877
   586
\end{verbatim}}%size % $
ahirn@37877
   587
ahirn@37877
   588
\section{Accessing the hierarchy}
ahirn@37877
   589
The hierarchy of problem types is encapsulated; it can be accessed by the following functions. {\tt show\_ptyps} retrieves all leaves of the hierarchy (here in an early version for testing):
ahirn@37877
   590
{\footnotesize\begin{verbatim}
ahirn@37877
   591
   ML> show_ptyps;
ahirn@37877
   592
   val it = fn : unit -> unit
ahirn@37877
   593
   ML> show_ptyps();
ahirn@37877
   594
   [
ahirn@37877
   595
    ["e_pblID"],
ahirn@37877
   596
    ["equation", "univariate", "linear"],
ahirn@37877
   597
    ["equation", "univariate", "plain_square"],
ahirn@37877
   598
    ["equation", "univariate", "polynomial", "degree_two", "pq_formula"],
ahirn@37877
   599
    ["equation", "univariate", "polynomial", "degree_two", "abc_formula"],
ahirn@37877
   600
    ["equation", "univariate", "squareroot"],
ahirn@37877
   601
    ["equation", "univariate", "normalize"],
ahirn@37877
   602
    ["equation", "univariate", "sqroot-test"],
ahirn@37877
   603
    ["function", "derivative_of"],
ahirn@37877
   604
    ["function", "maximum_of", "on_interval"],
ahirn@37877
   605
    ["function", "make"],
ahirn@37877
   606
    ["tool", "find_values"],
ahirn@37877
   607
    ["functional", "inssort"]
ahirn@37877
   608
   ]
ahirn@37877
   609
   val it = () : unit
ahirn@37877
   610
\end{verbatim}}%size
ahirn@37877
   611
The retrieve function for individual problem types is {\tt get\_pbt}
ahirn@37877
   612
\footnote{A function providing better readable output is in preparation}. Note that its argument, the 'problem identifier' {\tt pblID}, has the strings listed in reverse order w.r.t. the hierarchy, i.e. from the leave to the root. This order makes the {\tt pblID} closer to a natural description:
ahirn@37877
   613
{\footnotesize\begin{verbatim}
ahirn@37877
   614
   ML> get_pbt;
ahirn@37877
   615
   val it = fn : pblID -> pbt
ahirn@37877
   616
   ML> get_pbt ["squareroot", "univariate", "equation"];
ahirn@37877
   617
   val it =
ahirn@37877
   618
     {met=[("SqRoot.thy","square_equation")],
ahirn@37877
   619
      ppc=[("#Given",(Const (#,#),Free (#,#))),
ahirn@37877
   620
           ("#Given",(Const (#,#),Free (#,#))),
ahirn@37877
   621
           ("#Given",(Const (#,#),Free (#,#))),
ahirn@37877
   622
           ("#Find",(Const (#,#),Free (#,#)))],
ahirn@37877
   623
      thy={ProtoPure, CPure, HOL, Ord, Set, subset, equalities, mono, Vimage, Fun,
ahirn@37877
   624
            Prod, Lfp, Relation, Trancl, WF, NatDef, Gfp, Sum, Inductive, Nat,
ahirn@37877
   625
            Arith, Divides, Power, Finite, Equiv, IntDef, Int, Univ, Datatype,
ahirn@37877
   626
            Numeral, Bin, IntArith, WF_Rel, Recdef, IntDiv, NatBin, List, Option,
ahirn@37877
   627
            Map, Record, RelPow, Sexp, String, Calculation, SVC_Oracle, Main,
ahirn@37877
   628
            Zorn, Filter, PNat, PRat, PReal, RealDef, RealOrd, RealInt, RealBin,
ahirn@37877
   629
            HyperDef, Descript, ListG, Tools, Script, Typefix, Atools, RatArith,
ahirn@37877
   630
            SqRoot},
ahirn@37877
   631
      where_=[Const ("SqRoot.contains'_root","bool => bool") $
ahirn@37877
   632
              Free ("e_","bool")]} : pbt
ahirn@37877
   633
\end{verbatim}}%size %$
ahirn@37877
   634
where the records fields hold the following data:
ahirn@37877
   635
\begin{description}
ahirn@37877
   636
\item [\tt thy]: the theory necessary for parsing the formulas
ahirn@37877
   637
\item [\tt ppc]: the items of the problem type, divided into those {\tt Given}, the precondition {\tt Where} and the output item(s) {\tt Find}. The items of {\tt Given} and {\tt Find} are all headed by so-called descriptions, which determine the type. These descriptions are defined in {\tt [isac-src]/Isa99/Descript.thy}.
ahirn@37877
   638
\item [\tt met]: the list of methods solving this problem type.\\
ahirn@37877
   639
\end{description}
ahirn@37877
   640
ahirn@37877
   641
The following function adds or replaces a problem type (after having it prepared using {\tt prep\_pbt})
ahirn@37877
   642
{\footnotesize\begin{verbatim}
ahirn@37877
   643
   ML> store_pbt;
ahirn@37877
   644
   val it = fn : pbt * pblID -> unit
ahirn@37877
   645
   ML> store_pbt
ahirn@37877
   646
    (prep_pbt SqRoot.thy
ahirn@37877
   647
    (["newtype","univariate","equation"],
ahirn@37877
   648
     [("#Given" ,["equality e_","solveFor v_","errorBound err_"]),
ahirn@37877
   649
      ("#Where" ,["contains_root (e_::bool)"]),
ahirn@37877
   650
      ("#Find"  ,["solutions v_i_"])
ahirn@37877
   651
     ],
ahirn@37877
   652
     [("SqRoot.thy","square_equation")]));
ahirn@37877
   653
   val it = () : unit
ahirn@37877
   654
\end{verbatim}}%size
ahirn@37877
   655
When adding a new type with argument {\tt pblID}, an immediate parent must already exist in the hierarchy (this is the one with the tail of {\tt pblID}).
ahirn@37877
   656
ahirn@37877
   657
\section{Internals of the datastructure}
ahirn@37877
   658
This subsection only serves for the implementation of the hierarchy browser and can be skipped by the authors of math knowledge.
ahirn@37877
   659
ahirn@37877
   660
A problem type is described by the following record type (in the file {\tt [isac-src]/globals.sml}, the respective functions are in {\tt [isac-src]/ME/ptyps.sml}), and held in a global reference variable:
ahirn@37877
   661
{\footnotesize\begin{verbatim}
ahirn@37877
   662
   type pbt = 
ahirn@37877
   663
        {thy   : theory,       (* the nearest to the root,
ahirn@37877
   664
                                  which allows to compile that pbt  *)
ahirn@37877
   665
         where_: term list,    (* where - predicates                *)
ahirn@37877
   666
         ppc   : ((string *    (* fields "#Given","#Find"           *)
ahirn@37877
   667
                   (term *     (* description                       *)
ahirn@37877
   668
                    term))     (* id                                *)
ahirn@37877
   669
                      list),                                        
ahirn@37877
   670
         met   : metID list};  (* methods solving the pbt           *)
ahirn@37877
   671
   datatype ptyp = 
ahirn@37877
   672
            Ptyp of string *   (* key within pblID                  *)
ahirn@37877
   673
                    pbt list * (* several pbts with different domIDs*)
ahirn@37877
   674
                    ptyp list;
ahirn@37877
   675
   val e_Ptyp = Ptyp ("empty",[],[]);
ahirn@37877
   676
   
ahirn@37877
   677
   type ptyps = ptyp list;
ahirn@37877
   678
   val ptyps = ref ([e_Ptyp]:ptyps);
ahirn@37877
   679
\end{verbatim}}%size
ahirn@37877
   680
The predicates in {\tt where\_} (i.e. the preconditions) usually are defined in the respective theory in {\tt[isac-src]/knowledge}. Most of the predicates are not defined by rewriting, but by SML-code contained in the respective {\tt *.ML} file.
ahirn@37877
   681
ahirn@37877
   682
Each item is headed by a so-called description which provides some guidance for interactive input. The descriptions are defined in {\tt[isac-src]/Isa99/Descript.thy}.
ahirn@37877
   683
ahirn@37877
   684
ahirn@37877
   685
ahirn@37877
   686
\section{Match a formalization with a problem type}\label{pbl}
ahirn@37877
   687
A formalization is {\it match}ed with a problem type which yields a problem. A formal description of this kind of {\it match}ing can be found in \\{\tt ftp://ft.ist.tugraz.at/projects/isac/publ/calculemus01.ps.gz}. A formalization of an equation is e.g.
ahirn@37877
   688
{\footnotesize\begin{verbatim}
ahirn@37877
   689
   ML> val fmz = ["equality (#1 + #2 * x = #0)",
ahirn@37877
   690
                  "solveFor x",
ahirn@37877
   691
                  "solutions L"] : fmz;
ahirn@37877
   692
   val fmz = ["equality (#1 + #2 * x = #0)","solveFor x","solutions L"] : fmz
ahirn@37877
   693
\end{verbatim}}%size
ahirn@37877
   694
Given a formalization (and a specification of the problem, i.e. a theory, a problemtype, and a method) \isac{} can solve the respective problem automatically. The formalization must match the problem type for this purpose:
ahirn@37877
   695
{\footnotesize\begin{verbatim}
ahirn@37877
   696
   ML> match_pbl;
ahirn@37877
   697
   val it = fn : fmz -> pbt -> match'
ahirn@37877
   698
   ML>
ahirn@37877
   699
   ML> match_pbl fmz (get_pbt ["univariate","equation"]);
ahirn@37877
   700
   val it =
ahirn@37877
   701
     Matches'
ahirn@37877
   702
       {Find=[Correct "solutions L"],
ahirn@37877
   703
        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
ahirn@37877
   704
        Relate=[],Where=[Correct "matches (?a = ?b) (#1 + #2 * x = #0)"],With=[]}
ahirn@37877
   705
     : match'
ahirn@37877
   706
   ML>
ahirn@37877
   707
   ML> match_pbl fmz (get_pbt ["linear","univariate","equation"]);
ahirn@37877
   708
   val it =
ahirn@37877
   709
     Matches'
ahirn@37877
   710
       {Find=[Correct "solutions L"],
ahirn@37877
   711
        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
ahirn@37877
   712
        Relate=[],
ahirn@37877
   713
        Where=[Correct
ahirn@37877
   714
                 "matches (          x = #0) (#1 + #2 * x = #0) |
ahirn@37877
   715
                  matches (     ?b * x = #0) (#1 + #2 * x = #0) |
ahirn@37877
   716
                  matches (?a      + x = #0) (#1 + #2 * x = #0) |
ahirn@37877
   717
                  matches (?a + ?b * x = #0) (#1 + #2 * x = #0)"],
ahirn@37877
   718
        With=[]} : match'
ahirn@37877
   719
   ML>
ahirn@37877
   720
   ML> match_pbl fmz (get_pbt ["squareroot","univariate","equation"]);
ahirn@37877
   721
   val it =
ahirn@37877
   722
     NoMatch'
ahirn@37877
   723
       {Find=[Correct "solutions L"],
ahirn@37877
   724
        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x",
ahirn@37877
   725
               Missing "errorBound err_"],Relate=[],
ahirn@37877
   726
        Where=[False "contains_root #1 + #2 * x = #0 "],With=[]} : match'
ahirn@37877
   727
\end{verbatim}}%size
ahirn@37877
   728
The above formalization does not match the problem type \\{\tt["squareroot","univariate","equation"]} which is explained by the tags:
ahirn@37877
   729
\begin{tabbing}
ahirn@37877
   730
123\=\kill
ahirn@37877
   731
\> {\tt Missing:} the item is missing in the formalization as required by the problem type\\
ahirn@37877
   732
\> {\tt Superfl:} the item is not required by the problem type\\
ahirn@37877
   733
\> {\tt Correct:} the item is correct, or the precondition ({\tt Where}) is true\\
ahirn@37877
   734
\> {\tt False:} the precondition ({\tt Where}) is false\\
ahirn@37877
   735
\> {\tt Incompl:} the item is incomlete, or not yet input.\\
ahirn@37877
   736
\end{tabbing}
ahirn@37877
   737
ahirn@37877
   738
ahirn@37877
   739
ahirn@37877
   740
\section{Refine a problem specification}
ahirn@37877
   741
The challenge in constructing the problem hierarchy is, to design the branches in such a way, that problem refinement can be done automatically (as it is done in algebra system e.g. by a internal hierarchy of equations).
ahirn@37877
   742
ahirn@37877
   743
For this purpose the hierarchy must be built using the following rules: Let $F$ be a formalization and $P$ and $P_i,\:i=1\cdots n$ problem types, where the $P_i$ are specialized problem types w.r.t. $P$ (i.e. $P$ is a parent node of $P_i$), then
ahirn@37877
   744
{\small
ahirn@37877
   745
\begin{enumerate}
ahirn@37877
   746
\item for all $F$ matching some $P_i$ must follow, that $F$ matches $P$
ahirn@37877
   747
\item an $F$ matching $P$ should not have more than {\em one} $P_i,\:i=1\cdots n-1$ with $F$ matching $P_i$ (if there are more than one $P_i$, the first one will be taken)
ahirn@37877
   748
\item for all $F$ matching some $P$ must follow, that $F$ matches $P_n$\\
ahirn@37877
   749
\end{enumerate}}%small
ahirn@37877
   750
\noindent Let us give an example for the point (1.) and (2.) first:
ahirn@37877
   751
{\footnotesize\begin{verbatim}
ahirn@37877
   752
   ML> refine;
ahirn@37877
   753
   val it = fn : fmz -> pblID -> match list
ahirn@37877
   754
   ML>
ahirn@37877
   755
   ML> val fmz = ["equality (sqrt(#9+#4*x)=sqrt x + sqrt(#5+x))",
ahirn@37877
   756
              "solveFor x","errorBound (eps=#0)",
ahirn@37877
   757
              "solutions L"];
ahirn@37877
   758
   ML>
ahirn@37877
   759
   ML> refine fmz ["univariate","equation"];
ahirn@37877
   760
   *** pass ["equation","univariate"]
ahirn@37877
   761
   *** pass ["equation","univariate","linear"]
ahirn@37877
   762
   *** pass ["equation","univariate","plain_square"]
ahirn@37877
   763
   *** pass ["equation","univariate","polynomial"]
ahirn@37877
   764
   *** pass ["equation","univariate","squareroot"]
ahirn@37877
   765
   val it =
ahirn@37877
   766
     [Matches
ahirn@37877
   767
        (["univariate","equation"],
ahirn@37877
   768
         {Find=[Correct "solutions L"],
ahirn@37877
   769
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   770
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   771
          Where=[Correct
ahirn@37877
   772
                   "matches (?a = ?b) (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))"],
ahirn@37877
   773
          With=[]}),
ahirn@37877
   774
      NoMatch
ahirn@37877
   775
        (["linear","univariate","equation"],
ahirn@37877
   776
         {Find=[Correct "solutions L"],
ahirn@37877
   777
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   778
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   779
          Where=[False "(?a + ?b * x = #0) (sqrt (#9 + #4 * x#"],
ahirn@37877
   780
          With=[]}),
ahirn@37877
   781
      NoMatch
ahirn@37877
   782
        (["plain_square","univariate","equation"],
ahirn@37877
   783
         {Find=[Correct "solutions L"],
ahirn@37877
   784
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   785
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   786
          Where=[False
ahirn@37877
   787
                   "matches (?a + ?b * x ^^^ #2 = #0)"],
ahirn@37877
   788
          With=[]}),
ahirn@37877
   789
      NoMatch
ahirn@37877
   790
        (["polynomial","univariate","equation"],
ahirn@37877
   791
         {Find=[Correct "solutions L"],
ahirn@37877
   792
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   793
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   794
          Where=[False 
ahirn@37877
   795
                 "is_polynomial_in sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) x"],
ahirn@37877
   796
          With=[]}),
ahirn@37877
   797
      Matches
ahirn@37877
   798
        (["squareroot","univariate","equation"],
ahirn@37877
   799
         {Find=[Correct "solutions L"],
ahirn@37877
   800
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   801
                 Correct "solveFor x",Correct "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   802
          Where=[Correct
ahirn@37877
   803
                   "contains_root sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) "],
ahirn@37877
   804
          With=[]})] : match list
ahirn@37877
   805
\end{verbatim}}%size}%footnotesize\label{refine}
ahirn@37877
   806
This example shows, that in order to refine an {\tt["univariate","equation"]}, the formalization must match respective respective problem type (rule (1.)) and one of the descendants which should match selectively (rule (2.)).
ahirn@37877
   807
ahirn@37877
   808
If no one of the descendants of {\tt["univariate","equation"]} match, rule (3.) comes into play: The {\em last} problem type on this level ($P_n$) provides for a special 'problem type' {\tt["normalize"]}. This node calls a method transforming the equation to a (or another) normal form, which then may match. Look at this example:
ahirn@37877
   809
{\footnotesize\begin{verbatim}
ahirn@37877
   810
   ML>  val fmz = ["equality (x+#1=#2)",
ahirn@37877
   811
               "solveFor x","errorBound (eps=#0)",
ahirn@37877
   812
               "solutions L"];
ahirn@37877
   813
   [...]
ahirn@37877
   814
   ML>
ahirn@37877
   815
   ML>  refine fmz ["univariate","equation"];
ahirn@37877
   816
   *** pass ["equation","univariate"]
ahirn@37877
   817
   *** pass ["equation","univariate","linear"]
ahirn@37877
   818
   *** pass ["equation","univariate","plain_square"]
ahirn@37877
   819
   *** pass ["equation","univariate","polynomial"]
ahirn@37877
   820
   *** pass ["equation","univariate","squareroot"]
ahirn@37877
   821
   *** pass ["equation","univariate","normalize"]
ahirn@37877
   822
   val it =
ahirn@37877
   823
     [Matches
ahirn@37877
   824
        (["univariate","equation"],
ahirn@37877
   825
         {Find=[Correct "solutions L"],
ahirn@37877
   826
          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
ahirn@37877
   827
                 Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   828
          Where=[Correct "matches (?a = ?b) (x + #1 = #2)"],With=[]}),
ahirn@37877
   829
      NoMatch
ahirn@37877
   830
        (["linear","univariate","equation"],
ahirn@37877
   831
   [...]
ahirn@37877
   832
          With=[]}),
ahirn@37877
   833
      NoMatch
ahirn@37877
   834
        (["squareroot","univariate","equation"],
ahirn@37877
   835
         {Find=[Correct "solutions L"],
ahirn@37877
   836
          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
ahirn@37877
   837
                 Correct "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   838
          Where=[False "contains_root x + #1 = #2 "],With=[]}),
ahirn@37877
   839
      Matches
ahirn@37877
   840
        (["normalize","univariate","equation"],
ahirn@37877
   841
         {Find=[Correct "solutions L"],
ahirn@37877
   842
          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
ahirn@37877
   843
                 Superfl "errorBound (eps = #0)"],Relate=[],Where=[],With=[]})]
ahirn@37877
   844
     : match list
ahirn@37877
   845
\end{verbatim}}%size
ahirn@37877
   846
The problem type $P_n$, {\tt["normalize","univariate","equation"]}, will transform the equation {\tt x + \#1 = \#2} to the normal form {\tt \#-1 + x = \#0}, which then will match {\tt["linear","univariate","equation"]}.
ahirn@37877
   847
ahirn@37877
   848
This recursive search on the problem hierarchy can be  done within a proof state. This leads to the next section.
ahirn@37877
   849
ahirn@37877
   850
ahirn@37877
   851
\chapter{Methods}\label{met}
ahirn@37877
   852
A problem type can have one ore more methods solving a respective problem. A method is described by means of another new program language. The language itself looks like a simple functional language, but constructs an imperative proof-state behind the scenes (thus liberating the programer from dealing with technical details and also prohibiting incorrect construction of the proof tree). The interpreter of 'scripts' written in this language evaluates the scriptexpressions, and also delivers certain parts of the script itself for discussion with the user.
ahirn@37877
   853
ahirn@37877
   854
\section{The scripts' syntax}
ahirn@37877
   855
The syntax of scripts follows the definition given in Backus-normal-form:
ahirn@37877
   856
{\it
ahirn@37877
   857
\begin{tabbing}
ahirn@37877
   858
123\=123\=expr ::=\=$|\;\;$\=\kill
ahirn@37877
   859
\>script ::= {\tt Script} id arg$\,^*$ = body\\
ahirn@37877
   860
\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
ahirn@37877
   861
\>\>body ::= expr\\
ahirn@37877
   862
\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
ahirn@37877
   863
\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
ahirn@37877
   864
\>\>\>$|\;$\>listexpr\\
ahirn@37877
   865
\>\>\>$|\;$\>id\\
ahirn@37877
   866
\>\>\>$|\;$\>seqex id\\
ahirn@37877
   867
\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
ahirn@37877
   868
\>\>\>$|\;$\>{\tt Repeat} seqex\\
ahirn@37877
   869
\>\>\>$|\;$\>{\tt Try} seqex\\
ahirn@37877
   870
\>\>\>$|\;$\>seqex {\tt Or} seqex\\
ahirn@37877
   871
\>\>\>$|\;$\>seqex {\tt @@} seqex\\
ahirn@37877
   872
\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
ahirn@37877
   873
\>\>type ::= id\\
ahirn@37877
   874
\>\>tac ::= id
ahirn@37877
   875
\end{tabbing}}
ahirn@37877
   876
where {\it id} is an identifier with the usual syntax, {\it prop} is a proposition constructed by Isabelles logical operators (see \cite{Isa-obj} {\tt [isabelle]/src/HOL/HOL.thy}), {\it listexpr} (called {\bf list-expression}) is constructed by Isabelles list functions like {\tt hd, tl, nth} described in {\tt [isabelle]/src/HOL/List.thy}, and {\it type} are (virtually) all types declared in Isabelles version 99.
ahirn@37877
   877
ahirn@37877
   878
Expressions containing some of the keywords {\tt let}, {\tt if} etc. are called {\bf script-expressions}.
ahirn@37877
   879
ahirn@37877
   880
Tactics {\it tac} are (curried) functions. For clarity and simplicity reasons, {\it listexpr} must not contain a {\it tac}, and {\it tac}s must not be nested,
ahirn@37877
   881
ahirn@37877
   882
ahirn@37877
   883
\section{Control the flow of evaluation}
ahirn@37877
   884
The flow of control is managed by the following script-expressions called {\it tacticals}.
ahirn@37877
   885
\begin{description}
ahirn@37877
   886
\item{{\tt while} prop {\tt Do} expr id} 
ahirn@37877
   887
\item{{\tt if} prop {\tt then} expr {\tt else} expr}
ahirn@37877
   888
\end{description}
ahirn@37877
   889
While the the above script-expressions trigger the flow of control by evaluating the current formula, the other expressions depend on the applicability of the tactics within their respective subexpressions (which in turn depends on the proofstate)
ahirn@37877
   890
\begin{description}
ahirn@37877
   891
\item{{\tt Repeat} expr id}
ahirn@37877
   892
\item{{\tt Try} expr id}
ahirn@37877
   893
\item{expr {\tt Or} expr id}
ahirn@37877
   894
\item{expr {\tt @@} expr id}
ahirn@37877
   895
\end{description}
ahirn@37877
   896
ahirn@37877
   897
\begin{description}
ahirn@37877
   898
\item xxx
ahirn@37877
   899
ahirn@37877
   900
\end{description}
ahirn@37877
   901
ahirn@37877
   902
\chapter{Do a calculational proof}
ahirn@37877
   903
First we list all the tactics available so far (this list may be extended during further development of \isac).
ahirn@37877
   904
ahirn@37877
   905
\section{Tactics for doing steps in calculations}
ahirn@37877
   906
\input{tactics}
ahirn@37877
   907
ahirn@37877
   908
\section{The functionality of the math engine}
ahirn@37877
   909
A proof is being started in the math engine {\tt me} by the tactic
ahirn@37877
   910
\footnote{In the present version a tactic is of type {\tt mstep}.}
ahirn@37877
   911
 {\tt Init\_Proof}, and interactively promoted by other tactics. On input of each tactic the {\tt me} returns the resulting formula and the next tactic applicable. The proof is finished, when the {\tt me} proposes {\tt End\_Proof} as the next tactic.
ahirn@37877
   912
ahirn@37877
   913
We show a calculation (calculational proof) concerning equation solving, where the type of equation is refined automatically: The equation is given by the respective formalization ...
ahirn@37877
   914
{\footnotesize\begin{verbatim}
ahirn@37877
   915
   ML> val fmz = ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x",
ahirn@37877
   916
                  "errorBound (eps=#0)","solutions L"];
ahirn@37877
   917
   val fmz =
ahirn@37877
   918
     ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
ahirn@37877
   919
      "solutions L"] : string list
ahirn@37877
   920
   ML>
ahirn@37877
   921
   ML> val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
ahirn@37877
   922
                                 ("SqRoot.thy","no_met"));
ahirn@37877
   923
   val dom = "SqRoot.thy" : string
ahirn@37877
   924
   val pbt = ["univariate","equation"] : string list
ahirn@37877
   925
   val met = ("SqRoot.thy","no_met") : string * string
ahirn@37877
   926
\end{verbatim}}%size
ahirn@37877
   927
... and the specification {\tt spec} of a domain {\tt dom}, a problem type {\tt pbt} and a method {\tt met}. Note that the equation is such, that it is not immediatly clear, what type it is in particular (it could be a polynomial of degree 2; but, for sure, the type is some specialized type of a univariate equation). Thus, no method ({\tt no\_met}) can be specified for solving the problem.
ahirn@37877
   928
ahirn@37877
   929
Nevertheless this specification is sufficient for automatically solving the equation --- the appropriate method will be found by refinement within the hierarchy of problem types.
ahirn@37877
   930
ahirn@37877
   931
ahirn@37877
   932
\section{Initialize the calculation}
ahirn@37877
   933
The start of a new proof requires the following initializations: The proof state is given by a proof tree {\tt ptree} and a position {\tt pos'}; both are empty at the beginning. The tactic {\tt Init\_Proof} is, like all other tactics, paired with an identifier of type {\tt string} for technical reasons.
ahirn@37877
   934
{\footnotesize\begin{verbatim}
ahirn@37877
   935
   ML>  val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
ahirn@37877
   936
   val mID = "Init_Proof" : string
ahirn@37877
   937
   val m =
ahirn@37877
   938
     Init_Proof
ahirn@37877
   939
       (["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
ahirn@37877
   940
         "solutions L"],("SqRoot.thy",[#,#],(#,#))) : mstep
ahirn@37877
   941
   ML>
ahirn@37877
   942
   ML>  val (p,_,f,nxt,_,pt) = me (mID,m) e_pos' c EmptyPtree;
ahirn@37877
   943
   val p = ([],Pbl) : pos'
ahirn@37877
   944
   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
ahirn@37877
   945
   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
ahirn@37877
   946
     : string * mstep
ahirn@37877
   947
   val pt =
ahirn@37877
   948
     Nd
ahirn@37877
   949
       (PblObj
ahirn@37877
   950
          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
ahirn@37877
   951
           result=#,spec=#},[]) : ptree
ahirn@37877
   952
   \end{verbatim}}%size
ahirn@37877
   953
The mathematics engine {\tt me} returns the resulting formula {\tt f} of type {\tt mout} (which in this case is a problem), the next tactic {\tt nxt}, and a new proof state ({\tt ptree}, {\tt pos'}).
ahirn@37877
   954
ahirn@37877
   955
We can convince ourselves, that the problem is still empty, by increasing {\tt Compiler.Control.Print.printDepth}:
ahirn@37877
   956
{\footnotesize\begin{verbatim}
ahirn@37877
   957
   ML> Compiler.Control.Print.printDepth:=8; (*4 default*)
ahirn@37877
   958
   val it = () : unit
ahirn@37877
   959
   ML>
ahirn@37877
   960
   ML> f;
ahirn@37877
   961
   val it =
ahirn@37877
   962
     Form'
ahirn@37877
   963
       (PpcKF
ahirn@37877
   964
          (0,EdUndef,0,Nundef,
ahirn@37877
   965
           (Problem [],
ahirn@37877
   966
            {Find=[Incompl "solutions []"],
ahirn@37877
   967
             Given=[Incompl "equality",Incompl "solveFor"],Relate=[],
ahirn@37877
   968
             Where=[False "matches (?a = ?b) e_"],With=[]}))) : mout
ahirn@37877
   969
\end{verbatim}}%size
ahirn@37877
   970
Recall, please, the format of a problem as presented in sect.\ref{pbl} on p.\pageref{pbl}; such an 'empty' problem can be found above encapsulated by several constructors containing additional data (necessary for the dialog guide, not relevant here).\\
ahirn@37877
   971
ahirn@37877
   972
{\it In the sequel we will omit output of the {\tt me} if it is not important for the respective context}.\\
ahirn@37877
   973
ahirn@37877
   974
In general, the dialog guide will hide the following two tactics {\tt Refine\_Tacitly} and {\tt Model\_Problem} from the user.
ahirn@37877
   975
{\footnotesize\begin{verbatim}
ahirn@37877
   976
   ML>  nxt;
ahirn@37877
   977
   val it = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
ahirn@37877
   978
     : string * mstep
ahirn@37877
   979
   ML>
ahirn@37877
   980
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
   981
   val nxt = ("Model_Problem",Model_Problem ["normalize","univariate","equation"])
ahirn@37877
   982
     : string * mstep
ahirn@37877
   983
   ML>
ahirn@37877
   984
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
   985
\end{verbatim}}%size
ahirn@37877
   986
ahirn@37877
   987
ahirn@37877
   988
\section{The phase of modeling} 
ahirn@37877
   989
comprises the input of the items of the problem; the {\tt me} can help by use of the formalization tacitly transferred by {\tt Init\_Proof}. In particular, the {\tt me} in general 'knows' the next promising tactic; the first one has been returned by the (hidden) tactic {\tt Model\_Problem}.
ahirn@37877
   990
ahirn@37877
   991
{\footnotesize\begin{verbatim}
ahirn@37877
   992
   ML>  nxt;
ahirn@37877
   993
   val it =
ahirn@37877
   994
     ("Add_Given",Add_Given "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)")
ahirn@37877
   995
     : string * mstep
ahirn@37877
   996
   ML>
ahirn@37877
   997
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
   998
   val nxt = ("Add_Given",Add_Given "solveFor x") : string * mstep
ahirn@37877
   999
   ML>
ahirn@37877
  1000
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1001
   val nxt = ("Add_Find",Add_Find "solutions L") : string * mstep
ahirn@37877
  1002
   ML>
ahirn@37877
  1003
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt; 
ahirn@37877
  1004
   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
ahirn@37877
  1005
\end{verbatim}}%size
ahirn@37877
  1006
\noindent Now the problem is 'modeled', all items are input. We convince ourselves by increasing {\tt Compiler.Control.Print.printDepth} once more.
ahirn@37877
  1007
{\footnotesize\begin{verbatim}
ahirn@37877
  1008
   ML>  Compiler.Control.Print.printDepth:=8;
ahirn@37877
  1009
   ML>  f;
ahirn@37877
  1010
   val it =
ahirn@37877
  1011
     Form'
ahirn@37877
  1012
       (PpcKF
ahirn@37877
  1013
          (0,EdUndef,0,Nundef,
ahirn@37877
  1014
           (Problem [],
ahirn@37877
  1015
            {Find=[Correct "solutions L"],
ahirn@37877
  1016
             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1017
                    Correct "solveFor x"],Relate=[],Where=[],With=[]}))) : mout
ahirn@37877
  1018
\end{verbatim}}%size
ahirn@37877
  1019
%One of the input items is considered {\tt Superfluous} by the {\tt me} consulting the problem type {\tt ["univariate","equation"]}. The {\tt ErrorBound}, however, could become important in case the equation only could be solved by some iteration method.
ahirn@37877
  1020
ahirn@37877
  1021
\section{The phase of specification} 
ahirn@37877
  1022
This phase provides for explicit determination of the domain, the problem type, and the method to be used. In particular, the search for the appropriate problem type is being supported. There are two tactics for this purpose: {\tt Specify\_Problem} generates feedback on how a candidate of a problem type matches the current problem, and {\tt Refine\_Problem} provides help by the system, if the user gets lost.
ahirn@37877
  1023
{\footnotesize\begin{verbatim}
ahirn@37877
  1024
ML> nxt;
ahirn@37877
  1025
   val it = ("Specify_Domain",Specify_Domain "SqRoot.thy") : string * mstep
ahirn@37877
  1026
   ML>
ahirn@37877
  1027
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1028
   val nxt =
ahirn@37877
  1029
     ("Specify_Problem",Specify_Problem ["normalize","univariate","equation"])
ahirn@37877
  1030
     : string * mstep
ahirn@37877
  1031
   val pt =
ahirn@37877
  1032
     Nd
ahirn@37877
  1033
       (PblObj
ahirn@37877
  1034
          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
ahirn@37877
  1035
              result=#,spec=#},[]) : ptree
ahirn@37877
  1036
\end{verbatim}}%size
ahirn@37877
  1037
The {\tt me} is smart enough to know the appropriate problem type (transferred tacitly with {\tt Init\_Proof}). In order to challenge the student, the dialog guide may hide this information; then the {\tt me} works as follows.
ahirn@37877
  1038
{\footnotesize\begin{verbatim}
ahirn@37877
  1039
   ML> val nxt = ("Specify_Problem",
ahirn@37877
  1040
               Specify_Problem ["polynomial","univariate","equation"]);
ahirn@37877
  1041
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1042
   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
ahirn@37877
  1043
   val nxt =
ahirn@37877
  1044
     ("Refine_Problem",Refine_Problem ["normalize","univariate","equation"])
ahirn@37877
  1045
     : string * mstep
ahirn@37877
  1046
   ML>
ahirn@37877
  1047
   ML> val nxt = ("Specify_Problem",
ahirn@37877
  1048
               Specify_Problem ["linear","univariate","equation"]);
ahirn@37877
  1049
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1050
   val f =
ahirn@37877
  1051
     Form'
ahirn@37877
  1052
       (PpcKF
ahirn@37877
  1053
          (0,EdUndef,0,Nundef,
ahirn@37877
  1054
           (Problem ["linear","univariate","equation"],
ahirn@37877
  1055
            {Find=[Correct "solutions L"],
ahirn@37877
  1056
             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1057
                    Correct "solveFor x"],Relate=[],
ahirn@37877
  1058
             Where=[False
ahirn@37877
  1059
                    "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
ahirn@37877
  1060
             With=[]}))) : mout 
ahirn@37877
  1061
\end{verbatim}}%size
ahirn@37877
  1062
Again assuming that the dialog guide hide the next tactic proposed by the {\tt me}, and the student gets lost, {\tt Refine\_Problem} always 'knows' the way out, if applied to the problem type {\tt["univariate","equation"]}.
ahirn@37877
  1063
{\footnotesize\begin{verbatim}
ahirn@37877
  1064
   ML> val nxt = ("Refine_Problem",
ahirn@37877
  1065
                  Refine_Problem ["linear","univariate","equation
ahirn@37877
  1066
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1067
   val f = Problems (RefinedKF [NoMatch #]) : mout
ahirn@37877
  1068
   ML>
ahirn@37877
  1069
   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
ahirn@37877
  1070
   val f =
ahirn@37877
  1071
     Problems
ahirn@37877
  1072
       (RefinedKF
ahirn@37877
  1073
          [NoMatch
ahirn@37877
  1074
             (["linear","univariate","equation"],
ahirn@37877
  1075
              {Find=[Correct "solutions L"],
ahirn@37877
  1076
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1077
                      Correct "solveFor x"],Relate=[],
ahirn@37877
  1078
               Where=[False
ahirn@37877
  1079
                     "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
ahirn@37877
  1080
               With=[]})]) : mout
ahirn@37877
  1081
   ML>
ahirn@37877
  1082
   ML> val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
ahirn@37877
  1083
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1084
   val f =
ahirn@37877
  1085
     Problems
ahirn@37877
  1086
       (RefinedKF [Matches #,NoMatch #,NoMatch #,NoMatch #,NoMatch #,Matches #])
ahirn@37877
  1087
     : mout
ahirn@37877
  1088
   ML>
ahirn@37877
  1089
   ML>
ahirn@37877
  1090
   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
ahirn@37877
  1091
   val f =
ahirn@37877
  1092
     Problems
ahirn@37877
  1093
       (RefinedKF
ahirn@37877
  1094
          [Matches
ahirn@37877
  1095
             (["univariate","equation"],
ahirn@37877
  1096
              {Find=[Correct "solutions L"],
ahirn@37877
  1097
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1098
                      Correct "solveFor x"],Relate=[],
ahirn@37877
  1099
               Where=[Correct
ahirn@37877
  1100
               With=[]}),
ahirn@37877
  1101
           NoMatch
ahirn@37877
  1102
             (["linear","univariate","equation"],
ahirn@37877
  1103
              {Find=[Correct "solutions L"],
ahirn@37877
  1104
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1105
                      Correct "solveFor x"],Relate=[],
ahirn@37877
  1106
               Where=[False
ahirn@37877
  1107
                      "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
ahirn@37877
  1108
                  With=[]}),
ahirn@37877
  1109
           NoMatch
ahirn@37877
  1110
             ...
ahirn@37877
  1111
             ...   
ahirn@37877
  1112
           Matches
ahirn@37877
  1113
             (["normalize","univariate","equation"],
ahirn@37877
  1114
              {Find=[Correct "solutions L"],
ahirn@37877
  1115
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1116
                      Correct "solveFor x"],Relate=[],Where=[],With=[]})]) : mout
ahirn@37877
  1117
\end{verbatim}}%size
ahirn@37877
  1118
The tactic {\tt Refine\_Problem} returns all matches to problem types along the path traced in the problem hierarchy (anlogously to the authoring tool for refinement in sect.\ref{refine} on p.\pageref{refine}) --- a lot of information to be displayed appropriately in the hiearchy browser~!
ahirn@37877
  1119
ahirn@37877
  1120
\section{The phase of solving} 
ahirn@37877
  1121
This phase starts by invoking a method, which acchieves the normal form within two tactics, {\tt Rewrite rnorm\_equation\_add} and {\tt Rewrite\_Set SqRoot\_simplify}:
ahirn@37877
  1122
{\footnotesize\begin{verbatim} 
ahirn@37877
  1123
   ML> nxt;
ahirn@37877
  1124
   val it = ("Apply_Method",Apply_Method ("SqRoot.thy","norm_univar_equation"))
ahirn@37877
  1125
     : string * mstep
ahirn@37877
  1126
   ML>
ahirn@37877
  1127
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1128
   val f =
ahirn@37877
  1129
     Form' (FormKF (~1,EdUndef,1,Nundef,"(x + #1) * (x + #2) = x ^^^ #2 + #8"))
ahirn@37877
  1130
   val nxt =
ahirn@37877
  1131
     ("Rewrite", Rewrite
ahirn@37877
  1132
        ("rnorm_equation_add","~ ?b =!= #0 ==> (?a = ?b) = (?a + #-1 * ?b = #0)"))
ahirn@37877
  1133
   ML>
ahirn@37877
  1134
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1135
   val f =
ahirn@37877
  1136
     Form' (FormKF (~1,EdUndef,1,Nundef,
ahirn@37877
  1137
           "(x + #1) * (x + #2) + #-1 * (x ^^^ #2 + #8) = #0")) : mout
ahirn@37877
  1138
   val nxt = ("Rewrite_Set",Rewrite_Set "SqRoot_simplify") : string * mstep
ahirn@37877
  1139
   ML>
ahirn@37877
  1140
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1141
   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"#-6 + #3 * x = #0")) : mout
ahirn@37877
  1142
   val nxt = ("Subproblem",Subproblem ("SqRoot.thy",[#,#])) : string * mstep
ahirn@37877
  1143
\end{verbatim}}%size
ahirn@37877
  1144
Now the normal form {\tt \#-6 + \#3 * x = \#0} is the input to a subproblem, which again allows for specification of the type of equation, and the respective method:
ahirn@37877
  1145
{\footnotesize\begin{verbatim}
ahirn@37877
  1146
   ML> nxt;
ahirn@37877
  1147
   val it = ("Subproblem",Subproblem ("SqRoot.thy",["univariate","equation"]))
ahirn@37877
  1148
   ML>   
ahirn@37877
  1149
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1150
   val f =
ahirn@37877
  1151
     Form' (FormKF
ahirn@37877
  1152
          (~1,EdUndef,1,Nundef,"Subproblem (SqRoot.thy, [univariate, equation])"))
ahirn@37877
  1153
     : mout
ahirn@37877
  1154
   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
ahirn@37877
  1155
   ML>
ahirn@37877
  1156
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1157
   val nxt = ("Model_Problem",Model_Problem ["linear","univariate","equation"])
ahirn@37877
  1158
\end{verbatim}}%size
ahirn@37877
  1159
As required, the tactic {\tt Refine ["univariate","equation"]} selects the appropriate type of equation from the problem hierarchy, which can be seen by the tactic {\tt Model\_Problem ["linear","univariate","equation"]} prosed by the system.
ahirn@37877
  1160
ahirn@37877
  1161
Again the whole phase of modeling and specification follows; we skip it here, and \isac's dialog guide may decide to do so as well.
ahirn@37877
  1162
ahirn@37877
  1163
ahirn@37877
  1164
\section{The final phase: check the post-condition}
ahirn@37877
  1165
The type of problems solved by \isac{} are so-called 'example construction problems' as shown above. The most characteristic point of such a problem is the post-condition. The handling of the post-condition in the given context is an open research question.
ahirn@37877
  1166
ahirn@37877
  1167
Thus the post-condition is just mentioned, in our example for both, the problem and the subproblem:
ahirn@37877
  1168
{\footnotesize\begin{verbatim}
ahirn@37877
  1169
   ML> nxt;
ahirn@37877
  1170
   val it = ("Check_Postcond",Check_Postcond ["linear","univariate","equation"])
ahirn@37877
  1171
   ML>
ahirn@37877
  1172
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1173
   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"[x = #2]")) : mout
ahirn@37877
  1174
   val nxt =
ahirn@37877
  1175
     ("Check_Postcond",Check_Postcond ["normalize","univariate","equation"])
ahirn@37877
  1176
   ML>
ahirn@37877
  1177
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1178
   val f = Form' (FormKF (~1,EdUndef,0,Nundef,"[x = #2]")) : mout
ahirn@37877
  1179
   val nxt = ("End_Proof'",End_Proof') : string * mstep
ahirn@37877
  1180
\end{verbatim}}%size
ahirn@37877
  1181
The next tactic proposed by the system, {\tt End\_Proof'} indicates that the proof has finished successfully.\\
ahirn@37877
  1182
ahirn@37877
  1183
{\it The tactics proposed by the system need {\em not} be followed by the user; the user is free to choose other tactics, and the system will report, if this is applicable at the respective proof state, or not~! The reader may try out~!}
ahirn@37877
  1184
ahirn@37877
  1185
ahirn@37877
  1186
ahirn@37877
  1187
\part{Systematic description}
ahirn@37877
  1188
ahirn@37877
  1189
ahirn@37877
  1190
\chapter{The structure of the knowledge base}
ahirn@37877
  1191
ahirn@37877
  1192
\section{Tactics and data}
ahirn@37877
  1193
First we view the ME from outside, i.e. we regard tactics and relate them to the knowledge base (KB). W.r.t. the KB we address the atomic items which have to be implemented in detail by the authors of the KB
ahirn@37877
  1194
\footnote{Some of these items are fetched by the tactics from intermediate storage within the ME, and not directly from the KB.}
ahirn@37877
  1195
. The items are listed in alphabetical order in Tab.\ref{kb-items} on p.\pageref{kb-items}.
ahirn@37877
  1196
{\begin{table}[h]
ahirn@37877
  1197
\caption{Atomic items of the KB} \label{kb-items}
ahirn@37877
  1198
%\tabcolsep=0.3mm
ahirn@37877
  1199
\begin{center}
ahirn@37877
  1200
\def\arraystretch{1.0}
ahirn@37877
  1201
\begin{tabular}{lp{9.0cm}}
ahirn@37877
  1202
abbrevation & description \\
ahirn@37877
  1203
\hline
ahirn@37877
  1204
&\\
ahirn@37877
  1205
{\it calc\_list}
ahirn@37877
  1206
& associationlist of the evaluation-functions {\it eval\_fn}\\
ahirn@37877
  1207
{\it eval\_fn}
ahirn@37877
  1208
& evaluation-function for numerals and for predicates coded in SML\\
ahirn@37877
  1209
{\it eval\_rls   }
ahirn@37877
  1210
& ruleset {\it rls} for simplifying expressions with {\it eval\_fn}s\\
ahirn@37877
  1211
{\it fmz}
ahirn@37877
  1212
& formalization, i.e. a minimal formula representation of an example \\
ahirn@37877
  1213
{\it met}
ahirn@37877
  1214
& a method, i.e. a datastructure holding all informations for the solving phase ({\it rew\_ord}, {\it scr}, etc.)\\
ahirn@37877
  1215
{\it metID}
ahirn@37877
  1216
& reference to a {\it met}\\
ahirn@37877
  1217
{\it op}
ahirn@37877
  1218
& operator as key to an {\it eval\_fn} in a {\it calc\_list}\\
ahirn@37877
  1219
{\it pbl}
ahirn@37877
  1220
& problem, i.e. a node in the problem-hierarchy\\
ahirn@37877
  1221
{\it pblID}
ahirn@37877
  1222
& reference to a {\it pbl}\\
ahirn@37877
  1223
{\it rew\_ord}
ahirn@37877
  1224
& rewrite-order\\
ahirn@37877
  1225
{\it rls}
ahirn@37877
  1226
& ruleset, i.e. a datastructure holding theorems {\it thm} and operators {\it op} for simplification (with a {\it rew\_ord})\\
ahirn@37877
  1227
{\it Rrls}
ahirn@37877
  1228
& ruleset for 'reverse rewriting' (an \isac-technique generating stepwise rewriting, e.g. for cancelling fractions)\\
ahirn@37877
  1229
{\it scr}
ahirn@37877
  1230
& script describing algorithms by tactics, part of a {\it met} \\
ahirn@37877
  1231
{\it norm\_rls}
ahirn@37877
  1232
& special ruleset calculating a normalform, associated with a {\it thy}\\
ahirn@37877
  1233
{\it spec}
ahirn@37877
  1234
& specification, i.e. a tripel ({\it thyID, pblID, metID})\\
ahirn@37877
  1235
{\it subs}
ahirn@37877
  1236
& substitution, i.e. a list of variable-value-pairs\\
ahirn@37877
  1237
{\it term}
ahirn@37877
  1238
& Isabelle term, i.e. a formula\\
ahirn@37877
  1239
{\it thm}
ahirn@37877
  1240
& theorem\\     
ahirn@37877
  1241
{\it thy}
ahirn@37877
  1242
& theory\\
ahirn@37877
  1243
{\it thyID}
ahirn@37877
  1244
& reference to a {\it thy} \\
ahirn@37877
  1245
\end{tabular}\end{center}\end{table}
ahirn@37877
  1246
}
ahirn@37877
  1247
The relations between tactics and data items are shown in Tab.\ref{tac-kb}on p.\pageref{tac-kb}.
ahirn@37877
  1248
{\def\arraystretch{1.2}
ahirn@37877
  1249
\begin{table}[h]
ahirn@37877
  1250
\caption{Which tactic uses which KB's item~?} \label{tac-kb}
ahirn@37877
  1251
\tabcolsep=0.3mm
ahirn@37877
  1252
\begin{center}
ahirn@37877
  1253
\begin{tabular}{|ll||cccc|ccc|cccc|} \hline
ahirn@37877
  1254
tactic  &input &    &    &    &norm\_&   &rew\_&rls &eval\_&eval\_&calc\_&   \\
ahirn@37877
  1255
        &      &thy &scr &Rrls&rls  &thm &ord  &Rrls&fn    &rls   &list  &dsc\\
ahirn@37877
  1256
\hline\hline
ahirn@37877
  1257
Init\_Proof
ahirn@37877
  1258
        &fmz   & x  &    &    & x   &    &     &    &      &      &      & x \\
ahirn@37877
  1259
        &spec  &    &    &    &     &    &     &    &      &      &      &   \\
ahirn@37877
  1260
\hline
ahirn@37877
  1261
\multicolumn{13}{|l|}{model phase}\\
ahirn@37877
  1262
\hline
ahirn@37877
  1263
Add\_*  &term  & x  &    &    & x   &    &     &    &      &      &      & x \\
ahirn@37877
  1264
FormFK  &model & x  &    &    & x   &    &     &    &      &      &      & x \\
ahirn@37877
  1265
\hline
ahirn@37877
  1266
\multicolumn{13}{|l|}{specify phase}\\
ahirn@37877
  1267
\hline
ahirn@37877
  1268
Specify\_Theory 
ahirn@37877
  1269
        &thyID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1270
Specify\_Problem 
ahirn@37877
  1271
        &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1272
Refine\_Problem 
ahirn@37877
  1273
           &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1274
Specify\_Method 
ahirn@37877
  1275
        &metID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1276
Apply\_Method 
ahirn@37877
  1277
        &metID & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1278
\hline
ahirn@37877
  1279
\multicolumn{13}{|l|}{solve phase}\\
ahirn@37877
  1280
\hline
ahirn@37877
  1281
Rewrite,\_Inst 
ahirn@37877
  1282
        &thm   & x  & x  &    &     & x  &met  &    & x    &met   &      &   \\
ahirn@37877
  1283
Rewrite, Detail
ahirn@37877
  1284
        &thm   & x  & x  &    &     & x  &rls  &    & x    &rls   &      &   \\
ahirn@37877
  1285
Rewrite, Detail
ahirn@37877
  1286
        &thm   & x  & x  &    &     & x  &Rrls &    & x    &Rrls  &      &   \\
ahirn@37877
  1287
Rewrite\_Set,\_Inst
ahirn@37877
  1288
        &rls   & x  & x  &    &     &    &     & x  & x    & x    &      &   \\
ahirn@37877
  1289
Calculate  
ahirn@37877
  1290
        &op    & x  & x  &    &     &    &     &    &      &      & x    &   \\
ahirn@37877
  1291
Substitute 
ahirn@37877
  1292
        &subs  & x  &    &    & x   &    &     &    &      &      &      &   \\
ahirn@37877
  1293
        &      &    &    &    &     &    &     &    &      &      &      &   \\
ahirn@37877
  1294
SubProblem 
ahirn@37877
  1295
        &spec  & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1296
        &fmz   &    &    &    &     &    &     &    &      &      &      &   \\
ahirn@37877
  1297
\hline
ahirn@37877
  1298
\end{tabular}\end{center}\end{table}
ahirn@37877
  1299
}
ahirn@37877
  1300
ahirn@37877
  1301
\section{\isac's theories}
ahirn@37877
  1302
\isac's theories build upon Isabelles theories for high-order-logic (HOL) up to the respective development of real numbers ({\tt HOL/Real}). Theories have a special format defined in \cite{Isa-ref} and the suffix {\tt *.thy}; usually theories are paired with SML-files having the same filename and the suffix {\tt *.ML}.
ahirn@37877
  1303
ahirn@37877
  1304
\isac's theories represent the deductive part of \isac's knowledge base, the hierarchy of theories is structured accordingly. The {\tt *.ML}-files, however, contain {\em all} data of the other two axes of the knowledge base, the problems and the methods (without presenting their respective structure, which is done by the problem browser and the method browser, see \ref{pbt}).
ahirn@37877
  1305
ahirn@37877
  1306
Tab.\ref{theories} on p.\pageref{theories} lists the basic theories planned to be implemented in version \isac.1. We expext the list to be expanded in the near future, actually, have a look to the theory browser~!
ahirn@37877
  1307
ahirn@37877
  1308
The first three theories in the list do {\em not} belong to \isac's knowledge base; they are concerned with \isac's script-language for methods and listed here for completeness.
ahirn@37877
  1309
{\begin{table}[h]
ahirn@37877
  1310
\caption{Theories in \isac-version I} \label{theories}
ahirn@37877
  1311
%\tabcolsep=0.3mm
ahirn@37877
  1312
\begin{center}
ahirn@37877
  1313
\def\arraystretch{1.0}
ahirn@37877
  1314
\begin{tabular}{lp{9.0cm}}
ahirn@37877
  1315
theory & description \\
ahirn@37877
  1316
\hline
ahirn@37877
  1317
&\\
ahirn@37877
  1318
ListI.thy
ahirn@37877
  1319
& assigns identifiers to the functions defined in {\tt Isabelle2002/src/HOL/List.thy} and (intermediatly~?) defines some more list functions\\
ahirn@37877
  1320
ListI.ML
ahirn@37877
  1321
& {\tt eval\_fn} for the additional list functions\\
ahirn@37877
  1322
Tools.thy
ahirn@37877
  1323
& functions required for the evaluation of scripts\\
ahirn@37877
  1324
Tools.ML
ahirn@37877
  1325
& the respective {\tt eval\_fn}s\\
ahirn@37877
  1326
Script.thy
ahirn@37877
  1327
& prerequisites for scripts: types, tactics, tacticals,\\
ahirn@37877
  1328
Script.ML
ahirn@37877
  1329
& sets of tactics and functions for internal use\\
ahirn@37877
  1330
& \\
ahirn@37877
  1331
\hline
ahirn@37877
  1332
& \\
ahirn@37877
  1333
Typefix.thy
ahirn@37877
  1334
& an intermediate hack for escaping type errors\\
ahirn@37877
  1335
Descript.thy
ahirn@37877
  1336
& {\it description}s for the formulas in {\it model}s and {\it problem}s\\
ahirn@37877
  1337
Atools
ahirn@37877
  1338
& (re-)definition of operators; general predicates and functions for preconditions; theorems for the {\tt eval\_rls}\\
ahirn@37877
  1339
Float
ahirn@37877
  1340
& floating point numerals\\
ahirn@37877
  1341
Equation
ahirn@37877
  1342
& basic notions for equations and equational systems\\
ahirn@37877
  1343
Poly
ahirn@37877
  1344
& polynomials\\
ahirn@37877
  1345
PolyEq
ahirn@37877
  1346
& polynomial equations and equational systems \\
ahirn@37877
  1347
Rational.thy
ahirn@37877
  1348
& additional theorems for rationals\\
ahirn@37877
  1349
Rational.ML
ahirn@37877
  1350
& cancel, add and simplify rationals using (a generalization of) Euclids algorithm; respective reverse rulesets\\
ahirn@37877
  1351
RatEq
ahirn@37877
  1352
& equations on rationals\\
ahirn@37877
  1353
Root
ahirn@37877
  1354
& radicals; calculate normalform; respective reverse rulesets\\
ahirn@37877
  1355
RootEq
ahirn@37877
  1356
& equations on roots\\
ahirn@37877
  1357
RatRootEq
ahirn@37877
  1358
& equations on rationals and roots (i.e. on terms containing both operations)\\
ahirn@37877
  1359
Vect
ahirn@37877
  1360
& vector analysis\\
ahirn@37877
  1361
Trig
ahirn@37877
  1362
& trigonometriy\\
ahirn@37877
  1363
LogExp
ahirn@37877
  1364
& logarithms and exponential functions\\
ahirn@37877
  1365
Calculus
ahirn@37877
  1366
& nonstandard analysis\\
ahirn@37877
  1367
Diff
ahirn@37877
  1368
& differentiation\\
ahirn@37877
  1369
DiffApp
ahirn@37877
  1370
& applications of differentiaten (maxima-minima-problems)\\
ahirn@37877
  1371
Test
ahirn@37877
  1372
& (old) data for the test suite\\
ahirn@37877
  1373
Isac
ahirn@37877
  1374
& collects all \isac-theoris.\\
ahirn@37877
  1375
\end{tabular}\end{center}\end{table}
ahirn@37877
  1376
}
ahirn@37877
  1377
ahirn@37877
  1378
ahirn@37877
  1379
\section{Data in {\tt *.thy}- and {\tt *.ML}-files}
ahirn@37877
  1380
As already mentioned, theories come in pairs of {\tt *.thy}- and {\tt *.ML}-files with the same respective filename. How data are distributed between the two files is shown in Tab.\ref{thy-ML} on p.\pageref{thy-ML}.
ahirn@37877
  1381
{\begin{table}[h]
ahirn@37877
  1382
\caption{Data in {\tt *.thy}- and {\tt *.ML}-files} \label{thy-ML}
ahirn@37877
  1383
\tabcolsep=2.0mm
ahirn@37877
  1384
\begin{center}
ahirn@37877
  1385
\def\arraystretch{1.0}
ahirn@37877
  1386
\begin{tabular}{llp{7.7cm}}
ahirn@37877
  1387
file & data & description \\
ahirn@37877
  1388
\hline
ahirn@37877
  1389
& &\\
ahirn@37877
  1390
{\tt *.thy}
ahirn@37877
  1391
& consts 
ahirn@37877
  1392
& operators, predicates, functions, script-names ('{\tt Script} name \dots{\tt arguments}')
ahirn@37877
  1393
\\
ahirn@37877
  1394
& rules  
ahirn@37877
  1395
& theorems: \isac{} uses Isabelles theorems if possible; additional theorems analoguous to such existing in Isabelle get the Isabelle-identifier attached an {\it I}
ahirn@37877
  1396
\\& &\\
ahirn@37877
  1397
{\tt *.ML}
ahirn@37877
  1398
& {\tt theory' :=} 
ahirn@37877
  1399
& the theory defined by the actual {\tt *.thy}-file is made accessible to \isac
ahirn@37877
  1400
\\
ahirn@37877
  1401
& {\tt eval\_fn}
ahirn@37877
  1402
& evaluation function for operators and predicates, coded on the meta-level (SML); the identifier of such a function is a combination of the keyword {\tt eval\_} with the identifier of the function as defined in {\tt *.thy}
ahirn@37877
  1403
\\
ahirn@37877
  1404
& {\tt *\_simplify} 
ahirn@37877
  1405
& the canonical simplifier for the actual theory, i.e. the identifier for this ruleset is a combination of the theories identifier and the keyword {\tt *\_simplify}
ahirn@37877
  1406
\\
ahirn@37877
  1407
& {\tt norm\_rls :=}
ahirn@37877
  1408
& the canonical simplifier {\tt *\_simplify} is stored such that it is accessible for \isac
ahirn@37877
  1409
\\
ahirn@37877
  1410
& {\tt rew\_ord' :=}
ahirn@37877
  1411
& the same for rewrite orders, if needed outside of one particular ruleset
ahirn@37877
  1412
\\
ahirn@37877
  1413
& {\tt ruleset' :=}
ahirn@37877
  1414
& the same for rulesets (ordinary rulesets, reverse rulesets and {\tt eval\_rls})
ahirn@37877
  1415
\\
ahirn@37877
  1416
& {\tt calc\_list :=}
ahirn@37877
  1417
& the same for {\tt eval\_fn}s, if needed outside of one particular ruleset (e.g. for a tactic {\tt Calculate} in a script)
ahirn@37877
  1418
\\
ahirn@37877
  1419
& {\tt store\_pbl}
ahirn@37877
  1420
& problems defined within this {\tt *.ML}-file are made accessible for \isac
ahirn@37877
  1421
\\
ahirn@37877
  1422
& {\tt methods :=}
ahirn@37877
  1423
& methods defined within this {\tt *.ML}-file are made accessible for \isac
ahirn@37877
  1424
\\
ahirn@37877
  1425
\end{tabular}\end{center}\end{table}
ahirn@37877
  1426
}
ahirn@37877
  1427
The order of the data-items within the theories should adhere to the order given in this list.
ahirn@37877
  1428
ahirn@37877
  1429
\section{Formal description of the problem-hierarchy}
ahirn@37877
  1430
%for Richard Lang
ahirn@37877
  1431
ahirn@37877
  1432
\section{Script tactics}
ahirn@37877
  1433
The tactics actually promote the calculation: they construct the prooftree behind the scenes, and they are the points during evaluation where the script-interpreter transfers control to the user. Here we only describe the sytax of the tactics; the semantics is described on p.\pageref{user-tactics} below in context with the tactics the student uses ('user-tactics'): there is a 1-to-1 correspondence between user-tactics and script-tactics.
ahirn@37877
  1434
ahirn@37877
  1435
ahirn@37877
  1436
ahirn@37877
  1437
ahirn@37877
  1438
ahirn@37877
  1439
\part{Authoring on the knowledge}
ahirn@37877
  1440
ahirn@37877
  1441
ahirn@37877
  1442
\section{Add a theorem}
ahirn@37877
  1443
\section{Define and add a problem}
ahirn@37877
  1444
\section{Define and add a predicate}
ahirn@37877
  1445
\section{Define and add a method}
ahirn@37877
  1446
\section{}
ahirn@37877
  1447
\section{}
ahirn@37877
  1448
\section{}
ahirn@37877
  1449
\section{}
ahirn@37877
  1450
ahirn@37877
  1451
ahirn@37877
  1452
ahirn@37877
  1453
\newpage
ahirn@37877
  1454
\bibliography{bib/isac,bib/from-theses}
ahirn@37877
  1455
ahirn@37877
  1456
\end{document}