src/HOL/Algebra/Exponent.thy
changeset 14889 d7711d6b9014
parent 14706 71590b7733b7
child 16417 9bc16273c2d4
equal deleted inserted replaced
14888:99ac3eb0f84e 14889:d7711d6b9014
    31 done
    31 done
    32 
    32 
    33 lemma zero_less_prime_power: "p \<in> prime ==> 0 < p^a"
    33 lemma zero_less_prime_power: "p \<in> prime ==> 0 < p^a"
    34 by (force simp add: prime_iff)
    34 by (force simp add: prime_iff)
    35 
    35 
    36 
       
    37 lemma le_extend_mult: "[| 0 < c; a <= b |] ==> a <= b * (c::nat)"
       
    38 apply (rule_tac P = "%x. x <= b * c" in subst)
       
    39 apply (rule mult_1_right)
       
    40 apply (rule mult_le_mono, auto)
       
    41 done
       
    42 
       
    43 lemma insert_partition:
       
    44      "[| x \<notin> F; \<forall>c1\<in>insert x F. \<forall>c2 \<in> insert x F. c1 \<noteq> c2 --> c1 \<inter> c2 = {}|] 
       
    45       ==> x \<inter> \<Union> F = {}"
       
    46 by auto
       
    47 
       
    48 (* main cardinality theorem *)
       
    49 lemma card_partition [rule_format]:
       
    50      "finite C ==>  
       
    51         finite (\<Union> C) -->  
       
    52         (\<forall>c\<in>C. card c = k) -->   
       
    53         (\<forall>c1 \<in> C. \<forall>c2 \<in> C. c1 \<noteq> c2 --> c1 \<inter> c2 = {}) -->  
       
    54         k * card(C) = card (\<Union> C)"
       
    55 apply (erule finite_induct, simp)
       
    56 apply (simp add: card_insert_disjoint card_Un_disjoint insert_partition 
       
    57        finite_subset [of _ "\<Union> (insert x F)"])
       
    58 done
       
    59 
    36 
    60 lemma zero_less_card_empty: "[| finite S; S \<noteq> {} |] ==> 0 < card(S)"
    37 lemma zero_less_card_empty: "[| finite S; S \<noteq> {} |] ==> 0 < card(S)"
    61 by (rule ccontr, simp)
    38 by (rule ccontr, simp)
    62 
    39 
    63 
    40 
   219 done
   196 done
   220 
   197 
   221 
   198 
   222 subsection{*Lemmas for the Main Combinatorial Argument*}
   199 subsection{*Lemmas for the Main Combinatorial Argument*}
   223 
   200 
       
   201 lemma le_extend_mult: "[| 0 < c; a <= b |] ==> a <= b * (c::nat)"
       
   202 apply (rule_tac P = "%x. x <= b * c" in subst)
       
   203 apply (rule mult_1_right)
       
   204 apply (rule mult_le_mono, auto)
       
   205 done
       
   206 
   224 lemma p_fac_forw_lemma:
   207 lemma p_fac_forw_lemma:
   225      "[| 0 < (m::nat); 0<k; k < p^a; (p^r) dvd (p^a)* m - k |] ==> r <= a"
   208      "[| 0 < (m::nat); 0<k; k < p^a; (p^r) dvd (p^a)* m - k |] ==> r <= a"
   226 apply (rule notnotD)
   209 apply (rule notnotD)
   227 apply (rule notI)
   210 apply (rule notI)
   228 apply (drule contrapos_nn [OF _ leI, THEN notnotD], assumption)
   211 apply (drule contrapos_nn [OF _ leI, THEN notnotD], assumption)