src/ZF/ex/Acc.ML
changeset 434 89d45187f04d
parent 279 7738aed3f84d
child 438 52e8393ccd77
--- a/src/ZF/ex/Acc.ML	Tue Jun 21 11:55:36 1994 +0200
+++ b/src/ZF/ex/Acc.ML	Tue Jun 21 16:26:34 1994 +0200
@@ -18,37 +18,34 @@
   val type_intrs = []
   val type_elims = []);
 
+(*The introduction rule must require  a:field(r)  
+  Otherwise acc(r) would be a proper class!    *)
+
 goal Acc.thy "!!a b r. [| b: acc(r);  <a,b>: r |] ==> a: acc(r)";
 by (etac Acc.elim 1);
 by (fast_tac ZF_cs 1);
 val acc_downward = result();
 
-val [major] = goal Acc.thy "field(r) <= acc(r) ==> wf(r)";
-by (rtac (major RS wfI2) 1);
-by (rtac subsetI 1);
-by (etac Acc.induct 1);
-by (etac (bspec RS mp) 1);
+val [major,indhyp] = goal Acc.thy
+    "[| a : acc(r);						\
+\       !!x. [| x: acc(r);  ALL y. <y,x>:r --> P(y) |] ==> P(x)	\
+\    |] ==> P(a)";
+br (major RS Acc.induct) 1;
+br indhyp 1;
+by (fast_tac ZF_cs 2);
 by (resolve_tac Acc.intrs 1);
-by (assume_tac 2);
-by (ALLGOALS (fast_tac ZF_cs));
-val acc_wfI = result();
-
-goal ZF.thy "!!r A. field(r Int A*A) <= field(r) Int A";
+ba 2;
 by (fast_tac ZF_cs 1);
-val field_Int_prodself = result();
+val acc_induct = result();
 
-goal Acc.thy "wf(r Int (acc(r)*acc(r)))";
-by (rtac (field_Int_prodself RS wfI2) 1);
-by (rtac subsetI 1);
-by (etac IntE 1);
-by (etac Acc.induct 1);
-by (etac (bspec RS mp) 1);
-by (rtac IntI 1);
-by (assume_tac 1);
-by (resolve_tac Acc.intrs 1);
-by (assume_tac 2);
-by (ALLGOALS (fast_tac ZF_cs));
-val wf_acc_Int = result();
+goal Acc.thy "wf[acc(r)](r)";
+br wf_onI2 1;
+be acc_induct 1;
+by (fast_tac ZF_cs 1);
+val wf_on_acc = result();
+
+(* field(r) <= acc(r) ==> wf(r) *)
+val acc_wfI = wf_on_acc RS wf_on_subset_A RS wf_on_field_imp_wf;
 
 val [major] = goal Acc.thy "wf(r) ==> field(r) <= acc(r)";
 by (rtac subsetI 1);