src/ZF/ex/enum.ML
author paulson
Mon, 29 Sep 1997 11:37:02 +0200
changeset 3724 f33e301a89f5
parent 71 729fe026c5f3
permissions -rw-r--r--
Step_tac -> Safe_tac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	ZF/ex/enum
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
    Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1993  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Example of a BIG enumeration type
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
56
2caa6f49f06e ZF/ex/tf/tree,forest_unfold: streamlined the proofs
lcp
parents: 38
diff changeset
     8
Can go up to at least 100 constructors, but it takes nearly 7 minutes...
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
56
2caa6f49f06e ZF/ex/tf/tree,forest_unfold: streamlined the proofs
lcp
parents: 38
diff changeset
    12
(*An enumeration type with 60 contructors!  -- takes about 150 seconds!*)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
fun mk_ids a 0 = []
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
  | mk_ids a n = a :: mk_ids (bump_string a) (n-1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
val consts = mk_ids "con1" 60;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
structure Enum = Datatype_Fun
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
 (val thy = Univ.thy;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
  val rec_specs = 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
      [("enum", "univ(0)",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
	  [(consts, "i")])];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
  val rec_styp = "i";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
  val ext = None
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
  val sintrs = map (fn const => const ^ " : enum") consts;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
  val monos = [];
71
729fe026c5f3 sample datatype defs now use datatype_intrs, datatype_elims
lcp
parents: 56
diff changeset
    27
  val type_intrs = datatype_intrs
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
  val type_elims = []);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
38
4433428596f9 used ~: for "not in"
lcp
parents: 7
diff changeset
    30
goal Enum.thy "con59 ~= con60";
56
2caa6f49f06e ZF/ex/tf/tree,forest_unfold: streamlined the proofs
lcp
parents: 38
diff changeset
    31
by (simp_tac (ZF_ss addsimps Enum.free_iffs) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33