src/HOL/Tools/res_skolem_function.ML
author nipkow
Fri, 05 Aug 2005 12:20:30 +0200
changeset 17022 b257300c3a9c
parent 16803 014090d1e64b
permissions -rw-r--r--
added Brian Hufmann's finite instances
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     1
(*  Author: Jia Meng, Cambridge University Computer Laboratory
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     2
    ID: $Id$
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     3
    Copyright 2004 University of Cambridge
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     4
16803
wenzelm
parents: 15347
diff changeset
     5
Generation of unique Skolem functions (with types) as term.
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     6
*)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     7
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     8
signature RES_SKOLEM_FUNCTION =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     9
sig
16803
wenzelm
parents: 15347
diff changeset
    10
  val gen_skolem: term list -> typ -> term
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    11
end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    12
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    13
structure ResSkolemFunction: RES_SKOLEM_FUNCTION  =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    14
struct
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    15
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    16
val skolem_prefix = "sk_";
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    17
val skolem_id = ref 0;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    18
16803
wenzelm
parents: 15347
diff changeset
    19
fun gen_skolem_name () =
wenzelm
parents: 15347
diff changeset
    20
  let val sk_fun = skolem_prefix ^ string_of_int (! skolem_id);
wenzelm
parents: 15347
diff changeset
    21
  in inc skolem_id; sk_fun end;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    22
16803
wenzelm
parents: 15347
diff changeset
    23
fun gen_skolem univ_vars tp =
wenzelm
parents: 15347
diff changeset
    24
  let
wenzelm
parents: 15347
diff changeset
    25
    val skolem_type = map Term.fastype_of univ_vars ---> tp
wenzelm
parents: 15347
diff changeset
    26
    val skolem_term = Const (gen_skolem_name (), skolem_type)
wenzelm
parents: 15347
diff changeset
    27
  in Term.list_comb (skolem_term, univ_vars) end;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    28
16803
wenzelm
parents: 15347
diff changeset
    29
end;