src/ZF/CardinalArith.thy
changeset 46841 49b91b716cbe
parent 46821 ff6b0c1087f2
child 46901 1382bba4b7a5
--- a/src/ZF/CardinalArith.thy	Tue Mar 06 17:01:37 2012 +0000
+++ b/src/ZF/CardinalArith.thy	Thu Mar 08 16:43:29 2012 +0000
@@ -48,36 +48,38 @@
   cmult  (infixl "\<otimes>" 70)
 
 
-lemma Card_Union [simp,intro,TC]: "(\<forall>x\<in>A. Card(x)) ==> Card(\<Union>(A))"
-apply (rule CardI)
- apply (simp add: Card_is_Ord)
-apply (clarify dest!: ltD)
-apply (drule bspec, assumption)
-apply (frule lt_Card_imp_lesspoll, blast intro: ltI Card_is_Ord)
-apply (drule eqpoll_sym [THEN eqpoll_imp_lepoll])
-apply (drule lesspoll_trans1, assumption)
-apply (subgoal_tac "B \<lesssim> \<Union>A")
- apply (drule lesspoll_trans1, assumption, blast)
-apply (blast intro: subset_imp_lepoll)
-done
+lemma Card_Union [simp,intro,TC]: 
+  assumes A: "\<And>x. x\<in>A \<Longrightarrow> Card(x)" shows "Card(\<Union>(A))"
+proof (rule CardI)
+  show "Ord(\<Union>A)" using A 
+    by (simp add: Card_is_Ord)
+next
+  fix j
+  assume j: "j < \<Union>A"
+  hence "\<exists>c\<in>A. j < c & Card(c)" using A
+    by (auto simp add: lt_def intro: Card_is_Ord)
+  then obtain c where c: "c\<in>A" "j < c" "Card(c)"
+    by blast
+  hence jls: "j \<prec> c" 
+    by (simp add: lt_Card_imp_lesspoll) 
+  { assume eqp: "j \<approx> \<Union>A"
+    hence Uls: "\<Union>A \<prec> c" using jls
+      by (blast intro: eqpoll_sym eqpoll_imp_lepoll lesspoll_trans1)
+    moreover have  "c \<lesssim> \<Union>A" using c
+      by (blast intro: subset_imp_lepoll)
+    ultimately have "c \<prec> c"
+      by (blast intro: lesspoll_trans1) 
+    hence False 
+      by auto
+  } thus "\<not> j \<approx> \<Union>A" by blast
+qed
 
 lemma Card_UN: "(!!x. x:A ==> Card(K(x))) ==> Card(\<Union>x\<in>A. K(x))"
-by (blast intro: Card_Union)
+  by blast
 
 lemma Card_OUN [simp,intro,TC]:
      "(!!x. x:A ==> Card(K(x))) ==> Card(\<Union>x<A. K(x))"
-by (simp add: OUnion_def Card_0)
-
-lemma n_lesspoll_nat: "n \<in> nat ==> n \<prec> nat"
-apply (unfold lesspoll_def)
-apply (rule conjI)
-apply (erule OrdmemD [THEN subset_imp_lepoll], rule Ord_nat)
-apply (rule notI)
-apply (erule eqpollE)
-apply (rule succ_lepoll_natE)
-apply (blast intro: nat_succI [THEN OrdmemD, THEN subset_imp_lepoll]
-                    lepoll_trans, assumption)
-done
+  by (auto simp add: OUnion_def Card_0)
 
 lemma in_Card_imp_lesspoll: "[| Card(K); b \<in> K |] ==> b \<prec> K"
 apply (unfold lesspoll_def)
@@ -103,11 +105,10 @@
 subsubsection{*Cardinal addition is commutative*}
 
 lemma sum_commute_eqpoll: "A+B \<approx> B+A"
-apply (unfold eqpoll_def)
-apply (rule exI)
-apply (rule_tac c = "case(Inr,Inl)" and d = "case(Inr,Inl)" in lam_bijective)
-apply auto
-done
+proof (unfold eqpoll_def, rule exI)
+  show "(\<lambda>z\<in>A+B. case(Inr,Inl,z)) \<in> bij(A+B, B+A)"
+    by (auto intro: lam_bijective [where d = "case(Inr,Inl)"]) 
+qed
 
 lemma cadd_commute: "i \<oplus> j = j \<oplus> i"
 apply (unfold cadd_def)
@@ -153,10 +154,10 @@
 subsubsection{*Addition by another cardinal*}
 
 lemma sum_lepoll_self: "A \<lesssim> A+B"
-apply (unfold lepoll_def inj_def)
-apply (rule_tac x = "\<lambda>x\<in>A. Inl (x) " in exI)
-apply simp
-done
+proof (unfold lepoll_def, rule exI)
+  show "(\<lambda>x\<in>A. Inl (x)) \<in> inj(A, A + B)"
+    by (simp add: inj_def) 
+qed
 
 (*Could probably weaken the premises to well_ord(K,r), or removing using AC*)