src/HOL/Hyperreal/Fact.thy
changeset 25134 3d4953e88449
parent 25112 98824cc791c0
child 25162 ad4d5365d9d8
equal deleted inserted replaced
25133:b933700f0384 25134:3d4953e88449
    15   fact_0:     "fact 0 = 1"
    15   fact_0:     "fact 0 = 1"
    16   fact_Suc:   "fact (Suc n) = (Suc n) * fact n"
    16   fact_Suc:   "fact (Suc n) = (Suc n) * fact n"
    17 
    17 
    18 
    18 
    19 lemma fact_gt_zero [simp]: "0 < fact n"
    19 lemma fact_gt_zero [simp]: "0 < fact n"
    20   by (induct n) auto
    20 by (induct n) auto
    21 
    21 
    22 lemma fact_not_eq_zero [simp]: "fact n \<noteq> 0"
    22 lemma fact_not_eq_zero [simp]: "fact n \<noteq> 0"
    23   by (simp add: neq0_conv)
    23 by (simp add: neq0_conv)
    24 
    24 
    25 lemma real_of_nat_fact_not_zero [simp]: "real (fact n) \<noteq> 0"
    25 lemma real_of_nat_fact_not_zero [simp]: "real (fact n) \<noteq> 0"
    26   by auto
    26 by auto
    27 
    27 
    28 lemma real_of_nat_fact_gt_zero [simp]: "0 < real(fact n)"
    28 lemma real_of_nat_fact_gt_zero [simp]: "0 < real(fact n)"
    29   by auto
    29 by auto
    30 
    30 
    31 lemma real_of_nat_fact_ge_zero [simp]: "0 \<le> real(fact n)"
    31 lemma real_of_nat_fact_ge_zero [simp]: "0 \<le> real(fact n)"
    32   by simp
    32 by simp
    33 
    33 
    34 lemma fact_ge_one [simp]: "1 \<le> fact n"
    34 lemma fact_ge_one [simp]: "1 \<le> fact n"
    35   by (induct n) auto
    35 by (induct n) auto
    36 
    36 
    37 lemma fact_mono: "m \<le> n ==> fact m \<le> fact n"
    37 lemma fact_mono: "m \<le> n ==> fact m \<le> fact n"
    38   apply (drule le_imp_less_or_eq)
    38 apply (drule le_imp_less_or_eq)
    39   apply (auto dest!: less_imp_Suc_add)
    39 apply (auto dest!: less_imp_Suc_add)
    40   apply (induct_tac k, auto)
    40 apply (induct_tac k, auto)
    41   done
    41 done
    42 
    42 
    43 text{*Note that @{term "fact 0 = fact 1"}*}
    43 text{*Note that @{term "fact 0 = fact 1"}*}
    44 lemma fact_less_mono: "[| 0 < m; m < n |] ==> fact m < fact n"
    44 lemma fact_less_mono: "[| 0 < m; m < n |] ==> fact m < fact n"
    45   apply (drule_tac m = m in less_imp_Suc_add, auto)
    45 apply (drule_tac m = m in less_imp_Suc_add, auto)
    46   apply (induct_tac k, auto)
    46 apply (induct_tac k, auto)
    47   done
    47 done
    48 
    48 
    49 lemma inv_real_of_nat_fact_gt_zero [simp]: "0 < inverse (real (fact n))"
    49 lemma inv_real_of_nat_fact_gt_zero [simp]: "0 < inverse (real (fact n))"
    50   by (auto simp add: positive_imp_inverse_positive)
    50 by (auto simp add: positive_imp_inverse_positive)
    51 
    51 
    52 lemma inv_real_of_nat_fact_ge_zero [simp]: "0 \<le> inverse (real (fact n))"
    52 lemma inv_real_of_nat_fact_ge_zero [simp]: "0 \<le> inverse (real (fact n))"
    53   by (auto intro: order_less_imp_le)
    53 by (auto intro: order_less_imp_le)
    54 
    54 
    55 lemma fact_diff_Suc [rule_format]:
    55 lemma fact_diff_Suc [rule_format]:
    56     "n < Suc m ==> fact (Suc m - n) = (Suc m - n) * fact (m - n)"
    56   "n < Suc m ==> fact (Suc m - n) = (Suc m - n) * fact (m - n)"
    57   apply (induct n arbitrary: m)
    57 apply (induct n arbitrary: m)
    58   apply auto
    58 apply auto
    59   apply (drule_tac x = "m - 1" in meta_spec, auto)
    59 apply (drule_tac x = "m - 1" in meta_spec, auto)
    60   done
    60 done
    61 
    61 
    62 lemma fact_num0 [simp]: "fact 0 = 1"
    62 lemma fact_num0 [simp]: "fact 0 = 1"
    63   by auto
    63 by auto
    64 
    64 
    65 lemma fact_num_eq_if: "fact m = (if m=0 then 1 else m * fact (m - 1))"
    65 lemma fact_num_eq_if: "fact m = (if m=0 then 1 else m * fact (m - 1))"
    66   by (cases m) auto
    66 by (cases m) auto
    67 
    67 
    68 lemma fact_add_num_eq_if:
    68 lemma fact_add_num_eq_if:
    69     "fact (m + n) = (if m + n = 0 then 1 else (m + n) * fact (m + n - 1))"
    69   "fact (m + n) = (if m + n = 0 then 1 else (m + n) * fact (m + n - 1))"
    70   by (cases "m + n") auto
    70 by (cases "m + n") auto
    71 
    71 
    72 lemma fact_add_num_eq_if2:
    72 lemma fact_add_num_eq_if2:
    73     "fact (m + n) = (if m = 0 then fact n else (m + n) * fact ((m - 1) + n))"
    73   "fact (m + n) = (if m = 0 then fact n else (m + n) * fact ((m - 1) + n))"
    74   by (cases m) auto
    74 by (cases m) auto
    75 
    75 
    76 end
    76 end