| 1461 |      1 | (*  Title:      ZF/IMP/Com.ML
 | 
| 482 |      2 |     ID:         $Id$
 | 
| 1461 |      3 |     Author:     Heiko Loetzbeyer & Robert Sandner, TUM
 | 
| 482 |      4 |     Copyright   1994 TUM
 | 
|  |      5 | *)
 | 
|  |      6 | 
 | 
| 511 |      7 | open Com;
 | 
|  |      8 | 
 | 
|  |      9 | val assign_type = prove_goalw Com.thy [assign_def]
 | 
| 1461 |     10 |         "!!n. [| sigma:loc -> nat; n:nat |] ==> sigma[n/x] : loc -> nat"
 | 
| 2469 |     11 |     (fn _ => [ fast_tac (!claset addIs [apply_type,lam_type,if_type]) 1 ]);
 | 
| 511 |     12 | 
 | 
| 2469 |     13 | val type_cs = !claset addSDs [evala.dom_subset RS subsetD,
 | 
|  |     14 | 			      evalb.dom_subset RS subsetD,
 | 
|  |     15 | 			      evalc.dom_subset RS subsetD];
 | 
| 511 |     16 | 
 | 
|  |     17 | (**********     type_intrs for evala     **********)
 | 
|  |     18 | 
 | 
|  |     19 | val evala_type_intrs = 
 | 
|  |     20 |  map (fn s => prove_goal Com.thy s (fn _ => [(fast_tac type_cs 1)]))
 | 
| 1420 |     21 |  ["!!a.<a,sigma> -a-> n ==> a:aexp",
 | 
|  |     22 |   "!!a.<a,sigma> -a-> n ==> sigma:loc->nat",
 | 
| 511 |     23 |   "!!a.<a,sigma> -a-> n ==> n:nat"];
 | 
|  |     24 | 
 | 
|  |     25 | 
 | 
|  |     26 | (**********     type_intrs for evalb     **********)
 | 
| 482 |     27 | 
 | 
| 511 |     28 | val evalb_type_intrs = 
 | 
|  |     29 |  map (fn s => prove_goal Com.thy s (fn _ => [(fast_tac type_cs 1)]))
 | 
| 1420 |     30 |  ["!!b.<b,sigma> -b-> w ==> b:bexp",
 | 
|  |     31 |   "!!b.<b,sigma> -b-> w ==> sigma:loc->nat",
 | 
| 511 |     32 |   "!!b.<b,sigma> -b-> w ==> w:bool"];
 | 
|  |     33 | 
 | 
|  |     34 | 
 | 
|  |     35 | (**********     type_intrs for evalb     **********)
 | 
| 482 |     36 | 
 | 
| 511 |     37 | val evalc_type_intrs = 
 | 
|  |     38 |  map (fn s => prove_goal Com.thy s (fn _ => [(fast_tac type_cs 1)]))
 | 
|  |     39 |  ["!!c.<c,sigma> -c-> sigma' ==> c:com",
 | 
|  |     40 |   "!!c.<c,sigma> -c-> sigma' ==> sigma:loc->nat",
 | 
|  |     41 |   "!!c.<c,sigma> -c-> sigma' ==> sigma':loc->nat"];
 | 
|  |     42 | 
 | 
|  |     43 | 
 | 
|  |     44 | val op_type_intrs = evala_type_intrs@evalb_type_intrs@evalc_type_intrs;
 | 
|  |     45 | 
 | 
|  |     46 | 
 | 
|  |     47 | val aexp_elim_cases = 
 | 
|  |     48 |    [
 | 
|  |     49 |     evala.mk_cases aexp.con_defs "<N(n),sigma> -a-> i",
 | 
|  |     50 |     evala.mk_cases aexp.con_defs "<X(x),sigma> -a-> i",
 | 
|  |     51 |     evala.mk_cases aexp.con_defs "<Op1(f,e),sigma> -a-> i",
 | 
|  |     52 |     evala.mk_cases aexp.con_defs "<Op2(f,a1,a2),sigma>  -a-> i"
 | 
|  |     53 |    ];
 |