src/ZF/Zorn.thy
author paulson
Mon Dec 28 16:59:28 1998 +0100 (1998-12-28)
changeset 6053 8a1059aa01f0
parent 1478 2b8c2a7547ab
child 13134 bf37a3049251
permissions -rw-r--r--
new inductive, datatype and primrec packages, etc.
clasohm@1478
     1
(*  Title:      ZF/Zorn.thy
lcp@516
     2
    ID:         $Id$
clasohm@1478
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
lcp@516
     4
    Copyright   1994  University of Cambridge
lcp@516
     5
lcp@516
     6
Based upon the article
lcp@516
     7
    Abrial & Laffitte, 
lcp@516
     8
    Towards the Mechanization of the Proofs of Some 
lcp@516
     9
    Classical Theorems of Set Theory. 
lcp@516
    10
lcp@516
    11
Union_in_Pow is proved in ZF.ML
lcp@516
    12
*)
lcp@516
    13
lcp@806
    14
Zorn = OrderArith + AC + Inductive +
lcp@516
    15
lcp@516
    16
consts
clasohm@1401
    17
  Subset_rel      :: i=>i
clasohm@1401
    18
  chain, maxchain :: i=>i
clasohm@1401
    19
  super           :: [i,i]=>i
lcp@516
    20
lcp@753
    21
defs
lcp@516
    22
  Subset_rel_def "Subset_rel(A) == {z: A*A . EX x y. z=<x,y> & x<=y & x~=y}"
lcp@485
    23
lcp@516
    24
  chain_def      "chain(A)      == {F: Pow(A). ALL X:F. ALL Y:F. X<=Y | Y<=X}"
lcp@516
    25
  super_def      "super(A,c)    == {d: chain(A). c<=d & c~=d}"
lcp@516
    26
  maxchain_def   "maxchain(A)   == {c: chain(A). super(A,c)=0}"
lcp@516
    27
lcp@516
    28
lcp@516
    29
(** We could make the inductive definition conditional on next: increasing(S)
lcp@516
    30
    but instead we make this a side-condition of an introduction rule.  Thus
lcp@516
    31
    the induction rule lets us assume that condition!  Many inductive proofs
lcp@516
    32
    are therefore unconditional.
lcp@516
    33
**)
lcp@516
    34
consts
clasohm@1401
    35
  "TFin" :: [i,i]=>i
lcp@516
    36
lcp@516
    37
inductive
lcp@516
    38
  domains       "TFin(S,next)" <= "Pow(S)"
lcp@516
    39
  intrs
clasohm@1478
    40
    nextI       "[| x : TFin(S,next);  next: increasing(S) 
clasohm@1155
    41
                |] ==> next`x : TFin(S,next)"
lcp@516
    42
clasohm@1478
    43
    Pow_UnionI  "Y : Pow(TFin(S,next)) ==> Union(Y) : TFin(S,next)"
lcp@516
    44
paulson@6053
    45
  monos         Pow_mono
paulson@6053
    46
  con_defs      increasing_def
lcp@516
    47
  type_intrs    "[CollectD1 RS apply_funtype, Union_in_Pow]"
lcp@516
    48
  
lcp@516
    49
end