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