src/Pure/Tools/nbe_codegen.ML
author nipkow
Tue, 21 Feb 2006 16:37:54 +0100
changeset 19118 52f751b50716
parent 19116 d065ec558092
child 19147 0f584853b6a4
permissions -rwxr-xr-x
added Tools/nbe, fixes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19116
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     1
(*  ID:         $Id$
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     2
    Author:     Klaus Aehlig, Tobias Nipkow
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     3
*)
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     4
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     5
(* Global asssumptions:
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     6
   For each function: there is at least one defining eqns and
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     7
   all defining equations have same number of arguments.
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     8
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
     9
FIXME
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    10
fun MLname s = "nbe_" ^ s;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    11
val quote = quote;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    12
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    13
FIXME xtab in theory
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    14
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    15
FIXME CodegenThingol names! which "error"?
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    16
*)
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    17
19118
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    18
signature NBE_CODEGEN =
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    19
sig
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    20
  val export: Theory.theory -> string * CodegenThingol.def -> string
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    21
end
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    22
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    23
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    24
structure NBE_Codegen: NBE_CODEGEN =
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    25
struct
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
    26
19116
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    27
val is_constr = NBE_Eval.is_constr;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    28
val Eval = "NBE_Eval";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    29
val Eval_register= Eval ^ ".register";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    30
val Eval_lookup  = Eval ^ ".lookup";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    31
val Eval_apply   = Eval ^ ".apply";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    32
val Eval_Constr  = Eval ^ ".Constr";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    33
val Eval_C       = Eval ^ ".C";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    34
val Eval_AbsN    = Eval ^ ".AbsN";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    35
val Eval_Fun     = Eval ^ ".Fun";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    36
val Eval_BVar    = Eval ^ ".BVar";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    37
val Eval_new_name = Eval ^ ".new_name";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    38
val Eval_to_term = Eval ^ ".to_term";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    39
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    40
fun MLname s = "nbe_" ^ s;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    41
fun MLvname s  = "v_" ^ MLname s;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    42
fun MLparam n  = "p_" ^ string_of_int n;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    43
fun MLintern s = "i_" ^ MLname s;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    44
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    45
fun MLparams n = map MLparam (1 upto n);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    46
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    47
structure S =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    48
struct
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    49
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    50
val quote = quote; (* FIXME *)
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    51
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    52
fun app e1 e2 = "(" ^ e1 ^ " " ^ e2 ^ ")";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    53
fun abs v e = "(fn" ^ v ^ " => " ^ e ^ ")";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    54
fun tup es = "(" ^ commas es ^ ")";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    55
fun list es = "[" ^ commas es ^ "]";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    56
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    57
fun apps s ss = Library.foldl (uncurry app) (s, ss);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    58
fun nbe_apps s ss =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    59
  Library.foldr (fn (s,e) => app (app Eval_apply e) s) (ss,s);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    60
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    61
fun eqns name ees =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    62
  let fun eqn (es,e) = name ^ " " ^ space_implode " " es ^ " = " ^ e
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    63
  in "fun " ^ space_implode "\n  | " (map eqn ees) ^ ";\n" end;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    64
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    65
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    66
fun Val v s = "val " ^ v ^ " = " ^ s;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    67
fun Let ds e = "let\n" ^ (space_implode "\n" ds) ^ " in " ^ e ^ " end"
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    68
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    69
end
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    70
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    71
fun mk_nbeFUN(nm,e) =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    72
  S.app Eval_Fun (S.tup [S.abs(S.list [MLvname nm])e,S.list [],"1",
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    73
      S.abs(S.tup [])(S.Let 
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    74
        [S.Val (MLintern "var") (S.app Eval_new_name (S.tup [])),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    75
         S.Val (MLvname nm) (S.app Eval_BVar (S.tup [(MLintern "var"), S.list []]))]
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    76
	(S.app Eval_AbsN(S.tup[MLintern "var",(S.app Eval_to_term e)])))]);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    77
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    78
fun take_last n xs = rev (Library.take(n, rev xs));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    79
fun drop_last n xs = rev (Library.drop(n, rev xs));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    80
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    81
fun selfcall nm ar args =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    82
	if (ar <= length args) then 
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    83
	  S.nbe_apps (S.app (MLname nm) (S.list (take_last ar args)))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    84
	             (drop_last ar args)
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    85
        else S.app Eval_Fun (S.tup [MLname nm,S.list args,
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    86
	           string_of_int(ar - (length args)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    87
		   S.abs (S.tup []) (S.app Eval_C
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    88
	(S.quote nm))]);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    89
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    90
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    91
fun mk_rexpr nm ar =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    92
  let fun mk args t = case t of
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    93
    CodegenThingol.IConst((s,_),_) => 
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    94
    if s=nm then selfcall nm ar args
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    95
    else if is_constr s then S.app Eval_Constr 
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    96
                                   (S.tup [S.quote s,S.list args ])
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    97
    else S.nbe_apps (MLname s) args
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    98
  | CodegenThingol.IVarE(s,_) => S.nbe_apps (MLvname s) args
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
    99
  | CodegenThingol.IApp(e1,e2) => mk (args @ [mk [] e2]) e1
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   100
  | CodegenThingol.IAbs(CodegenThingol.IVarE(nm,_), e) =>
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   101
      S.nbe_apps (mk_nbeFUN(nm, mk [] e)) args
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   102
  | _ => sys_error "NBE mkexpr"
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   103
  in mk [] end;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   104
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   105
val mk_lexpr =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   106
  let fun mk args t = case t of
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   107
    CodegenThingol.IConst((s,_),_) =>
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   108
      S.app Eval_Constr (S.tup [S.quote s, S.list args])
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   109
  | CodegenThingol.IVarE(s,_) => if args = [] then MLvname s else 
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   110
      sys_error "NBE mk_lexpr illegal higher order pattern"
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   111
  | CodegenThingol.IApp(e1,e2) => mk (args @ [mk [] e2]) e1
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   112
  | _ => sys_error "NBE mk_lexpr illegal pattern"
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   113
  in mk [] end;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   114
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   115
fun mk_eqn nm ar (lhs,e) = ([S.list(map mk_lexpr (rev lhs))], mk_rexpr nm ar e);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   116
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   117
fun funs_of_expr(CodegenThingol.IConst((s,_),_),fs) = s::fs
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   118
  | funs_of_expr(CodegenThingol.IApp(e1,e2),fs) =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   119
      funs_of_expr(e1, funs_of_expr(e2, fs))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   120
  | funs_of_expr(CodegenThingol.IAbs(_, e),fs) = funs_of_expr(e,fs)
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   121
  | funs_of_expr(_,fs) = fs;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   122
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   123
fun lookup nm =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   124
  S.Val (MLname nm) (S.app Eval_lookup (S.quote nm));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   125
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   126
fun export thy (nm,CodegenThingol.Fun(eqns,_)) =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   127
  let
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   128
    val ar = length(fst(hd eqns));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   129
    val params = S.list (rev (MLparams ar));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   130
    val funs = Library.flat(map (fn (_,e) => funs_of_expr(e,[])) eqns) \ nm;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   131
    val globals = map lookup (filter_out is_constr funs);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   132
    val default_eqn = ([params], S.app Eval_Constr (S.tup[S.quote nm,params]));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   133
    val code = S.eqns (MLname nm) (map (mk_eqn nm ar) eqns @ [default_eqn])
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   134
    val register = S.app Eval_register
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   135
                     (S.tup[S.quote nm, MLname nm, string_of_int ar])
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   136
  in
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   137
    S.Let (globals @ [code]) register
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   138
  end
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   139
  | export _ _ = "\"NBE no op\"";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   140
19118
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
   141
end;
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
   142
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
   143
(*
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
   144
19116
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   145
val use_show = fn s => (writeln ("\n---generated code:\n"^ s);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   146
     use_text(writeln o enclose "\n---compiler echo:\n" "\n---\n",
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   147
              writeln o enclose "\n--- compiler echo (with error!):\n" 
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   148
                                "\n---\n")
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   149
      true s);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   150
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   151
val dummyIT = CodegenThingol.IType("DUMMY",[]);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   152
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   153
use_show(export "" ("append",CodegenThingol.Fun(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   154
  [([CodegenThingol.IConst(("Nil",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   155
     CodegenThingol.IVarE("ys",dummyIT)],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   156
    CodegenThingol.IVarE("ys",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   157
   ([CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   158
       CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   159
         CodegenThingol.IConst(("Cons",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   160
         CodegenThingol.IVarE("x",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   161
       CodegenThingol.IVarE("xs",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   162
     CodegenThingol.IVarE("ys",dummyIT)],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   163
    CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   164
       CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   165
         CodegenThingol.IConst(("Cons",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   166
         CodegenThingol.IVarE("x",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   167
       CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   168
         CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   169
           CodegenThingol.IConst(("append",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   170
           CodegenThingol.IVarE("xs",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   171
         CodegenThingol.IVarE("ys",dummyIT))))]
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   172
  ,([],dummyIT))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   173
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   174
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   175
let
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   176
fun test a b = if a=b then () else error "oops!";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   177
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   178
val CNil = Const("Nil",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   179
val CCons = Const("Cons",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   180
val Cappend = Const("append",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   181
val Fx = Free("x",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   182
val Fy = Free("y",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   183
val Fxs = Free("xs",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   184
val Fys = Free("ys",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   185
open NBE_Eval
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   186
in
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   187
test (nbe(CNil)) (C "Nil");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   188
test (nbe(CCons)) (C "Cons");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   189
test (nbe(Cappend)) (C "append");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   190
test (nbe(Cappend $ CNil $ CNil)) (C "Nil");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   191
test (nbe(Cappend $ Fxs)) (A (C "append", V "xs"));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   192
test (nbe(Cappend $ Fxs $ Fys)) (A (A (C "append", V "xs"), V "ys"));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   193
test (nbe(Cappend $ CNil $ Fxs)) (V "xs");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   194
test (nbe(Cappend $ (CCons $ Fx $ Fxs) $ Fys))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   195
     (A (A (C "Cons", V "x"), A (A (C "append", V "xs"), V "ys")));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   196
test (nbe(Cappend $ (CCons $ Fx $ Fxs) $ (CCons $ Fy $ Fys)))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   197
     (A (A (C "Cons", V "x"), A (A (C "append", V "xs"), A (A (C "Cons", V "y"), V "ys"))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   198
test (nbe(Cappend $ (CCons $ Fx $ (CCons $ Fy $ Fxs)) $ (CCons$Fy$Fys)))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   199
 (A
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   200
      (A (C "Cons", V "x"),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   201
         A
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   202
            (A (C "Cons", V "y"),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   203
               A (A (C "append", V "xs"), A (A (C "Cons", V "y"), V "ys")))))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   204
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   205
end;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   206
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   207
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   208
use_show(export "" ("app",CodegenThingol.Fun(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   209
  [
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   210
  ([CodegenThingol.IConst(("Nil",dummyIT),[])],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   211
    CodegenThingol.IAbs(CodegenThingol.IVarE("ys",dummyIT),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   212
                        CodegenThingol.IVarE("ys",dummyIT))),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   213
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   214
   ([CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   215
       CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   216
         CodegenThingol.IConst(("Cons",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   217
         CodegenThingol.IVarE("x",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   218
       CodegenThingol.IVarE("xs",dummyIT))],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   219
    CodegenThingol.IAbs(CodegenThingol.IVarE("ys",dummyIT),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   220
    CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   221
       CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   222
         CodegenThingol.IConst(("Cons",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   223
         CodegenThingol.IVarE("x",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   224
       CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   225
         CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   226
           CodegenThingol.IConst(("app",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   227
           CodegenThingol.IVarE("xs",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   228
         CodegenThingol.IVarE("ys",dummyIT)))))]
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   229
  ,([],dummyIT))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   230
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   231
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   232
let
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   233
fun test a b = if a=b then () else error "oops!";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   234
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   235
val CNil = Const("Nil",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   236
val CCons = Const("Cons",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   237
val Cappend = Const("app",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   238
val Fx = Free("x",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   239
val Fy = Free("y",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   240
val Fxs = Free("xs",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   241
val Fys = Free("ys",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   242
open NBE_Eval
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   243
in
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   244
test (nbe(CNil)) (C "Nil");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   245
test (nbe(CCons)) (C "Cons");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   246
test (nbe(Cappend)) (C "app");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   247
test (nbe(Cappend $ CNil)) (AbsN (1, B 1));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   248
test (nbe(Cappend $ CNil $ CNil)) (C "Nil");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   249
test (nbe(Cappend $ Fxs)) (A (C "app", V "xs"));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   250
test (nbe(Cappend $ Fxs $ Fys)) (A (A (C "app", V "xs"), V "ys"));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   251
test (nbe(Cappend $ CNil $ Fxs)) (V "xs");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   252
test (nbe(Cappend $ (CCons $ Fx $ Fxs) $ Fys))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   253
     (A (A (C "Cons", V "x"), A (A (C "app", V "xs"), V "ys")));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   254
test (nbe(Cappend $ (CCons $ Fx $ Fxs))) 
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   255
   (AbsN (1, A (A (C "Cons", V "x"), A (A (C "app", V "xs"), B 1))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   256
test (nbe(Cappend $ (CCons $ Fx $ Fxs) $ (CCons $ Fy $ Fys)))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   257
     (A (A (C "Cons", V "x"), A (A (C "app", V "xs"), A (A (C "Cons", V "y"), V "ys"))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   258
test (nbe(Cappend $ (CCons $ Fx $ (CCons $ Fy $ Fxs)) $ (CCons$Fy$Fys)))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   259
 (A
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   260
      (A (C "Cons", V "x"),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   261
         A
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   262
            (A (C "Cons", V "y"),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   263
               A (A (C "app", V "xs"), A (A (C "Cons", V "y"), V "ys")))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   264
()
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   265
end;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   266
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   267
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   268
use_show(export "" ("add",CodegenThingol.Fun(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   269
  [
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   270
  ([CodegenThingol.IConst(("0",dummyIT),[])],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   271
    CodegenThingol.IAbs(CodegenThingol.IVarE("n",dummyIT),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   272
                        CodegenThingol.IVarE("n",dummyIT))),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   273
   ([CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   274
       CodegenThingol.IConst(("S",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   275
       CodegenThingol.IVarE("n",dummyIT))],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   276
    CodegenThingol.IAbs(CodegenThingol.IVarE("m",dummyIT),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   277
      CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   278
         CodegenThingol.IConst(("S",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   279
           CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   280
             CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   281
               CodegenThingol.IConst(("add",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   282
               CodegenThingol.IVarE("n",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   283
             CodegenThingol.IVarE("m",dummyIT)))))]
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   284
  ,([],dummyIT))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   285
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   286
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   287
let
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   288
fun test a b = if a=b then () else error "oops!";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   289
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   290
val C0 = Const("0",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   291
val CS = Const("S",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   292
val Cadd = Const("add",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   293
val Fx = Free("x",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   294
val Fy = Free("y",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   295
open NBE_Eval
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   296
in
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   297
test (nbe(Cadd $ C0)) (AbsN (1, B 1));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   298
test (nbe(Cadd $ C0 $ C0)) (C "0");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   299
test (nbe(Cadd $ (CS $ (CS $ (CS $ Fx))) $ (CS $ (CS $ (CS $ Fy)))))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   300
(A (C "S", A (C "S", A (C "S", A (A (C "add", V "x"), A (C "S", A (C "S", A (C "S", V "y")))))))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   301
)
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   302
end;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   303
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   304
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   305
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   306
use_show(export "" ("mul",CodegenThingol.Fun(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   307
  [
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   308
  ([CodegenThingol.IConst(("0",dummyIT),[])],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   309
    CodegenThingol.IAbs(CodegenThingol.IVarE("n",dummyIT),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   310
                        CodegenThingol.IConst(("0",dummyIT),[]))),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   311
   ([CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   312
       CodegenThingol.IConst(("S",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   313
       CodegenThingol.IVarE("n",dummyIT))],
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   314
    CodegenThingol.IAbs(CodegenThingol.IVarE("m",dummyIT),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   315
      CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   316
       CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   317
         CodegenThingol.IConst(("add",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   318
        CodegenThingol.IVarE("m",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   319
           CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   320
             CodegenThingol.IApp(
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   321
               CodegenThingol.IConst(("mul",dummyIT),[]),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   322
               CodegenThingol.IVarE("n",dummyIT)),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   323
             CodegenThingol.IVarE("m",dummyIT)))))]
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   324
  ,([],dummyIT))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   325
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   326
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   327
let
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   328
fun test a b = if a=b then () else error "oops!";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   329
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   330
val C0 = Const("0",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   331
val CS = Const("S",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   332
val Cmul = Const("mul",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   333
val Fx = Free("x",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   334
val Fy = Free("y",dummyT);
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   335
open NBE_Eval
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   336
in
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   337
test (nbe(Cmul $ C0)) (AbsN (1, C "0"));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   338
test (nbe(Cmul $ C0 $ Fx)) (C "0");
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   339
test (nbe(Cmul $ (CS $ (CS $ (CS $ C0)))))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   340
(AbsN (1, A (A (C "add", B 1), A (A (C "add", B 1), A (A (C "add", B 1), C "0")))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   341
test (nbe(Cmul $ (CS $ (CS $ (CS $ Fx)))))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   342
 (AbsN (1, A (A (C "add", B 1), A (A (C "add", B 1),
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   343
                     A (A (C "add", B 1), A (A (C "mul", V "x"), B 1))))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   344
test (nbe(Cmul $ (CS $ (CS $ Fx)) $ (CS $ (CS $ (CS $ Fy)))))
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   345
(A (C "S", A(C "S",A(C "S",A(A (C "add", V "y"),A(C "S",A(C "S",A(C "S",A
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   346
 (A (C "add", V "y"),A(A (C "mul", V "x"),A(C "S",A(C "S",A(C "S", V"y")))))))))))));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   347
()
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   348
end;
19118
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
   349
*)
19116
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   350
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   351
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   352
(*
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   353
fun top_eval st thy =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   354
let val t = Sign.read_term thy st
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   355
    val tabs = CodegenPackage.mk_tabs thy;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   356
    val thy') =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   357
      CodegenPackage.expand_module NONE (CodegenPackage.codegen_term
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   358
         thy tabs [t]) thy
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   359
    val s = map export diff
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   360
in use s; (* FIXME val thy'' = thy' |> *)
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   361
   Pretty.writeln (Sign.pretty_term thy t');
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   362
   thy'
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   363
end
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   364
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   365
structure P = OuterParse;
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   366
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   367
val nbeP =
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   368
  OuterSyntax.command "norm_by_eval" "norm by eval" K.thy_decl
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   369
    (P.term >> (Toplevel.theory o top_eval));
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   370
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   371
val _ = OuterSyntax.add_parsers [nbeP];
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   372
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   373
ProofGeneral.write_keywords "nbe";
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   374
(* isar-keywords-nbe.el -> isabelle/etc/
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   375
   Isabelle -k nbe *)
19118
52f751b50716 added Tools/nbe, fixes
nipkow
parents: 19116
diff changeset
   376
19116
d065ec558092 New normalization-by-evaluation package
nipkow
parents:
diff changeset
   377
*)