Nominal/nominal_library.ML
changeset 2593 25dcb2b1329e
parent 2571 f0252365936c
child 2602 bcf558c445a4
--- a/Nominal/nominal_library.ML	Fri Dec 03 13:51:07 2010 +0000
+++ b/Nominal/nominal_library.ML	Mon Dec 06 14:24:17 2010 +0000
@@ -6,11 +6,14 @@
 
 signature NOMINAL_LIBRARY =
 sig
-  val is_true: term -> bool
+  val last2: 'a list -> 'a * 'a
+  val order: ('a * 'a -> bool) -> 'a list -> ('a * 'b) list -> 'b list
 
-  val last2: 'a list -> 'a * 'a
+  val is_true: term -> bool
+ 
+  val dest_listT: typ -> typ
 
-  val dest_listT: typ -> typ
+  val mk_id: term -> term
 
   val size_const: typ -> term 
 
@@ -91,17 +94,30 @@
 structure Nominal_Library: NOMINAL_LIBRARY =
 struct
 
-fun is_true @{term "Trueprop True"} = true
-  | is_true _ = false 
+(* orders an AList according to keys *)
+fun order eq keys list = 
+  map (the o AList.lookup eq list) keys
 
 fun last2 [] = raise Empty
   | last2 [_] = raise Empty
   | last2 [x, y] = (x, y)
   | last2 (_ :: xs) = last2 xs
 
+
+fun is_true @{term "Trueprop True"} = true
+  | is_true _ = false 
+
 fun dest_listT (Type (@{type_name list}, [T])) = T
   | dest_listT T = raise TYPE ("dest_listT: list type expected", [T], [])
 
+fun mk_id trm =
+  let 
+    val ty = fastype_of trm
+  in
+    Const (@{const_name id}, ty --> ty) $ trm
+  end
+
+
 fun size_const ty = Const (@{const_name size}, ty --> @{typ nat})
 
 fun sum_case_const ty1 ty2 ty3 =