src/Pure/logic.ML
changeset 546 36e40454e03e
parent 447 d1f827fa0a18
child 585 409c9ee7a9f3
--- a/src/Pure/logic.ML	Thu Aug 18 17:53:28 1994 +0200
+++ b/src/Pure/logic.ML	Thu Aug 18 17:56:07 1994 +0200
@@ -10,41 +10,43 @@
 
 signature LOGIC = 
   sig
-  val assum_pairs: term -> (term*term)list
-  val auto_rename: bool ref   
-  val close_form: term -> term   
-  val count_prems: term * int -> int
-  val dest_equals: term -> term * term
-  val dest_flexpair: term -> term * term
-  val dest_implies: term -> term * term
-  val dest_inclass: term -> typ * class
-  val dest_type: term -> typ
-  val flatten_params: int -> term -> term
-  val freeze_vars: term -> term
-  val incr_indexes: typ list * int -> term -> term
-  val lift_fns: term * int -> (term -> term) * (term -> term)
-  val list_flexpairs: (term*term)list * term -> term
-  val list_implies: term list * term -> term
+  val assum_pairs	: term -> (term*term)list
+  val auto_rename	: bool ref   
+  val close_form	: term -> term   
+  val count_prems	: term * int -> int
+  val dest_equals	: term -> term * term
+  val dest_flexpair	: term -> term * term
+  val dest_implies	: term -> term * term
+  val dest_inclass	: term -> typ * class
+  val dest_type		: term -> typ
+  val flatten_params	: int -> term -> term
+  val freeze_vars	: term -> term
+  val incr_indexes	: typ list * int -> term -> term
+  val lift_fns		: term * int -> (term -> term) * (term -> term)
+  val list_flexpairs	: (term*term)list * term -> term
+  val list_implies	: term list * term -> term
   val list_rename_params: string list * term -> term
-  val mk_equals: term * term -> term
-  val mk_flexpair: term * term -> term
-  val mk_implies: term * term -> term
-  val mk_inclass: typ * class -> term
-  val mk_type: typ -> term
-  val occs: term * term -> bool
-  val rule_of: (term*term)list * term list * term -> term
-  val set_rename_prefix: string -> unit   
-  val skip_flexpairs: term -> term
+  val mk_equals		: term * term -> term
+  val mk_flexpair	: term * term -> term
+  val mk_implies	: term * term -> term
+  val mk_inclass	: typ * class -> term
+  val mk_type		: typ -> term
+  val occs		: term * term -> bool
+  val rule_of		: (term*term)list * term list * term -> term
+  val set_rename_prefix	: string -> unit   
+  val skip_flexpairs	: term -> term
   val strip_assums_concl: term -> term
-  val strip_assums_hyp: term -> term list
-  val strip_flexpairs: term -> (term*term)list * term
-  val strip_horn: term -> (term*term)list * term list * term
-  val strip_imp_concl: term -> term
-  val strip_imp_prems: term -> term list
-  val strip_params: term -> (string * typ) list
-  val strip_prems: int * term list * term -> term list * term
-  val thaw_vars: term -> term
-  val varify: term -> term  
+  val strip_assums_hyp	: term -> term list
+  val strip_flexpairs	: term -> (term*term)list * term
+  val strip_horn	: term -> (term*term)list * term list * term
+  val strip_imp_concl	: term -> term
+  val strip_imp_prems	: term -> term list
+  val strip_params	: term -> (string * typ) list
+  val strip_prems	: int * term list * term -> term list * term
+  val thaw_vars		: term -> term
+  val unvarifyT		: typ -> typ  
+  val unvarify		: term -> term  
+  val varify		: term -> term  
   end;
 
 functor LogicFun (structure Unify: UNIFY and Net:NET): LOGIC =
@@ -318,4 +320,17 @@
   | varify (f$t) = varify f $ varify t
   | varify t = t;
 
+(*Inverse of varifyT.  Move to Pure/type.ML?*)
+fun unvarifyT (Type (a, Ts)) = Type (a, map unvarifyT Ts)
+  | unvarifyT (TVar ((a, 0), S)) = TFree (a, S)
+  | unvarifyT T = T;
+
+(*Inverse of varify.  Converts axioms back to their original form.*)
+fun unvarify (Const(a,T))    = Const(a, unvarifyT T)
+  | unvarify (Var((a,0), T)) = Free(a, unvarifyT T)
+  | unvarify (Var(ixn,T))    = Var(ixn, unvarifyT T)	(*non-zero index!*)
+  | unvarify (Abs (a,T,body)) = Abs (a, unvarifyT T, unvarify body)
+  | unvarify (f$t) = unvarify f $ unvarify t
+  | unvarify t = t;
+
 end;