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