src/ZF/AC/AC16_lemmas.thy
changeset 46822 95f1e700b712
parent 32960 69916a850301
child 61394 6142b282b164
equal deleted inserted replaced
46821:ff6b0c1087f2 46822:95f1e700b712
     9 begin
     9 begin
    10 
    10 
    11 lemma cons_Diff_eq: "a\<notin>A ==> cons(a,A)-{a}=A"
    11 lemma cons_Diff_eq: "a\<notin>A ==> cons(a,A)-{a}=A"
    12 by fast
    12 by fast
    13 
    13 
    14 lemma nat_1_lepoll_iff: "1\<lesssim>X <-> (\<exists>x. x \<in> X)"
    14 lemma nat_1_lepoll_iff: "1\<lesssim>X \<longleftrightarrow> (\<exists>x. x \<in> X)"
    15 apply (unfold lepoll_def)
    15 apply (unfold lepoll_def)
    16 apply (rule iffI)
    16 apply (rule iffI)
    17 apply (fast intro: inj_is_fun [THEN apply_type])
    17 apply (fast intro: inj_is_fun [THEN apply_type])
    18 apply (erule exE)
    18 apply (erule exE)
    19 apply (rule_tac x = "\<lambda>a \<in> 1. x" in exI)
    19 apply (rule_tac x = "\<lambda>a \<in> 1. x" in exI)
    20 apply (fast intro!: lam_injective)
    20 apply (fast intro!: lam_injective)
    21 done
    21 done
    22 
    22 
    23 lemma eqpoll_1_iff_singleton: "X\<approx>1 <-> (\<exists>x. X={x})"
    23 lemma eqpoll_1_iff_singleton: "X\<approx>1 \<longleftrightarrow> (\<exists>x. X={x})"
    24 apply (rule iffI)
    24 apply (rule iffI)
    25 apply (erule eqpollE)
    25 apply (erule eqpollE)
    26 apply (drule nat_1_lepoll_iff [THEN iffD1])
    26 apply (drule nat_1_lepoll_iff [THEN iffD1])
    27 apply (fast intro!: lepoll_1_is_sing)
    27 apply (fast intro!: lepoll_1_is_sing)
    28 apply (fast intro!: singleton_eqpoll_1)
    28 apply (fast intro!: singleton_eqpoll_1)
    77 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective)
    77 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective)
    78  apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in)
    78  apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in)
    79 apply (simp, blast intro: InfCard_Least_in)
    79 apply (simp, blast intro: InfCard_Least_in)
    80 done
    80 done
    81 
    81 
    82 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(Union(z))"
    82 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(\<Union>(z))"
    83 apply (rule subsetI)
    83 apply (rule subsetI)
    84 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast )
    84 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast )
    85 apply (simp, erule bexE) 
    85 apply (simp, erule bexE) 
    86 apply (rule_tac i=y and j=x in Ord_linear_le)
    86 apply (rule_tac i=y and j=x in Ord_linear_le)
    87 apply (blast dest: le_imp_subset elim: leE ltE)+
    87 apply (blast dest: le_imp_subset elim: leE ltE)+
    89 
    89 
    90 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j"
    90 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j"
    91 by (fast elim!: mem_irrefl)
    91 by (fast elim!: mem_irrefl)
    92 
    92 
    93 lemma succ_Union_not_mem:
    93 lemma succ_Union_not_mem:
    94      "(!!y. y \<in> z ==> Ord(y)) ==> succ(Union(z)) \<notin> z"
    94      "(!!y. y \<in> z ==> Ord(y)) ==> succ(\<Union>(z)) \<notin> z"
    95 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem], blast)
    95 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem], blast)
    96 done
    96 done
    97 
    97 
    98 lemma Union_cons_eq_succ_Union:
    98 lemma Union_cons_eq_succ_Union:
    99      "Union(cons(succ(Union(z)),z)) = succ(Union(z))"
    99      "\<Union>(cons(succ(\<Union>(z)),z)) = succ(\<Union>(z))"
   100 by fast
   100 by fast
   101 
   101 
   102 lemma Un_Ord_disj: "[| Ord(i); Ord(j) |] ==> i Un j = i | i Un j = j"
   102 lemma Un_Ord_disj: "[| Ord(i); Ord(j) |] ==> i \<union> j = i | i \<union> j = j"
   103 by (fast dest!: le_imp_subset elim: Ord_linear_le)
   103 by (fast dest!: le_imp_subset elim: Ord_linear_le)
   104 
   104 
   105 lemma Union_eq_Un: "x \<in> X ==> Union(X) = x Un Union(X-{x})"
   105 lemma Union_eq_Un: "x \<in> X ==> \<Union>(X) = x \<union> \<Union>(X-{x})"
   106 by fast
   106 by fast
   107 
   107 
   108 lemma Union_in_lemma [rule_format]:
   108 lemma Union_in_lemma [rule_format]:
   109      "n \<in> nat ==> \<forall>z. (\<forall>y \<in> z. Ord(y)) & z\<approx>n & z\<noteq>0 --> Union(z) \<in> z"
   109      "n \<in> nat ==> \<forall>z. (\<forall>y \<in> z. Ord(y)) & z\<approx>n & z\<noteq>0 \<longrightarrow> \<Union>(z) \<in> z"
   110 apply (induct_tac "n")
   110 apply (induct_tac "n")
   111 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0])
   111 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0])
   112 apply (intro allI impI)
   112 apply (intro allI impI)
   113 apply (erule natE)
   113 apply (erule natE)
   114 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1]
   114 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1]
   124 apply (drule bspec) 
   124 apply (drule bspec) 
   125 apply (erule Diff_subset [THEN subsetD])
   125 apply (erule Diff_subset [THEN subsetD])
   126 apply (drule Un_Ord_disj, assumption, auto) 
   126 apply (drule Un_Ord_disj, assumption, auto) 
   127 done
   127 done
   128 
   128 
   129 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> Union(z) \<in> z"
   129 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> \<Union>(z) \<in> z"
   130 by (blast intro: Union_in_lemma)
   130 by (blast intro: Union_in_lemma)
   131 
   131 
   132 lemma succ_Union_in_x:
   132 lemma succ_Union_in_x:
   133      "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(Union(z)) \<in> x"
   133      "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(\<Union>(z)) \<in> x"
   134 apply (rule Limit_has_succ [THEN ltE])
   134 apply (rule Limit_has_succ [THEN ltE])
   135 prefer 3 apply assumption
   135 prefer 3 apply assumption
   136 apply (erule InfCard_is_Limit)
   136 apply (erule InfCard_is_Limit)
   137 apply (case_tac "z=0")
   137 apply (case_tac "z=0")
   138 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0])
   138 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0])
   143 
   143 
   144 lemma succ_lepoll_succ_succ:
   144 lemma succ_lepoll_succ_succ:
   145      "[| InfCard(x); n \<in> nat |] 
   145      "[| InfCard(x); n \<in> nat |] 
   146       ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}"
   146       ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}"
   147 apply (unfold lepoll_def)
   147 apply (unfold lepoll_def)
   148 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(Union(z)), z)" 
   148 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(\<Union>(z)), z)" 
   149        in exI)
   149        in exI)
   150 apply (rule_tac d = "%z. z-{Union (z) }" in lam_injective)
   150 apply (rule_tac d = "%z. z-{\<Union>(z) }" in lam_injective)
   151 apply (blast intro!: succ_Union_in_x succ_Union_not_mem
   151 apply (blast intro!: succ_Union_in_x succ_Union_not_mem
   152              intro: cons_eqpoll_succ Ord_in_Ord
   152              intro: cons_eqpoll_succ Ord_in_Ord
   153              dest!: InfCard_is_Card [THEN Card_is_Ord])
   153              dest!: InfCard_is_Card [THEN Card_is_Ord])
   154 apply (simp only: Union_cons_eq_succ_Union) 
   154 apply (simp only: Union_cons_eq_succ_Union) 
   155 apply (rule cons_Diff_eq)
   155 apply (rule cons_Diff_eq)