src/HOL/NumberTheory/EulerFermat.thy
changeset 13524 604d0f3622d6
parent 13187 e5434b822a96
child 13833 f8dcb1d9ea68
equal deleted inserted replaced
13523:079af5c90d1c 13524:604d0f3622d6
   140    apply (subst BnorRset.simps)
   140    apply (subst BnorRset.simps)
   141    apply (unfold Let_def)
   141    apply (unfold Let_def)
   142    apply auto
   142    apply auto
   143   done
   143   done
   144 
   144 
   145 lemma aux: "a \<le> b - 1 ==> a < (b::int)"
   145 lemma norR_mem_unique_aux: "a \<le> b - 1 ==> a < (b::int)"
   146   apply auto
   146   apply auto
   147   done
   147   done
   148 
   148 
   149 lemma norR_mem_unique:
   149 lemma norR_mem_unique:
   150   "1 < m ==>
   150   "1 < m ==>
   152   apply (unfold norRRset_def)
   152   apply (unfold norRRset_def)
   153   apply (cut_tac a = a and m = m in zcong_zless_unique)
   153   apply (cut_tac a = a and m = m in zcong_zless_unique)
   154    apply auto
   154    apply auto
   155    apply (rule_tac [2] m = m in zcong_zless_imp_eq)
   155    apply (rule_tac [2] m = m in zcong_zless_imp_eq)
   156        apply (auto intro: Bnor_mem_zle Bnor_mem_zg zcong_trans
   156        apply (auto intro: Bnor_mem_zle Bnor_mem_zg zcong_trans
   157 	 order_less_imp_le aux simp add: zcong_sym)
   157 	 order_less_imp_le norR_mem_unique_aux simp add: zcong_sym)
   158   apply (rule_tac "x" = "b" in exI)
   158   apply (rule_tac "x" = "b" in exI)
   159   apply safe
   159   apply safe
   160   apply (rule Bnor_mem_if)
   160   apply (rule Bnor_mem_if)
   161     apply (case_tac [2] "b = 0")
   161     apply (case_tac [2] "b = 0")
   162      apply (auto intro: order_less_le [THEN iffD2])
   162      apply (auto intro: order_less_le [THEN iffD2])
   278     apply (unfold is_RRset_def phi_def norRRset_def)
   278     apply (unfold is_RRset_def phi_def norRRset_def)
   279     apply (auto simp add: RsetR_fin Bnor_fin)
   279     apply (auto simp add: RsetR_fin Bnor_fin)
   280   done
   280   done
   281 
   281 
   282 
   282 
   283 lemma aux: "a \<notin> A ==> inj f ==> f a \<notin> f ` A"
   283 lemma Bnor_prod_power_aux: "a \<notin> A ==> inj f ==> f a \<notin> f ` A"
   284   apply (unfold inj_on_def)
   284   apply (unfold inj_on_def)
   285   apply auto
   285   apply auto
   286   done
   286   done
   287 
   287 
   288 lemma Bnor_prod_power [rule_format]:
   288 lemma Bnor_prod_power [rule_format]:
   293    apply (subst BnorRset.simps)
   293    apply (subst BnorRset.simps)
   294    apply (unfold Let_def)
   294    apply (unfold Let_def)
   295    apply auto
   295    apply auto
   296   apply (simp add: Bnor_fin Bnor_mem_zle_swap)
   296   apply (simp add: Bnor_fin Bnor_mem_zle_swap)
   297   apply (subst setprod_insert)
   297   apply (subst setprod_insert)
   298     apply (rule_tac [2] aux)
   298     apply (rule_tac [2] Bnor_prod_power_aux)
   299      apply (unfold inj_on_def)
   299      apply (unfold inj_on_def)
   300      apply (simp_all add: zmult_ac Bnor_fin finite_imageI
   300      apply (simp_all add: zmult_ac Bnor_fin finite_imageI
   301        Bnor_mem_zle_swap)
   301        Bnor_mem_zle_swap)
   302   done
   302   done
   303 
   303