src/Tools/isac/Isac_Mathengine.thy
author Walther Neuper <neuper@ist.tugraz.at>
Thu, 12 Aug 2010 11:02:32 +0200
branchisac-update-Isa09-2
changeset 37906 e2b23ba9df13
child 37910 950bfff5f55c
permissions -rw-r--r--
moved isac + test to final dire-structure
neuper@37906
     1
(*  Title:   ~~~/isac/Isac_Mathengine.thy
neuper@37906
     2
    Author: Walther Neuper, TU Graz
neuper@37906
     3
neuper@37906
     4
$ cd /usr/local/Isabelle2009-1/src/Pure/isac
neuper@37906
     5
$ /usr/local/isabisac/bin/isabelle emacs Isac_Mathengine.thy &
neuper@37906
     6
$ /usr/local/isabisac/bin/isabelle jedit Isac_Mathengine.thy &
neuper@37906
     7
neuper@37906
     8
OR tty (unusable: after errors wrong toplevel):
neuper@37906
     9
$ cd "/home/neuper/proto2/isac/src/sml"
neuper@37906
    10
$ isabelle-process HOL HOL-Isac
neuper@37906
    11
ML> use_thy "Isac_Mathengine"; 
neuper@37906
    12
*)
neuper@37906
    13
neuper@37906
    14
header {* Loading the isac mathengine *}
neuper@37906
    15
neuper@37906
    16
theory Isac_Mathengine
neuper@37906
    17
(*imports Complex_Main*)
neuper@37906
    18
imports Complex_Main "Scripts/Script" (*ListG, Tools, Script*)
neuper@37906
    19
begin
neuper@37906
    20
neuper@37906
    21
ML {* Toplevel.debug := true; *}
neuper@37906
    22
neuper@37906
    23
use "library.sml"
neuper@37906
    24
use "calcelems.sml"
neuper@37906
    25
ML {* check_guhs_unique := true *}
neuper@37906
    26
neuper@37906
    27
use "Scripts/term_G.sml"
neuper@37906
    28
use "Scripts/calculate.sml"
neuper@37906
    29
neuper@37906
    30
use "Scripts/rewrite.sml"
neuper@37906
    31
use_thy"Scripts/Script"
neuper@37906
    32
neuper@37906
    33
use "Scripts/scrtools.sml"
neuper@37906
    34
neuper@37906
    35
(*
neuper@37906
    36
use "ME/mstools.sml"
neuper@37906
    37
use "ME/ctree.sml"
neuper@37906
    38
use "ME/ptyps.sml"
neuper@37906
    39
use "ME/generate.sml"
neuper@37906
    40
use "ME/calchead.sml"
neuper@37906
    41
use "ME/appl.sml"
neuper@37906
    42
use "ME/rewtools.sml"
neuper@37906
    43
use "ME/script.sml"
neuper@37906
    44
use "ME/solve.sml"
neuper@37906
    45
use "ME/inform.sml"
neuper@37906
    46
use "ME/mathengine.sml"
neuper@37906
    47
neuper@37906
    48
use "xmlsrc/mathml.sml"
neuper@37906
    49
use "xmlsrc/datatypes.sml"
neuper@37906
    50
use "xmlsrc/pbl-met-hierarchy.sml"
neuper@37906
    51
use "xmlsrc/thy-hierarchy.sml" 
neuper@37906
    52
use "xmlsrc/interface-xml.sml"
neuper@37906
    53
neuper@37906
    54
use "FE-interface/messages.sml"
neuper@37906
    55
use "FE-interface/states.sml"
neuper@37906
    56
use "FE-interface/interface.sml"
neuper@37906
    57
neuper@37906
    58
use "print_exn_G.sml"
neuper@37906
    59
neuper@37906
    60
text "**** build math-engine complete *************************"
neuper@37906
    61
*)(*
neuper@37906
    62
setup {*
neuper@37906
    63
  Code_Preproc.setup
neuper@37906
    64
  #> Code_ML.setup
neuper@37906
    65
  #> Code_Haskell.setup
neuper@37906
    66
  #> Nbe.setup
neuper@37906
    67
*}
neuper@37906
    68
*)
neuper@37906
    69
neuper@37906
    70
neuper@37906
    71
(*cleaner output from...*)
neuper@37906
    72
ML_command {*
neuper@37906
    73
"----- ";
neuper@37906
    74
writeln "werwerw";
neuper@37906
    75
*}
neuper@37906
    76
neuper@37906
    77
ML {* @{prop "False"} *}
neuper@37906
    78
(*ML {* @{type "int"} *} only new version*)
neuper@37906
    79
ML {* @{thm  conjI} *}
neuper@37906
    80
ML {* @{thms  conjI TrueI} *}
neuper@37906
    81
ML {* @{theory} *}
neuper@37906
    82
neuper@37906
    83
ML{* @{const_name plus} *} (*creates long names (extern names)*)
neuper@37906
    84
term plus
neuper@37906
    85
neuper@37906
    86
term foo
neuper@37906
    87
(*ML{* @{const_name foo} *}  only new version*)
neuper@37906
    88
 
neuper@37906
    89
text {*
neuper@37906
    90
werwer
neuper@37906
    91
 *}
neuper@37906
    92
neuper@37906
    93
ML {*
neuper@37906
    94
  fun inc_by_five x =
neuper@37906
    95
  x |> (fn x => x + 1)
neuper@37906
    96
*}
neuper@37906
    97
neuper@37906
    98
(*canonical argument order introduced after 1997*)
neuper@37906
    99
neuper@37906
   100
text{*
neuper@37906
   101
this is the most appropriate fold for lists (generalizes to lists of lists by (fold o fold o fold))
neuper@37906
   102
@{ML fold}
neuper@37906
   103
neuper@37906
   104
@{ML fold_rev}
neuper@37906
   105
neuper@37906
   106
for accumulating side results in |>
neuper@37906
   107
@{ML fold_map}
neuper@37906
   108
*}
neuper@37906
   109
neuper@37906
   110
ML {* 
neuper@37906
   111
  val items = 1 upto 10;
neuper@37906
   112
  val l1 = fold cons items []; (*alternating useful frequently*)
neuper@37906
   113
*}
neuper@37906
   114
neuper@37906
   115
ML{*
neuper@37906
   116
  fun merge_list eq (xs, ys) = fold_rev (insert eq) ys xs;
neuper@37906
   117
*}
neuper@37906
   118
ML{*
neuper@37906
   119
  merge_list (op =) ([3,2,1], [7,5,3,1]);
neuper@37906
   120
  merge_list (op =) ([3,2,1], [7,5,3,1]);
neuper@37906
   121
*}
neuper@37906
   122
neuper@37906
   123
(*session 2-------Christian+Makarius---------------*)
neuper@37906
   124
ML{*
neuper@37906
   125
let
neuper@37906
   126
  val ctxt = @{context}
neuper@37906
   127
in 1 end
neuper@37906
   128
*}
neuper@37906
   129
neuper@37906
   130
(* build and handle tables THIS IS THE ACCESS-STRUCTURE...
neuper@37906
   131
ML{*
neuper@37906
   132
  structure Data = Theory_Data
neuper@37906
   133
  (
neuper@37906
   134
    type T = term Symtab.table
neuper@37906
   135
    val empty = Symtab.empty
neuper@37906
   136
    val extend = O
neuper@37906
   137
    fun merge (t1, t2) = Symtab.merge (op = ) (t1, t2)
neuper@37906
   138
  )
neuper@37906
   139
*}
neuper@37906
   140
*)
neuper@37906
   141
(*session 3-------Blanchette--------------------
neuper@37906
   142
working on nitpic, ML level tool
neuper@37906
   143
neuper@37906
   144
SEE THESE LECTURE NOTES !!!*)
neuper@37906
   145
neuper@37906
   146
(*
neuper@37906
   147
ML{*
neuper@37906
   148
Const ("x", dummyT) |> Syntax.check_term @{context}
neuper@37906
   149
                       ^^^^^^^^^^^^^^^^^
neuper@37906
   150
*}
neuper@37906
   151
*)
neuper@37906
   152
neuper@37906
   153
text{*
neuper@37906
   154
SEE funs for 
neuper@37906
   155
# deleting identifiers
neuper@37906
   156
# handle Bounds when made visible
neuper@37906
   157
# kill trivial quantifiers, e.g. \foral x. (NO x)
neuper@37906
   158
# handling name clashes in Abs
neuper@37906
   159
# which constants, free vars ... occur in a term !!!!!!!!!!!
neuper@37906
   160
# Var (("x", 2), dummyT)   ... 25 old from Larry "maxidx"
neuper@37906
   161
# get fresh Const, Var
neuper@37906
   162
# use the "Name" structure
neuper@37906
   163
neuper@37906
   164
*}
neuper@37906
   165
neuper@37906
   166
ML{* val context = Name.make_context ["d"] *}
neuper@37906
   167
neuper@37906
   168
(*
neuper@37906
   169
ML{* Name.invents context "foo" 10  *}
neuper@37906
   170
(*ML{* Name variants ... *}*)
neuper@37906
   171
*)
neuper@37906
   172
neuper@37906
   173
end
neuper@37906
   174