src/HOL/ex/CodeEval.thy
changeset 20435 d2a30fed7596
parent 20427 0b102b4182de
child 20453 855f07fabd76
equal deleted inserted replaced
20434:110a223ba63c 20435:d2a30fed7596
   152 val oracle = ("Eval", fn (thy, Eval t) =>
   152 val oracle = ("Eval", fn (thy, Eval t) =>
   153   Logic.mk_equals (t, eval_term' thy t));
   153   Logic.mk_equals (t, eval_term' thy t));
   154 
   154 
   155 val oracle_name = NameSpace.pack [Context.theory_name (the_context ()), fst oracle];
   155 val oracle_name = NameSpace.pack [Context.theory_name (the_context ()), fst oracle];
   156 
   156 
   157 
       
   158 fun conv ct =
   157 fun conv ct =
   159   let
   158   let
   160     val {thy, t, ...} = rep_cterm ct;
   159     val {thy, t, ...} = rep_cterm ct;
   161     val t' = HOLogic.dest_Trueprop t;
   160     val t' = HOLogic.dest_Trueprop t;
   162     val thm' = Thm.invoke_oracle_i thy oracle_name (thy, Eval t');
   161     val thm' = Thm.invoke_oracle_i thy oracle_name (thy, Eval t');
   204 
   203 
   205 lemma
   204 lemma
   206   "rev [0, Suc 0, Suc 0] = [Suc 0, Suc 0, 0]" by eval
   205   "rev [0, Suc 0, Suc 0] = [Suc 0, Suc 0, 0]" by eval
   207 
   206 
   208 lemma
   207 lemma
   209   "fst (snd (fst ( ((Some (2::nat), (Suc 0, ())), [0::nat]) ))) = Suc 0" by eval
   208   "fst (snd (fst ( ((Some (2::nat), (Suc 0, ())), [0::nat]) ))) = Suc (Suc 0) - 1" by eval
   210 
   209 
   211 end
   210 end