src/ZF/inductive.ML
author clasohm
Thu, 16 Sep 1993 12:20:38 +0200
changeset 0 a5a9c433f639
child 516 1957113f0d7d
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	ZF/inductive.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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Inductive Definitions for Zermelo-Fraenkel Set Theory
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
Uses least fixedpoints with standard products and sums
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
Sums are used only for mutual recursion;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
Products are used only to derive "streamlined" induction rules for relations
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
structure Lfp =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
  struct
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
  val oper	= Const("lfp",      [iT,iT-->iT]--->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
  val bnd_mono	= Const("bnd_mono", [iT,iT-->iT]--->oT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
  val bnd_monoI	= bnd_monoI
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
  val subs	= def_lfp_subset
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
  val Tarski	= def_lfp_Tarski
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
  val induct	= def_induct
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
  end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
structure Standard_Prod =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
  struct
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
  val sigma	= Const("Sigma", [iT, iT-->iT]--->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
  val pair	= Const("Pair", [iT,iT]--->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
  val split_const	= Const("split", [[iT,iT]--->iT, iT]--->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
  val fsplit_const	= Const("fsplit", [[iT,iT]--->oT, iT]--->oT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
  val pair_iff	= Pair_iff
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
  val split_eq	= split
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33
  val fsplitI	= fsplitI
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
  val fsplitD	= fsplitD
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
  val fsplitE	= fsplitE
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
  end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
structure Standard_Sum =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
  struct
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
  val sum	= Const("op +", [iT,iT]--->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
  val inl	= Const("Inl", iT-->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
  val inr	= Const("Inr", iT-->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
  val elim	= Const("case", [iT-->iT, iT-->iT, iT]--->iT)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
  val case_inl	= case_Inl
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
  val case_inr	= case_Inr
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
  val inl_iff	= Inl_iff
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
  val inr_iff	= Inr_iff
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
  val distinct	= Inl_Inr_iff
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
  val distinct' = Inr_Inl_iff
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
  end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
functor Inductive_Fun (Ind: INDUCTIVE) : sig include INTR_ELIM INDRULE end =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
struct
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
structure Intr_elim = 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
    Intr_elim_Fun(structure Ind=Ind and Fp=Lfp and 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
		  Pr=Standard_Prod and Su=Standard_Sum);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
structure Indrule = Indrule_Fun (structure Ind=Ind and 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
		                 Pr=Standard_Prod and Intr_elim=Intr_elim);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    61
open Intr_elim Indrule
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63