src/ZF/Datatype.ML
author clasohm
Fri, 15 Jul 1994 13:34:31 +0200
changeset 477 53fc8ad84b33
parent 120 09287f26bfb8
child 516 1957113f0d7d
permissions -rw-r--r--
added thy_name to Datatype_Fun's parameter
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	ZF/datatype.ML
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
120
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
     6
(Co)Datatype Definitions for Zermelo-Fraenkel Set Theory
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
(*Datatype definitions use least fixedpoints, standard products and sums*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
functor Datatype_Fun (Const: CONSTRUCTOR) 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
         : sig include CONSTRUCTOR_RESULT INTR_ELIM INDRULE end =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
struct
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
structure Constructor = Constructor_Fun (structure Const=Const and 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
  		                      Pr=Standard_Prod and Su=Standard_Sum);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
open Const Constructor;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
structure Inductive = Inductive_Fun
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
        (val thy = con_thy;
477
53fc8ad84b33 added thy_name to Datatype_Fun's parameter
clasohm
parents: 120
diff changeset
    20
         val thy_name = thy_name;
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
	 val rec_doms = (map #1 rec_specs) ~~ (map #2 rec_specs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
	 val sintrs = sintrs;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
	 val monos = monos;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
	 val con_defs = con_defs;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
	 val type_intrs = type_intrs;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
	 val type_elims = type_elims);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
open Inductive
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
120
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    32
(*Codatatype definitions use greatest fixedpoints, Quine products and sums*)
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    33
functor CoDatatype_Fun (Const: CONSTRUCTOR) 
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    34
         : sig include CONSTRUCTOR_RESULT INTR_ELIM COINDRULE end =
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
struct
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
structure Constructor = Constructor_Fun (structure Const=Const and 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
  		                      Pr=Quine_Prod and Su=Quine_Sum);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
open Const Constructor;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
120
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    40
structure CoInductive = CoInductive_Fun
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
        (val thy = con_thy;
477
53fc8ad84b33 added thy_name to Datatype_Fun's parameter
clasohm
parents: 120
diff changeset
    42
         val thy_name = thy_name;
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
	 val rec_doms = (map #1 rec_specs) ~~ (map #2 rec_specs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
	 val sintrs = sintrs;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
	 val monos = monos;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
	 val con_defs = con_defs;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
	 val type_intrs = type_intrs;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
	 val type_elims = type_elims);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
120
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    50
open CoInductive
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
(*For most datatypes involving univ*)
70
8a29f8b4aca1 ZF/ind-syntax/fold_con_tac: deleted, since fold_tac now works
lcp
parents: 55
diff changeset
    56
val datatype_intrs = 
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
    [SigmaI, InlI, InrI,
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
     Pair_in_univ, Inl_in_univ, Inr_in_univ, 
55
331d93292ee0 ZF/ind-syntax/refl_thin: new
lcp
parents: 0
diff changeset
    59
     zero_in_univ, A_into_univ, nat_into_univ, UnCI];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
55
331d93292ee0 ZF/ind-syntax/refl_thin: new
lcp
parents: 0
diff changeset
    61
(*Needed for mutual recursion*)
70
8a29f8b4aca1 ZF/ind-syntax/fold_con_tac: deleted, since fold_tac now works
lcp
parents: 55
diff changeset
    62
val datatype_elims = [make_elim InlD, make_elim InrD];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
120
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    64
(*For most codatatypes involving quniv*)
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    65
val codatatype_intrs = 
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
    [QSigmaI, QInlI, QInrI,
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    67
     QPair_in_quniv, QInl_in_quniv, QInr_in_quniv, 
55
331d93292ee0 ZF/ind-syntax/refl_thin: new
lcp
parents: 0
diff changeset
    68
     zero_in_quniv, A_into_quniv, nat_into_quniv, UnCI];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
120
09287f26bfb8 changed all co- and co_ to co
lcp
parents: 70
diff changeset
    70
val codatatype_elims = [make_elim QInlD, make_elim QInrD];
55
331d93292ee0 ZF/ind-syntax/refl_thin: new
lcp
parents: 0
diff changeset
    71