Nominal-General/nominal_library.ML
changeset 2475 486d4647bb37
parent 2464 f4eba60cbd69
child 2477 2f289c1f6cf1
--- a/Nominal-General/nominal_library.ML	Sun Sep 05 07:00:19 2010 +0800
+++ b/Nominal-General/nominal_library.ML	Fri Sep 10 09:17:40 2010 +0800
@@ -33,6 +33,11 @@
   val mk_supp_ty: typ -> term -> term
   val mk_supp: term -> term
 
+  val supp_rel_ty: typ -> typ
+  val supp_rel_const: typ -> term
+  val mk_supp_rel_ty: typ -> term -> term -> term
+  val mk_supp_rel: term -> term -> term		       
+
   val supports_const: typ -> term
   val mk_supports_ty: typ -> term -> term -> term
   val mk_supports: term -> term -> term
@@ -124,8 +129,13 @@
 
 fun supp_ty ty = ty --> @{typ "atom set"};
 fun supp_const ty = Const (@{const_name supp}, supp_ty ty)
-fun mk_supp_ty ty t = supp_const ty $ t;
-fun mk_supp t = mk_supp_ty (fastype_of t) t;
+fun mk_supp_ty ty t = supp_const ty $ t
+fun mk_supp t = mk_supp_ty (fastype_of t) t
+
+fun supp_rel_ty ty = ([ty, ty] ---> @{typ bool}) --> ty --> @{typ "atom set"};
+fun supp_rel_const ty = Const (@{const_name supp_rel}, supp_rel_ty ty)
+fun mk_supp_rel_ty ty r t = supp_rel_const ty $ r $ t
+fun mk_supp_rel r t = mk_supp_rel_ty (fastype_of t) r t
 
 fun supports_const ty = Const (@{const_name supports}, [@{typ "atom set"}, ty] ---> @{typ bool});
 fun mk_supports_ty ty t1 t2 = supports_const ty $ t1 $ t2;