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