src/HOL/Tools/res_skolem_function.ML
author wenzelm
Mon, 29 Aug 2005 16:18:04 +0200
changeset 17184 3d80209e9a53
parent 16803 014090d1e64b
permissions -rw-r--r--
use AList operations;

(*  Author: Jia Meng, Cambridge University Computer Laboratory
    ID: $Id$
    Copyright 2004 University of Cambridge

Generation of unique Skolem functions (with types) as term.
*)

signature RES_SKOLEM_FUNCTION =
sig
  val gen_skolem: term list -> typ -> term
end;

structure ResSkolemFunction: RES_SKOLEM_FUNCTION  =
struct

val skolem_prefix = "sk_";
val skolem_id = ref 0;

fun gen_skolem_name () =
  let val sk_fun = skolem_prefix ^ string_of_int (! skolem_id);
  in inc skolem_id; sk_fun end;

fun gen_skolem univ_vars tp =
  let
    val skolem_type = map Term.fastype_of univ_vars ---> tp
    val skolem_term = Const (gen_skolem_name (), skolem_type)
  in Term.list_comb (skolem_term, univ_vars) end;

end;