doc-src/isac/mat-eng-de.tex
author Alexandra Hirn <alexandra.hirn@hotmail.com>
Wed, 28 Jul 2010 10:01:33 +0200
branchlatex-isac-doc
changeset 37887 b82d6c1732d5
parent 37886 de15b4d5a6a4
child 37888 97c7a4059d2e
permissions -rw-r--r--
hallo
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
alexandra@37887
    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@37887
   498
alexandra@37882
   499
\chapter{Methods}
alexandra@37882
   500
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
   501
alexandra@37882
   502
\section{Der ''Syntax`` des Scriptes}
alexandra@37882
   503
Syntax beschreibt den Zusammenhang der einzelnen Zeichen und Zeichenfolgen mit den Theorien.
alexandra@37882
   504
Er kann so definiert werden:
alexandra@37882
   505
\begin{tabbing}
alexandra@37882
   506
123\=123\=expr ::=\=$|\;\;$\=\kill
alexandra@37882
   507
\>script ::= {\tt Script} id arg$\,^*$ = body\\
alexandra@37882
   508
\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
alexandra@37882
   509
\>\>body ::= expr\\
alexandra@37882
   510
\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
alexandra@37882
   511
\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
alexandra@37882
   512
\>\>\>$|\;$\>listexpr\\
alexandra@37882
   513
\>\>\>$|\;$\>id\\
alexandra@37882
   514
\>\>\>$|\;$\>seqex id\\
alexandra@37882
   515
\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
alexandra@37882
   516
\>\>\>$|\;$\>{\tt Repeat} seqex\\
alexandra@37882
   517
\>\>\>$|\;$\>{\tt Try} seqex\\
alexandra@37882
   518
\>\>\>$|\;$\>seqex {\tt Or} seqex\\
alexandra@37882
   519
\>\>\>$|\;$\>seqex {\tt @@} seqex\\
alexandra@37882
   520
\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
alexandra@37882
   521
\>\>type ::= id\\
alexandra@37882
   522
\>\>tac ::= id
alexandra@37882
   523
\end{tabbing}}
ahirn@37877
   524
alexandra@37887
   525
\section{\"Uberpr\"ufung der Auswertung}
alexandra@37887
   526
Das Kontrollsystem arbeitet mit den folgenden Script-Ausdr\"ucken, die {\it tacticals} genannt werden:
alexandra@37887
   527
\begin{description}
alexandra@37887
   528
\item{{\tt while} prop {\tt Do} expr id} 
alexandra@37887
   529
\item{{\tt if} prop {\tt then} expr {\tt else} expr}
alexandra@37887
   530
\end{description}
alexandra@37887
   531
W\"ahrend die genannten Bezeichnungen das Kontrollsystem durch Auswertung der Formeln ausl\"osen, h\"angen die anderen von der Anwendbarkeit der Formel in den entsprechenden Unterbegriffen ab:
alexandra@37887
   532
\begin{description}
alexandra@37887
   533
\item{{\tt Repeat} expr id}
alexandra@37887
   534
\item{{\tt Try} expr id}
alexandra@37887
   535
\item{expr {\tt Or} expr id}
alexandra@37887
   536
\item{expr {\tt @@} expr id}
alexandra@37887
   537
\item xxx
alexandra@37887
   538
\end{description}
alexandra@37887
   539
alexandra@37887
   540
alexandra@37887
   541
hallo
alexandra@37887
   542
alexandra@37887
   543
alexandra@37887
   544
alexandra@37887
   545
ahirn@37877
   546
ahirn@37877
   547
ahirn@37877
   548
\newpage
ahirn@37877
   549
------------------------------- ALTER TEXT -------------------------------
ahirn@37877
   550
ahirn@37877
   551
\chapter{The hierarchy of problem types}\label{pbt}
ahirn@37877
   552
\section{The standard-function for 'matching'}
ahirn@37877
   553
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
   554
{\footnotesize\begin{verbatim}
ahirn@37877
   555
   ML> matches;
ahirn@37877
   556
   val it = fn : theory -> term -> term -> bool
ahirn@37877
   557
\end{verbatim}}%size
ahirn@37877
   558
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
   559
{\footnotesize\begin{verbatim}
ahirn@37877
   560
   ML> val t = (term_of o the o (parse thy)) "#3 * x^^^#2 = #1";
ahirn@37877
   561
   val t = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("#1","RealDef.real") : term
ahirn@37877
   562
   ML>
ahirn@37877
   563
   ML> val p = (term_of o the o (parse thy)) "a * b^^^#2 = c";
ahirn@37877
   564
   val p = Const (#,#) $ (# $ # $ (# $ #)) $ Free ("c","RealDef.real") : term
ahirn@37877
   565
   ML> atomt p;
ahirn@37877
   566
   *** -------------
ahirn@37877
   567
   *** Const ( op =)
ahirn@37877
   568
   *** . Const ( op *)
ahirn@37877
   569
   *** . . Free ( a, )
ahirn@37877
   570
   *** . . Const ( RatArith.pow)
ahirn@37877
   571
   *** . . . Free ( b, )
ahirn@37877
   572
   *** . . . Free ( #2, )
ahirn@37877
   573
   *** . Free ( c, )
ahirn@37877
   574
   val it = () : unit
ahirn@37877
   575
   ML>
ahirn@37877
   576
   ML> free2var;
ahirn@37877
   577
   val it = fn : term -> term
ahirn@37877
   578
   ML>
ahirn@37877
   579
   ML> val pat = free2var p;
ahirn@37877
   580
   val pat = Const (#,#) $ (# $ # $ (# $ #)) $ Var ((#,#),"RealDef.real") : term
ahirn@37877
   581
   ML> Sign.string_of_term (sign_of thy) pat;
ahirn@37877
   582
   val it = "?a * ?b ^^^ #2 = ?c" : cterm' 
ahirn@37877
   583
   ML> atomt pat;
ahirn@37877
   584
   *** -------------
ahirn@37877
   585
   *** Const ( op =)
ahirn@37877
   586
   *** . Const ( op *)
ahirn@37877
   587
   *** . . Var ((a, 0), )
ahirn@37877
   588
   *** . . Const ( RatArith.pow)
ahirn@37877
   589
   *** . . . Var ((b, 0), )
ahirn@37877
   590
   *** . . . Free ( #2, )
ahirn@37877
   591
   *** . Var ((c, 0), )
ahirn@37877
   592
   val it = () : unit
ahirn@37877
   593
\end{verbatim}}%size % $ 
ahirn@37877
   594
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
   595
{\footnotesize\begin{verbatim}
ahirn@37877
   596
   ML> matches thy t pat;
ahirn@37877
   597
   val it = true : bool
ahirn@37877
   598
   ML>
ahirn@37877
   599
   ML> val t2 = (term_of o the o (parse thy)) "x^^^#2 = #1";
ahirn@37877
   600
   val t2 = Const (#,#) $ (# $ # $ Free #) $ Free ("#1","RealDef.real") : term
ahirn@37877
   601
   ML> matches thy t2 pat;
ahirn@37877
   602
   val it = false : bool    
ahirn@37877
   603
   ML>
ahirn@37877
   604
   ML> val pat2 = (term_of o the o (parse thy)) "?u^^^#2 = ?v";
ahirn@37877
   605
   val pat2 = Const (#,#) $ (# $ # $ Free #) $ Var ((#,#),"RealDef.real") : term
ahirn@37877
   606
   ML> matches thy t2 pat2;
ahirn@37877
   607
   val it = true : bool 
ahirn@37877
   608
\end{verbatim}}%size % $
ahirn@37877
   609
ahirn@37877
   610
\section{Accessing the hierarchy}
ahirn@37877
   611
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
   612
{\footnotesize\begin{verbatim}
ahirn@37877
   613
   ML> show_ptyps;
ahirn@37877
   614
   val it = fn : unit -> unit
ahirn@37877
   615
   ML> show_ptyps();
ahirn@37877
   616
   [
ahirn@37877
   617
    ["e_pblID"],
ahirn@37877
   618
    ["equation", "univariate", "linear"],
ahirn@37877
   619
    ["equation", "univariate", "plain_square"],
ahirn@37877
   620
    ["equation", "univariate", "polynomial", "degree_two", "pq_formula"],
ahirn@37877
   621
    ["equation", "univariate", "polynomial", "degree_two", "abc_formula"],
ahirn@37877
   622
    ["equation", "univariate", "squareroot"],
ahirn@37877
   623
    ["equation", "univariate", "normalize"],
ahirn@37877
   624
    ["equation", "univariate", "sqroot-test"],
ahirn@37877
   625
    ["function", "derivative_of"],
ahirn@37877
   626
    ["function", "maximum_of", "on_interval"],
ahirn@37877
   627
    ["function", "make"],
ahirn@37877
   628
    ["tool", "find_values"],
ahirn@37877
   629
    ["functional", "inssort"]
ahirn@37877
   630
   ]
ahirn@37877
   631
   val it = () : unit
ahirn@37877
   632
\end{verbatim}}%size
ahirn@37877
   633
The retrieve function for individual problem types is {\tt get\_pbt}
ahirn@37877
   634
\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
   635
{\footnotesize\begin{verbatim}
ahirn@37877
   636
   ML> get_pbt;
ahirn@37877
   637
   val it = fn : pblID -> pbt
ahirn@37877
   638
   ML> get_pbt ["squareroot", "univariate", "equation"];
ahirn@37877
   639
   val it =
ahirn@37877
   640
     {met=[("SqRoot.thy","square_equation")],
ahirn@37877
   641
      ppc=[("#Given",(Const (#,#),Free (#,#))),
ahirn@37877
   642
           ("#Given",(Const (#,#),Free (#,#))),
ahirn@37877
   643
           ("#Given",(Const (#,#),Free (#,#))),
ahirn@37877
   644
           ("#Find",(Const (#,#),Free (#,#)))],
ahirn@37877
   645
      thy={ProtoPure, CPure, HOL, Ord, Set, subset, equalities, mono, Vimage, Fun,
ahirn@37877
   646
            Prod, Lfp, Relation, Trancl, WF, NatDef, Gfp, Sum, Inductive, Nat,
ahirn@37877
   647
            Arith, Divides, Power, Finite, Equiv, IntDef, Int, Univ, Datatype,
ahirn@37877
   648
            Numeral, Bin, IntArith, WF_Rel, Recdef, IntDiv, NatBin, List, Option,
ahirn@37877
   649
            Map, Record, RelPow, Sexp, String, Calculation, SVC_Oracle, Main,
ahirn@37877
   650
            Zorn, Filter, PNat, PRat, PReal, RealDef, RealOrd, RealInt, RealBin,
ahirn@37877
   651
            HyperDef, Descript, ListG, Tools, Script, Typefix, Atools, RatArith,
ahirn@37877
   652
            SqRoot},
ahirn@37877
   653
      where_=[Const ("SqRoot.contains'_root","bool => bool") $
ahirn@37877
   654
              Free ("e_","bool")]} : pbt
ahirn@37877
   655
\end{verbatim}}%size %$
ahirn@37877
   656
where the records fields hold the following data:
ahirn@37877
   657
\begin{description}
ahirn@37877
   658
\item [\tt thy]: the theory necessary for parsing the formulas
ahirn@37877
   659
\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
   660
\item [\tt met]: the list of methods solving this problem type.\\
ahirn@37877
   661
\end{description}
ahirn@37877
   662
ahirn@37877
   663
The following function adds or replaces a problem type (after having it prepared using {\tt prep\_pbt})
ahirn@37877
   664
{\footnotesize\begin{verbatim}
ahirn@37877
   665
   ML> store_pbt;
ahirn@37877
   666
   val it = fn : pbt * pblID -> unit
ahirn@37877
   667
   ML> store_pbt
ahirn@37877
   668
    (prep_pbt SqRoot.thy
ahirn@37877
   669
    (["newtype","univariate","equation"],
ahirn@37877
   670
     [("#Given" ,["equality e_","solveFor v_","errorBound err_"]),
ahirn@37877
   671
      ("#Where" ,["contains_root (e_::bool)"]),
ahirn@37877
   672
      ("#Find"  ,["solutions v_i_"])
ahirn@37877
   673
     ],
ahirn@37877
   674
     [("SqRoot.thy","square_equation")]));
ahirn@37877
   675
   val it = () : unit
ahirn@37877
   676
\end{verbatim}}%size
ahirn@37877
   677
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
   678
ahirn@37877
   679
\section{Internals of the datastructure}
ahirn@37877
   680
This subsection only serves for the implementation of the hierarchy browser and can be skipped by the authors of math knowledge.
ahirn@37877
   681
ahirn@37877
   682
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
   683
{\footnotesize\begin{verbatim}
ahirn@37877
   684
   type pbt = 
ahirn@37877
   685
        {thy   : theory,       (* the nearest to the root,
ahirn@37877
   686
                                  which allows to compile that pbt  *)
ahirn@37877
   687
         where_: term list,    (* where - predicates                *)
ahirn@37877
   688
         ppc   : ((string *    (* fields "#Given","#Find"           *)
ahirn@37877
   689
                   (term *     (* description                       *)
ahirn@37877
   690
                    term))     (* id                                *)
ahirn@37877
   691
                      list),                                        
ahirn@37877
   692
         met   : metID list};  (* methods solving the pbt           *)
ahirn@37877
   693
   datatype ptyp = 
ahirn@37877
   694
            Ptyp of string *   (* key within pblID                  *)
ahirn@37877
   695
                    pbt list * (* several pbts with different domIDs*)
ahirn@37877
   696
                    ptyp list;
ahirn@37877
   697
   val e_Ptyp = Ptyp ("empty",[],[]);
ahirn@37877
   698
   
ahirn@37877
   699
   type ptyps = ptyp list;
ahirn@37877
   700
   val ptyps = ref ([e_Ptyp]:ptyps);
ahirn@37877
   701
\end{verbatim}}%size
ahirn@37877
   702
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
   703
ahirn@37877
   704
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
   705
ahirn@37877
   706
ahirn@37877
   707
ahirn@37877
   708
\section{Match a formalization with a problem type}\label{pbl}
ahirn@37877
   709
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
   710
{\footnotesize\begin{verbatim}
ahirn@37877
   711
   ML> val fmz = ["equality (#1 + #2 * x = #0)",
ahirn@37877
   712
                  "solveFor x",
ahirn@37877
   713
                  "solutions L"] : fmz;
ahirn@37877
   714
   val fmz = ["equality (#1 + #2 * x = #0)","solveFor x","solutions L"] : fmz
ahirn@37877
   715
\end{verbatim}}%size
ahirn@37877
   716
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
   717
{\footnotesize\begin{verbatim}
ahirn@37877
   718
   ML> match_pbl;
ahirn@37877
   719
   val it = fn : fmz -> pbt -> match'
ahirn@37877
   720
   ML>
ahirn@37877
   721
   ML> match_pbl fmz (get_pbt ["univariate","equation"]);
ahirn@37877
   722
   val it =
ahirn@37877
   723
     Matches'
ahirn@37877
   724
       {Find=[Correct "solutions L"],
ahirn@37877
   725
        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
ahirn@37877
   726
        Relate=[],Where=[Correct "matches (?a = ?b) (#1 + #2 * x = #0)"],With=[]}
ahirn@37877
   727
     : match'
ahirn@37877
   728
   ML>
ahirn@37877
   729
   ML> match_pbl fmz (get_pbt ["linear","univariate","equation"]);
ahirn@37877
   730
   val it =
ahirn@37877
   731
     Matches'
ahirn@37877
   732
       {Find=[Correct "solutions L"],
ahirn@37877
   733
        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x"],
ahirn@37877
   734
        Relate=[],
ahirn@37877
   735
        Where=[Correct
ahirn@37877
   736
                 "matches (          x = #0) (#1 + #2 * x = #0) |
ahirn@37877
   737
                  matches (     ?b * x = #0) (#1 + #2 * x = #0) |
ahirn@37877
   738
                  matches (?a      + x = #0) (#1 + #2 * x = #0) |
ahirn@37877
   739
                  matches (?a + ?b * x = #0) (#1 + #2 * x = #0)"],
ahirn@37877
   740
        With=[]} : match'
ahirn@37877
   741
   ML>
ahirn@37877
   742
   ML> match_pbl fmz (get_pbt ["squareroot","univariate","equation"]);
ahirn@37877
   743
   val it =
ahirn@37877
   744
     NoMatch'
ahirn@37877
   745
       {Find=[Correct "solutions L"],
ahirn@37877
   746
        Given=[Correct "equality (#1 + #2 * x = #0)",Correct "solveFor x",
ahirn@37877
   747
               Missing "errorBound err_"],Relate=[],
ahirn@37877
   748
        Where=[False "contains_root #1 + #2 * x = #0 "],With=[]} : match'
ahirn@37877
   749
\end{verbatim}}%size
ahirn@37877
   750
The above formalization does not match the problem type \\{\tt["squareroot","univariate","equation"]} which is explained by the tags:
ahirn@37877
   751
\begin{tabbing}
ahirn@37877
   752
123\=\kill
ahirn@37877
   753
\> {\tt Missing:} the item is missing in the formalization as required by the problem type\\
ahirn@37877
   754
\> {\tt Superfl:} the item is not required by the problem type\\
ahirn@37877
   755
\> {\tt Correct:} the item is correct, or the precondition ({\tt Where}) is true\\
ahirn@37877
   756
\> {\tt False:} the precondition ({\tt Where}) is false\\
ahirn@37877
   757
\> {\tt Incompl:} the item is incomlete, or not yet input.\\
ahirn@37877
   758
\end{tabbing}
ahirn@37877
   759
ahirn@37877
   760
ahirn@37877
   761
ahirn@37877
   762
\section{Refine a problem specification}
ahirn@37877
   763
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
   764
ahirn@37877
   765
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
   766
{\small
ahirn@37877
   767
\begin{enumerate}
ahirn@37877
   768
\item for all $F$ matching some $P_i$ must follow, that $F$ matches $P$
ahirn@37877
   769
\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
   770
\item for all $F$ matching some $P$ must follow, that $F$ matches $P_n$\\
ahirn@37877
   771
\end{enumerate}}%small
ahirn@37877
   772
\noindent Let us give an example for the point (1.) and (2.) first:
ahirn@37877
   773
{\footnotesize\begin{verbatim}
ahirn@37877
   774
   ML> refine;
ahirn@37877
   775
   val it = fn : fmz -> pblID -> match list
ahirn@37877
   776
   ML>
ahirn@37877
   777
   ML> val fmz = ["equality (sqrt(#9+#4*x)=sqrt x + sqrt(#5+x))",
ahirn@37877
   778
              "solveFor x","errorBound (eps=#0)",
ahirn@37877
   779
              "solutions L"];
ahirn@37877
   780
   ML>
ahirn@37877
   781
   ML> refine fmz ["univariate","equation"];
ahirn@37877
   782
   *** pass ["equation","univariate"]
ahirn@37877
   783
   *** pass ["equation","univariate","linear"]
ahirn@37877
   784
   *** pass ["equation","univariate","plain_square"]
ahirn@37877
   785
   *** pass ["equation","univariate","polynomial"]
ahirn@37877
   786
   *** pass ["equation","univariate","squareroot"]
ahirn@37877
   787
   val it =
ahirn@37877
   788
     [Matches
ahirn@37877
   789
        (["univariate","equation"],
ahirn@37877
   790
         {Find=[Correct "solutions L"],
ahirn@37877
   791
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   792
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   793
          Where=[Correct
ahirn@37877
   794
                   "matches (?a = ?b) (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))"],
ahirn@37877
   795
          With=[]}),
ahirn@37877
   796
      NoMatch
ahirn@37877
   797
        (["linear","univariate","equation"],
ahirn@37877
   798
         {Find=[Correct "solutions L"],
ahirn@37877
   799
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   800
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   801
          Where=[False "(?a + ?b * x = #0) (sqrt (#9 + #4 * x#"],
ahirn@37877
   802
          With=[]}),
ahirn@37877
   803
      NoMatch
ahirn@37877
   804
        (["plain_square","univariate","equation"],
ahirn@37877
   805
         {Find=[Correct "solutions L"],
ahirn@37877
   806
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   807
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   808
          Where=[False
ahirn@37877
   809
                   "matches (?a + ?b * x ^^^ #2 = #0)"],
ahirn@37877
   810
          With=[]}),
ahirn@37877
   811
      NoMatch
ahirn@37877
   812
        (["polynomial","univariate","equation"],
ahirn@37877
   813
         {Find=[Correct "solutions L"],
ahirn@37877
   814
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   815
                 Correct "solveFor x",Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   816
          Where=[False 
ahirn@37877
   817
                 "is_polynomial_in sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) x"],
ahirn@37877
   818
          With=[]}),
ahirn@37877
   819
      Matches
ahirn@37877
   820
        (["squareroot","univariate","equation"],
ahirn@37877
   821
         {Find=[Correct "solutions L"],
ahirn@37877
   822
          Given=[Correct "equality (sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x))",
ahirn@37877
   823
                 Correct "solveFor x",Correct "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   824
          Where=[Correct
ahirn@37877
   825
                   "contains_root sqrt (#9 + #4 * x) = sqrt x + sqrt (#5 + x) "],
ahirn@37877
   826
          With=[]})] : match list
ahirn@37877
   827
\end{verbatim}}%size}%footnotesize\label{refine}
ahirn@37877
   828
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
   829
ahirn@37877
   830
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
   831
{\footnotesize\begin{verbatim}
ahirn@37877
   832
   ML>  val fmz = ["equality (x+#1=#2)",
ahirn@37877
   833
               "solveFor x","errorBound (eps=#0)",
ahirn@37877
   834
               "solutions L"];
ahirn@37877
   835
   [...]
ahirn@37877
   836
   ML>
ahirn@37877
   837
   ML>  refine fmz ["univariate","equation"];
ahirn@37877
   838
   *** pass ["equation","univariate"]
ahirn@37877
   839
   *** pass ["equation","univariate","linear"]
ahirn@37877
   840
   *** pass ["equation","univariate","plain_square"]
ahirn@37877
   841
   *** pass ["equation","univariate","polynomial"]
ahirn@37877
   842
   *** pass ["equation","univariate","squareroot"]
ahirn@37877
   843
   *** pass ["equation","univariate","normalize"]
ahirn@37877
   844
   val it =
ahirn@37877
   845
     [Matches
ahirn@37877
   846
        (["univariate","equation"],
ahirn@37877
   847
         {Find=[Correct "solutions L"],
ahirn@37877
   848
          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
ahirn@37877
   849
                 Superfl "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   850
          Where=[Correct "matches (?a = ?b) (x + #1 = #2)"],With=[]}),
ahirn@37877
   851
      NoMatch
ahirn@37877
   852
        (["linear","univariate","equation"],
ahirn@37877
   853
   [...]
ahirn@37877
   854
          With=[]}),
ahirn@37877
   855
      NoMatch
ahirn@37877
   856
        (["squareroot","univariate","equation"],
ahirn@37877
   857
         {Find=[Correct "solutions L"],
ahirn@37877
   858
          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
ahirn@37877
   859
                 Correct "errorBound (eps = #0)"],Relate=[],
ahirn@37877
   860
          Where=[False "contains_root x + #1 = #2 "],With=[]}),
ahirn@37877
   861
      Matches
ahirn@37877
   862
        (["normalize","univariate","equation"],
ahirn@37877
   863
         {Find=[Correct "solutions L"],
ahirn@37877
   864
          Given=[Correct "equality (x + #1 = #2)",Correct "solveFor x",
ahirn@37877
   865
                 Superfl "errorBound (eps = #0)"],Relate=[],Where=[],With=[]})]
ahirn@37877
   866
     : match list
ahirn@37877
   867
\end{verbatim}}%size
ahirn@37877
   868
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
   869
ahirn@37877
   870
This recursive search on the problem hierarchy can be  done within a proof state. This leads to the next section.
ahirn@37877
   871
ahirn@37877
   872
ahirn@37877
   873
\chapter{Methods}\label{met}
ahirn@37877
   874
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
   875
ahirn@37877
   876
\section{The scripts' syntax}
ahirn@37877
   877
The syntax of scripts follows the definition given in Backus-normal-form:
ahirn@37877
   878
{\it
ahirn@37877
   879
\begin{tabbing}
ahirn@37877
   880
123\=123\=expr ::=\=$|\;\;$\=\kill
ahirn@37877
   881
\>script ::= {\tt Script} id arg$\,^*$ = body\\
ahirn@37877
   882
\>\>arg ::= id $\;|\;\;($ ( id :: type ) $)$\\
ahirn@37877
   883
\>\>body ::= expr\\
ahirn@37877
   884
\>\>expr ::= \>\>{\tt let} id = expr $($ ; id = expr$)^*$ {\tt in} expr\\
ahirn@37877
   885
\>\>\>$|\;$\>{\tt if} prop {\tt then} expr {\tt else} expr\\
ahirn@37877
   886
\>\>\>$|\;$\>listexpr\\
ahirn@37877
   887
\>\>\>$|\;$\>id\\
ahirn@37877
   888
\>\>\>$|\;$\>seqex id\\
ahirn@37877
   889
\>\>seqex ::= \>\>{\tt While} prop {\tt Do} seqex\\
ahirn@37877
   890
\>\>\>$|\;$\>{\tt Repeat} seqex\\
ahirn@37877
   891
\>\>\>$|\;$\>{\tt Try} seqex\\
ahirn@37877
   892
\>\>\>$|\;$\>seqex {\tt Or} seqex\\
ahirn@37877
   893
\>\>\>$|\;$\>seqex {\tt @@} seqex\\
ahirn@37877
   894
\>\>\>$|\;$\>tac $($ id $|$ listexpr $)^*$\\
ahirn@37877
   895
\>\>type ::= id\\
ahirn@37877
   896
\>\>tac ::= id
ahirn@37877
   897
\end{tabbing}}
ahirn@37877
   898
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
   899
ahirn@37877
   900
Expressions containing some of the keywords {\tt let}, {\tt if} etc. are called {\bf script-expressions}.
ahirn@37877
   901
ahirn@37877
   902
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
   903
ahirn@37877
   904
ahirn@37877
   905
\section{Control the flow of evaluation}
ahirn@37877
   906
The flow of control is managed by the following script-expressions called {\it tacticals}.
ahirn@37877
   907
\begin{description}
ahirn@37877
   908
\item{{\tt while} prop {\tt Do} expr id} 
ahirn@37877
   909
\item{{\tt if} prop {\tt then} expr {\tt else} expr}
ahirn@37877
   910
\end{description}
ahirn@37877
   911
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
   912
\begin{description}
ahirn@37877
   913
\item{{\tt Repeat} expr id}
ahirn@37877
   914
\item{{\tt Try} expr id}
ahirn@37877
   915
\item{expr {\tt Or} expr id}
ahirn@37877
   916
\item{expr {\tt @@} expr id}
ahirn@37877
   917
\end{description}
ahirn@37877
   918
ahirn@37877
   919
\begin{description}
ahirn@37877
   920
\item xxx
ahirn@37877
   921
ahirn@37877
   922
\end{description}
ahirn@37877
   923
ahirn@37877
   924
\chapter{Do a calculational proof}
ahirn@37877
   925
First we list all the tactics available so far (this list may be extended during further development of \isac).
ahirn@37877
   926
ahirn@37877
   927
\section{Tactics for doing steps in calculations}
ahirn@37877
   928
\input{tactics}
ahirn@37877
   929
ahirn@37877
   930
\section{The functionality of the math engine}
ahirn@37877
   931
A proof is being started in the math engine {\tt me} by the tactic
ahirn@37877
   932
\footnote{In the present version a tactic is of type {\tt mstep}.}
ahirn@37877
   933
 {\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
   934
ahirn@37877
   935
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
   936
{\footnotesize\begin{verbatim}
ahirn@37877
   937
   ML> val fmz = ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x",
ahirn@37877
   938
                  "errorBound (eps=#0)","solutions L"];
ahirn@37877
   939
   val fmz =
ahirn@37877
   940
     ["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
ahirn@37877
   941
      "solutions L"] : string list
ahirn@37877
   942
   ML>
ahirn@37877
   943
   ML> val spec as (dom, pbt, met) = ("SqRoot.thy",["univariate","equation"],
ahirn@37877
   944
                                 ("SqRoot.thy","no_met"));
ahirn@37877
   945
   val dom = "SqRoot.thy" : string
ahirn@37877
   946
   val pbt = ["univariate","equation"] : string list
ahirn@37877
   947
   val met = ("SqRoot.thy","no_met") : string * string
ahirn@37877
   948
\end{verbatim}}%size
ahirn@37877
   949
... 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
   950
ahirn@37877
   951
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
   952
ahirn@37877
   953
ahirn@37877
   954
\section{Initialize the calculation}
ahirn@37877
   955
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
   956
{\footnotesize\begin{verbatim}
ahirn@37877
   957
   ML>  val (mID,m) = ("Init_Proof",Init_Proof (fmz, (dom,pbt,met)));
ahirn@37877
   958
   val mID = "Init_Proof" : string
ahirn@37877
   959
   val m =
ahirn@37877
   960
     Init_Proof
ahirn@37877
   961
       (["equality ((x+#1)*(x+#2)=x^^^#2+#8)","solveFor x","errorBound (eps=#0)",
ahirn@37877
   962
         "solutions L"],("SqRoot.thy",[#,#],(#,#))) : mstep
ahirn@37877
   963
   ML>
ahirn@37877
   964
   ML>  val (p,_,f,nxt,_,pt) = me (mID,m) e_pos' c EmptyPtree;
ahirn@37877
   965
   val p = ([],Pbl) : pos'
ahirn@37877
   966
   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
ahirn@37877
   967
   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
ahirn@37877
   968
     : string * mstep
ahirn@37877
   969
   val pt =
ahirn@37877
   970
     Nd
ahirn@37877
   971
       (PblObj
ahirn@37877
   972
          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
ahirn@37877
   973
           result=#,spec=#},[]) : ptree
ahirn@37877
   974
   \end{verbatim}}%size
ahirn@37877
   975
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
   976
ahirn@37877
   977
We can convince ourselves, that the problem is still empty, by increasing {\tt Compiler.Control.Print.printDepth}:
ahirn@37877
   978
{\footnotesize\begin{verbatim}
ahirn@37877
   979
   ML> Compiler.Control.Print.printDepth:=8; (*4 default*)
ahirn@37877
   980
   val it = () : unit
ahirn@37877
   981
   ML>
ahirn@37877
   982
   ML> f;
ahirn@37877
   983
   val it =
ahirn@37877
   984
     Form'
ahirn@37877
   985
       (PpcKF
ahirn@37877
   986
          (0,EdUndef,0,Nundef,
ahirn@37877
   987
           (Problem [],
ahirn@37877
   988
            {Find=[Incompl "solutions []"],
ahirn@37877
   989
             Given=[Incompl "equality",Incompl "solveFor"],Relate=[],
ahirn@37877
   990
             Where=[False "matches (?a = ?b) e_"],With=[]}))) : mout
ahirn@37877
   991
\end{verbatim}}%size
ahirn@37877
   992
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
   993
ahirn@37877
   994
{\it In the sequel we will omit output of the {\tt me} if it is not important for the respective context}.\\
ahirn@37877
   995
ahirn@37877
   996
In general, the dialog guide will hide the following two tactics {\tt Refine\_Tacitly} and {\tt Model\_Problem} from the user.
ahirn@37877
   997
{\footnotesize\begin{verbatim}
ahirn@37877
   998
   ML>  nxt;
ahirn@37877
   999
   val it = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
ahirn@37877
  1000
     : string * mstep
ahirn@37877
  1001
   ML>
ahirn@37877
  1002
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1003
   val nxt = ("Model_Problem",Model_Problem ["normalize","univariate","equation"])
ahirn@37877
  1004
     : string * mstep
ahirn@37877
  1005
   ML>
ahirn@37877
  1006
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1007
\end{verbatim}}%size
ahirn@37877
  1008
ahirn@37877
  1009
ahirn@37877
  1010
\section{The phase of modeling} 
ahirn@37877
  1011
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
  1012
ahirn@37877
  1013
{\footnotesize\begin{verbatim}
ahirn@37877
  1014
   ML>  nxt;
ahirn@37877
  1015
   val it =
ahirn@37877
  1016
     ("Add_Given",Add_Given "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)")
ahirn@37877
  1017
     : string * mstep
ahirn@37877
  1018
   ML>
ahirn@37877
  1019
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1020
   val nxt = ("Add_Given",Add_Given "solveFor x") : string * mstep
ahirn@37877
  1021
   ML>
ahirn@37877
  1022
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1023
   val nxt = ("Add_Find",Add_Find "solutions L") : string * mstep
ahirn@37877
  1024
   ML>
ahirn@37877
  1025
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt; 
ahirn@37877
  1026
   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
ahirn@37877
  1027
\end{verbatim}}%size
ahirn@37877
  1028
\noindent Now the problem is 'modeled', all items are input. We convince ourselves by increasing {\tt Compiler.Control.Print.printDepth} once more.
ahirn@37877
  1029
{\footnotesize\begin{verbatim}
ahirn@37877
  1030
   ML>  Compiler.Control.Print.printDepth:=8;
ahirn@37877
  1031
   ML>  f;
ahirn@37877
  1032
   val it =
ahirn@37877
  1033
     Form'
ahirn@37877
  1034
       (PpcKF
ahirn@37877
  1035
          (0,EdUndef,0,Nundef,
ahirn@37877
  1036
           (Problem [],
ahirn@37877
  1037
            {Find=[Correct "solutions L"],
ahirn@37877
  1038
             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1039
                    Correct "solveFor x"],Relate=[],Where=[],With=[]}))) : mout
ahirn@37877
  1040
\end{verbatim}}%size
ahirn@37877
  1041
%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
  1042
ahirn@37877
  1043
\section{The phase of specification} 
ahirn@37877
  1044
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
  1045
{\footnotesize\begin{verbatim}
ahirn@37877
  1046
ML> nxt;
ahirn@37877
  1047
   val it = ("Specify_Domain",Specify_Domain "SqRoot.thy") : string * mstep
ahirn@37877
  1048
   ML>
ahirn@37877
  1049
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1050
   val nxt =
ahirn@37877
  1051
     ("Specify_Problem",Specify_Problem ["normalize","univariate","equation"])
ahirn@37877
  1052
     : string * mstep
ahirn@37877
  1053
   val pt =
ahirn@37877
  1054
     Nd
ahirn@37877
  1055
       (PblObj
ahirn@37877
  1056
          {branch=#,cell=#,env=#,loc=#,meth=#,model=#,origin=#,ostate=#,probl=#,
ahirn@37877
  1057
              result=#,spec=#},[]) : ptree
ahirn@37877
  1058
\end{verbatim}}%size
ahirn@37877
  1059
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
  1060
{\footnotesize\begin{verbatim}
ahirn@37877
  1061
   ML> val nxt = ("Specify_Problem",
ahirn@37877
  1062
               Specify_Problem ["polynomial","univariate","equation"]);
ahirn@37877
  1063
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1064
   val f = Form' (PpcKF (0,EdUndef,0,Nundef,(#,#))) : mout
ahirn@37877
  1065
   val nxt =
ahirn@37877
  1066
     ("Refine_Problem",Refine_Problem ["normalize","univariate","equation"])
ahirn@37877
  1067
     : string * mstep
ahirn@37877
  1068
   ML>
ahirn@37877
  1069
   ML> val nxt = ("Specify_Problem",
ahirn@37877
  1070
               Specify_Problem ["linear","univariate","equation"]);
ahirn@37877
  1071
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1072
   val f =
ahirn@37877
  1073
     Form'
ahirn@37877
  1074
       (PpcKF
ahirn@37877
  1075
          (0,EdUndef,0,Nundef,
ahirn@37877
  1076
           (Problem ["linear","univariate","equation"],
ahirn@37877
  1077
            {Find=[Correct "solutions L"],
ahirn@37877
  1078
             Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1079
                    Correct "solveFor x"],Relate=[],
ahirn@37877
  1080
             Where=[False
ahirn@37877
  1081
                    "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
ahirn@37877
  1082
             With=[]}))) : mout 
ahirn@37877
  1083
\end{verbatim}}%size
ahirn@37877
  1084
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
  1085
{\footnotesize\begin{verbatim}
ahirn@37877
  1086
   ML> val nxt = ("Refine_Problem",
ahirn@37877
  1087
                  Refine_Problem ["linear","univariate","equation
ahirn@37877
  1088
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1089
   val f = Problems (RefinedKF [NoMatch #]) : mout
ahirn@37877
  1090
   ML>
ahirn@37877
  1091
   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
ahirn@37877
  1092
   val f =
ahirn@37877
  1093
     Problems
ahirn@37877
  1094
       (RefinedKF
ahirn@37877
  1095
          [NoMatch
ahirn@37877
  1096
             (["linear","univariate","equation"],
ahirn@37877
  1097
              {Find=[Correct "solutions L"],
ahirn@37877
  1098
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1099
                      Correct "solveFor x"],Relate=[],
ahirn@37877
  1100
               Where=[False
ahirn@37877
  1101
                     "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
ahirn@37877
  1102
               With=[]})]) : mout
ahirn@37877
  1103
   ML>
ahirn@37877
  1104
   ML> val nxt = ("Refine_Problem",Refine_Problem ["univariate","equation"]);
ahirn@37877
  1105
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1106
   val f =
ahirn@37877
  1107
     Problems
ahirn@37877
  1108
       (RefinedKF [Matches #,NoMatch #,NoMatch #,NoMatch #,NoMatch #,Matches #])
ahirn@37877
  1109
     : mout
ahirn@37877
  1110
   ML>
ahirn@37877
  1111
   ML>
ahirn@37877
  1112
   ML>  Compiler.Control.Print.printDepth:=9;f;Compiler.Control.Print.printDepth:=4;
ahirn@37877
  1113
   val f =
ahirn@37877
  1114
     Problems
ahirn@37877
  1115
       (RefinedKF
ahirn@37877
  1116
          [Matches
ahirn@37877
  1117
             (["univariate","equation"],
ahirn@37877
  1118
              {Find=[Correct "solutions L"],
ahirn@37877
  1119
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1120
                      Correct "solveFor x"],Relate=[],
ahirn@37877
  1121
               Where=[Correct
ahirn@37877
  1122
               With=[]}),
ahirn@37877
  1123
           NoMatch
ahirn@37877
  1124
             (["linear","univariate","equation"],
ahirn@37877
  1125
              {Find=[Correct "solutions L"],
ahirn@37877
  1126
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1127
                      Correct "solveFor x"],Relate=[],
ahirn@37877
  1128
               Where=[False
ahirn@37877
  1129
                      "matches (?a + ?b * x = #0) ((x + #1) * (x + #2) = x ^^^ #2 + #8)"],
ahirn@37877
  1130
                  With=[]}),
ahirn@37877
  1131
           NoMatch
ahirn@37877
  1132
             ...
ahirn@37877
  1133
             ...   
ahirn@37877
  1134
           Matches
ahirn@37877
  1135
             (["normalize","univariate","equation"],
ahirn@37877
  1136
              {Find=[Correct "solutions L"],
ahirn@37877
  1137
               Given=[Correct "equality ((x + #1) * (x + #2) = x ^^^ #2 + #8)",
ahirn@37877
  1138
                      Correct "solveFor x"],Relate=[],Where=[],With=[]})]) : mout
ahirn@37877
  1139
\end{verbatim}}%size
ahirn@37877
  1140
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
  1141
ahirn@37877
  1142
\section{The phase of solving} 
ahirn@37877
  1143
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
  1144
{\footnotesize\begin{verbatim} 
ahirn@37877
  1145
   ML> nxt;
ahirn@37877
  1146
   val it = ("Apply_Method",Apply_Method ("SqRoot.thy","norm_univar_equation"))
ahirn@37877
  1147
     : string * mstep
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 (~1,EdUndef,1,Nundef,"(x + #1) * (x + #2) = x ^^^ #2 + #8"))
ahirn@37877
  1152
   val nxt =
ahirn@37877
  1153
     ("Rewrite", Rewrite
ahirn@37877
  1154
        ("rnorm_equation_add","~ ?b =!= #0 ==> (?a = ?b) = (?a + #-1 * ?b = #0)"))
ahirn@37877
  1155
   ML>
ahirn@37877
  1156
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1157
   val f =
ahirn@37877
  1158
     Form' (FormKF (~1,EdUndef,1,Nundef,
ahirn@37877
  1159
           "(x + #1) * (x + #2) + #-1 * (x ^^^ #2 + #8) = #0")) : mout
ahirn@37877
  1160
   val nxt = ("Rewrite_Set",Rewrite_Set "SqRoot_simplify") : string * mstep
ahirn@37877
  1161
   ML>
ahirn@37877
  1162
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1163
   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"#-6 + #3 * x = #0")) : mout
ahirn@37877
  1164
   val nxt = ("Subproblem",Subproblem ("SqRoot.thy",[#,#])) : string * mstep
ahirn@37877
  1165
\end{verbatim}}%size
ahirn@37877
  1166
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
  1167
{\footnotesize\begin{verbatim}
ahirn@37877
  1168
   ML> nxt;
ahirn@37877
  1169
   val it = ("Subproblem",Subproblem ("SqRoot.thy",["univariate","equation"]))
ahirn@37877
  1170
   ML>   
ahirn@37877
  1171
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1172
   val f =
ahirn@37877
  1173
     Form' (FormKF
ahirn@37877
  1174
          (~1,EdUndef,1,Nundef,"Subproblem (SqRoot.thy, [univariate, equation])"))
ahirn@37877
  1175
     : mout
ahirn@37877
  1176
   val nxt = ("Refine_Tacitly",Refine_Tacitly ["univariate","equation"])
ahirn@37877
  1177
   ML>
ahirn@37877
  1178
   ML> val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1179
   val nxt = ("Model_Problem",Model_Problem ["linear","univariate","equation"])
ahirn@37877
  1180
\end{verbatim}}%size
ahirn@37877
  1181
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
  1182
ahirn@37877
  1183
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
  1184
ahirn@37877
  1185
ahirn@37877
  1186
\section{The final phase: check the post-condition}
ahirn@37877
  1187
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
  1188
ahirn@37877
  1189
Thus the post-condition is just mentioned, in our example for both, the problem and the subproblem:
ahirn@37877
  1190
{\footnotesize\begin{verbatim}
ahirn@37877
  1191
   ML> nxt;
ahirn@37877
  1192
   val it = ("Check_Postcond",Check_Postcond ["linear","univariate","equation"])
ahirn@37877
  1193
   ML>
ahirn@37877
  1194
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1195
   val f = Form' (FormKF (~1,EdUndef,1,Nundef,"[x = #2]")) : mout
ahirn@37877
  1196
   val nxt =
ahirn@37877
  1197
     ("Check_Postcond",Check_Postcond ["normalize","univariate","equation"])
ahirn@37877
  1198
   ML>
ahirn@37877
  1199
   ML>  val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
ahirn@37877
  1200
   val f = Form' (FormKF (~1,EdUndef,0,Nundef,"[x = #2]")) : mout
ahirn@37877
  1201
   val nxt = ("End_Proof'",End_Proof') : string * mstep
ahirn@37877
  1202
\end{verbatim}}%size
ahirn@37877
  1203
The next tactic proposed by the system, {\tt End\_Proof'} indicates that the proof has finished successfully.\\
ahirn@37877
  1204
ahirn@37877
  1205
{\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
  1206
ahirn@37877
  1207
ahirn@37877
  1208
ahirn@37877
  1209
\part{Systematic description}
ahirn@37877
  1210
ahirn@37877
  1211
ahirn@37877
  1212
\chapter{The structure of the knowledge base}
ahirn@37877
  1213
ahirn@37877
  1214
\section{Tactics and data}
ahirn@37877
  1215
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
  1216
\footnote{Some of these items are fetched by the tactics from intermediate storage within the ME, and not directly from the KB.}
ahirn@37877
  1217
. The items are listed in alphabetical order in Tab.\ref{kb-items} on p.\pageref{kb-items}.
ahirn@37877
  1218
{\begin{table}[h]
ahirn@37877
  1219
\caption{Atomic items of the KB} \label{kb-items}
ahirn@37877
  1220
%\tabcolsep=0.3mm
ahirn@37877
  1221
\begin{center}
ahirn@37877
  1222
\def\arraystretch{1.0}
ahirn@37877
  1223
\begin{tabular}{lp{9.0cm}}
ahirn@37877
  1224
abbrevation & description \\
ahirn@37877
  1225
\hline
ahirn@37877
  1226
&\\
ahirn@37877
  1227
{\it calc\_list}
ahirn@37877
  1228
& associationlist of the evaluation-functions {\it eval\_fn}\\
ahirn@37877
  1229
{\it eval\_fn}
ahirn@37877
  1230
& evaluation-function for numerals and for predicates coded in SML\\
ahirn@37877
  1231
{\it eval\_rls   }
ahirn@37877
  1232
& ruleset {\it rls} for simplifying expressions with {\it eval\_fn}s\\
ahirn@37877
  1233
{\it fmz}
ahirn@37877
  1234
& formalization, i.e. a minimal formula representation of an example \\
ahirn@37877
  1235
{\it met}
ahirn@37877
  1236
& a method, i.e. a datastructure holding all informations for the solving phase ({\it rew\_ord}, {\it scr}, etc.)\\
ahirn@37877
  1237
{\it metID}
ahirn@37877
  1238
& reference to a {\it met}\\
ahirn@37877
  1239
{\it op}
ahirn@37877
  1240
& operator as key to an {\it eval\_fn} in a {\it calc\_list}\\
ahirn@37877
  1241
{\it pbl}
ahirn@37877
  1242
& problem, i.e. a node in the problem-hierarchy\\
ahirn@37877
  1243
{\it pblID}
ahirn@37877
  1244
& reference to a {\it pbl}\\
ahirn@37877
  1245
{\it rew\_ord}
ahirn@37877
  1246
& rewrite-order\\
ahirn@37877
  1247
{\it rls}
ahirn@37877
  1248
& ruleset, i.e. a datastructure holding theorems {\it thm} and operators {\it op} for simplification (with a {\it rew\_ord})\\
ahirn@37877
  1249
{\it Rrls}
ahirn@37877
  1250
& ruleset for 'reverse rewriting' (an \isac-technique generating stepwise rewriting, e.g. for cancelling fractions)\\
ahirn@37877
  1251
{\it scr}
ahirn@37877
  1252
& script describing algorithms by tactics, part of a {\it met} \\
ahirn@37877
  1253
{\it norm\_rls}
ahirn@37877
  1254
& special ruleset calculating a normalform, associated with a {\it thy}\\
ahirn@37877
  1255
{\it spec}
ahirn@37877
  1256
& specification, i.e. a tripel ({\it thyID, pblID, metID})\\
ahirn@37877
  1257
{\it subs}
ahirn@37877
  1258
& substitution, i.e. a list of variable-value-pairs\\
ahirn@37877
  1259
{\it term}
ahirn@37877
  1260
& Isabelle term, i.e. a formula\\
ahirn@37877
  1261
{\it thm}
ahirn@37877
  1262
& theorem\\     
ahirn@37877
  1263
{\it thy}
ahirn@37877
  1264
& theory\\
ahirn@37877
  1265
{\it thyID}
ahirn@37877
  1266
& reference to a {\it thy} \\
ahirn@37877
  1267
\end{tabular}\end{center}\end{table}
ahirn@37877
  1268
}
ahirn@37877
  1269
The relations between tactics and data items are shown in Tab.\ref{tac-kb}on p.\pageref{tac-kb}.
ahirn@37877
  1270
{\def\arraystretch{1.2}
ahirn@37877
  1271
\begin{table}[h]
ahirn@37877
  1272
\caption{Which tactic uses which KB's item~?} \label{tac-kb}
ahirn@37877
  1273
\tabcolsep=0.3mm
ahirn@37877
  1274
\begin{center}
ahirn@37877
  1275
\begin{tabular}{|ll||cccc|ccc|cccc|} \hline
ahirn@37877
  1276
tactic  &input &    &    &    &norm\_&   &rew\_&rls &eval\_&eval\_&calc\_&   \\
ahirn@37877
  1277
        &      &thy &scr &Rrls&rls  &thm &ord  &Rrls&fn    &rls   &list  &dsc\\
ahirn@37877
  1278
\hline\hline
ahirn@37877
  1279
Init\_Proof
ahirn@37877
  1280
        &fmz   & x  &    &    & x   &    &     &    &      &      &      & x \\
ahirn@37877
  1281
        &spec  &    &    &    &     &    &     &    &      &      &      &   \\
ahirn@37877
  1282
\hline
ahirn@37877
  1283
\multicolumn{13}{|l|}{model phase}\\
ahirn@37877
  1284
\hline
ahirn@37877
  1285
Add\_*  &term  & x  &    &    & x   &    &     &    &      &      &      & x \\
ahirn@37877
  1286
FormFK  &model & x  &    &    & x   &    &     &    &      &      &      & x \\
ahirn@37877
  1287
\hline
ahirn@37877
  1288
\multicolumn{13}{|l|}{specify phase}\\
ahirn@37877
  1289
\hline
ahirn@37877
  1290
Specify\_Theory 
ahirn@37877
  1291
        &thyID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1292
Specify\_Problem 
ahirn@37877
  1293
        &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1294
Refine\_Problem 
ahirn@37877
  1295
           &pblID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1296
Specify\_Method 
ahirn@37877
  1297
        &metID & x  &    &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1298
Apply\_Method 
ahirn@37877
  1299
        &metID & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1300
\hline
ahirn@37877
  1301
\multicolumn{13}{|l|}{solve phase}\\
ahirn@37877
  1302
\hline
ahirn@37877
  1303
Rewrite,\_Inst 
ahirn@37877
  1304
        &thm   & x  & x  &    &     & x  &met  &    & x    &met   &      &   \\
ahirn@37877
  1305
Rewrite, Detail
ahirn@37877
  1306
        &thm   & x  & x  &    &     & x  &rls  &    & x    &rls   &      &   \\
ahirn@37877
  1307
Rewrite, Detail
ahirn@37877
  1308
        &thm   & x  & x  &    &     & x  &Rrls &    & x    &Rrls  &      &   \\
ahirn@37877
  1309
Rewrite\_Set,\_Inst
ahirn@37877
  1310
        &rls   & x  & x  &    &     &    &     & x  & x    & x    &      &   \\
ahirn@37877
  1311
Calculate  
ahirn@37877
  1312
        &op    & x  & x  &    &     &    &     &    &      &      & x    &   \\
ahirn@37877
  1313
Substitute 
ahirn@37877
  1314
        &subs  & x  &    &    & x   &    &     &    &      &      &      &   \\
ahirn@37877
  1315
        &      &    &    &    &     &    &     &    &      &      &      &   \\
ahirn@37877
  1316
SubProblem 
ahirn@37877
  1317
        &spec  & x  & x  &    & x   &    &     &    & x    & x    &      & x \\
ahirn@37877
  1318
        &fmz   &    &    &    &     &    &     &    &      &      &      &   \\
ahirn@37877
  1319
\hline
ahirn@37877
  1320
\end{tabular}\end{center}\end{table}
ahirn@37877
  1321
}
ahirn@37877
  1322
ahirn@37877
  1323
\section{\isac's theories}
ahirn@37877
  1324
\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
  1325
ahirn@37877
  1326
\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
  1327
ahirn@37877
  1328
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
  1329
ahirn@37877
  1330
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
  1331
{\begin{table}[h]
ahirn@37877
  1332
\caption{Theories in \isac-version I} \label{theories}
ahirn@37877
  1333
%\tabcolsep=0.3mm
ahirn@37877
  1334
\begin{center}
ahirn@37877
  1335
\def\arraystretch{1.0}
ahirn@37877
  1336
\begin{tabular}{lp{9.0cm}}
ahirn@37877
  1337
theory & description \\
ahirn@37877
  1338
\hline
ahirn@37877
  1339
&\\
ahirn@37877
  1340
ListI.thy
ahirn@37877
  1341
& assigns identifiers to the functions defined in {\tt Isabelle2002/src/HOL/List.thy} and (intermediatly~?) defines some more list functions\\
ahirn@37877
  1342
ListI.ML
ahirn@37877
  1343
& {\tt eval\_fn} for the additional list functions\\
ahirn@37877
  1344
Tools.thy
ahirn@37877
  1345
& functions required for the evaluation of scripts\\
ahirn@37877
  1346
Tools.ML
ahirn@37877
  1347
& the respective {\tt eval\_fn}s\\
ahirn@37877
  1348
Script.thy
ahirn@37877
  1349
& prerequisites for scripts: types, tactics, tacticals,\\
ahirn@37877
  1350
Script.ML
ahirn@37877
  1351
& sets of tactics and functions for internal use\\
ahirn@37877
  1352
& \\
ahirn@37877
  1353
\hline
ahirn@37877
  1354
& \\
ahirn@37877
  1355
Typefix.thy
ahirn@37877
  1356
& an intermediate hack for escaping type errors\\
ahirn@37877
  1357
Descript.thy
ahirn@37877
  1358
& {\it description}s for the formulas in {\it model}s and {\it problem}s\\
ahirn@37877
  1359
Atools
ahirn@37877
  1360
& (re-)definition of operators; general predicates and functions for preconditions; theorems for the {\tt eval\_rls}\\
ahirn@37877
  1361
Float
ahirn@37877
  1362
& floating point numerals\\
ahirn@37877
  1363
Equation
ahirn@37877
  1364
& basic notions for equations and equational systems\\
ahirn@37877
  1365
Poly
ahirn@37877
  1366
& polynomials\\
ahirn@37877
  1367
PolyEq
ahirn@37877
  1368
& polynomial equations and equational systems \\
ahirn@37877
  1369
Rational.thy
ahirn@37877
  1370
& additional theorems for rationals\\
ahirn@37877
  1371
Rational.ML
ahirn@37877
  1372
& cancel, add and simplify rationals using (a generalization of) Euclids algorithm; respective reverse rulesets\\
ahirn@37877
  1373
RatEq
ahirn@37877
  1374
& equations on rationals\\
ahirn@37877
  1375
Root
ahirn@37877
  1376
& radicals; calculate normalform; respective reverse rulesets\\
ahirn@37877
  1377
RootEq
ahirn@37877
  1378
& equations on roots\\
ahirn@37877
  1379
RatRootEq
ahirn@37877
  1380
& equations on rationals and roots (i.e. on terms containing both operations)\\
ahirn@37877
  1381
Vect
ahirn@37877
  1382
& vector analysis\\
ahirn@37877
  1383
Trig
ahirn@37877
  1384
& trigonometriy\\
ahirn@37877
  1385
LogExp
ahirn@37877
  1386
& logarithms and exponential functions\\
ahirn@37877
  1387
Calculus
ahirn@37877
  1388
& nonstandard analysis\\
ahirn@37877
  1389
Diff
ahirn@37877
  1390
& differentiation\\
ahirn@37877
  1391
DiffApp
ahirn@37877
  1392
& applications of differentiaten (maxima-minima-problems)\\
ahirn@37877
  1393
Test
ahirn@37877
  1394
& (old) data for the test suite\\
ahirn@37877
  1395
Isac
ahirn@37877
  1396
& collects all \isac-theoris.\\
ahirn@37877
  1397
\end{tabular}\end{center}\end{table}
ahirn@37877
  1398
}
ahirn@37877
  1399
ahirn@37877
  1400
ahirn@37877
  1401
\section{Data in {\tt *.thy}- and {\tt *.ML}-files}
ahirn@37877
  1402
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
  1403
{\begin{table}[h]
ahirn@37877
  1404
\caption{Data in {\tt *.thy}- and {\tt *.ML}-files} \label{thy-ML}
ahirn@37877
  1405
\tabcolsep=2.0mm
ahirn@37877
  1406
\begin{center}
ahirn@37877
  1407
\def\arraystretch{1.0}
ahirn@37877
  1408
\begin{tabular}{llp{7.7cm}}
ahirn@37877
  1409
file & data & description \\
ahirn@37877
  1410
\hline
ahirn@37877
  1411
& &\\
ahirn@37877
  1412
{\tt *.thy}
ahirn@37877
  1413
& consts 
ahirn@37877
  1414
& operators, predicates, functions, script-names ('{\tt Script} name \dots{\tt arguments}')
ahirn@37877
  1415
\\
ahirn@37877
  1416
& rules  
ahirn@37877
  1417
& 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
  1418
\\& &\\
ahirn@37877
  1419
{\tt *.ML}
ahirn@37877
  1420
& {\tt theory' :=} 
ahirn@37877
  1421
& the theory defined by the actual {\tt *.thy}-file is made accessible to \isac
ahirn@37877
  1422
\\
ahirn@37877
  1423
& {\tt eval\_fn}
ahirn@37877
  1424
& 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
  1425
\\
ahirn@37877
  1426
& {\tt *\_simplify} 
ahirn@37877
  1427
& 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
  1428
\\
ahirn@37877
  1429
& {\tt norm\_rls :=}
ahirn@37877
  1430
& the canonical simplifier {\tt *\_simplify} is stored such that it is accessible for \isac
ahirn@37877
  1431
\\
ahirn@37877
  1432
& {\tt rew\_ord' :=}
ahirn@37877
  1433
& the same for rewrite orders, if needed outside of one particular ruleset
ahirn@37877
  1434
\\
ahirn@37877
  1435
& {\tt ruleset' :=}
ahirn@37877
  1436
& the same for rulesets (ordinary rulesets, reverse rulesets and {\tt eval\_rls})
ahirn@37877
  1437
\\
ahirn@37877
  1438
& {\tt calc\_list :=}
ahirn@37877
  1439
& 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
  1440
\\
ahirn@37877
  1441
& {\tt store\_pbl}
ahirn@37877
  1442
& problems defined within this {\tt *.ML}-file are made accessible for \isac
ahirn@37877
  1443
\\
ahirn@37877
  1444
& {\tt methods :=}
ahirn@37877
  1445
& methods defined within this {\tt *.ML}-file are made accessible for \isac
ahirn@37877
  1446
\\
ahirn@37877
  1447
\end{tabular}\end{center}\end{table}
ahirn@37877
  1448
}
ahirn@37877
  1449
The order of the data-items within the theories should adhere to the order given in this list.
ahirn@37877
  1450
ahirn@37877
  1451
\section{Formal description of the problem-hierarchy}
ahirn@37877
  1452
%for Richard Lang
ahirn@37877
  1453
ahirn@37877
  1454
\section{Script tactics}
ahirn@37877
  1455
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
  1456
ahirn@37877
  1457
ahirn@37877
  1458
ahirn@37877
  1459
ahirn@37877
  1460
ahirn@37877
  1461
\part{Authoring on the knowledge}
ahirn@37877
  1462
ahirn@37877
  1463
ahirn@37877
  1464
\section{Add a theorem}
ahirn@37877
  1465
\section{Define and add a problem}
ahirn@37877
  1466
\section{Define and add a predicate}
ahirn@37877
  1467
\section{Define and add a method}
ahirn@37877
  1468
\section{}
ahirn@37877
  1469
\section{}
ahirn@37877
  1470
\section{}
ahirn@37877
  1471
\section{}
ahirn@37877
  1472
ahirn@37877
  1473
ahirn@37877
  1474
ahirn@37877
  1475
\newpage
ahirn@37877
  1476
\bibliography{bib/isac,bib/from-theses}
ahirn@37877
  1477
ahirn@37877
  1478
\end{document}