equal
  deleted
  inserted
  replaced
  
    
    
|         |      1 (*  Title:      nominal_library.ML | 
|         |      2     Author:     Christian Urban | 
|         |      3  | 
|         |      4   Basic function for nominal. | 
|         |      5 *) | 
|         |      6  | 
|         |      7 signature NOMINAL_LIBRARY = | 
|         |      8 sig | 
|         |      9   val mk_minus: term -> term | 
|         |     10   val mk_perm: term -> term -> term | 
|         |     11   val dest_perm: term -> term * term | 
|         |     12  | 
|         |     13   val mk_equiv: thm -> thm | 
|         |     14   val safe_mk_equiv: thm -> thm | 
|         |     15 end | 
|         |     16  | 
|         |     17  | 
|         |     18 structure Nominal_Library: NOMINAL_LIBRARY = | 
|         |     19 struct | 
|         |     20  | 
|         |     21 fun mk_minus p =  | 
|         |     22  Const (@{const_name "uminus"}, @{typ "perm => perm"}) $ p | 
|         |     23  | 
|         |     24 fun mk_perm p trm = | 
|         |     25 let | 
|         |     26   val ty = fastype_of trm | 
|         |     27 in | 
|         |     28   Const (@{const_name "permute"}, @{typ "perm"} --> ty --> ty) $ p $ trm | 
|         |     29 end | 
|         |     30  | 
|         |     31 fun dest_perm (Const (@{const_name "permute"}, _) $ p $ t) = (p, t) | 
|         |     32   | dest_perm t = raise TERM ("dest_perm", [t]) | 
|         |     33  | 
|         |     34 fun mk_equiv r = r RS @{thm eq_reflection}; | 
|         |     35 fun safe_mk_equiv r = mk_equiv r handle Thm.THM _ => r; | 
|         |     36  | 
|         |     37 end (* structure *) | 
|         |     38  | 
|         |     39 open Nominal_Library; |