src/sml/Scripts/Script.thy
author wneuper
Sat, 20 Aug 2005 21:20:16 +0200
changeset 2918 cac1f942e1a1
parent 1330 1d7b3872e940
child 3758 6d7bf1d2f94d
permissions -rw-r--r--
find out why IntegrateScript doesnt work
agriesma@330
     1
(* tactics, tacticals etc. for scripts
agriesma@330
     2
   W.N.24.2.00
neuper@703
     3
   use_thy_only"Scripts/Script";
neuper@703
     4
   use_thy"../Scripts/Script";
agriesma@330
     5
   use_thy"Script";
agriesma@330
     6
 *)
agriesma@330
     7
agriesma@330
     8
Script = ListG + Tools +
agriesma@330
     9
agriesma@330
    10
types
agriesma@330
    11
agriesma@330
    12
  ID	(* identifiers for thy, ruleset,... *)
agriesma@330
    13
  arg	(* argument of subproblem           *)
agriesma@330
    14
agriesma@330
    15
arities
agriesma@330
    16
agriesma@330
    17
  ID, arg :: type
agriesma@330
    18
agriesma@330
    19
consts
agriesma@330
    20
agriesma@330
    21
(*types of subproblems' arguments*)
agriesma@330
    22
  real_        :: real => arg
agriesma@330
    23
  real_list_   :: (real list) => arg
agriesma@330
    24
  real_set_    :: (real set) => arg
agriesma@330
    25
  bool_	       :: bool => arg
agriesma@330
    26
  bool_list_   :: (bool list) => arg
agriesma@330
    27
agriesma@330
    28
(*tactics*)
agriesma@330
    29
  Rewrite      :: "[ID, bool, 'a] => 'a"
agriesma@330
    30
  Rewrite'_Inst:: "[(real * real) list, ID, bool, 'a] => 'a"
wneuper@1330
    31
			             ("(Rewrite'_Inst (_ _ _))" 11)
wneuper@2918
    32
                                     (*without last argument ^^ for @@*)
agriesma@330
    33
  Rewrite'_Set :: "[ID, bool, 'a] => 'a" ("(Rewrite'_Set (_ _))" 11)
agriesma@330
    34
  Rewrite'_Set'_Inst
agriesma@330
    35
               :: "[(real * real) list, ID, bool, 'a] => 'a"
agriesma@330
    36
		                     ("(Rewrite'_Set'_Inst (_ _ _))" 11)
wneuper@2918
    37
                                     (*without last argument ^^ for @@*)
agriesma@330
    38
  Calculate    :: "[ID, 'a] => 'a"
agriesma@330
    39
  Substitute   :: "[(real * real) list, 'a] => 'a"
neuper@703
    40
  Map          :: "['a => 'b, 'a list] => 'b list"
wneuper@2918
    41
  Tac          :: "ID => 'a"         (*deprecated; only use in Test.ML*)
agriesma@330
    42
  Check'_elementwise ::
agriesma@330
    43
		  "['a list, 'b set] => 'a list"
agriesma@330
    44
                                     ("Check'_elementwise (_ _)" 11)
agriesma@330
    45
  Assumptions  :: bool
neuper@703
    46
  SubProblem   :: "[ID * ID list * ID list, arg list] => 'a"
wneuper@825
    47
  Problem      :: "[ID * ID list] => 'a"
agriesma@330
    48
agriesma@330
    49
  Or'_to'_List :: "bool => 'a list"  ("Or'_to'_List (_)" 11)
agriesma@330
    50
  (*=========== record these ^^^ in 'tacs' in Script.ML =========*)
agriesma@330
    51
agriesma@330
    52
(*special formulas for frontend 'CAS format'*)
agriesma@330
    53
  Subproblem   :: "(ID * ID list) => 'a" 
agriesma@330
    54
agriesma@330
    55
(*script-expressions (tacticals)*)
agriesma@330
    56
  Seq      :: "['a => 'a, 'a => 'a, 'a] => 'a" (infixr "@@" 10) (*@ used*)
agriesma@330
    57
  Try      :: "['a => 'a, 'a] => 'a"
agriesma@330
    58
  Repeat   :: "['a => 'a, 'a] => 'a" 
agriesma@330
    59
  Or       :: "['a => 'a, 'a => 'a, 'a] => 'a" (infixr "Or" 10)
agriesma@330
    60
  While    :: "[bool, 'a => 'a, 'a] => 'a"     ("((While (_) Do)//(_))" 9)
agriesma@330
    61
        (*'b => bool doesn't work with "contains_root _"*)
agriesma@330
    62
  Letpar   :: "['a, 'a => 'b] => 'b"
agriesma@330
    63
  (*--- defined in Isabelle/scr/HOL/HOL.thy:
agriesma@330
    64
  Let      :: "['a, 'a => 'b] => 'b"
agriesma@330
    65
  "_Let"   :: "[letbinds, 'a] => 'a"       ("(let (_)/ in (_))" 10)
agriesma@330
    66
  If       :: "[bool, 'a, 'a] => 'a"       ("(if (_)/ then (_)/ else (_))" 10)
agriesma@330
    67
  %x. P x  .. lambda is defined in Isabelles meta logic
agriesma@330
    68
  --- *)
agriesma@330
    69
agriesma@330
    70
agriesma@330
    71
  failtac, idletac :: 'a
agriesma@330
    72
  (*... + RECORD IN 'screxpr' in Script.ML *)
agriesma@330
    73
wneuper@1330
    74
(*for scripts generated automatically from rls*)
wneuper@1330
    75
  Stepwise      :: "['z,     'z] => 'z" ("((Script Stepwise (_   =))// (_))" 9)
wneuper@1330
    76
  Stepwise'_inst:: "['z,real,'z] => 'z" 
wneuper@1330
    77
	("((Script Stepwise'_inst (_ _ =))// (_))" 9)
wneuper@1330
    78
agriesma@330
    79
agriesma@330
    80
(*SHIFT -> resp.thys ----vvv---------------------------------------------*)
agriesma@330
    81
(*script-names: initial capital letter,
agriesma@330
    82
		type of last arg (=script-body) == result-type !
agriesma@330
    83
  Xxxx       :: script ids, duplicate result-type 'r in last argument:
agriesma@330
    84
             "['a, ... , \
agriesma@330
    85
	       \         'r] => 'r
agriesma@330
    86
*)
agriesma@330
    87
			    
agriesma@330
    88
(*make'_solution'_set :: "bool => bool list" 
agriesma@330
    89
			("(make'_solution'_set (_))" 11)    
agriesma@330
    90
					   
agriesma@330
    91
  max'_on'_interval
agriesma@330
    92
             :: "[ID * (ID list) * ID, bool,real,real set] => real"
agriesma@330
    93
               ("(max'_on'_interval (_)/ (_ _ _))" 9)
agriesma@330
    94
  find'_vals
agriesma@330
    95
             :: "[ID * (ID list) * ID,
agriesma@330
    96
		  real,real,real,real,bool list] => bool list"
agriesma@330
    97
               ("(find'_vals (_)/ (_ _ _ _ _))" 9)
agriesma@330
    98
agriesma@330
    99
  make'_fun  :: "[ID * (ID list) * ID, real,real,bool list] => bool"
agriesma@330
   100
               ("(make'_fun (_)/ (_ _ _))" 9)
agriesma@330
   101
agriesma@330
   102
  solve'_univar
agriesma@330
   103
             :: "[ID * (ID list) * ID, bool,real] => bool list"
agriesma@330
   104
               ("(solve'_univar (_)/ (_ _ ))" 9)
agriesma@330
   105
  solve'_univar'_err
agriesma@330
   106
             :: "[ID * (ID list) * ID, bool,real,bool] => bool list"
agriesma@330
   107
               ("(solve'_univar (_)/ (_ _ _))" 9)
agriesma@330
   108
----------*)
agriesma@330
   109
agriesma@330
   110
  Testeq     :: "[bool, \
agriesma@330
   111
		  \ bool] => bool"
agriesma@330
   112
               ("((Script Testeq (_ =))// \
agriesma@330
   113
                 \ (_))" 9)
agriesma@330
   114
  
agriesma@330
   115
  Testeq2    :: "[bool, \
agriesma@330
   116
		  \ bool list] => bool list"
agriesma@330
   117
               ("((Script Testeq2 (_ =))// \
agriesma@330
   118
                 \ (_))" 9)
agriesma@330
   119
  
agriesma@330
   120
  Testterm   :: "[real, \
agriesma@330
   121
		  \ real] => real"
agriesma@330
   122
               ("((Script Testterm (_ =))// \
agriesma@330
   123
                 \ (_))" 9)
agriesma@330
   124
  
agriesma@330
   125
  Testchk    :: "[bool, real, \
agriesma@330
   126
		  \ real list] => real list"
agriesma@330
   127
               ("((Script Testchk (_ _ =))// \
agriesma@330
   128
                 \ (_))" 9)
agriesma@330
   129
  (*... + RECORD IN 'subpbls' in Script.ML *)
agriesma@330
   130
(*SHIFT -> resp.thys ----^^^----------------------------*)
agriesma@330
   131
agriesma@330
   132
syntax
agriesma@330
   133
agriesma@330
   134
  "_Letpar"     :: "[letbinds, 'a] => 'a"      ("(letpar (_)/ in (_))" 10)
agriesma@330
   135
agriesma@330
   136
translations
agriesma@330
   137
agriesma@330
   138
  "_Letpar (_binds b bs) e"  == "_Letpar b (_Letpar bs e)"
agriesma@330
   139
  "letpar x = a in e"        == "Letpar a (%x. e)"
agriesma@330
   140
agriesma@330
   141
end