src/ZF/Zorn.thy
author lcp
Thu, 24 Nov 1994 10:23:41 +0100
changeset 737 436019ca97d7
parent 578 efc648d29dd0
child 753 ec86863e87c8
permissions -rw-r--r--
cons_fun_eq: modified strange uses of classical reasoner

(*  Title: 	ZF/Zorn.thy
    ID:         $Id$
    Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
    Copyright   1994  University of Cambridge

Based upon the article
    Abrial & Laffitte, 
    Towards the Mechanization of the Proofs of Some 
    Classical Theorems of Set Theory. 

Union_in_Pow is proved in ZF.ML
*)

Zorn = OrderArith + AC + "Inductive" +

consts
  Subset_rel      :: "i=>i"
  increasing      :: "i=>i"
  chain, maxchain :: "i=>i"
  super           :: "[i,i]=>i"

rules
  Subset_rel_def "Subset_rel(A) == {z: A*A . EX x y. z=<x,y> & x<=y & x~=y}"
  increasing_def "increasing(A) == {f: Pow(A)->Pow(A). ALL x. x<=A --> x<=f`x}"

  chain_def      "chain(A)      == {F: Pow(A). ALL X:F. ALL Y:F. X<=Y | Y<=X}"
  super_def      "super(A,c)    == {d: chain(A). c<=d & c~=d}"
  maxchain_def   "maxchain(A)   == {c: chain(A). super(A,c)=0}"


(** We could make the inductive definition conditional on next: increasing(S)
    but instead we make this a side-condition of an introduction rule.  Thus
    the induction rule lets us assume that condition!  Many inductive proofs
    are therefore unconditional.
**)
consts
  "TFin" :: "[i,i]=>i"

inductive
  domains       "TFin(S,next)" <= "Pow(S)"
  intrs
    nextI	"[| x : TFin(S,next);  next: increasing(S) \
\                |] ==> next`x : TFin(S,next)"

    Pow_UnionI	"Y : Pow(TFin(S,next)) ==> Union(Y) : TFin(S,next)"

  monos         "[Pow_mono]"
  con_defs      "[increasing_def]"
  type_intrs    "[CollectD1 RS apply_funtype, Union_in_Pow]"
  
end