src/ZF/Zorn.thy
 changeset 516 1957113f0d7d parent 485 5e00a676a211 child 578 efc648d29dd0
```--- a/src/ZF/Zorn.thy	Fri Aug 12 12:28:46 1994 +0200
+++ b/src/ZF/Zorn.thy	Fri Aug 12 12:51:34 1994 +0200
@@ -1,3 +1,51 @@
-(*Dummy theory to document dependencies *)
+(*  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}"

-Zorn = Zorn0
+  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```