src/Pure/logic.ML
changeset 585 409c9ee7a9f3
parent 546 36e40454e03e
child 637 b344bf624143
equal deleted inserted replaced
584:5b1a0e50c79a 585:409c9ee7a9f3
    42   val strip_imp_concl	: term -> term
    42   val strip_imp_concl	: term -> term
    43   val strip_imp_prems	: term -> term list
    43   val strip_imp_prems	: term -> term list
    44   val strip_params	: term -> (string * typ) list
    44   val strip_params	: term -> (string * typ) list
    45   val strip_prems	: int * term list * term -> term list * term
    45   val strip_prems	: int * term list * term -> term list * term
    46   val thaw_vars		: term -> term
    46   val thaw_vars		: term -> term
    47   val unvarifyT		: typ -> typ  
       
    48   val unvarify		: term -> term  
    47   val unvarify		: term -> term  
    49   val varify		: term -> term  
    48   val varify		: term -> term  
    50   end;
    49   end;
    51 
    50 
    52 functor LogicFun (structure Unify: UNIFY and Net:NET): LOGIC =
    51 functor LogicFun (structure Unify: UNIFY and Net:NET): LOGIC =
   318   | varify (Var(ixn,T)) = Var(ixn, Type.varifyT T)
   317   | varify (Var(ixn,T)) = Var(ixn, Type.varifyT T)
   319   | varify (Abs (a,T,body)) = Abs (a, Type.varifyT T, varify body)
   318   | varify (Abs (a,T,body)) = Abs (a, Type.varifyT T, varify body)
   320   | varify (f$t) = varify f $ varify t
   319   | varify (f$t) = varify f $ varify t
   321   | varify t = t;
   320   | varify t = t;
   322 
   321 
   323 (*Inverse of varifyT.  Move to Pure/type.ML?*)
       
   324 fun unvarifyT (Type (a, Ts)) = Type (a, map unvarifyT Ts)
       
   325   | unvarifyT (TVar ((a, 0), S)) = TFree (a, S)
       
   326   | unvarifyT T = T;
       
   327 
       
   328 (*Inverse of varify.  Converts axioms back to their original form.*)
   322 (*Inverse of varify.  Converts axioms back to their original form.*)
   329 fun unvarify (Const(a,T))    = Const(a, unvarifyT T)
   323 fun unvarify (Const(a,T))    = Const(a, Type.unvarifyT T)
   330   | unvarify (Var((a,0), T)) = Free(a, unvarifyT T)
   324   | unvarify (Var((a,0), T)) = Free(a, Type.unvarifyT T)
   331   | unvarify (Var(ixn,T))    = Var(ixn, unvarifyT T)	(*non-zero index!*)
   325   | unvarify (Var(ixn,T))    = Var(ixn, Type.unvarifyT T)  (*non-0 index!*)
   332   | unvarify (Abs (a,T,body)) = Abs (a, unvarifyT T, unvarify body)
   326   | unvarify (Abs (a,T,body)) = Abs (a, Type.unvarifyT T, unvarify body)
   333   | unvarify (f$t) = unvarify f $ unvarify t
   327   | unvarify (f$t) = unvarify f $ unvarify t
   334   | unvarify t = t;
   328   | unvarify t = t;
   335 
   329 
   336 end;
   330 end;