src/HOL/Number_Theory/UniqueFactorization.thy
changeset 35644 d20cf282342e
parent 35416 d8d7d1b785af
child 36903 489c1fbbb028
equal deleted inserted replaced
35643:965c24dd6856 35644:d20cf282342e
   293 
   293 
   294 lemma transfer_nat_int_multiplicity: "p >= 0 \<Longrightarrow> n >= 0 \<Longrightarrow>
   294 lemma transfer_nat_int_multiplicity: "p >= 0 \<Longrightarrow> n >= 0 \<Longrightarrow>
   295   multiplicity (nat p) (nat n) = multiplicity p n"
   295   multiplicity (nat p) (nat n) = multiplicity p n"
   296   by (auto simp add: multiplicity_int_def)
   296   by (auto simp add: multiplicity_int_def)
   297 
   297 
   298 declare TransferMorphism_nat_int[transfer add return: 
   298 declare transfer_morphism_nat_int[transfer add return: 
   299   transfer_nat_int_prime_factors transfer_nat_int_prime_factors_closure
   299   transfer_nat_int_prime_factors transfer_nat_int_prime_factors_closure
   300   transfer_nat_int_multiplicity]
   300   transfer_nat_int_multiplicity]
   301 
   301 
   302 
   302 
   303 lemma transfer_int_nat_prime_factors:
   303 lemma transfer_int_nat_prime_factors:
   310 
   310 
   311 lemma transfer_int_nat_multiplicity: 
   311 lemma transfer_int_nat_multiplicity: 
   312     "multiplicity (int p) (int n) = multiplicity p n"
   312     "multiplicity (int p) (int n) = multiplicity p n"
   313   by (auto simp add: multiplicity_int_def)
   313   by (auto simp add: multiplicity_int_def)
   314 
   314 
   315 declare TransferMorphism_int_nat[transfer add return: 
   315 declare transfer_morphism_int_nat[transfer add return: 
   316   transfer_int_nat_prime_factors transfer_int_nat_prime_factors_closure
   316   transfer_int_nat_prime_factors transfer_int_nat_prime_factors_closure
   317   transfer_int_nat_multiplicity]
   317   transfer_int_nat_multiplicity]
   318 
   318 
   319 
   319 
   320 subsection {* Properties of prime factors and multiplicity for nats and ints *}
   320 subsection {* Properties of prime factors and multiplicity for nats and ints *}
   634   "(PROD x : A. int (f x)) >= 0"
   634   "(PROD x : A. int (f x)) >= 0"
   635   apply (rule setsum_nonneg, auto)
   635   apply (rule setsum_nonneg, auto)
   636   apply (rule setprod_nonneg, auto)
   636   apply (rule setprod_nonneg, auto)
   637 done
   637 done
   638 
   638 
   639 declare TransferMorphism_nat_int[transfer 
   639 declare transfer_morphism_nat_int[transfer 
   640   add return: transfer_nat_int_sum_prod_closure3
   640   add return: transfer_nat_int_sum_prod_closure3
   641   del: transfer_nat_int_sum_prod2 (1)]
   641   del: transfer_nat_int_sum_prod2 (1)]
   642 
   642 
   643 lemma multiplicity_setprod_int: "p >= 0 \<Longrightarrow> finite S \<Longrightarrow> 
   643 lemma multiplicity_setprod_int: "p >= 0 \<Longrightarrow> finite S \<Longrightarrow> 
   644   (ALL x : S. f x > 0) \<Longrightarrow> 
   644   (ALL x : S. f x > 0) \<Longrightarrow> 
   655   apply auto
   655   apply auto
   656   apply (rule setsum_cong)
   656   apply (rule setsum_cong)
   657   apply auto
   657   apply auto
   658 done
   658 done
   659 
   659 
   660 declare TransferMorphism_nat_int[transfer 
   660 declare transfer_morphism_nat_int[transfer 
   661   add return: transfer_nat_int_sum_prod2 (1)]
   661   add return: transfer_nat_int_sum_prod2 (1)]
   662 
   662 
   663 lemma multiplicity_prod_prime_powers_nat:
   663 lemma multiplicity_prod_prime_powers_nat:
   664     "finite S \<Longrightarrow> (ALL p : S. prime (p::nat)) \<Longrightarrow>
   664     "finite S \<Longrightarrow> (ALL p : S. prime (p::nat)) \<Longrightarrow>
   665        multiplicity p (PROD p : S. p ^ f p) = (if p : S then f p else 0)"
   665        multiplicity p (PROD p : S. p ^ f p) = (if p : S then f p else 0)"