--- a/src/HOL/Algebra/Exponent.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Algebra/Exponent.thy Tue Jul 07 17:39:51 2009 +0200
@@ -217,7 +217,7 @@
prefer 2 apply (blast intro: dvd_mult2)
apply (drule dvd_diffD1)
apply assumption
- prefer 2 apply (blast intro: nat_dvd_diff)
+ prefer 2 apply (blast intro: dvd_diff_nat)
apply (drule gr0_implies_Suc, auto)
done
@@ -233,7 +233,7 @@
prefer 2 apply (blast intro: dvd_mult2)
apply (drule dvd_diffD1)
apply assumption
- prefer 2 apply (blast intro: nat_dvd_diff)
+ prefer 2 apply (blast intro: dvd_diff_nat)
apply (drule less_imp_Suc_add, auto)
done
--- a/src/HOL/Decision_Procs/Cooper.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Decision_Procs/Cooper.thy Tue Jul 07 17:39:51 2009 +0200
@@ -1042,7 +1042,7 @@
consts
plusinf:: "fm \<Rightarrow> fm" (* Virtual substitution of +\<infinity>*)
minusinf:: "fm \<Rightarrow> fm" (* Virtual substitution of -\<infinity>*)
- \<delta> :: "fm \<Rightarrow> int" (* Compute lcm {d| N\<^isup>?\<^isup> Dvd c*x+t \<in> p}*)
+ \<delta> :: "fm \<Rightarrow> int" (* Compute lcm {d| N\<^isup>? Dvd c*x+t \<in> p}*)
d\<delta> :: "fm \<Rightarrow> int \<Rightarrow> bool" (* checks if a given l divides all the ds above*)
recdef minusinf "measure size"
@@ -1104,7 +1104,7 @@
proof (induct p rule: iszlfm.induct)
case (1 p q)
let ?d = "\<delta> (And p q)"
- from prems int_lcm_pos have dp: "?d >0" by simp
+ from prems lcm_pos_int have dp: "?d >0" by simp
have d1: "\<delta> p dvd \<delta> (And p q)" using prems by simp
hence th: "d\<delta> p ?d" using delta_mono prems(3-4) by(simp only: iszlfm.simps)
have "\<delta> q dvd \<delta> (And p q)" using prems by simp
@@ -1113,7 +1113,7 @@
next
case (2 p q)
let ?d = "\<delta> (And p q)"
- from prems int_lcm_pos have dp: "?d >0" by simp
+ from prems lcm_pos_int have dp: "?d >0" by simp
have "\<delta> p dvd \<delta> (And p q)" using prems by simp
hence th: "d\<delta> p ?d" using delta_mono prems by(simp only: iszlfm.simps)
have "\<delta> q dvd \<delta> (And p q)" using prems by simp
@@ -1410,15 +1410,15 @@
from prems have dl2: "\<zeta> q dvd lcm (\<zeta> p) (\<zeta> q)" by simp
from prems d\<beta>_mono[where p = "p" and l="\<zeta> p" and l'="lcm (\<zeta> p) (\<zeta> q)"]
d\<beta>_mono[where p = "q" and l="\<zeta> q" and l'="lcm (\<zeta> p) (\<zeta> q)"]
- dl1 dl2 show ?case by (auto simp add: int_lcm_pos)
+ dl1 dl2 show ?case by (auto simp add: lcm_pos_int)
next
case (2 p q)
from prems have dl1: "\<zeta> p dvd lcm (\<zeta> p) (\<zeta> q)" by simp
from prems have dl2: "\<zeta> q dvd lcm (\<zeta> p) (\<zeta> q)" by simp
from prems d\<beta>_mono[where p = "p" and l="\<zeta> p" and l'="lcm (\<zeta> p) (\<zeta> q)"]
d\<beta>_mono[where p = "q" and l="\<zeta> q" and l'="lcm (\<zeta> p) (\<zeta> q)"]
- dl1 dl2 show ?case by (auto simp add: int_lcm_pos)
-qed (auto simp add: int_lcm_pos)
+ dl1 dl2 show ?case by (auto simp add: lcm_pos_int)
+qed (auto simp add: lcm_pos_int)
lemma a\<beta>: assumes linp: "iszlfm p" and d: "d\<beta> p l" and lp: "l > 0"
shows "iszlfm (a\<beta> p l) \<and> d\<beta> (a\<beta> p l) 1 \<and> (Ifm bbs (l*x #bs) (a\<beta> p l) = Ifm bbs (x#bs) p)"
--- a/src/HOL/Decision_Procs/Ferrack.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Decision_Procs/Ferrack.thy Tue Jul 07 17:39:51 2009 +0200
@@ -746,7 +746,7 @@
moreover
{assume g1:"?g>1" hence g0: "?g > 0" by simp
from g1 nnz have gp0: "?g' \<noteq> 0" by simp
- hence g'p: "?g' > 0" using int_gcd_ge_0[where x="n" and y="numgcd ?t'"] by arith
+ hence g'p: "?g' > 0" using gcd_ge_0_int[where x="n" and y="numgcd ?t'"] by arith
hence "?g'= 1 \<or> ?g' > 1" by arith
moreover {assume "?g'=1" hence ?thesis by (simp add: Let_def simp_num_pair_def simpnum_ci)}
moreover {assume g'1:"?g'>1"
@@ -782,7 +782,7 @@
moreover
{assume g1:"?g>1" hence g0: "?g > 0" by simp
from g1 nnz have gp0: "?g' \<noteq> 0" by simp
- hence g'p: "?g' > 0" using int_gcd_ge_0[where x="n" and y="numgcd ?t'"] by arith
+ hence g'p: "?g' > 0" using gcd_ge_0_int[where x="n" and y="numgcd ?t'"] by arith
hence "?g'= 1 \<or> ?g' > 1" by arith
moreover {assume "?g'=1" hence ?thesis using prems
by (auto simp add: Let_def simp_num_pair_def simpnum_numbound0)}
--- a/src/HOL/Decision_Procs/MIR.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Decision_Procs/MIR.thy Tue Jul 07 17:39:51 2009 +0200
@@ -1060,7 +1060,7 @@
moreover
{assume g1:"?g>1" hence g0: "?g > 0" by simp
from g1 nnz have gp0: "?g' \<noteq> 0" by simp
- hence g'p: "?g' > 0" using int_gcd_ge_0[where x="n" and y="numgcd ?t'"] by arith
+ hence g'p: "?g' > 0" using gcd_ge_0_int[where x="n" and y="numgcd ?t'"] by arith
hence "?g'= 1 \<or> ?g' > 1" by arith
moreover {assume "?g'=1" hence ?thesis by (simp add: Let_def simp_num_pair_def)}
moreover {assume g'1:"?g'>1"
@@ -1096,7 +1096,7 @@
moreover
{assume g1:"?g>1" hence g0: "?g > 0" by simp
from g1 nnz have gp0: "?g' \<noteq> 0" by simp
- hence g'p: "?g' > 0" using int_gcd_ge_0[where x="n" and y="numgcd ?t'"] by arith
+ hence g'p: "?g' > 0" using gcd_ge_0_int[where x="n" and y="numgcd ?t'"] by arith
hence "?g'= 1 \<or> ?g' > 1" by arith
moreover {assume "?g'=1" hence ?thesis using prems
by (auto simp add: Let_def simp_num_pair_def)}
@@ -1233,7 +1233,7 @@
moreover
{assume g1:"?g>1" hence g0: "?g > 0" by simp
from g1 dnz have gp0: "?g' \<noteq> 0" by simp
- hence g'p: "?g' > 0" using int_gcd_ge_0[where x="d" and y="numgcd t"] by arith
+ hence g'p: "?g' > 0" using gcd_ge_0_int[where x="d" and y="numgcd t"] by arith
hence "?g'= 1 \<or> ?g' > 1" by arith
moreover {assume "?g'=1" hence ?thesis by (simp add: Let_def simpdvd_def)}
moreover {assume g'1:"?g'>1"
@@ -2126,7 +2126,7 @@
proof (induct p rule: iszlfm.induct)
case (1 p q)
let ?d = "\<delta> (And p q)"
- from prems int_lcm_pos have dp: "?d >0" by simp
+ from prems lcm_pos_int have dp: "?d >0" by simp
have d1: "\<delta> p dvd \<delta> (And p q)" using prems by simp
hence th: "d\<delta> p ?d"
using delta_mono prems by(simp only: iszlfm.simps) blast
@@ -2136,7 +2136,7 @@
next
case (2 p q)
let ?d = "\<delta> (And p q)"
- from prems int_lcm_pos have dp: "?d >0" by simp
+ from prems lcm_pos_int have dp: "?d >0" by simp
have "\<delta> p dvd \<delta> (And p q)" using prems by simp hence th: "d\<delta> p ?d" using delta_mono prems
by(simp only: iszlfm.simps) blast
have "\<delta> q dvd \<delta> (And p q)" using prems by simp hence th': "d\<delta> q ?d" using delta_mono prems by(simp only: iszlfm.simps) blast
@@ -2514,15 +2514,15 @@
from prems have dl2: "\<zeta> q dvd lcm (\<zeta> p) (\<zeta> q)" by simp
from prems d\<beta>_mono[where p = "p" and l="\<zeta> p" and l'="lcm (\<zeta> p) (\<zeta> q)"]
d\<beta>_mono[where p = "q" and l="\<zeta> q" and l'="lcm (\<zeta> p) (\<zeta> q)"]
- dl1 dl2 show ?case by (auto simp add: int_lcm_pos)
+ dl1 dl2 show ?case by (auto simp add: lcm_pos_int)
next
case (2 p q)
from prems have dl1: "\<zeta> p dvd lcm (\<zeta> p) (\<zeta> q)" by simp
from prems have dl2: "\<zeta> q dvd lcm (\<zeta> p) (\<zeta> q)" by simp
from prems d\<beta>_mono[where p = "p" and l="\<zeta> p" and l'="lcm (\<zeta> p) (\<zeta> q)"]
d\<beta>_mono[where p = "q" and l="\<zeta> q" and l'="lcm (\<zeta> p) (\<zeta> q)"]
- dl1 dl2 show ?case by (auto simp add: int_lcm_pos)
-qed (auto simp add: int_lcm_pos)
+ dl1 dl2 show ?case by (auto simp add: lcm_pos_int)
+qed (auto simp add: lcm_pos_int)
lemma a\<beta>: assumes linp: "iszlfm p (a #bs)" and d: "d\<beta> p l" and lp: "l > 0"
shows "iszlfm (a\<beta> p l) (a #bs) \<and> d\<beta> (a\<beta> p l) 1 \<and> (Ifm (real (l * x) #bs) (a\<beta> p l) = Ifm ((real x)#bs) p)"
@@ -4175,7 +4175,7 @@
by (induct p rule: isrlfm.induct, auto)
lemma zgcd_le1: assumes ip: "(0::int) < i" shows "gcd i j \<le> i"
proof-
- from int_gcd_dvd1 have th: "gcd i j dvd i" by blast
+ from gcd_dvd1_int have th: "gcd i j dvd i" by blast
from zdvd_imp_le[OF th ip] show ?thesis .
qed
--- a/src/HOL/Divides.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Divides.thy Tue Jul 07 17:39:51 2009 +0200
@@ -887,7 +887,7 @@
interpretation dvd: order "op dvd" "\<lambda>n m \<Colon> nat. n dvd m \<and> \<not> m dvd n"
proof qed (auto intro: dvd_refl dvd_trans dvd_anti_sym)
-lemma nat_dvd_diff[simp]: "[| k dvd m; k dvd n |] ==> k dvd (m-n :: nat)"
+lemma dvd_diff_nat[simp]: "[| k dvd m; k dvd n |] ==> k dvd (m-n :: nat)"
unfolding dvd_def
by (blast intro: diff_mult_distrib2 [symmetric])
@@ -897,7 +897,7 @@
done
lemma dvd_diffD1: "[| k dvd m-n; k dvd m; n\<le>m |] ==> k dvd (n::nat)"
-by (drule_tac m = m in nat_dvd_diff, auto)
+by (drule_tac m = m in dvd_diff_nat, auto)
lemma dvd_reduce: "(k dvd n + k) = (k dvd (n::nat))"
apply (rule iffI)
@@ -906,7 +906,7 @@
apply (subgoal_tac "n = (n+k) -k")
prefer 2 apply simp
apply (erule ssubst)
- apply (erule nat_dvd_diff)
+ apply (erule dvd_diff_nat)
apply (rule dvd_refl)
done
--- a/src/HOL/GCD.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/GCD.thy Tue Jul 07 17:39:51 2009 +0200
@@ -163,7 +163,7 @@
subsection {* GCD *}
(* was gcd_induct *)
-lemma nat_gcd_induct:
+lemma gcd_nat_induct:
fixes m n :: nat
assumes "\<And>m. P m 0"
and "\<And>m n. 0 < n \<Longrightarrow> P n (m mod n) \<Longrightarrow> P m n"
@@ -175,43 +175,43 @@
(* specific to int *)
-lemma int_gcd_neg1 [simp]: "gcd (-x::int) y = gcd x y"
+lemma gcd_neg1_int [simp]: "gcd (-x::int) y = gcd x y"
by (simp add: gcd_int_def)
-lemma int_gcd_neg2 [simp]: "gcd (x::int) (-y) = gcd x y"
+lemma gcd_neg2_int [simp]: "gcd (x::int) (-y) = gcd x y"
by (simp add: gcd_int_def)
lemma abs_gcd_int[simp]: "abs(gcd (x::int) y) = gcd x y"
by(simp add: gcd_int_def)
-lemma int_gcd_abs: "gcd (x::int) y = gcd (abs x) (abs y)"
+lemma gcd_abs_int: "gcd (x::int) y = gcd (abs x) (abs y)"
by (simp add: gcd_int_def)
lemma gcd_abs1_int[simp]: "gcd (abs x) (y::int) = gcd x y"
-by (metis abs_idempotent int_gcd_abs)
+by (metis abs_idempotent gcd_abs_int)
lemma gcd_abs2_int[simp]: "gcd x (abs y::int) = gcd x y"
-by (metis abs_idempotent int_gcd_abs)
+by (metis abs_idempotent gcd_abs_int)
-lemma int_gcd_cases:
+lemma gcd_cases_int:
fixes x :: int and y
assumes "x >= 0 \<Longrightarrow> y >= 0 \<Longrightarrow> P (gcd x y)"
and "x >= 0 \<Longrightarrow> y <= 0 \<Longrightarrow> P (gcd x (-y))"
and "x <= 0 \<Longrightarrow> y >= 0 \<Longrightarrow> P (gcd (-x) y)"
and "x <= 0 \<Longrightarrow> y <= 0 \<Longrightarrow> P (gcd (-x) (-y))"
shows "P (gcd x y)"
-by (insert prems, auto simp add: int_gcd_neg1 int_gcd_neg2, arith)
+by (insert prems, auto simp add: gcd_neg1_int gcd_neg2_int, arith)
-lemma int_gcd_ge_0 [simp]: "gcd (x::int) y >= 0"
+lemma gcd_ge_0_int [simp]: "gcd (x::int) y >= 0"
by (simp add: gcd_int_def)
-lemma int_lcm_neg1: "lcm (-x::int) y = lcm x y"
+lemma lcm_neg1_int: "lcm (-x::int) y = lcm x y"
by (simp add: lcm_int_def)
-lemma int_lcm_neg2: "lcm (x::int) (-y) = lcm x y"
+lemma lcm_neg2_int: "lcm (x::int) (-y) = lcm x y"
by (simp add: lcm_int_def)
-lemma int_lcm_abs: "lcm (x::int) y = lcm (abs x) (abs y)"
+lemma lcm_abs_int: "lcm (x::int) y = lcm (abs x) (abs y)"
by (simp add: lcm_int_def)
lemma abs_lcm_int [simp]: "abs (lcm i j::int) = lcm i j"
@@ -223,53 +223,53 @@
lemma lcm_abs2_int[simp]: "lcm x (abs y::int) = lcm x y"
by (metis abs_idempotent lcm_int_def)
-lemma int_lcm_cases:
+lemma lcm_cases_int:
fixes x :: int and y
assumes "x >= 0 \<Longrightarrow> y >= 0 \<Longrightarrow> P (lcm x y)"
and "x >= 0 \<Longrightarrow> y <= 0 \<Longrightarrow> P (lcm x (-y))"
and "x <= 0 \<Longrightarrow> y >= 0 \<Longrightarrow> P (lcm (-x) y)"
and "x <= 0 \<Longrightarrow> y <= 0 \<Longrightarrow> P (lcm (-x) (-y))"
shows "P (lcm x y)"
-by (insert prems, auto simp add: int_lcm_neg1 int_lcm_neg2, arith)
+by (insert prems, auto simp add: lcm_neg1_int lcm_neg2_int, arith)
-lemma int_lcm_ge_0 [simp]: "lcm (x::int) y >= 0"
+lemma lcm_ge_0_int [simp]: "lcm (x::int) y >= 0"
by (simp add: lcm_int_def)
(* was gcd_0, etc. *)
-lemma nat_gcd_0 [simp]: "gcd (x::nat) 0 = x"
+lemma gcd_0_nat [simp]: "gcd (x::nat) 0 = x"
by simp
(* was igcd_0, etc. *)
-lemma int_gcd_0 [simp]: "gcd (x::int) 0 = abs x"
+lemma gcd_0_int [simp]: "gcd (x::int) 0 = abs x"
by (unfold gcd_int_def, auto)
-lemma nat_gcd_0_left [simp]: "gcd 0 (x::nat) = x"
+lemma gcd_0_left_nat [simp]: "gcd 0 (x::nat) = x"
by simp
-lemma int_gcd_0_left [simp]: "gcd 0 (x::int) = abs x"
+lemma gcd_0_left_int [simp]: "gcd 0 (x::int) = abs x"
by (unfold gcd_int_def, auto)
-lemma nat_gcd_red: "gcd (x::nat) y = gcd y (x mod y)"
+lemma gcd_red_nat: "gcd (x::nat) y = gcd y (x mod y)"
by (case_tac "y = 0", auto)
(* weaker, but useful for the simplifier *)
-lemma nat_gcd_non_0: "y ~= (0::nat) \<Longrightarrow> gcd (x::nat) y = gcd y (x mod y)"
+lemma gcd_non_0_nat: "y ~= (0::nat) \<Longrightarrow> gcd (x::nat) y = gcd y (x mod y)"
by simp
-lemma nat_gcd_1 [simp]: "gcd (m::nat) 1 = 1"
+lemma gcd_1_nat [simp]: "gcd (m::nat) 1 = 1"
by simp
-lemma nat_gcd_Suc_0 [simp]: "gcd (m::nat) (Suc 0) = Suc 0"
+lemma gcd_Suc_0 [simp]: "gcd (m::nat) (Suc 0) = Suc 0"
by (simp add: One_nat_def)
-lemma int_gcd_1 [simp]: "gcd (m::int) 1 = 1"
+lemma gcd_1_int [simp]: "gcd (m::int) 1 = 1"
by (simp add: gcd_int_def)
-lemma nat_gcd_idem: "gcd (x::nat) x = x"
+lemma gcd_idem_nat: "gcd (x::nat) x = x"
by simp
-lemma int_gcd_idem: "gcd (x::int) x = abs x"
+lemma gcd_idem_int: "gcd (x::int) x = abs x"
by (auto simp add: gcd_int_def)
declare gcd_nat.simps [simp del]
@@ -279,260 +279,260 @@
conjunctions don't seem provable separately.
*}
-lemma nat_gcd_dvd1 [iff]: "(gcd (m::nat)) n dvd m"
- and nat_gcd_dvd2 [iff]: "(gcd m n) dvd n"
- apply (induct m n rule: nat_gcd_induct)
- apply (simp_all add: nat_gcd_non_0)
+lemma gcd_dvd1_nat [iff]: "(gcd (m::nat)) n dvd m"
+ and gcd_dvd2_nat [iff]: "(gcd m n) dvd n"
+ apply (induct m n rule: gcd_nat_induct)
+ apply (simp_all add: gcd_non_0_nat)
apply (blast dest: dvd_mod_imp_dvd)
done
-lemma int_gcd_dvd1 [iff]: "gcd (x::int) y dvd x"
-by (metis gcd_int_def int_dvd_iff nat_gcd_dvd1)
+lemma gcd_dvd1_int [iff]: "gcd (x::int) y dvd x"
+by (metis gcd_int_def int_dvd_iff gcd_dvd1_nat)
-lemma int_gcd_dvd2 [iff]: "gcd (x::int) y dvd y"
-by (metis gcd_int_def int_dvd_iff nat_gcd_dvd2)
+lemma gcd_dvd2_int [iff]: "gcd (x::int) y dvd y"
+by (metis gcd_int_def int_dvd_iff gcd_dvd2_nat)
lemma dvd_gcd_D1_nat: "k dvd gcd m n \<Longrightarrow> (k::nat) dvd m"
-by(metis nat_gcd_dvd1 dvd_trans)
+by(metis gcd_dvd1_nat dvd_trans)
lemma dvd_gcd_D2_nat: "k dvd gcd m n \<Longrightarrow> (k::nat) dvd n"
-by(metis nat_gcd_dvd2 dvd_trans)
+by(metis gcd_dvd2_nat dvd_trans)
lemma dvd_gcd_D1_int: "i dvd gcd m n \<Longrightarrow> (i::int) dvd m"
-by(metis int_gcd_dvd1 dvd_trans)
+by(metis gcd_dvd1_int dvd_trans)
lemma dvd_gcd_D2_int: "i dvd gcd m n \<Longrightarrow> (i::int) dvd n"
-by(metis int_gcd_dvd2 dvd_trans)
+by(metis gcd_dvd2_int dvd_trans)
-lemma nat_gcd_le1 [simp]: "a \<noteq> 0 \<Longrightarrow> gcd (a::nat) b \<le> a"
+lemma gcd_le1_nat [simp]: "a \<noteq> 0 \<Longrightarrow> gcd (a::nat) b \<le> a"
by (rule dvd_imp_le, auto)
-lemma nat_gcd_le2 [simp]: "b \<noteq> 0 \<Longrightarrow> gcd (a::nat) b \<le> b"
+lemma gcd_le2_nat [simp]: "b \<noteq> 0 \<Longrightarrow> gcd (a::nat) b \<le> b"
by (rule dvd_imp_le, auto)
-lemma int_gcd_le1 [simp]: "a > 0 \<Longrightarrow> gcd (a::int) b \<le> a"
+lemma gcd_le1_int [simp]: "a > 0 \<Longrightarrow> gcd (a::int) b \<le> a"
by (rule zdvd_imp_le, auto)
-lemma int_gcd_le2 [simp]: "b > 0 \<Longrightarrow> gcd (a::int) b \<le> b"
+lemma gcd_le2_int [simp]: "b > 0 \<Longrightarrow> gcd (a::int) b \<le> b"
by (rule zdvd_imp_le, auto)
-lemma nat_gcd_greatest: "(k::nat) dvd m \<Longrightarrow> k dvd n \<Longrightarrow> k dvd gcd m n"
-by (induct m n rule: nat_gcd_induct) (simp_all add: nat_gcd_non_0 dvd_mod)
+lemma gcd_greatest_nat: "(k::nat) dvd m \<Longrightarrow> k dvd n \<Longrightarrow> k dvd gcd m n"
+by (induct m n rule: gcd_nat_induct) (simp_all add: gcd_non_0_nat dvd_mod)
-lemma int_gcd_greatest:
+lemma gcd_greatest_int:
"(k::int) dvd m \<Longrightarrow> k dvd n \<Longrightarrow> k dvd gcd m n"
- apply (subst int_gcd_abs)
+ apply (subst gcd_abs_int)
apply (subst abs_dvd_iff [symmetric])
- apply (rule nat_gcd_greatest [transferred])
+ apply (rule gcd_greatest_nat [transferred])
apply auto
done
-lemma nat_gcd_greatest_iff [iff]: "(k dvd gcd (m::nat) n) =
+lemma gcd_greatest_iff_nat [iff]: "(k dvd gcd (m::nat) n) =
(k dvd m & k dvd n)"
- by (blast intro!: nat_gcd_greatest intro: dvd_trans)
+ by (blast intro!: gcd_greatest_nat intro: dvd_trans)
-lemma int_gcd_greatest_iff: "((k::int) dvd gcd m n) = (k dvd m & k dvd n)"
- by (blast intro!: int_gcd_greatest intro: dvd_trans)
+lemma gcd_greatest_iff_int: "((k::int) dvd gcd m n) = (k dvd m & k dvd n)"
+ by (blast intro!: gcd_greatest_int intro: dvd_trans)
-lemma nat_gcd_zero [simp]: "(gcd (m::nat) n = 0) = (m = 0 & n = 0)"
- by (simp only: dvd_0_left_iff [symmetric] nat_gcd_greatest_iff)
+lemma gcd_zero_nat [simp]: "(gcd (m::nat) n = 0) = (m = 0 & n = 0)"
+ by (simp only: dvd_0_left_iff [symmetric] gcd_greatest_iff_nat)
-lemma int_gcd_zero [simp]: "(gcd (m::int) n = 0) = (m = 0 & n = 0)"
+lemma gcd_zero_int [simp]: "(gcd (m::int) n = 0) = (m = 0 & n = 0)"
by (auto simp add: gcd_int_def)
-lemma nat_gcd_pos [simp]: "(gcd (m::nat) n > 0) = (m ~= 0 | n ~= 0)"
- by (insert nat_gcd_zero [of m n], arith)
+lemma gcd_pos_nat [simp]: "(gcd (m::nat) n > 0) = (m ~= 0 | n ~= 0)"
+ by (insert gcd_zero_nat [of m n], arith)
-lemma int_gcd_pos [simp]: "(gcd (m::int) n > 0) = (m ~= 0 | n ~= 0)"
- by (insert int_gcd_zero [of m n], insert int_gcd_ge_0 [of m n], arith)
+lemma gcd_pos_int [simp]: "(gcd (m::int) n > 0) = (m ~= 0 | n ~= 0)"
+ by (insert gcd_zero_int [of m n], insert gcd_ge_0_int [of m n], arith)
-lemma nat_gcd_commute: "gcd (m::nat) n = gcd n m"
+lemma gcd_commute_nat: "gcd (m::nat) n = gcd n m"
by (rule dvd_anti_sym, auto)
-lemma int_gcd_commute: "gcd (m::int) n = gcd n m"
- by (auto simp add: gcd_int_def nat_gcd_commute)
+lemma gcd_commute_int: "gcd (m::int) n = gcd n m"
+ by (auto simp add: gcd_int_def gcd_commute_nat)
-lemma nat_gcd_assoc: "gcd (gcd (k::nat) m) n = gcd k (gcd m n)"
+lemma gcd_assoc_nat: "gcd (gcd (k::nat) m) n = gcd k (gcd m n)"
apply (rule dvd_anti_sym)
apply (blast intro: dvd_trans)+
done
-lemma int_gcd_assoc: "gcd (gcd (k::int) m) n = gcd k (gcd m n)"
- by (auto simp add: gcd_int_def nat_gcd_assoc)
+lemma gcd_assoc_int: "gcd (gcd (k::int) m) n = gcd k (gcd m n)"
+ by (auto simp add: gcd_int_def gcd_assoc_nat)
-lemmas nat_gcd_left_commute =
- mk_left_commute[of gcd, OF nat_gcd_assoc nat_gcd_commute]
+lemmas gcd_left_commute_nat =
+ mk_left_commute[of gcd, OF gcd_assoc_nat gcd_commute_nat]
-lemmas int_gcd_left_commute =
- mk_left_commute[of gcd, OF int_gcd_assoc int_gcd_commute]
+lemmas gcd_left_commute_int =
+ mk_left_commute[of gcd, OF gcd_assoc_int gcd_commute_int]
-lemmas nat_gcd_ac = nat_gcd_assoc nat_gcd_commute nat_gcd_left_commute
+lemmas gcd_ac_nat = gcd_assoc_nat gcd_commute_nat gcd_left_commute_nat
-- {* gcd is an AC-operator *}
-lemmas int_gcd_ac = int_gcd_assoc int_gcd_commute int_gcd_left_commute
+lemmas gcd_ac_int = gcd_assoc_int gcd_commute_int gcd_left_commute_int
-lemma nat_gcd_unique: "(d::nat) dvd a \<and> d dvd b \<and>
+lemma gcd_unique_nat: "(d::nat) dvd a \<and> d dvd b \<and>
(\<forall>e. e dvd a \<and> e dvd b \<longrightarrow> e dvd d) \<longleftrightarrow> d = gcd a b"
apply auto
apply (rule dvd_anti_sym)
- apply (erule (1) nat_gcd_greatest)
+ apply (erule (1) gcd_greatest_nat)
apply auto
done
-lemma int_gcd_unique: "d >= 0 & (d::int) dvd a \<and> d dvd b \<and>
+lemma gcd_unique_int: "d >= 0 & (d::int) dvd a \<and> d dvd b \<and>
(\<forall>e. e dvd a \<and> e dvd b \<longrightarrow> e dvd d) \<longleftrightarrow> d = gcd a b"
apply (case_tac "d = 0")
apply force
apply (rule iffI)
apply (rule zdvd_anti_sym)
apply arith
- apply (subst int_gcd_pos)
+ apply (subst gcd_pos_int)
apply clarsimp
apply (drule_tac x = "d + 1" in spec)
apply (frule zdvd_imp_le)
- apply (auto intro: int_gcd_greatest)
+ apply (auto intro: gcd_greatest_int)
done
lemma gcd_proj1_if_dvd_nat [simp]: "(x::nat) dvd y \<Longrightarrow> gcd x y = x"
-by (metis dvd.eq_iff nat_gcd_unique)
+by (metis dvd.eq_iff gcd_unique_nat)
lemma gcd_proj2_if_dvd_nat [simp]: "(y::nat) dvd x \<Longrightarrow> gcd x y = y"
-by (metis dvd.eq_iff nat_gcd_unique)
+by (metis dvd.eq_iff gcd_unique_nat)
lemma gcd_proj1_if_dvd_int[simp]: "x dvd y \<Longrightarrow> gcd (x::int) y = abs x"
-by (metis abs_dvd_iff abs_eq_0 int_gcd_0_left int_gcd_abs int_gcd_unique)
+by (metis abs_dvd_iff abs_eq_0 gcd_0_left_int gcd_abs_int gcd_unique_int)
lemma gcd_proj2_if_dvd_int[simp]: "y dvd x \<Longrightarrow> gcd (x::int) y = abs y"
-by (metis gcd_proj1_if_dvd_int int_gcd_commute)
+by (metis gcd_proj1_if_dvd_int gcd_commute_int)
text {*
\medskip Multiplication laws
*}
-lemma nat_gcd_mult_distrib: "(k::nat) * gcd m n = gcd (k * m) (k * n)"
+lemma gcd_mult_distrib_nat: "(k::nat) * gcd m n = gcd (k * m) (k * n)"
-- {* \cite[page 27]{davenport92} *}
- apply (induct m n rule: nat_gcd_induct)
+ apply (induct m n rule: gcd_nat_induct)
apply simp
apply (case_tac "k = 0")
- apply (simp_all add: mod_geq nat_gcd_non_0 mod_mult_distrib2)
+ apply (simp_all add: mod_geq gcd_non_0_nat mod_mult_distrib2)
done
-lemma int_gcd_mult_distrib: "abs (k::int) * gcd m n = gcd (k * m) (k * n)"
- apply (subst (1 2) int_gcd_abs)
+lemma gcd_mult_distrib_int: "abs (k::int) * gcd m n = gcd (k * m) (k * n)"
+ apply (subst (1 2) gcd_abs_int)
apply (subst (1 2) abs_mult)
- apply (rule nat_gcd_mult_distrib [transferred])
+ apply (rule gcd_mult_distrib_nat [transferred])
apply auto
done
-lemma nat_coprime_dvd_mult: "coprime (k::nat) n \<Longrightarrow> k dvd m * n \<Longrightarrow> k dvd m"
- apply (insert nat_gcd_mult_distrib [of m k n])
+lemma coprime_dvd_mult_nat: "coprime (k::nat) n \<Longrightarrow> k dvd m * n \<Longrightarrow> k dvd m"
+ apply (insert gcd_mult_distrib_nat [of m k n])
apply simp
apply (erule_tac t = m in ssubst)
apply simp
done
-lemma int_coprime_dvd_mult:
+lemma coprime_dvd_mult_int:
"coprime (k::int) n \<Longrightarrow> k dvd m * n \<Longrightarrow> k dvd m"
apply (subst abs_dvd_iff [symmetric])
apply (subst dvd_abs_iff [symmetric])
-apply (subst (asm) int_gcd_abs)
-apply (rule nat_coprime_dvd_mult [transferred])
+apply (subst (asm) gcd_abs_int)
+apply (rule coprime_dvd_mult_nat [transferred])
prefer 4 apply assumption
apply auto
apply (subst abs_mult [symmetric], auto)
done
-lemma nat_coprime_dvd_mult_iff: "coprime (k::nat) n \<Longrightarrow>
+lemma coprime_dvd_mult_iff_nat: "coprime (k::nat) n \<Longrightarrow>
(k dvd m * n) = (k dvd m)"
- by (auto intro: nat_coprime_dvd_mult)
+ by (auto intro: coprime_dvd_mult_nat)
-lemma int_coprime_dvd_mult_iff: "coprime (k::int) n \<Longrightarrow>
+lemma coprime_dvd_mult_iff_int: "coprime (k::int) n \<Longrightarrow>
(k dvd m * n) = (k dvd m)"
- by (auto intro: int_coprime_dvd_mult)
+ by (auto intro: coprime_dvd_mult_int)
-lemma nat_gcd_mult_cancel: "coprime k n \<Longrightarrow> gcd ((k::nat) * m) n = gcd m n"
+lemma gcd_mult_cancel_nat: "coprime k n \<Longrightarrow> gcd ((k::nat) * m) n = gcd m n"
apply (rule dvd_anti_sym)
- apply (rule nat_gcd_greatest)
- apply (rule_tac n = k in nat_coprime_dvd_mult)
- apply (simp add: nat_gcd_assoc)
- apply (simp add: nat_gcd_commute)
+ apply (rule gcd_greatest_nat)
+ apply (rule_tac n = k in coprime_dvd_mult_nat)
+ apply (simp add: gcd_assoc_nat)
+ apply (simp add: gcd_commute_nat)
apply (simp_all add: mult_commute)
done
-lemma int_gcd_mult_cancel:
+lemma gcd_mult_cancel_int:
"coprime (k::int) n \<Longrightarrow> gcd (k * m) n = gcd m n"
-apply (subst (1 2) int_gcd_abs)
+apply (subst (1 2) gcd_abs_int)
apply (subst abs_mult)
-apply (rule nat_gcd_mult_cancel [transferred], auto)
+apply (rule gcd_mult_cancel_nat [transferred], auto)
done
text {* \medskip Addition laws *}
-lemma nat_gcd_add1 [simp]: "gcd ((m::nat) + n) n = gcd m n"
+lemma gcd_add1_nat [simp]: "gcd ((m::nat) + n) n = gcd m n"
apply (case_tac "n = 0")
- apply (simp_all add: nat_gcd_non_0)
+ apply (simp_all add: gcd_non_0_nat)
done
-lemma nat_gcd_add2 [simp]: "gcd (m::nat) (m + n) = gcd m n"
- apply (subst (1 2) nat_gcd_commute)
+lemma gcd_add2_nat [simp]: "gcd (m::nat) (m + n) = gcd m n"
+ apply (subst (1 2) gcd_commute_nat)
apply (subst add_commute)
apply simp
done
(* to do: add the other variations? *)
-lemma nat_gcd_diff1: "(m::nat) >= n \<Longrightarrow> gcd (m - n) n = gcd m n"
- by (subst nat_gcd_add1 [symmetric], auto)
+lemma gcd_diff1_nat: "(m::nat) >= n \<Longrightarrow> gcd (m - n) n = gcd m n"
+ by (subst gcd_add1_nat [symmetric], auto)
-lemma nat_gcd_diff2: "(n::nat) >= m \<Longrightarrow> gcd (n - m) n = gcd m n"
- apply (subst nat_gcd_commute)
- apply (subst nat_gcd_diff1 [symmetric])
+lemma gcd_diff2_nat: "(n::nat) >= m \<Longrightarrow> gcd (n - m) n = gcd m n"
+ apply (subst gcd_commute_nat)
+ apply (subst gcd_diff1_nat [symmetric])
apply auto
- apply (subst nat_gcd_commute)
- apply (subst nat_gcd_diff1)
+ apply (subst gcd_commute_nat)
+ apply (subst gcd_diff1_nat)
apply assumption
- apply (rule nat_gcd_commute)
+ apply (rule gcd_commute_nat)
done
-lemma int_gcd_non_0: "(y::int) > 0 \<Longrightarrow> gcd x y = gcd y (x mod y)"
+lemma gcd_non_0_int: "(y::int) > 0 \<Longrightarrow> gcd x y = gcd y (x mod y)"
apply (frule_tac b = y and a = x in pos_mod_sign)
apply (simp del: pos_mod_sign add: gcd_int_def abs_if nat_mod_distrib)
- apply (auto simp add: nat_gcd_non_0 nat_mod_distrib [symmetric]
+ apply (auto simp add: gcd_non_0_nat nat_mod_distrib [symmetric]
zmod_zminus1_eq_if)
apply (frule_tac a = x in pos_mod_bound)
- apply (subst (1 2) nat_gcd_commute)
- apply (simp del: pos_mod_bound add: nat_diff_distrib nat_gcd_diff2
+ apply (subst (1 2) gcd_commute_nat)
+ apply (simp del: pos_mod_bound add: nat_diff_distrib gcd_diff2_nat
nat_le_eq_zle)
done
-lemma int_gcd_red: "gcd (x::int) y = gcd y (x mod y)"
+lemma gcd_red_int: "gcd (x::int) y = gcd y (x mod y)"
apply (case_tac "y = 0")
apply force
apply (case_tac "y > 0")
- apply (subst int_gcd_non_0, auto)
- apply (insert int_gcd_non_0 [of "-y" "-x"])
- apply (auto simp add: int_gcd_neg1 int_gcd_neg2)
+ apply (subst gcd_non_0_int, auto)
+ apply (insert gcd_non_0_int [of "-y" "-x"])
+ apply (auto simp add: gcd_neg1_int gcd_neg2_int)
done
-lemma int_gcd_add1 [simp]: "gcd ((m::int) + n) n = gcd m n"
-by (metis int_gcd_red mod_add_self1 zadd_commute)
+lemma gcd_add1_int [simp]: "gcd ((m::int) + n) n = gcd m n"
+by (metis gcd_red_int mod_add_self1 zadd_commute)
-lemma int_gcd_add2 [simp]: "gcd m ((m::int) + n) = gcd m n"
-by (metis int_gcd_add1 int_gcd_commute zadd_commute)
+lemma gcd_add2_int [simp]: "gcd m ((m::int) + n) = gcd m n"
+by (metis gcd_add1_int gcd_commute_int zadd_commute)
-lemma nat_gcd_add_mult: "gcd (m::nat) (k * m + n) = gcd m n"
-by (metis mod_mult_self3 nat_gcd_commute nat_gcd_red)
+lemma gcd_add_mult_nat: "gcd (m::nat) (k * m + n) = gcd m n"
+by (metis mod_mult_self3 gcd_commute_nat gcd_red_nat)
-lemma int_gcd_add_mult: "gcd (m::int) (k * m + n) = gcd m n"
-by (metis int_gcd_commute int_gcd_red mod_mult_self1 zadd_commute)
+lemma gcd_add_mult_int: "gcd (m::int) (k * m + n) = gcd m n"
+by (metis gcd_commute_int gcd_red_int mod_mult_self1 zadd_commute)
(* to do: differences, and all variations of addition rules
as simplification rules for nat and int *)
(* FIXME remove iff *)
-lemma nat_gcd_dvd_prod [iff]: "gcd (m::nat) n dvd k * n"
+lemma gcd_dvd_prod_nat [iff]: "gcd (m::nat) n dvd k * n"
using mult_dvd_mono [of 1] by auto
(* to do: add the three variations of these, and for ints? *)
@@ -559,7 +559,7 @@
apply(rule Max_eqI[THEN sym])
apply (metis dvd.eq_iff finite_Collect_conjI finite_divisors_nat)
apply simp
- apply(metis Suc_diff_1 Suc_neq_Zero dvd_imp_le nat_gcd_greatest_iff nat_gcd_pos)
+ apply(metis Suc_diff_1 Suc_neq_Zero dvd_imp_le gcd_greatest_iff_nat gcd_pos_nat)
apply simp
done
@@ -568,14 +568,14 @@
apply(rule Max_eqI[THEN sym])
apply (metis dvd.eq_iff finite_Collect_conjI finite_divisors_int)
apply simp
- apply (metis int_gcd_greatest_iff int_gcd_pos zdvd_imp_le)
+ apply (metis gcd_greatest_iff_int gcd_pos_int zdvd_imp_le)
apply simp
done
subsection {* Coprimality *}
-lemma nat_div_gcd_coprime:
+lemma div_gcd_coprime_nat:
assumes nz: "(a::nat) \<noteq> 0 \<or> b \<noteq> 0"
shows "coprime (a div gcd a b) (b div gcd a b)"
proof -
@@ -593,34 +593,34 @@
then have dvdgg':"?g * ?g' dvd a" "?g* ?g' dvd b"
by (auto simp add: dvd_mult_div_cancel [OF dvdg(1)]
dvd_mult_div_cancel [OF dvdg(2)] dvd_def)
- have "?g \<noteq> 0" using nz by (simp add: nat_gcd_zero)
+ have "?g \<noteq> 0" using nz by (simp add: gcd_zero_nat)
then have gp: "?g > 0" by arith
- from nat_gcd_greatest [OF dvdgg'] have "?g * ?g' dvd ?g" .
+ from gcd_greatest_nat [OF dvdgg'] have "?g * ?g' dvd ?g" .
with dvd_mult_cancel1 [OF gp] show "?g' = 1" by simp
qed
-lemma int_div_gcd_coprime:
+lemma div_gcd_coprime_int:
assumes nz: "(a::int) \<noteq> 0 \<or> b \<noteq> 0"
shows "coprime (a div gcd a b) (b div gcd a b)"
-apply (subst (1 2 3) int_gcd_abs)
+apply (subst (1 2 3) gcd_abs_int)
apply (subst (1 2) abs_div)
apply simp
apply simp
apply(subst (1 2) abs_gcd_int)
-apply (rule nat_div_gcd_coprime [transferred])
-using nz apply (auto simp add: int_gcd_abs [symmetric])
+apply (rule div_gcd_coprime_nat [transferred])
+using nz apply (auto simp add: gcd_abs_int [symmetric])
done
-lemma nat_coprime: "coprime (a::nat) b \<longleftrightarrow> (\<forall>d. d dvd a \<and> d dvd b \<longleftrightarrow> d = 1)"
- using nat_gcd_unique[of 1 a b, simplified] by auto
+lemma coprime_nat: "coprime (a::nat) b \<longleftrightarrow> (\<forall>d. d dvd a \<and> d dvd b \<longleftrightarrow> d = 1)"
+ using gcd_unique_nat[of 1 a b, simplified] by auto
-lemma nat_coprime_Suc_0:
+lemma coprime_Suc_0_nat:
"coprime (a::nat) b \<longleftrightarrow> (\<forall>d. d dvd a \<and> d dvd b \<longleftrightarrow> d = Suc 0)"
- using nat_coprime by (simp add: One_nat_def)
+ using coprime_nat by (simp add: One_nat_def)
-lemma int_coprime: "coprime (a::int) b \<longleftrightarrow>
+lemma coprime_int: "coprime (a::int) b \<longleftrightarrow>
(\<forall>d. d >= 0 \<and> d dvd a \<and> d dvd b \<longleftrightarrow> d = 1)"
- using int_gcd_unique [of 1 a b]
+ using gcd_unique_int [of 1 a b]
apply clarsimp
apply (erule subst)
apply (rule iffI)
@@ -631,7 +631,7 @@
apply force
done
-lemma nat_gcd_coprime:
+lemma gcd_coprime_nat:
assumes z: "gcd (a::nat) b \<noteq> 0" and a: "a = a' * gcd a b" and
b: "b = b' * gcd a b"
shows "coprime a' b'"
@@ -640,7 +640,7 @@
apply (erule ssubst)
apply (subgoal_tac "b' = b div gcd a b")
apply (erule ssubst)
- apply (rule nat_div_gcd_coprime)
+ apply (rule div_gcd_coprime_nat)
using prems
apply force
apply (subst (1) b)
@@ -649,7 +649,7 @@
using z apply force
done
-lemma int_gcd_coprime:
+lemma gcd_coprime_int:
assumes z: "gcd (a::int) b \<noteq> 0" and a: "a = a' * gcd a b" and
b: "b = b' * gcd a b"
shows "coprime a' b'"
@@ -658,7 +658,7 @@
apply (erule ssubst)
apply (subgoal_tac "b' = b div gcd a b")
apply (erule ssubst)
- apply (rule int_div_gcd_coprime)
+ apply (rule div_gcd_coprime_int)
using prems
apply force
apply (subst (1) b)
@@ -667,117 +667,117 @@
using z apply force
done
-lemma nat_coprime_mult: assumes da: "coprime (d::nat) a" and db: "coprime d b"
+lemma coprime_mult_nat: assumes da: "coprime (d::nat) a" and db: "coprime d b"
shows "coprime d (a * b)"
- apply (subst nat_gcd_commute)
- using da apply (subst nat_gcd_mult_cancel)
- apply (subst nat_gcd_commute, assumption)
- apply (subst nat_gcd_commute, rule db)
+ apply (subst gcd_commute_nat)
+ using da apply (subst gcd_mult_cancel_nat)
+ apply (subst gcd_commute_nat, assumption)
+ apply (subst gcd_commute_nat, rule db)
done
-lemma int_coprime_mult: assumes da: "coprime (d::int) a" and db: "coprime d b"
+lemma coprime_mult_int: assumes da: "coprime (d::int) a" and db: "coprime d b"
shows "coprime d (a * b)"
- apply (subst int_gcd_commute)
- using da apply (subst int_gcd_mult_cancel)
- apply (subst int_gcd_commute, assumption)
- apply (subst int_gcd_commute, rule db)
+ apply (subst gcd_commute_int)
+ using da apply (subst gcd_mult_cancel_int)
+ apply (subst gcd_commute_int, assumption)
+ apply (subst gcd_commute_int, rule db)
done
-lemma nat_coprime_lmult:
+lemma coprime_lmult_nat:
assumes dab: "coprime (d::nat) (a * b)" shows "coprime d a"
proof -
have "gcd d a dvd gcd d (a * b)"
- by (rule nat_gcd_greatest, auto)
+ by (rule gcd_greatest_nat, auto)
with dab show ?thesis
by auto
qed
-lemma int_coprime_lmult:
+lemma coprime_lmult_int:
assumes "coprime (d::int) (a * b)" shows "coprime d a"
proof -
have "gcd d a dvd gcd d (a * b)"
- by (rule int_gcd_greatest, auto)
+ by (rule gcd_greatest_int, auto)
with assms show ?thesis
by auto
qed
-lemma nat_coprime_rmult:
+lemma coprime_rmult_nat:
assumes "coprime (d::nat) (a * b)" shows "coprime d b"
proof -
have "gcd d b dvd gcd d (a * b)"
- by (rule nat_gcd_greatest, auto intro: dvd_mult)
+ by (rule gcd_greatest_nat, auto intro: dvd_mult)
with assms show ?thesis
by auto
qed
-lemma int_coprime_rmult:
+lemma coprime_rmult_int:
assumes dab: "coprime (d::int) (a * b)" shows "coprime d b"
proof -
have "gcd d b dvd gcd d (a * b)"
- by (rule int_gcd_greatest, auto intro: dvd_mult)
+ by (rule gcd_greatest_int, auto intro: dvd_mult)
with dab show ?thesis
by auto
qed
-lemma nat_coprime_mul_eq: "coprime (d::nat) (a * b) \<longleftrightarrow>
+lemma coprime_mul_eq_nat: "coprime (d::nat) (a * b) \<longleftrightarrow>
coprime d a \<and> coprime d b"
- using nat_coprime_rmult[of d a b] nat_coprime_lmult[of d a b]
- nat_coprime_mult[of d a b]
+ using coprime_rmult_nat[of d a b] coprime_lmult_nat[of d a b]
+ coprime_mult_nat[of d a b]
by blast
-lemma int_coprime_mul_eq: "coprime (d::int) (a * b) \<longleftrightarrow>
+lemma coprime_mul_eq_int: "coprime (d::int) (a * b) \<longleftrightarrow>
coprime d a \<and> coprime d b"
- using int_coprime_rmult[of d a b] int_coprime_lmult[of d a b]
- int_coprime_mult[of d a b]
+ using coprime_rmult_int[of d a b] coprime_lmult_int[of d a b]
+ coprime_mult_int[of d a b]
by blast
-lemma nat_gcd_coprime_exists:
+lemma gcd_coprime_exists_nat:
assumes nz: "gcd (a::nat) b \<noteq> 0"
shows "\<exists>a' b'. a = a' * gcd a b \<and> b = b' * gcd a b \<and> coprime a' b'"
apply (rule_tac x = "a div gcd a b" in exI)
apply (rule_tac x = "b div gcd a b" in exI)
- using nz apply (auto simp add: nat_div_gcd_coprime dvd_div_mult)
+ using nz apply (auto simp add: div_gcd_coprime_nat dvd_div_mult)
done
-lemma int_gcd_coprime_exists:
+lemma gcd_coprime_exists_int:
assumes nz: "gcd (a::int) b \<noteq> 0"
shows "\<exists>a' b'. a = a' * gcd a b \<and> b = b' * gcd a b \<and> coprime a' b'"
apply (rule_tac x = "a div gcd a b" in exI)
apply (rule_tac x = "b div gcd a b" in exI)
- using nz apply (auto simp add: int_div_gcd_coprime dvd_div_mult_self)
+ using nz apply (auto simp add: div_gcd_coprime_int dvd_div_mult_self)
done
-lemma nat_coprime_exp: "coprime (d::nat) a \<Longrightarrow> coprime d (a^n)"
- by (induct n, simp_all add: nat_coprime_mult)
+lemma coprime_exp_nat: "coprime (d::nat) a \<Longrightarrow> coprime d (a^n)"
+ by (induct n, simp_all add: coprime_mult_nat)
-lemma int_coprime_exp: "coprime (d::int) a \<Longrightarrow> coprime d (a^n)"
- by (induct n, simp_all add: int_coprime_mult)
+lemma coprime_exp_int: "coprime (d::int) a \<Longrightarrow> coprime d (a^n)"
+ by (induct n, simp_all add: coprime_mult_int)
-lemma nat_coprime_exp2 [intro]: "coprime (a::nat) b \<Longrightarrow> coprime (a^n) (b^m)"
- apply (rule nat_coprime_exp)
- apply (subst nat_gcd_commute)
- apply (rule nat_coprime_exp)
- apply (subst nat_gcd_commute, assumption)
+lemma coprime_exp2_nat [intro]: "coprime (a::nat) b \<Longrightarrow> coprime (a^n) (b^m)"
+ apply (rule coprime_exp_nat)
+ apply (subst gcd_commute_nat)
+ apply (rule coprime_exp_nat)
+ apply (subst gcd_commute_nat, assumption)
done
-lemma int_coprime_exp2 [intro]: "coprime (a::int) b \<Longrightarrow> coprime (a^n) (b^m)"
- apply (rule int_coprime_exp)
- apply (subst int_gcd_commute)
- apply (rule int_coprime_exp)
- apply (subst int_gcd_commute, assumption)
+lemma coprime_exp2_int [intro]: "coprime (a::int) b \<Longrightarrow> coprime (a^n) (b^m)"
+ apply (rule coprime_exp_int)
+ apply (subst gcd_commute_int)
+ apply (rule coprime_exp_int)
+ apply (subst gcd_commute_int, assumption)
done
-lemma nat_gcd_exp: "gcd ((a::nat)^n) (b^n) = (gcd a b)^n"
+lemma gcd_exp_nat: "gcd ((a::nat)^n) (b^n) = (gcd a b)^n"
proof (cases)
assume "a = 0 & b = 0"
thus ?thesis by simp
next assume "~(a = 0 & b = 0)"
hence "coprime ((a div gcd a b)^n) ((b div gcd a b)^n)"
- by (auto simp:nat_div_gcd_coprime)
+ by (auto simp:div_gcd_coprime_nat)
hence "gcd ((a div gcd a b)^n * (gcd a b)^n)
((b div gcd a b)^n * (gcd a b)^n) = (gcd a b)^n"
apply (subst (1 2) mult_commute)
- apply (subst nat_gcd_mult_distrib [symmetric])
+ apply (subst gcd_mult_distrib_nat [symmetric])
apply simp
done
also have "(a div gcd a b)^n * (gcd a b)^n = a^n"
@@ -797,29 +797,29 @@
finally show ?thesis .
qed
-lemma int_gcd_exp: "gcd ((a::int)^n) (b^n) = (gcd a b)^n"
- apply (subst (1 2) int_gcd_abs)
+lemma gcd_exp_int: "gcd ((a::int)^n) (b^n) = (gcd a b)^n"
+ apply (subst (1 2) gcd_abs_int)
apply (subst (1 2) power_abs)
- apply (rule nat_gcd_exp [where n = n, transferred])
+ apply (rule gcd_exp_nat [where n = n, transferred])
apply auto
done
-lemma nat_coprime_divprod: "(d::nat) dvd a * b \<Longrightarrow> coprime d a \<Longrightarrow> d dvd b"
- using nat_coprime_dvd_mult_iff[of d a b]
+lemma coprime_divprod_nat: "(d::nat) dvd a * b \<Longrightarrow> coprime d a \<Longrightarrow> d dvd b"
+ using coprime_dvd_mult_iff_nat[of d a b]
by (auto simp add: mult_commute)
-lemma int_coprime_divprod: "(d::int) dvd a * b \<Longrightarrow> coprime d a \<Longrightarrow> d dvd b"
- using int_coprime_dvd_mult_iff[of d a b]
+lemma coprime_divprod_int: "(d::int) dvd a * b \<Longrightarrow> coprime d a \<Longrightarrow> d dvd b"
+ using coprime_dvd_mult_iff_int[of d a b]
by (auto simp add: mult_commute)
-lemma nat_division_decomp: assumes dc: "(a::nat) dvd b * c"
+lemma division_decomp_nat: assumes dc: "(a::nat) dvd b * c"
shows "\<exists>b' c'. a = b' * c' \<and> b' dvd b \<and> c' dvd c"
proof-
let ?g = "gcd a b"
{assume "?g = 0" with dc have ?thesis by auto}
moreover
{assume z: "?g \<noteq> 0"
- from nat_gcd_coprime_exists[OF z]
+ from gcd_coprime_exists_nat[OF z]
obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
by blast
have thb: "?g dvd b" by auto
@@ -828,21 +828,21 @@
from dc ab'(1,2) have "a'*?g dvd (b'*?g) *c" by auto
hence "?g*a' dvd ?g * (b' * c)" by (simp add: mult_assoc)
with z have th_1: "a' dvd b' * c" by auto
- from nat_coprime_dvd_mult[OF ab'(3)] th_1
+ from coprime_dvd_mult_nat[OF ab'(3)] th_1
have thc: "a' dvd c" by (subst (asm) mult_commute, blast)
from ab' have "a = ?g*a'" by algebra
with thb thc have ?thesis by blast }
ultimately show ?thesis by blast
qed
-lemma int_division_decomp: assumes dc: "(a::int) dvd b * c"
+lemma division_decomp_int: assumes dc: "(a::int) dvd b * c"
shows "\<exists>b' c'. a = b' * c' \<and> b' dvd b \<and> c' dvd c"
proof-
let ?g = "gcd a b"
{assume "?g = 0" with dc have ?thesis by auto}
moreover
{assume z: "?g \<noteq> 0"
- from int_gcd_coprime_exists[OF z]
+ from gcd_coprime_exists_int[OF z]
obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
by blast
have thb: "?g dvd b" by auto
@@ -852,14 +852,14 @@
from dc ab'(1,2) have "a'*?g dvd (b'*?g) *c" by auto
hence "?g*a' dvd ?g * (b' * c)" by (simp add: mult_assoc)
with z have th_1: "a' dvd b' * c" by auto
- from int_coprime_dvd_mult[OF ab'(3)] th_1
+ from coprime_dvd_mult_int[OF ab'(3)] th_1
have thc: "a' dvd c" by (subst (asm) mult_commute, blast)
from ab' have "a = ?g*a'" by algebra
with thb thc have ?thesis by blast }
ultimately show ?thesis by blast
qed
-lemma nat_pow_divides_pow:
+lemma pow_divides_pow_nat:
assumes ab: "(a::nat) ^ n dvd b ^n" and n:"n \<noteq> 0"
shows "a dvd b"
proof-
@@ -869,7 +869,7 @@
moreover
{assume z: "?g \<noteq> 0"
hence zn: "?g ^ n \<noteq> 0" using n by (simp add: neq0_conv)
- from nat_gcd_coprime_exists[OF z]
+ from gcd_coprime_exists_nat[OF z]
obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
by blast
from ab have "(a' * ?g) ^ n dvd (b' * ?g)^n"
@@ -880,14 +880,14 @@
have "a' dvd a'^n" by (simp add: m)
with th0 have "a' dvd b'^n" using dvd_trans[of a' "a'^n" "b'^n"] by simp
hence th1: "a' dvd b'^m * b'" by (simp add: m mult_commute)
- from nat_coprime_dvd_mult[OF nat_coprime_exp [OF ab'(3), of m]] th1
+ from coprime_dvd_mult_nat[OF coprime_exp_nat [OF ab'(3), of m]] th1
have "a' dvd b'" by (subst (asm) mult_commute, blast)
hence "a'*?g dvd b'*?g" by simp
with ab'(1,2) have ?thesis by simp }
ultimately show ?thesis by blast
qed
-lemma int_pow_divides_pow:
+lemma pow_divides_pow_int:
assumes ab: "(a::int) ^ n dvd b ^n" and n:"n \<noteq> 0"
shows "a dvd b"
proof-
@@ -897,7 +897,7 @@
moreover
{assume z: "?g \<noteq> 0"
hence zn: "?g ^ n \<noteq> 0" using n by (simp add: neq0_conv)
- from int_gcd_coprime_exists[OF z]
+ from gcd_coprime_exists_int[OF z]
obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
by blast
from ab have "(a' * ?g) ^ n dvd (b' * ?g)^n"
@@ -909,7 +909,7 @@
with th0 have "a' dvd b'^n"
using dvd_trans[of a' "a'^n" "b'^n"] by simp
hence th1: "a' dvd b'^m * b'" by (simp add: m mult_commute)
- from int_coprime_dvd_mult[OF int_coprime_exp [OF ab'(3), of m]] th1
+ from coprime_dvd_mult_int[OF coprime_exp_int [OF ab'(3), of m]] th1
have "a' dvd b'" by (subst (asm) mult_commute, blast)
hence "a'*?g dvd b'*?g" by simp
with ab'(1,2) have ?thesis by simp }
@@ -917,76 +917,76 @@
qed
(* FIXME move to Divides(?) *)
-lemma nat_pow_divides_eq [simp]: "n ~= 0 \<Longrightarrow> ((a::nat)^n dvd b^n) = (a dvd b)"
- by (auto intro: nat_pow_divides_pow dvd_power_same)
+lemma pow_divides_eq_nat [simp]: "n ~= 0 \<Longrightarrow> ((a::nat)^n dvd b^n) = (a dvd b)"
+ by (auto intro: pow_divides_pow_nat dvd_power_same)
-lemma int_pow_divides_eq [simp]: "n ~= 0 \<Longrightarrow> ((a::int)^n dvd b^n) = (a dvd b)"
- by (auto intro: int_pow_divides_pow dvd_power_same)
+lemma pow_divides_eq_int [simp]: "n ~= 0 \<Longrightarrow> ((a::int)^n dvd b^n) = (a dvd b)"
+ by (auto intro: pow_divides_pow_int dvd_power_same)
-lemma nat_divides_mult:
+lemma divides_mult_nat:
assumes mr: "(m::nat) dvd r" and nr: "n dvd r" and mn:"coprime m n"
shows "m * n dvd r"
proof-
from mr nr obtain m' n' where m': "r = m*m'" and n': "r = n*n'"
unfolding dvd_def by blast
from mr n' have "m dvd n'*n" by (simp add: mult_commute)
- hence "m dvd n'" using nat_coprime_dvd_mult_iff[OF mn] by simp
+ hence "m dvd n'" using coprime_dvd_mult_iff_nat[OF mn] by simp
then obtain k where k: "n' = m*k" unfolding dvd_def by blast
from n' k show ?thesis unfolding dvd_def by auto
qed
-lemma int_divides_mult:
+lemma divides_mult_int:
assumes mr: "(m::int) dvd r" and nr: "n dvd r" and mn:"coprime m n"
shows "m * n dvd r"
proof-
from mr nr obtain m' n' where m': "r = m*m'" and n': "r = n*n'"
unfolding dvd_def by blast
from mr n' have "m dvd n'*n" by (simp add: mult_commute)
- hence "m dvd n'" using int_coprime_dvd_mult_iff[OF mn] by simp
+ hence "m dvd n'" using coprime_dvd_mult_iff_int[OF mn] by simp
then obtain k where k: "n' = m*k" unfolding dvd_def by blast
from n' k show ?thesis unfolding dvd_def by auto
qed
-lemma nat_coprime_plus_one [simp]: "coprime ((n::nat) + 1) n"
+lemma coprime_plus_one_nat [simp]: "coprime ((n::nat) + 1) n"
apply (subgoal_tac "gcd (n + 1) n dvd (n + 1 - n)")
apply force
- apply (rule nat_dvd_diff)
+ apply (rule dvd_diff_nat)
apply auto
done
-lemma nat_coprime_Suc [simp]: "coprime (Suc n) n"
- using nat_coprime_plus_one by (simp add: One_nat_def)
+lemma coprime_Suc_nat [simp]: "coprime (Suc n) n"
+ using coprime_plus_one_nat by (simp add: One_nat_def)
-lemma int_coprime_plus_one [simp]: "coprime ((n::int) + 1) n"
+lemma coprime_plus_one_int [simp]: "coprime ((n::int) + 1) n"
apply (subgoal_tac "gcd (n + 1) n dvd (n + 1 - n)")
apply force
apply (rule dvd_diff)
apply auto
done
-lemma nat_coprime_minus_one: "(n::nat) \<noteq> 0 \<Longrightarrow> coprime (n - 1) n"
- using nat_coprime_plus_one [of "n - 1"]
- nat_gcd_commute [of "n - 1" n] by auto
+lemma coprime_minus_one_nat: "(n::nat) \<noteq> 0 \<Longrightarrow> coprime (n - 1) n"
+ using coprime_plus_one_nat [of "n - 1"]
+ gcd_commute_nat [of "n - 1" n] by auto
-lemma int_coprime_minus_one: "coprime ((n::int) - 1) n"
- using int_coprime_plus_one [of "n - 1"]
- int_gcd_commute [of "n - 1" n] by auto
+lemma coprime_minus_one_int: "coprime ((n::int) - 1) n"
+ using coprime_plus_one_int [of "n - 1"]
+ gcd_commute_int [of "n - 1" n] by auto
-lemma nat_setprod_coprime [rule_format]:
+lemma setprod_coprime_nat [rule_format]:
"(ALL i: A. coprime (f i) (x::nat)) --> coprime (PROD i:A. f i) x"
apply (case_tac "finite A")
apply (induct set: finite)
- apply (auto simp add: nat_gcd_mult_cancel)
+ apply (auto simp add: gcd_mult_cancel_nat)
done
-lemma int_setprod_coprime [rule_format]:
+lemma setprod_coprime_int [rule_format]:
"(ALL i: A. coprime (f i) (x::int)) --> coprime (PROD i:A. f i) x"
apply (case_tac "finite A")
apply (induct set: finite)
- apply (auto simp add: int_gcd_mult_cancel)
+ apply (auto simp add: gcd_mult_cancel_int)
done
-lemma nat_prime_odd: "prime (p::nat) \<Longrightarrow> p > 2 \<Longrightarrow> odd p"
+lemma prime_odd_nat: "prime (p::nat) \<Longrightarrow> p > 2 \<Longrightarrow> odd p"
unfolding prime_nat_def
apply (subst even_mult_two_ex)
apply clarify
@@ -994,41 +994,41 @@
apply auto
done
-lemma int_prime_odd: "prime (p::int) \<Longrightarrow> p > 2 \<Longrightarrow> odd p"
+lemma prime_odd_int: "prime (p::int) \<Longrightarrow> p > 2 \<Longrightarrow> odd p"
unfolding prime_int_def
- apply (frule nat_prime_odd)
+ apply (frule prime_odd_nat)
apply (auto simp add: even_nat_def)
done
-lemma nat_coprime_common_divisor: "coprime (a::nat) b \<Longrightarrow> x dvd a \<Longrightarrow>
+lemma coprime_common_divisor_nat: "coprime (a::nat) b \<Longrightarrow> x dvd a \<Longrightarrow>
x dvd b \<Longrightarrow> x = 1"
apply (subgoal_tac "x dvd gcd a b")
apply simp
- apply (erule (1) nat_gcd_greatest)
+ apply (erule (1) gcd_greatest_nat)
done
-lemma int_coprime_common_divisor: "coprime (a::int) b \<Longrightarrow> x dvd a \<Longrightarrow>
+lemma coprime_common_divisor_int: "coprime (a::int) b \<Longrightarrow> x dvd a \<Longrightarrow>
x dvd b \<Longrightarrow> abs x = 1"
apply (subgoal_tac "x dvd gcd a b")
apply simp
- apply (erule (1) int_gcd_greatest)
+ apply (erule (1) gcd_greatest_int)
done
-lemma nat_coprime_divisors: "(d::int) dvd a \<Longrightarrow> e dvd b \<Longrightarrow> coprime a b \<Longrightarrow>
+lemma coprime_divisors_nat: "(d::int) dvd a \<Longrightarrow> e dvd b \<Longrightarrow> coprime a b \<Longrightarrow>
coprime d e"
apply (auto simp add: dvd_def)
- apply (frule int_coprime_lmult)
- apply (subst int_gcd_commute)
- apply (subst (asm) (2) int_gcd_commute)
- apply (erule int_coprime_lmult)
+ apply (frule coprime_lmult_int)
+ apply (subst gcd_commute_int)
+ apply (subst (asm) (2) gcd_commute_int)
+ apply (erule coprime_lmult_int)
done
-lemma nat_invertible_coprime: "(x::nat) * y mod m = 1 \<Longrightarrow> coprime x m"
-apply (metis nat_coprime_lmult nat_gcd_1 nat_gcd_commute nat_gcd_red)
+lemma invertible_coprime_nat: "(x::nat) * y mod m = 1 \<Longrightarrow> coprime x m"
+apply (metis coprime_lmult_nat gcd_1_nat gcd_commute_nat gcd_red_nat)
done
-lemma int_invertible_coprime: "(x::int) * y mod m = 1 \<Longrightarrow> coprime x m"
-apply (metis int_coprime_lmult int_gcd_1 int_gcd_commute int_gcd_red)
+lemma invertible_coprime_int: "(x::int) * y mod m = 1 \<Longrightarrow> coprime x m"
+apply (metis coprime_lmult_int gcd_1_int gcd_commute_int gcd_red_int)
done
@@ -1054,7 +1054,7 @@
lemma bezw_aux [rule_format]:
"fst (bezw x y) * int x + snd (bezw x y) * int y = int (gcd x y)"
-proof (induct x y rule: nat_gcd_induct)
+proof (induct x y rule: gcd_nat_induct)
fix m :: nat
show "fst (bezw m 0) * int m + snd (bezw m 0) * int 0 = int (gcd m 0)"
by auto
@@ -1064,7 +1064,7 @@
snd (bezw n (m mod n)) * int (m mod n) =
int (gcd n (m mod n))"
thus "fst (bezw m n) * int m + snd (bezw m n) * int n = int (gcd m n)"
- apply (simp add: bezw_non_0 nat_gcd_non_0)
+ apply (simp add: bezw_non_0 gcd_non_0_nat)
apply (erule subst)
apply (simp add: ring_simps)
apply (subst mod_div_equality [of m n, symmetric])
@@ -1075,7 +1075,7 @@
done
qed
-lemma int_bezout:
+lemma bezout_int:
fixes x y
shows "EX u v. u * (x::int) + v * y = gcd x y"
proof -
@@ -1098,7 +1098,7 @@
apply auto
apply (rule_tac x = u in exI)
apply (rule_tac x = "-v" in exI)
- apply (subst int_gcd_neg2 [symmetric])
+ apply (subst gcd_neg2_int [symmetric])
apply auto
done
moreover have "x <= 0 \<Longrightarrow> y >= 0 \<Longrightarrow> ?thesis"
@@ -1106,7 +1106,7 @@
apply auto
apply (rule_tac x = "-u" in exI)
apply (rule_tac x = v in exI)
- apply (subst int_gcd_neg1 [symmetric])
+ apply (subst gcd_neg1_int [symmetric])
apply auto
done
moreover have "x <= 0 \<Longrightarrow> y <= 0 \<Longrightarrow> ?thesis"
@@ -1114,8 +1114,8 @@
apply auto
apply (rule_tac x = "-u" in exI)
apply (rule_tac x = "-v" in exI)
- apply (subst int_gcd_neg1 [symmetric])
- apply (subst int_gcd_neg2 [symmetric])
+ apply (subst gcd_neg1_int [symmetric])
+ apply (subst gcd_neg2_int [symmetric])
apply auto
done
ultimately show ?thesis by blast
@@ -1160,7 +1160,7 @@
ultimately show "P a b" by blast
qed
-lemma nat_bezout_lemma:
+lemma bezout_lemma_nat:
assumes ex: "\<exists>(d::nat) x y. d dvd a \<and> d dvd b \<and>
(a * x = b * y + d \<or> b * x = a * y + d)"
shows "\<exists>d x y. d dvd a \<and> d dvd a + b \<and>
@@ -1177,7 +1177,7 @@
apply algebra
done
-lemma nat_bezout_add: "\<exists>(d::nat) x y. d dvd a \<and> d dvd b \<and>
+lemma bezout_add_nat: "\<exists>(d::nat) x y. d dvd a \<and> d dvd b \<and>
(a * x = b * y + d \<or> b * x = a * y + d)"
apply(induct a b rule: ind_euclid)
apply blast
@@ -1194,9 +1194,9 @@
apply algebra
done
-lemma nat_bezout1: "\<exists>(d::nat) x y. d dvd a \<and> d dvd b \<and>
+lemma bezout1_nat: "\<exists>(d::nat) x y. d dvd a \<and> d dvd b \<and>
(a * x - b * y = d \<or> b * x - a * y = d)"
- using nat_bezout_add[of a b]
+ using bezout_add_nat[of a b]
apply clarsimp
apply (rule_tac x="d" in exI, simp)
apply (rule_tac x="x" in exI)
@@ -1204,11 +1204,11 @@
apply auto
done
-lemma nat_bezout_add_strong: assumes nz: "a \<noteq> (0::nat)"
+lemma bezout_add_strong_nat: assumes nz: "a \<noteq> (0::nat)"
shows "\<exists>d x y. d dvd a \<and> d dvd b \<and> a * x = b * y + d"
proof-
from nz have ap: "a > 0" by simp
- from nat_bezout_add[of a b]
+ from bezout_add_nat[of a b]
have "(\<exists>d x y. d dvd a \<and> d dvd b \<and> a * x = b * y + d) \<or>
(\<exists>d x y. d dvd a \<and> d dvd b \<and> b * x = a * y + d)" by blast
moreover
@@ -1258,11 +1258,11 @@
ultimately show ?thesis by blast
qed
-lemma nat_bezout: assumes a: "(a::nat) \<noteq> 0"
+lemma bezout_nat: assumes a: "(a::nat) \<noteq> 0"
shows "\<exists>x y. a * x = b * y + gcd a b"
proof-
let ?g = "gcd a b"
- from nat_bezout_add_strong[OF a, of b]
+ from bezout_add_strong_nat[OF a, of b]
obtain d x y where d: "d dvd a" "d dvd b" "a * x = b * y + d" by blast
from d(1,2) have "d dvd ?g" by simp
then obtain k where k: "?g = d*k" unfolding dvd_def by blast
@@ -1274,99 +1274,99 @@
subsection {* LCM *}
-lemma int_lcm_altdef: "lcm (a::int) b = (abs a) * (abs b) div gcd a b"
+lemma lcm_altdef_int: "lcm (a::int) b = (abs a) * (abs b) div gcd a b"
by (simp add: lcm_int_def lcm_nat_def zdiv_int
zmult_int [symmetric] gcd_int_def)
-lemma nat_prod_gcd_lcm: "(m::nat) * n = gcd m n * lcm m n"
+lemma prod_gcd_lcm_nat: "(m::nat) * n = gcd m n * lcm m n"
unfolding lcm_nat_def
- by (simp add: dvd_mult_div_cancel [OF nat_gcd_dvd_prod])
+ by (simp add: dvd_mult_div_cancel [OF gcd_dvd_prod_nat])
-lemma int_prod_gcd_lcm: "abs(m::int) * abs n = gcd m n * lcm m n"
+lemma prod_gcd_lcm_int: "abs(m::int) * abs n = gcd m n * lcm m n"
unfolding lcm_int_def gcd_int_def
apply (subst int_mult [symmetric])
- apply (subst nat_prod_gcd_lcm [symmetric])
+ apply (subst prod_gcd_lcm_nat [symmetric])
apply (subst nat_abs_mult_distrib [symmetric])
apply (simp, simp add: abs_mult)
done
-lemma nat_lcm_0 [simp]: "lcm (m::nat) 0 = 0"
+lemma lcm_0_nat [simp]: "lcm (m::nat) 0 = 0"
unfolding lcm_nat_def by simp
-lemma int_lcm_0 [simp]: "lcm (m::int) 0 = 0"
+lemma lcm_0_int [simp]: "lcm (m::int) 0 = 0"
unfolding lcm_int_def by simp
-lemma nat_lcm_0_left [simp]: "lcm (0::nat) n = 0"
+lemma lcm_0_left_nat [simp]: "lcm (0::nat) n = 0"
unfolding lcm_nat_def by simp
-lemma int_lcm_0_left [simp]: "lcm (0::int) n = 0"
+lemma lcm_0_left_int [simp]: "lcm (0::int) n = 0"
unfolding lcm_int_def by simp
-lemma nat_lcm_commute: "lcm (m::nat) n = lcm n m"
- unfolding lcm_nat_def by (simp add: nat_gcd_commute ring_simps)
+lemma lcm_commute_nat: "lcm (m::nat) n = lcm n m"
+ unfolding lcm_nat_def by (simp add: gcd_commute_nat ring_simps)
-lemma int_lcm_commute: "lcm (m::int) n = lcm n m"
- unfolding lcm_int_def by (subst nat_lcm_commute, rule refl)
+lemma lcm_commute_int: "lcm (m::int) n = lcm n m"
+ unfolding lcm_int_def by (subst lcm_commute_nat, rule refl)
-lemma nat_lcm_pos:
+lemma lcm_pos_nat:
"(m::nat) > 0 \<Longrightarrow> n>0 \<Longrightarrow> lcm m n > 0"
-by (metis gr0I mult_is_0 nat_prod_gcd_lcm)
+by (metis gr0I mult_is_0 prod_gcd_lcm_nat)
-lemma int_lcm_pos:
+lemma lcm_pos_int:
"(m::int) ~= 0 \<Longrightarrow> n ~= 0 \<Longrightarrow> lcm m n > 0"
- apply (subst int_lcm_abs)
- apply (rule nat_lcm_pos [transferred])
+ apply (subst lcm_abs_int)
+ apply (rule lcm_pos_nat [transferred])
apply auto
done
-lemma nat_dvd_pos:
+lemma dvd_pos_nat:
fixes n m :: nat
assumes "n > 0" and "m dvd n"
shows "m > 0"
using assms by (cases m) auto
-lemma nat_lcm_least:
+lemma lcm_least_nat:
assumes "(m::nat) dvd k" and "n dvd k"
shows "lcm m n dvd k"
proof (cases k)
case 0 then show ?thesis by auto
next
case (Suc _) then have pos_k: "k > 0" by auto
- from assms nat_dvd_pos [OF this] have pos_mn: "m > 0" "n > 0" by auto
- with nat_gcd_zero [of m n] have pos_gcd: "gcd m n > 0" by simp
+ from assms dvd_pos_nat [OF this] have pos_mn: "m > 0" "n > 0" by auto
+ with gcd_zero_nat [of m n] have pos_gcd: "gcd m n > 0" by simp
from assms obtain p where k_m: "k = m * p" using dvd_def by blast
from assms obtain q where k_n: "k = n * q" using dvd_def by blast
from pos_k k_m have pos_p: "p > 0" by auto
from pos_k k_n have pos_q: "q > 0" by auto
have "k * k * gcd q p = k * gcd (k * q) (k * p)"
- by (simp add: mult_ac nat_gcd_mult_distrib)
+ by (simp add: mult_ac gcd_mult_distrib_nat)
also have "\<dots> = k * gcd (m * p * q) (n * q * p)"
by (simp add: k_m [symmetric] k_n [symmetric])
also have "\<dots> = k * p * q * gcd m n"
- by (simp add: mult_ac nat_gcd_mult_distrib)
+ by (simp add: mult_ac gcd_mult_distrib_nat)
finally have "(m * p) * (n * q) * gcd q p = k * p * q * gcd m n"
by (simp only: k_m [symmetric] k_n [symmetric])
then have "p * q * m * n * gcd q p = p * q * k * gcd m n"
by (simp add: mult_ac)
with pos_p pos_q have "m * n * gcd q p = k * gcd m n"
by simp
- with nat_prod_gcd_lcm [of m n]
+ with prod_gcd_lcm_nat [of m n]
have "lcm m n * gcd q p * gcd m n = k * gcd m n"
by (simp add: mult_ac)
with pos_gcd have "lcm m n * gcd q p = k" by auto
then show ?thesis using dvd_def by auto
qed
-lemma int_lcm_least:
+lemma lcm_least_int:
"(m::int) dvd k \<Longrightarrow> n dvd k \<Longrightarrow> lcm m n dvd k"
-apply (subst int_lcm_abs)
+apply (subst lcm_abs_int)
apply (rule dvd_trans)
-apply (rule nat_lcm_least [transferred, of _ "abs k" _])
+apply (rule lcm_least_nat [transferred, of _ "abs k" _])
apply auto
done
-lemma nat_lcm_dvd1: "(m::nat) dvd lcm m n"
+lemma lcm_dvd1_nat: "(m::nat) dvd lcm m n"
proof (cases m)
case 0 then show ?thesis by simp
next
@@ -1382,82 +1382,82 @@
then obtain k where "n = gcd m n * k" using dvd_def by auto
then have "m * n div gcd m n = m * (gcd m n * k) div gcd m n"
by (simp add: mult_ac)
- also have "\<dots> = m * k" using mpos npos nat_gcd_zero by simp
+ also have "\<dots> = m * k" using mpos npos gcd_zero_nat by simp
finally show ?thesis by (simp add: lcm_nat_def)
qed
qed
-lemma int_lcm_dvd1: "(m::int) dvd lcm m n"
- apply (subst int_lcm_abs)
+lemma lcm_dvd1_int: "(m::int) dvd lcm m n"
+ apply (subst lcm_abs_int)
apply (rule dvd_trans)
prefer 2
- apply (rule nat_lcm_dvd1 [transferred])
+ apply (rule lcm_dvd1_nat [transferred])
apply auto
done
-lemma nat_lcm_dvd2: "(n::nat) dvd lcm m n"
- by (subst nat_lcm_commute, rule nat_lcm_dvd1)
+lemma lcm_dvd2_nat: "(n::nat) dvd lcm m n"
+ by (subst lcm_commute_nat, rule lcm_dvd1_nat)
-lemma int_lcm_dvd2: "(n::int) dvd lcm m n"
- by (subst int_lcm_commute, rule int_lcm_dvd1)
+lemma lcm_dvd2_int: "(n::int) dvd lcm m n"
+ by (subst lcm_commute_int, rule lcm_dvd1_int)
lemma dvd_lcm_I1_nat[simp]: "(k::nat) dvd m \<Longrightarrow> k dvd lcm m n"
-by(metis nat_lcm_dvd1 dvd_trans)
+by(metis lcm_dvd1_nat dvd_trans)
lemma dvd_lcm_I2_nat[simp]: "(k::nat) dvd n \<Longrightarrow> k dvd lcm m n"
-by(metis nat_lcm_dvd2 dvd_trans)
+by(metis lcm_dvd2_nat dvd_trans)
lemma dvd_lcm_I1_int[simp]: "(i::int) dvd m \<Longrightarrow> i dvd lcm m n"
-by(metis int_lcm_dvd1 dvd_trans)
+by(metis lcm_dvd1_int dvd_trans)
lemma dvd_lcm_I2_int[simp]: "(i::int) dvd n \<Longrightarrow> i dvd lcm m n"
-by(metis int_lcm_dvd2 dvd_trans)
+by(metis lcm_dvd2_int dvd_trans)
-lemma nat_lcm_unique: "(a::nat) dvd d \<and> b dvd d \<and>
+lemma lcm_unique_nat: "(a::nat) dvd d \<and> b dvd d \<and>
(\<forall>e. a dvd e \<and> b dvd e \<longrightarrow> d dvd e) \<longleftrightarrow> d = lcm a b"
- by (auto intro: dvd_anti_sym nat_lcm_least nat_lcm_dvd1 nat_lcm_dvd2)
+ by (auto intro: dvd_anti_sym lcm_least_nat lcm_dvd1_nat lcm_dvd2_nat)
-lemma int_lcm_unique: "d >= 0 \<and> (a::int) dvd d \<and> b dvd d \<and>
+lemma lcm_unique_int: "d >= 0 \<and> (a::int) dvd d \<and> b dvd d \<and>
(\<forall>e. a dvd e \<and> b dvd e \<longrightarrow> d dvd e) \<longleftrightarrow> d = lcm a b"
- by (auto intro: dvd_anti_sym [transferred] int_lcm_least)
+ by (auto intro: dvd_anti_sym [transferred] lcm_least_int)
lemma lcm_proj2_if_dvd_nat [simp]: "(x::nat) dvd y \<Longrightarrow> lcm x y = y"
apply (rule sym)
- apply (subst nat_lcm_unique [symmetric])
+ apply (subst lcm_unique_nat [symmetric])
apply auto
done
lemma lcm_proj2_if_dvd_int [simp]: "(x::int) dvd y \<Longrightarrow> lcm x y = abs y"
apply (rule sym)
- apply (subst int_lcm_unique [symmetric])
+ apply (subst lcm_unique_int [symmetric])
apply auto
done
lemma lcm_proj1_if_dvd_nat [simp]: "(x::nat) dvd y \<Longrightarrow> lcm y x = y"
-by (subst nat_lcm_commute, erule lcm_proj2_if_dvd_nat)
+by (subst lcm_commute_nat, erule lcm_proj2_if_dvd_nat)
lemma lcm_proj1_if_dvd_int [simp]: "(x::int) dvd y \<Longrightarrow> lcm y x = abs y"
-by (subst int_lcm_commute, erule lcm_proj2_if_dvd_int)
+by (subst lcm_commute_int, erule lcm_proj2_if_dvd_int)
lemma lcm_assoc_nat: "lcm (lcm n m) (p::nat) = lcm n (lcm m p)"
-apply(rule nat_lcm_unique[THEN iffD1])
-apply (metis dvd.order_trans nat_lcm_unique)
+apply(rule lcm_unique_nat[THEN iffD1])
+apply (metis dvd.order_trans lcm_unique_nat)
done
lemma lcm_assoc_int: "lcm (lcm n m) (p::int) = lcm n (lcm m p)"
-apply(rule int_lcm_unique[THEN iffD1])
-apply (metis dvd_trans int_lcm_unique)
+apply(rule lcm_unique_int[THEN iffD1])
+apply (metis dvd_trans lcm_unique_int)
done
lemmas lcm_left_commute_nat =
- mk_left_commute[of lcm, OF lcm_assoc_nat nat_lcm_commute]
+ mk_left_commute[of lcm, OF lcm_assoc_nat lcm_commute_nat]
lemmas lcm_left_commute_int =
- mk_left_commute[of lcm, OF lcm_assoc_int int_lcm_commute]
+ mk_left_commute[of lcm, OF lcm_assoc_int lcm_commute_int]
-lemmas lcm_ac_nat = lcm_assoc_nat nat_lcm_commute lcm_left_commute_nat
-lemmas lcm_ac_int = lcm_assoc_int int_lcm_commute lcm_left_commute_int
+lemmas lcm_ac_nat = lcm_assoc_nat lcm_commute_nat lcm_left_commute_nat
+lemmas lcm_ac_int = lcm_assoc_int lcm_commute_int lcm_left_commute_int
subsection {* Primes *}
@@ -1465,40 +1465,40 @@
(* Is there a better way to handle these, rather than making them
elim rules? *)
-lemma nat_prime_ge_0 [elim]: "prime (p::nat) \<Longrightarrow> p >= 0"
+lemma prime_ge_0_nat [elim]: "prime (p::nat) \<Longrightarrow> p >= 0"
by (unfold prime_nat_def, auto)
-lemma nat_prime_gt_0 [elim]: "prime (p::nat) \<Longrightarrow> p > 0"
+lemma prime_gt_0_nat [elim]: "prime (p::nat) \<Longrightarrow> p > 0"
by (unfold prime_nat_def, auto)
-lemma nat_prime_ge_1 [elim]: "prime (p::nat) \<Longrightarrow> p >= 1"
+lemma prime_ge_1_nat [elim]: "prime (p::nat) \<Longrightarrow> p >= 1"
by (unfold prime_nat_def, auto)
-lemma nat_prime_gt_1 [elim]: "prime (p::nat) \<Longrightarrow> p > 1"
+lemma prime_gt_1_nat [elim]: "prime (p::nat) \<Longrightarrow> p > 1"
by (unfold prime_nat_def, auto)
-lemma nat_prime_ge_Suc_0 [elim]: "prime (p::nat) \<Longrightarrow> p >= Suc 0"
+lemma prime_ge_Suc_0_nat [elim]: "prime (p::nat) \<Longrightarrow> p >= Suc 0"
by (unfold prime_nat_def, auto)
-lemma nat_prime_gt_Suc_0 [elim]: "prime (p::nat) \<Longrightarrow> p > Suc 0"
+lemma prime_gt_Suc_0_nat [elim]: "prime (p::nat) \<Longrightarrow> p > Suc 0"
by (unfold prime_nat_def, auto)
-lemma nat_prime_ge_2 [elim]: "prime (p::nat) \<Longrightarrow> p >= 2"
+lemma prime_ge_2_nat [elim]: "prime (p::nat) \<Longrightarrow> p >= 2"
by (unfold prime_nat_def, auto)
-lemma int_prime_ge_0 [elim]: "prime (p::int) \<Longrightarrow> p >= 0"
+lemma prime_ge_0_int [elim]: "prime (p::int) \<Longrightarrow> p >= 0"
by (unfold prime_int_def prime_nat_def, auto)
-lemma int_prime_gt_0 [elim]: "prime (p::int) \<Longrightarrow> p > 0"
+lemma prime_gt_0_int [elim]: "prime (p::int) \<Longrightarrow> p > 0"
by (unfold prime_int_def prime_nat_def, auto)
-lemma int_prime_ge_1 [elim]: "prime (p::int) \<Longrightarrow> p >= 1"
+lemma prime_ge_1_int [elim]: "prime (p::int) \<Longrightarrow> p >= 1"
by (unfold prime_int_def prime_nat_def, auto)
-lemma int_prime_gt_1 [elim]: "prime (p::int) \<Longrightarrow> p > 1"
+lemma prime_gt_1_int [elim]: "prime (p::int) \<Longrightarrow> p > 1"
by (unfold prime_int_def prime_nat_def, auto)
-lemma int_prime_ge_2 [elim]: "prime (p::int) \<Longrightarrow> p >= 2"
+lemma prime_ge_2_int [elim]: "prime (p::int) \<Longrightarrow> p >= 2"
by (unfold prime_int_def prime_nat_def, auto)
thm prime_nat_def;
@@ -1508,59 +1508,59 @@
m = 1 \<or> m = p))"
using prime_nat_def [transferred]
apply (case_tac "p >= 0")
- by (blast, auto simp add: int_prime_ge_0)
+ by (blast, auto simp add: prime_ge_0_int)
(* To do: determine primality of any numeral *)
-lemma nat_zero_not_prime [simp]: "~prime (0::nat)"
+lemma zero_not_prime_nat [simp]: "~prime (0::nat)"
by (simp add: prime_nat_def)
-lemma int_zero_not_prime [simp]: "~prime (0::int)"
+lemma zero_not_prime_int [simp]: "~prime (0::int)"
by (simp add: prime_int_def)
-lemma nat_one_not_prime [simp]: "~prime (1::nat)"
+lemma one_not_prime_nat [simp]: "~prime (1::nat)"
by (simp add: prime_nat_def)
-lemma nat_Suc_0_not_prime [simp]: "~prime (Suc 0)"
+lemma Suc_0_not_prime_nat [simp]: "~prime (Suc 0)"
by (simp add: prime_nat_def One_nat_def)
-lemma int_one_not_prime [simp]: "~prime (1::int)"
+lemma one_not_prime_int [simp]: "~prime (1::int)"
by (simp add: prime_int_def)
-lemma nat_two_is_prime [simp]: "prime (2::nat)"
+lemma two_is_prime_nat [simp]: "prime (2::nat)"
apply (auto simp add: prime_nat_def)
apply (case_tac m)
apply (auto dest!: dvd_imp_le)
done
-lemma int_two_is_prime [simp]: "prime (2::int)"
- by (rule nat_two_is_prime [transferred direction: nat "op <= (0::int)"])
+lemma two_is_prime_int [simp]: "prime (2::int)"
+ by (rule two_is_prime_nat [transferred direction: nat "op <= (0::int)"])
-lemma nat_prime_imp_coprime: "prime (p::nat) \<Longrightarrow> \<not> p dvd n \<Longrightarrow> coprime p n"
+lemma prime_imp_coprime_nat: "prime (p::nat) \<Longrightarrow> \<not> p dvd n \<Longrightarrow> coprime p n"
apply (unfold prime_nat_def)
- apply (metis nat_gcd_dvd1 nat_gcd_dvd2)
+ apply (metis gcd_dvd1_nat gcd_dvd2_nat)
done
-lemma int_prime_imp_coprime: "prime (p::int) \<Longrightarrow> \<not> p dvd n \<Longrightarrow> coprime p n"
+lemma prime_imp_coprime_int: "prime (p::int) \<Longrightarrow> \<not> p dvd n \<Longrightarrow> coprime p n"
apply (unfold prime_int_altdef)
- apply (metis int_gcd_dvd1 int_gcd_dvd2 int_gcd_ge_0)
+ apply (metis gcd_dvd1_int gcd_dvd2_int gcd_ge_0_int)
done
-lemma nat_prime_dvd_mult: "prime (p::nat) \<Longrightarrow> p dvd m * n \<Longrightarrow> p dvd m \<or> p dvd n"
- by (blast intro: nat_coprime_dvd_mult nat_prime_imp_coprime)
+lemma prime_dvd_mult_nat: "prime (p::nat) \<Longrightarrow> p dvd m * n \<Longrightarrow> p dvd m \<or> p dvd n"
+ by (blast intro: coprime_dvd_mult_nat prime_imp_coprime_nat)
-lemma int_prime_dvd_mult: "prime (p::int) \<Longrightarrow> p dvd m * n \<Longrightarrow> p dvd m \<or> p dvd n"
- by (blast intro: int_coprime_dvd_mult int_prime_imp_coprime)
+lemma prime_dvd_mult_int: "prime (p::int) \<Longrightarrow> p dvd m * n \<Longrightarrow> p dvd m \<or> p dvd n"
+ by (blast intro: coprime_dvd_mult_int prime_imp_coprime_int)
-lemma nat_prime_dvd_mult_eq [simp]: "prime (p::nat) \<Longrightarrow>
+lemma prime_dvd_mult_eq_nat [simp]: "prime (p::nat) \<Longrightarrow>
p dvd m * n = (p dvd m \<or> p dvd n)"
- by (rule iffI, rule nat_prime_dvd_mult, auto)
+ by (rule iffI, rule prime_dvd_mult_nat, auto)
-lemma int_prime_dvd_mult_eq [simp]: "prime (p::int) \<Longrightarrow>
+lemma prime_dvd_mult_eq_int [simp]: "prime (p::int) \<Longrightarrow>
p dvd m * n = (p dvd m \<or> p dvd n)"
- by (rule iffI, rule int_prime_dvd_mult, auto)
+ by (rule iffI, rule prime_dvd_mult_int, auto)
-lemma nat_not_prime_eq_prod: "(n::nat) > 1 \<Longrightarrow> ~ prime n \<Longrightarrow>
+lemma not_prime_eq_prod_nat: "(n::nat) > 1 \<Longrightarrow> ~ prime n \<Longrightarrow>
EX m k. n = m * k & 1 < m & m < n & 1 < k & k < n"
unfolding prime_nat_def dvd_def apply auto
apply (subgoal_tac "k > 1")
@@ -1573,7 +1573,7 @@
(* there's a lot of messing around with signs of products here --
could this be made more automatic? *)
-lemma int_not_prime_eq_prod: "(n::int) > 1 \<Longrightarrow> ~ prime n \<Longrightarrow>
+lemma not_prime_eq_prod_int: "(n::int) > 1 \<Longrightarrow> ~ prime n \<Longrightarrow>
EX m k. n = m * k & 1 < m & m < n & 1 < k & k < n"
unfolding prime_int_altdef dvd_def
apply auto
@@ -1593,72 +1593,72 @@
apply auto
done
-lemma nat_prime_dvd_power [rule_format]: "prime (p::nat) -->
+lemma prime_dvd_power_nat [rule_format]: "prime (p::nat) -->
n > 0 --> (p dvd x^n --> p dvd x)"
by (induct n rule: nat_induct, auto)
-lemma int_prime_dvd_power [rule_format]: "prime (p::int) -->
+lemma prime_dvd_power_int [rule_format]: "prime (p::int) -->
n > 0 --> (p dvd x^n --> p dvd x)"
apply (induct n rule: nat_induct, auto)
- apply (frule int_prime_ge_0)
+ apply (frule prime_ge_0_int)
apply auto
done
-lemma nat_prime_imp_power_coprime: "prime (p::nat) \<Longrightarrow> ~ p dvd a \<Longrightarrow>
+lemma prime_imp_power_coprime_nat: "prime (p::nat) \<Longrightarrow> ~ p dvd a \<Longrightarrow>
coprime a (p^m)"
- apply (rule nat_coprime_exp)
- apply (subst nat_gcd_commute)
- apply (erule (1) nat_prime_imp_coprime)
+ apply (rule coprime_exp_nat)
+ apply (subst gcd_commute_nat)
+ apply (erule (1) prime_imp_coprime_nat)
done
-lemma int_prime_imp_power_coprime: "prime (p::int) \<Longrightarrow> ~ p dvd a \<Longrightarrow>
+lemma prime_imp_power_coprime_int: "prime (p::int) \<Longrightarrow> ~ p dvd a \<Longrightarrow>
coprime a (p^m)"
- apply (rule int_coprime_exp)
- apply (subst int_gcd_commute)
- apply (erule (1) int_prime_imp_coprime)
+ apply (rule coprime_exp_int)
+ apply (subst gcd_commute_int)
+ apply (erule (1) prime_imp_coprime_int)
done
-lemma nat_primes_coprime: "prime (p::nat) \<Longrightarrow> prime q \<Longrightarrow> p \<noteq> q \<Longrightarrow> coprime p q"
- apply (rule nat_prime_imp_coprime, assumption)
+lemma primes_coprime_nat: "prime (p::nat) \<Longrightarrow> prime q \<Longrightarrow> p \<noteq> q \<Longrightarrow> coprime p q"
+ apply (rule prime_imp_coprime_nat, assumption)
apply (unfold prime_nat_def, auto)
done
-lemma int_primes_coprime: "prime (p::int) \<Longrightarrow> prime q \<Longrightarrow> p \<noteq> q \<Longrightarrow> coprime p q"
- apply (rule int_prime_imp_coprime, assumption)
+lemma primes_coprime_int: "prime (p::int) \<Longrightarrow> prime q \<Longrightarrow> p \<noteq> q \<Longrightarrow> coprime p q"
+ apply (rule prime_imp_coprime_int, assumption)
apply (unfold prime_int_altdef, clarify)
apply (drule_tac x = q in spec)
apply (drule_tac x = p in spec)
apply auto
done
-lemma nat_primes_imp_powers_coprime: "prime (p::nat) \<Longrightarrow> prime q \<Longrightarrow> p ~= q \<Longrightarrow>
+lemma primes_imp_powers_coprime_nat: "prime (p::nat) \<Longrightarrow> prime q \<Longrightarrow> p ~= q \<Longrightarrow>
coprime (p^m) (q^n)"
- by (rule nat_coprime_exp2, rule nat_primes_coprime)
+ by (rule coprime_exp2_nat, rule primes_coprime_nat)
-lemma int_primes_imp_powers_coprime: "prime (p::int) \<Longrightarrow> prime q \<Longrightarrow> p ~= q \<Longrightarrow>
+lemma primes_imp_powers_coprime_int: "prime (p::int) \<Longrightarrow> prime q \<Longrightarrow> p ~= q \<Longrightarrow>
coprime (p^m) (q^n)"
- by (rule int_coprime_exp2, rule int_primes_coprime)
+ by (rule coprime_exp2_int, rule primes_coprime_int)
-lemma nat_prime_factor: "n \<noteq> (1::nat) \<Longrightarrow> \<exists> p. prime p \<and> p dvd n"
+lemma prime_factor_nat: "n \<noteq> (1::nat) \<Longrightarrow> \<exists> p. prime p \<and> p dvd n"
apply (induct n rule: nat_less_induct)
apply (case_tac "n = 0")
- using nat_two_is_prime apply blast
+ using two_is_prime_nat apply blast
apply (case_tac "prime n")
apply blast
apply (subgoal_tac "n > 1")
- apply (frule (1) nat_not_prime_eq_prod)
+ apply (frule (1) not_prime_eq_prod_nat)
apply (auto intro: dvd_mult dvd_mult2)
done
(* An Isar version:
-lemma nat_prime_factor_b:
+lemma prime_factor_b_nat:
fixes n :: nat
assumes "n \<noteq> 1"
shows "\<exists>p. prime p \<and> p dvd n"
using `n ~= 1`
-proof (induct n rule: nat_less_induct)
+proof (induct n rule: less_induct_nat)
fix n :: nat
assume "n ~= 1" and
ih: "\<forall>m<n. m \<noteq> 1 \<longrightarrow> (\<exists>p. prime p \<and> p dvd m)"
@@ -1666,9 +1666,9 @@
proof -
{
assume "n = 0"
- moreover note nat_two_is_prime
+ moreover note two_is_prime_nat
ultimately have ?thesis
- by (auto simp del: nat_two_is_prime)
+ by (auto simp del: two_is_prime_nat)
}
moreover
{
@@ -1679,7 +1679,7 @@
{
assume "n ~= 0" and "~ prime n"
with `n ~= 1` have "n > 1" by auto
- with `~ prime n` and nat_not_prime_eq_prod obtain m k where
+ with `~ prime n` and not_prime_eq_prod_nat obtain m k where
"n = m * k" and "1 < m" and "m < n" by blast
with ih obtain p where "prime p" and "p dvd m" by blast
with `n = m * k` have ?thesis by auto
@@ -1692,7 +1692,7 @@
text {* One property of coprimality is easier to prove via prime factors. *}
-lemma nat_prime_divprod_pow:
+lemma prime_divprod_pow_nat:
assumes p: "prime (p::nat)" and ab: "coprime a b" and pab: "p^n dvd a * b"
shows "p^n dvd a \<or> p^n dvd b"
proof-
@@ -1705,27 +1705,27 @@
from n have "p dvd p^n" by (intro dvd_power, auto)
also note pab
finally have pab': "p dvd a * b".
- from nat_prime_dvd_mult[OF p pab']
+ from prime_dvd_mult_nat[OF p pab']
have "p dvd a \<or> p dvd b" .
moreover
{assume pa: "p dvd a"
have pnba: "p^n dvd b*a" using pab by (simp add: mult_commute)
- from nat_coprime_common_divisor [OF ab, OF pa] p have "\<not> p dvd b" by auto
+ from coprime_common_divisor_nat [OF ab, OF pa] p have "\<not> p dvd b" by auto
with p have "coprime b p"
- by (subst nat_gcd_commute, intro nat_prime_imp_coprime)
+ by (subst gcd_commute_nat, intro prime_imp_coprime_nat)
hence pnb: "coprime (p^n) b"
- by (subst nat_gcd_commute, rule nat_coprime_exp)
- from nat_coprime_divprod[OF pnba pnb] have ?thesis by blast }
+ by (subst gcd_commute_nat, rule coprime_exp_nat)
+ from coprime_divprod_nat[OF pnba pnb] have ?thesis by blast }
moreover
{assume pb: "p dvd b"
have pnba: "p^n dvd b*a" using pab by (simp add: mult_commute)
- from nat_coprime_common_divisor [OF ab, of p] pb p have "\<not> p dvd a"
+ from coprime_common_divisor_nat [OF ab, of p] pb p have "\<not> p dvd a"
by auto
with p have "coprime a p"
- by (subst nat_gcd_commute, intro nat_prime_imp_coprime)
+ by (subst gcd_commute_nat, intro prime_imp_coprime_nat)
hence pna: "coprime (p^n) a"
- by (subst nat_gcd_commute, rule nat_coprime_exp)
- from nat_coprime_divprod[OF pab pna] have ?thesis by blast }
+ by (subst gcd_commute_nat, rule coprime_exp_nat)
+ from coprime_divprod_nat[OF pab pna] have ?thesis by blast }
ultimately have ?thesis by blast}
ultimately show ?thesis by blast
qed
--- a/src/HOL/Library/Abstract_Rat.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Library/Abstract_Rat.thy Tue Jul 07 17:39:51 2009 +0200
@@ -30,8 +30,8 @@
(let g = gcd a b
in if b > 0 then (a div g, b div g) else (- (a div g), - (b div g)))))"
-declare int_gcd_dvd1[presburger]
-declare int_gcd_dvd2[presburger]
+declare gcd_dvd1_int[presburger]
+declare gcd_dvd2_int[presburger]
lemma normNum_isnormNum [simp]: "isnormNum (normNum x)"
proof -
have " \<exists> a b. x = (a,b)" by auto
@@ -43,7 +43,7 @@
let ?a' = "a div ?g"
let ?b' = "b div ?g"
let ?g' = "gcd ?a' ?b'"
- from anz bnz have "?g \<noteq> 0" by simp with int_gcd_ge_0[of a b]
+ from anz bnz have "?g \<noteq> 0" by simp with gcd_ge_0_int[of a b]
have gpos: "?g > 0" by arith
have gdvd: "?g dvd a" "?g dvd b" by arith+
from zdvd_mult_div_cancel[OF gdvd(1)] zdvd_mult_div_cancel[OF gdvd(2)]
@@ -51,7 +51,7 @@
have nz':"?a' \<noteq> 0" "?b' \<noteq> 0"
by - (rule notI, simp)+
from anz bnz have stupid: "a \<noteq> 0 \<or> b \<noteq> 0" by arith
- from int_div_gcd_coprime[OF stupid] have gp1: "?g' = 1" .
+ from div_gcd_coprime_int[OF stupid] have gp1: "?g' = 1" .
from bnz have "b < 0 \<or> b > 0" by arith
moreover
{assume b: "b > 0"
@@ -137,7 +137,7 @@
lemma Ninv_normN[simp]: "isnormNum x \<Longrightarrow> isnormNum (Ninv x)"
by (simp add: Ninv_def isnormNum_def split_def)
- (cases "fst x = 0", auto simp add: int_gcd_commute)
+ (cases "fst x = 0", auto simp add: gcd_commute_int)
lemma isnormNum_int[simp]:
"isnormNum 0\<^sub>N" "isnormNum (1::int)\<^sub>N" "i \<noteq> 0 \<Longrightarrow> isnormNum i\<^sub>N"
@@ -203,7 +203,7 @@
from prems have eq:"a * b' = a'*b"
by (simp add: INum_def eq_divide_eq divide_eq_eq of_int_mult[symmetric] del: of_int_mult)
from prems have gcd1: "gcd a b = 1" "gcd b a = 1" "gcd a' b' = 1" "gcd b' a' = 1"
- by (simp_all add: isnormNum_def add: int_gcd_commute)
+ by (simp_all add: isnormNum_def add: gcd_commute_int)
from eq have raw_dvd: "a dvd a'*b" "b dvd b'*a" "a' dvd a*b'" "b' dvd b*a'"
apply -
apply algebra
@@ -211,8 +211,8 @@
apply simp
apply algebra
done
- from zdvd_dvd_eq[OF bz int_coprime_dvd_mult[OF gcd1(2) raw_dvd(2)]
- int_coprime_dvd_mult[OF gcd1(4) raw_dvd(4)]]
+ from zdvd_dvd_eq[OF bz coprime_dvd_mult_int[OF gcd1(2) raw_dvd(2)]
+ coprime_dvd_mult_int[OF gcd1(4) raw_dvd(4)]]
have eq1: "b = b'" using pos by arith
with eq have "a = a'" using pos by simp
with eq1 have ?rhs by simp}
@@ -297,8 +297,8 @@
let ?g = "gcd (a * b' + b * a') (b*b')"
have gz: "?g \<noteq> 0" using z by simp
have ?thesis using aa' bb' z gz
- of_int_div[where ?'a = 'a, OF gz int_gcd_dvd1[where x="a * b' + b * a'" and y="b*b'"]] of_int_div[where ?'a = 'a,
- OF gz int_gcd_dvd2[where x="a * b' + b * a'" and y="b*b'"]]
+ of_int_div[where ?'a = 'a, OF gz gcd_dvd1_int[where x="a * b' + b * a'" and y="b*b'"]] of_int_div[where ?'a = 'a,
+ OF gz gcd_dvd2_int[where x="a * b' + b * a'" and y="b*b'"]]
by (simp add: x y Nadd_def INum_def normNum_def Let_def add_divide_distrib)}
ultimately have ?thesis using aa' bb'
by (simp add: Nadd_def INum_def normNum_def x y Let_def) }
@@ -319,8 +319,8 @@
{assume z: "a \<noteq> 0" "a' \<noteq> 0" "b \<noteq> 0" "b' \<noteq> 0"
let ?g="gcd (a*a') (b*b')"
have gz: "?g \<noteq> 0" using z by simp
- from z of_int_div[where ?'a = 'a, OF gz int_gcd_dvd1[where x="a*a'" and y="b*b'"]]
- of_int_div[where ?'a = 'a , OF gz int_gcd_dvd2[where x="a*a'" and y="b*b'"]]
+ from z of_int_div[where ?'a = 'a, OF gz gcd_dvd1_int[where x="a*a'" and y="b*b'"]]
+ of_int_div[where ?'a = 'a , OF gz gcd_dvd2_int[where x="a*a'" and y="b*b'"]]
have ?thesis by (simp add: Nmul_def x y Let_def INum_def)}
ultimately show ?thesis by blast
qed
@@ -478,7 +478,7 @@
qed
lemma Nmul_commute: "isnormNum x \<Longrightarrow> isnormNum y \<Longrightarrow> x *\<^sub>N y = y *\<^sub>N x"
- by (simp add: Nmul_def split_def Let_def int_gcd_commute mult_commute)
+ by (simp add: Nmul_def split_def Let_def gcd_commute_int mult_commute)
lemma Nmul_assoc:
assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})"
--- a/src/HOL/Library/Legacy_GCD.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Library/Legacy_GCD.thy Tue Jul 07 17:39:51 2009 +0200
@@ -409,7 +409,7 @@
{fix x y assume H: "a * x - b * y = d \<or> b * x - a * y = d"
have dv: "?g dvd a*x" "?g dvd b * y" "?g dvd b*x" "?g dvd a * y"
using dvd_mult2[OF gcd_dvd1[of a b]] dvd_mult2[OF gcd_dvd2[of a b]] by simp_all
- from nat_dvd_diff[OF dv(1,2)] nat_dvd_diff[OF dv(3,4)] H
+ from dvd_diff_nat[OF dv(1,2)] dvd_diff_nat[OF dv(3,4)] H
have ?rhs by auto}
ultimately show ?thesis by blast
qed
--- a/src/HOL/Library/Pocklington.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Library/Pocklington.thy Tue Jul 07 17:39:51 2009 +0200
@@ -846,7 +846,7 @@
from lh[unfolded nat_mod]
obtain q1 q2 where q12:"a ^ d + n * q1 = 1 + n * q2" by blast
hence "a ^ d + n * q1 - n * q2 = 1" by simp
- with nat_dvd_diff [OF dvd_add [OF divides_rexp[OF p(2), of d'] dvd_mult2[OF p(1), of q1]] dvd_mult2[OF p(1), of q2]] d' have "p dvd 1" by simp
+ with dvd_diff_nat [OF dvd_add [OF divides_rexp[OF p(2), of d'] dvd_mult2[OF p(1), of q1]] dvd_mult2[OF p(1), of q2]] d' have "p dvd 1" by simp
with p(3) have False by simp
hence ?rhs ..}
ultimately have ?rhs by blast}
--- a/src/HOL/Library/Primes.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/Library/Primes.thy Tue Jul 07 17:39:51 2009 +0200
@@ -311,8 +311,8 @@
{fix e assume H: "e dvd a^n" "e dvd b^n"
from bezout_gcd_pow[of a n b] obtain x y
where xy: "a ^ n * x - b ^ n * y = ?gn \<or> b ^ n * x - a ^ n * y = ?gn" by blast
- from nat_dvd_diff [OF dvd_mult2[OF H(1), of x] dvd_mult2[OF H(2), of y]]
- nat_dvd_diff [OF dvd_mult2[OF H(2), of x] dvd_mult2[OF H(1), of y]] xy
+ from dvd_diff_nat [OF dvd_mult2[OF H(1), of x] dvd_mult2[OF H(2), of y]]
+ dvd_diff_nat [OF dvd_mult2[OF H(2), of x] dvd_mult2[OF H(1), of y]] xy
have "e dvd ?gn" by (cases "a ^ n * x - b ^ n * y = gcd a b ^ n", simp_all)}
hence th: "\<forall>e. e dvd a^n \<and> e dvd b^n \<longrightarrow> e dvd ?gn" by blast
from divides_exp[OF gcd_dvd1[of a b], of n] divides_exp[OF gcd_dvd2[of a b], of n] th
--- a/src/HOL/NewNumberTheory/Binomial.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/NewNumberTheory/Binomial.thy Tue Jul 07 17:39:51 2009 +0200
@@ -109,68 +109,68 @@
subsection {* Factorial *}
-lemma nat_fact_zero [simp]: "fact (0::nat) = 1"
+lemma fact_zero_nat [simp]: "fact (0::nat) = 1"
by simp
-lemma int_fact_zero [simp]: "fact (0::int) = 1"
+lemma fact_zero_int [simp]: "fact (0::int) = 1"
by (simp add: fact_int_def)
-lemma nat_fact_one [simp]: "fact (1::nat) = 1"
+lemma fact_one_nat [simp]: "fact (1::nat) = 1"
by simp
-lemma nat_fact_Suc_0 [simp]: "fact (Suc 0) = Suc 0"
+lemma fact_Suc_0_nat [simp]: "fact (Suc 0) = Suc 0"
by (simp add: One_nat_def)
-lemma int_fact_one [simp]: "fact (1::int) = 1"
+lemma fact_one_int [simp]: "fact (1::int) = 1"
by (simp add: fact_int_def)
-lemma nat_fact_plus_one: "fact ((n::nat) + 1) = (n + 1) * fact n"
+lemma fact_plus_one_nat: "fact ((n::nat) + 1) = (n + 1) * fact n"
by simp
-lemma nat_fact_Suc: "fact (Suc n) = (Suc n) * fact n"
+lemma fact_Suc_nat: "fact (Suc n) = (Suc n) * fact n"
by (simp add: One_nat_def)
-lemma int_fact_plus_one:
+lemma fact_plus_one_int:
assumes "n >= 0"
shows "fact ((n::int) + 1) = (n + 1) * fact n"
- using prems by (rule nat_fact_plus_one [transferred])
+ using prems by (rule fact_plus_one_nat [transferred])
-lemma nat_fact_reduce: "(n::nat) > 0 \<Longrightarrow> fact n = n * fact (n - 1)"
+lemma fact_reduce_nat: "(n::nat) > 0 \<Longrightarrow> fact n = n * fact (n - 1)"
by simp
-lemma int_fact_reduce:
+lemma fact_reduce_int:
assumes "(n::int) > 0"
shows "fact n = n * fact (n - 1)"
using prems apply (subst tsub_eq [symmetric], auto)
- apply (rule nat_fact_reduce [transferred])
+ apply (rule fact_reduce_nat [transferred])
using prems apply auto
done
declare fact_nat.simps [simp del]
-lemma nat_fact_nonzero [simp]: "fact (n::nat) \<noteq> 0"
- apply (induct n rule: nat_induct')
- apply (auto simp add: nat_fact_plus_one)
+lemma fact_nonzero_nat [simp]: "fact (n::nat) \<noteq> 0"
+ apply (induct n rule: induct'_nat)
+ apply (auto simp add: fact_plus_one_nat)
done
-lemma int_fact_nonzero [simp]: "n >= 0 \<Longrightarrow> fact (n::int) ~= 0"
+lemma fact_nonzero_int [simp]: "n >= 0 \<Longrightarrow> fact (n::int) ~= 0"
by (simp add: fact_int_def)
-lemma nat_fact_gt_zero [simp]: "fact (n :: nat) > 0"
- by (insert nat_fact_nonzero [of n], arith)
+lemma fact_gt_zero_nat [simp]: "fact (n :: nat) > 0"
+ by (insert fact_nonzero_nat [of n], arith)
-lemma int_fact_gt_zero [simp]: "n >= 0 \<Longrightarrow> fact (n :: int) > 0"
+lemma fact_gt_zero_int [simp]: "n >= 0 \<Longrightarrow> fact (n :: int) > 0"
by (auto simp add: fact_int_def)
-lemma nat_fact_ge_one [simp]: "fact (n :: nat) >= 1"
- by (insert nat_fact_nonzero [of n], arith)
+lemma fact_ge_one_nat [simp]: "fact (n :: nat) >= 1"
+ by (insert fact_nonzero_nat [of n], arith)
-lemma nat_fact_ge_Suc_0 [simp]: "fact (n :: nat) >= Suc 0"
- by (insert nat_fact_nonzero [of n], arith)
+lemma fact_ge_Suc_0_nat [simp]: "fact (n :: nat) >= Suc 0"
+ by (insert fact_nonzero_nat [of n], arith)
-lemma int_fact_ge_one [simp]: "n >= 0 \<Longrightarrow> fact (n :: int) >= 1"
+lemma fact_ge_one_int [simp]: "n >= 0 \<Longrightarrow> fact (n :: int) >= 1"
apply (auto simp add: fact_int_def)
apply (subgoal_tac "1 = int 1")
apply (erule ssubst)
@@ -178,41 +178,41 @@
apply auto
done
-lemma nat_dvd_fact [rule_format]: "1 <= m \<longrightarrow> m <= n \<longrightarrow> m dvd fact (n::nat)"
- apply (induct n rule: nat_induct')
- apply (auto simp add: nat_fact_plus_one)
+lemma dvd_fact_nat [rule_format]: "1 <= m \<longrightarrow> m <= n \<longrightarrow> m dvd fact (n::nat)"
+ apply (induct n rule: induct'_nat)
+ apply (auto simp add: fact_plus_one_nat)
apply (subgoal_tac "m = n + 1")
apply auto
done
-lemma int_dvd_fact [rule_format]: "1 <= m \<longrightarrow> m <= n \<longrightarrow> m dvd fact (n::int)"
+lemma dvd_fact_int [rule_format]: "1 <= m \<longrightarrow> m <= n \<longrightarrow> m dvd fact (n::int)"
apply (case_tac "1 <= n")
apply (induct n rule: int_ge_induct)
- apply (auto simp add: int_fact_plus_one)
+ apply (auto simp add: fact_plus_one_int)
apply (subgoal_tac "m = i + 1")
apply auto
done
-lemma nat_interval_plus_one: "(i::nat) <= j + 1 \<Longrightarrow>
+lemma interval_plus_one_nat: "(i::nat) <= j + 1 \<Longrightarrow>
{i..j+1} = {i..j} Un {j+1}"
by auto
-lemma int_interval_plus_one: "(i::int) <= j + 1 \<Longrightarrow> {i..j+1} = {i..j} Un {j+1}"
+lemma interval_plus_one_int: "(i::int) <= j + 1 \<Longrightarrow> {i..j+1} = {i..j} Un {j+1}"
by auto
-lemma nat_fact_altdef: "fact (n::nat) = (PROD i:{1..n}. i)"
- apply (induct n rule: nat_induct')
+lemma fact_altdef_nat: "fact (n::nat) = (PROD i:{1..n}. i)"
+ apply (induct n rule: induct'_nat)
apply force
- apply (subst nat_fact_plus_one)
- apply (subst nat_interval_plus_one)
+ apply (subst fact_plus_one_nat)
+ apply (subst interval_plus_one_nat)
apply auto
done
-lemma int_fact_altdef: "n >= 0 \<Longrightarrow> fact (n::int) = (PROD i:{1..n}. i)"
+lemma fact_altdef_int: "n >= 0 \<Longrightarrow> fact (n::int) = (PROD i:{1..n}. i)"
apply (induct n rule: int_ge_induct)
apply force
- apply (subst int_fact_plus_one, assumption)
- apply (subst int_interval_plus_one)
+ apply (subst fact_plus_one_int, assumption)
+ apply (subst interval_plus_one_int)
apply auto
done
@@ -220,8 +220,8 @@
lemma next_prime_bound: "\<exists>(p::nat). prime p \<and> n < p \<and> p <= fact n + 1"
proof-
- have f1: "fact n + 1 \<noteq> 1" using nat_fact_ge_one [of n] by arith
- from nat_prime_factor [OF f1]
+ have f1: "fact n + 1 \<noteq> 1" using fact_ge_one_nat [of n] by arith
+ from prime_factor_nat [OF f1]
obtain p where "prime p" and "p dvd fact n + 1" by auto
hence "p \<le> fact n + 1"
by (intro dvd_imp_le, auto)
@@ -229,9 +229,9 @@
from `prime p` have "p \<ge> 1"
by (cases p, simp_all)
with `p <= n` have "p dvd fact n"
- by (intro nat_dvd_fact)
+ by (intro dvd_fact_nat)
with `p dvd fact n + 1` have "p dvd fact n + 1 - fact n"
- by (rule nat_dvd_diff)
+ by (rule dvd_diff_nat)
hence "p dvd 1" by simp
hence "p <= 1" by auto
moreover from `prime p` have "p > 1" by auto
@@ -256,95 +256,94 @@
subsection {* Binomial coefficients *}
-lemma nat_choose_zero [simp]: "(n::nat) choose 0 = 1"
+lemma choose_zero_nat [simp]: "(n::nat) choose 0 = 1"
by simp
-lemma int_choose_zero [simp]: "n \<ge> 0 \<Longrightarrow> (n::int) choose 0 = 1"
+lemma choose_zero_int [simp]: "n \<ge> 0 \<Longrightarrow> (n::int) choose 0 = 1"
by (simp add: binomial_int_def)
-lemma nat_zero_choose [rule_format,simp]: "ALL (k::nat) > n. n choose k = 0"
- by (induct n rule: nat_induct', auto)
+lemma zero_choose_nat [rule_format,simp]: "ALL (k::nat) > n. n choose k = 0"
+ by (induct n rule: induct'_nat, auto)
-lemma int_zero_choose [rule_format,simp]: "(k::int) > n \<Longrightarrow> n choose k = 0"
+lemma zero_choose_int [rule_format,simp]: "(k::int) > n \<Longrightarrow> n choose k = 0"
unfolding binomial_int_def apply (case_tac "n < 0")
apply force
apply (simp del: binomial_nat.simps)
done
-lemma nat_choose_reduce: "(n::nat) > 0 \<Longrightarrow> 0 < k \<Longrightarrow>
+lemma choose_reduce_nat: "(n::nat) > 0 \<Longrightarrow> 0 < k \<Longrightarrow>
(n choose k) = ((n - 1) choose k) + ((n - 1) choose (k - 1))"
by simp
-lemma int_choose_reduce: "(n::int) > 0 \<Longrightarrow> 0 < k \<Longrightarrow>
+lemma choose_reduce_int: "(n::int) > 0 \<Longrightarrow> 0 < k \<Longrightarrow>
(n choose k) = ((n - 1) choose k) + ((n - 1) choose (k - 1))"
- unfolding binomial_int_def apply (subst nat_choose_reduce)
+ unfolding binomial_int_def apply (subst choose_reduce_nat)
apply (auto simp del: binomial_nat.simps
simp add: nat_diff_distrib)
done
-lemma nat_choose_plus_one: "((n::nat) + 1) choose (k + 1) =
+lemma choose_plus_one_nat: "((n::nat) + 1) choose (k + 1) =
(n choose (k + 1)) + (n choose k)"
- by (simp add: nat_choose_reduce)
+ by (simp add: choose_reduce_nat)
-lemma nat_choose_Suc: "(Suc n) choose (Suc k) =
+lemma choose_Suc_nat: "(Suc n) choose (Suc k) =
(n choose (Suc k)) + (n choose k)"
- by (simp add: nat_choose_reduce One_nat_def)
+ by (simp add: choose_reduce_nat One_nat_def)
-lemma int_choose_plus_one: "n \<ge> 0 \<Longrightarrow> k \<ge> 0 \<Longrightarrow> ((n::int) + 1) choose (k + 1) =
+lemma choose_plus_one_int: "n \<ge> 0 \<Longrightarrow> k \<ge> 0 \<Longrightarrow> ((n::int) + 1) choose (k + 1) =
(n choose (k + 1)) + (n choose k)"
- by (simp add: binomial_int_def nat_choose_plus_one nat_add_distrib
- del: binomial_nat.simps)
+ by (simp add: binomial_int_def choose_plus_one_nat nat_add_distrib del: binomial_nat.simps)
declare binomial_nat.simps [simp del]
-lemma nat_choose_self [simp]: "((n::nat) choose n) = 1"
- by (induct n rule: nat_induct', auto simp add: nat_choose_plus_one)
+lemma choose_self_nat [simp]: "((n::nat) choose n) = 1"
+ by (induct n rule: induct'_nat, auto simp add: choose_plus_one_nat)
-lemma int_choose_self [simp]: "n \<ge> 0 \<Longrightarrow> ((n::int) choose n) = 1"
+lemma choose_self_int [simp]: "n \<ge> 0 \<Longrightarrow> ((n::int) choose n) = 1"
by (auto simp add: binomial_int_def)
-lemma nat_choose_one [simp]: "(n::nat) choose 1 = n"
- by (induct n rule: nat_induct', auto simp add: nat_choose_reduce)
+lemma choose_one_nat [simp]: "(n::nat) choose 1 = n"
+ by (induct n rule: induct'_nat, auto simp add: choose_reduce_nat)
-lemma int_choose_one [simp]: "n \<ge> 0 \<Longrightarrow> (n::int) choose 1 = n"
+lemma choose_one_int [simp]: "n \<ge> 0 \<Longrightarrow> (n::int) choose 1 = n"
by (auto simp add: binomial_int_def)
-lemma nat_plus_one_choose_self [simp]: "(n::nat) + 1 choose n = n + 1"
- apply (induct n rule: nat_induct', force)
+lemma plus_one_choose_self_nat [simp]: "(n::nat) + 1 choose n = n + 1"
+ apply (induct n rule: induct'_nat, force)
apply (case_tac "n = 0")
apply auto
- apply (subst nat_choose_reduce)
+ apply (subst choose_reduce_nat)
apply (auto simp add: One_nat_def)
(* natdiff_cancel_numerals introduces Suc *)
done
-lemma nat_Suc_choose_self [simp]: "(Suc n) choose n = Suc n"
- using nat_plus_one_choose_self by (simp add: One_nat_def)
+lemma Suc_choose_self_nat [simp]: "(Suc n) choose n = Suc n"
+ using plus_one_choose_self_nat by (simp add: One_nat_def)
-lemma int_plus_one_choose_self [rule_format, simp]:
+lemma plus_one_choose_self_int [rule_format, simp]:
"(n::int) \<ge> 0 \<longrightarrow> n + 1 choose n = n + 1"
by (auto simp add: binomial_int_def nat_add_distrib)
(* bounded quantification doesn't work with the unicode characters? *)
-lemma nat_choose_pos [rule_format]: "ALL k <= (n::nat).
+lemma choose_pos_nat [rule_format]: "ALL k <= (n::nat).
((n::nat) choose k) > 0"
- apply (induct n rule: nat_induct')
+ apply (induct n rule: induct'_nat)
apply force
apply clarify
apply (case_tac "k = 0")
apply force
- apply (subst nat_choose_reduce)
+ apply (subst choose_reduce_nat)
apply auto
done
-lemma int_choose_pos: "n \<ge> 0 \<Longrightarrow> k >= 0 \<Longrightarrow> k \<le> n \<Longrightarrow>
+lemma choose_pos_int: "n \<ge> 0 \<Longrightarrow> k >= 0 \<Longrightarrow> k \<le> n \<Longrightarrow>
((n::int) choose k) > 0"
- by (auto simp add: binomial_int_def nat_choose_pos)
+ by (auto simp add: binomial_int_def choose_pos_nat)
lemma binomial_induct [rule_format]: "(ALL (n::nat). P n n) \<longrightarrow>
(ALL n. P (n + 1) 0) \<longrightarrow> (ALL n. (ALL k < n. P n k \<longrightarrow> P n (k + 1) \<longrightarrow>
P (n + 1) (k + 1))) \<longrightarrow> (ALL k <= n. P n k)"
- apply (induct n rule: nat_induct')
+ apply (induct n rule: induct'_nat)
apply auto
apply (case_tac "k = 0")
apply auto
@@ -355,7 +354,7 @@
apply auto
done
-lemma nat_choose_altdef_aux: "(k::nat) \<le> n \<Longrightarrow>
+lemma choose_altdef_aux_nat: "(k::nat) \<le> n \<Longrightarrow>
fact k * fact (n - k) * (n choose k) = fact n"
apply (rule binomial_induct [of _ k n])
apply auto
@@ -364,22 +363,22 @@
assume less: "k < n"
assume ih1: "fact k * fact (n - k) * (n choose k) = fact n"
hence one: "fact (k + 1) * fact (n - k) * (n choose k) = (k + 1) * fact n"
- by (subst nat_fact_plus_one, auto)
+ by (subst fact_plus_one_nat, auto)
assume ih2: "fact (k + 1) * fact (n - (k + 1)) * (n choose (k + 1)) =
fact n"
with less have "fact (k + 1) * fact ((n - (k + 1)) + 1) *
(n choose (k + 1)) = (n - k) * fact n"
- by (subst (2) nat_fact_plus_one, auto)
+ by (subst (2) fact_plus_one_nat, auto)
with less have two: "fact (k + 1) * fact (n - k) * (n choose (k + 1)) =
(n - k) * fact n" by simp
have "fact (k + 1) * fact (n - k) * (n + 1 choose (k + 1)) =
fact (k + 1) * fact (n - k) * (n choose (k + 1)) +
fact (k + 1) * fact (n - k) * (n choose k)"
- by (subst nat_choose_reduce, auto simp add: ring_simps)
+ by (subst choose_reduce_nat, auto simp add: ring_simps)
also note one
also note two
also with less have "(n - k) * fact n + (k + 1) * fact n= fact (n + 1)"
- apply (subst nat_fact_plus_one)
+ apply (subst fact_plus_one_nat)
apply (subst left_distrib [symmetric])
apply simp
done
@@ -387,43 +386,43 @@
fact (n + 1)" .
qed
-lemma nat_choose_altdef: "(k::nat) \<le> n \<Longrightarrow>
+lemma choose_altdef_nat: "(k::nat) \<le> n \<Longrightarrow>
n choose k = fact n div (fact k * fact (n - k))"
- apply (frule nat_choose_altdef_aux)
+ apply (frule choose_altdef_aux_nat)
apply (erule subst)
apply (simp add: mult_ac)
done
-lemma int_choose_altdef:
+lemma choose_altdef_int:
assumes "(0::int) <= k" and "k <= n"
shows "n choose k = fact n div (fact k * fact (n - k))"
apply (subst tsub_eq [symmetric], rule prems)
- apply (rule nat_choose_altdef [transferred])
+ apply (rule choose_altdef_nat [transferred])
using prems apply auto
done
-lemma nat_choose_dvd: "(k::nat) \<le> n \<Longrightarrow> fact k * fact (n - k) dvd fact n"
- unfolding dvd_def apply (frule nat_choose_altdef_aux)
+lemma choose_dvd_nat: "(k::nat) \<le> n \<Longrightarrow> fact k * fact (n - k) dvd fact n"
+ unfolding dvd_def apply (frule choose_altdef_aux_nat)
(* why don't blast and auto get this??? *)
apply (rule exI)
apply (erule sym)
done
-lemma int_choose_dvd:
+lemma choose_dvd_int:
assumes "(0::int) <= k" and "k <= n"
shows "fact k * fact (n - k) dvd fact n"
apply (subst tsub_eq [symmetric], rule prems)
- apply (rule nat_choose_dvd [transferred])
+ apply (rule choose_dvd_nat [transferred])
using prems apply auto
done
(* generalizes Tobias Nipkow's proof to any commutative semiring *)
theorem binomial: "(a+b::'a::{comm_ring_1,power})^n =
(SUM k=0..n. (of_nat (n choose k)) * a^k * b^(n-k))" (is "?P n")
-proof (induct n rule: nat_induct')
+proof (induct n rule: induct'_nat)
show "?P 0" by simp
next
fix n
@@ -455,7 +454,7 @@
"... = a^(n+1) + b^(n+1) +
(SUM k=1..n. of_nat(n+1 choose k) * a^k * b^(n+1-k))"
by (auto simp add: ring_simps setsum_addf [symmetric]
- nat_choose_reduce)
+ choose_reduce_nat)
also have "... = (SUM k=0..n+1. of_nat (n+1 choose k) * a^k * b^(n+1-k))"
using decomp by (simp add: ring_simps)
finally show "?P (n + 1)" by simp
@@ -464,7 +463,7 @@
lemma set_explicit: "{S. S = T \<and> P S} = (if P T then {T} else {})"
by auto
-lemma nat_card_subsets [rule_format]:
+lemma card_subsets_nat [rule_format]:
fixes S :: "'a set"
assumes "finite S"
shows "ALL k. card {T. T \<le> S \<and> card T = k} = card S choose k"
@@ -480,7 +479,7 @@
fix k
show "card {T. T \<subseteq> (insert x F) \<and> card T = k} =
card (insert x F) choose k" (is "?Q k")
- proof (induct k rule: nat_induct')
+ proof (induct k rule: induct'_nat)
from iassms have "{T. T \<le> (insert x F) \<and> card T = 0} = {{}}"
apply auto
apply (subst (asm) card_0_eq)
@@ -530,7 +529,7 @@
by auto
finally have "card ({T. T \<le> insert x F \<and> card T = k + 1}) =
card F choose (k + 1) + (card F choose k)".
- with iassms nat_choose_plus_one show ?thesis
+ with iassms choose_plus_one_nat show ?thesis
by auto
qed
qed
--- a/src/HOL/NewNumberTheory/Cong.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/NewNumberTheory/Cong.thy Tue Jul 07 17:39:51 2009 +0200
@@ -35,18 +35,18 @@
subsection {* Turn off One_nat_def *}
-lemma nat_induct' [case_names zero plus1, induct type: nat]:
+lemma induct'_nat [case_names zero plus1, induct type: nat]:
"\<lbrakk> P (0::nat); !!n. P n \<Longrightarrow> P (n + 1)\<rbrakk> \<Longrightarrow> P n"
by (erule nat_induct) (simp add:One_nat_def)
-lemma nat_cases [case_names zero plus1, cases type: nat]:
+lemma cases_nat [case_names zero plus1, cases type: nat]:
"P (0::nat) \<Longrightarrow> (!!n. P (n + 1)) \<Longrightarrow> P n"
-by(metis nat_induct')
+by(metis induct'_nat)
lemma power_plus_one [simp]: "(x::'a::power)^(n + 1) = x * x^n"
by (simp add: One_nat_def)
-lemma nat_power_eq_one_eq [simp]:
+lemma power_eq_one_eq_nat [simp]:
"((x::nat)^m = 1) = (m = 0 | x = 1)"
by (induct m, auto)
@@ -147,55 +147,55 @@
subsection {* Congruence *}
(* was zcong_0, etc. *)
-lemma nat_cong_0 [simp, presburger]: "([(a::nat) = b] (mod 0)) = (a = b)"
+lemma cong_0_nat [simp, presburger]: "([(a::nat) = b] (mod 0)) = (a = b)"
by (unfold cong_nat_def, auto)
-lemma int_cong_0 [simp, presburger]: "([(a::int) = b] (mod 0)) = (a = b)"
+lemma cong_0_int [simp, presburger]: "([(a::int) = b] (mod 0)) = (a = b)"
by (unfold cong_int_def, auto)
-lemma nat_cong_1 [simp, presburger]: "[(a::nat) = b] (mod 1)"
+lemma cong_1_nat [simp, presburger]: "[(a::nat) = b] (mod 1)"
by (unfold cong_nat_def, auto)
-lemma nat_cong_Suc_0 [simp, presburger]: "[(a::nat) = b] (mod Suc 0)"
+lemma cong_Suc_0_nat [simp, presburger]: "[(a::nat) = b] (mod Suc 0)"
by (unfold cong_nat_def, auto simp add: One_nat_def)
-lemma int_cong_1 [simp, presburger]: "[(a::int) = b] (mod 1)"
+lemma cong_1_int [simp, presburger]: "[(a::int) = b] (mod 1)"
by (unfold cong_int_def, auto)
-lemma nat_cong_refl [simp]: "[(k::nat) = k] (mod m)"
+lemma cong_refl_nat [simp]: "[(k::nat) = k] (mod m)"
by (unfold cong_nat_def, auto)
-lemma int_cong_refl [simp]: "[(k::int) = k] (mod m)"
+lemma cong_refl_int [simp]: "[(k::int) = k] (mod m)"
by (unfold cong_int_def, auto)
-lemma nat_cong_sym: "[(a::nat) = b] (mod m) \<Longrightarrow> [b = a] (mod m)"
+lemma cong_sym_nat: "[(a::nat) = b] (mod m) \<Longrightarrow> [b = a] (mod m)"
by (unfold cong_nat_def, auto)
-lemma int_cong_sym: "[(a::int) = b] (mod m) \<Longrightarrow> [b = a] (mod m)"
+lemma cong_sym_int: "[(a::int) = b] (mod m) \<Longrightarrow> [b = a] (mod m)"
by (unfold cong_int_def, auto)
-lemma nat_cong_sym_eq: "[(a::nat) = b] (mod m) = [b = a] (mod m)"
+lemma cong_sym_eq_nat: "[(a::nat) = b] (mod m) = [b = a] (mod m)"
by (unfold cong_nat_def, auto)
-lemma int_cong_sym_eq: "[(a::int) = b] (mod m) = [b = a] (mod m)"
+lemma cong_sym_eq_int: "[(a::int) = b] (mod m) = [b = a] (mod m)"
by (unfold cong_int_def, auto)
-lemma nat_cong_trans [trans]:
+lemma cong_trans_nat [trans]:
"[(a::nat) = b] (mod m) \<Longrightarrow> [b = c] (mod m) \<Longrightarrow> [a = c] (mod m)"
by (unfold cong_nat_def, auto)
-lemma int_cong_trans [trans]:
+lemma cong_trans_int [trans]:
"[(a::int) = b] (mod m) \<Longrightarrow> [b = c] (mod m) \<Longrightarrow> [a = c] (mod m)"
by (unfold cong_int_def, auto)
-lemma nat_cong_add:
+lemma cong_add_nat:
"[(a::nat) = b] (mod m) \<Longrightarrow> [c = d] (mod m) \<Longrightarrow> [a + c = b + d] (mod m)"
apply (unfold cong_nat_def)
apply (subst (1 2) mod_add_eq)
apply simp
done
-lemma int_cong_add:
+lemma cong_add_int:
"[(a::int) = b] (mod m) \<Longrightarrow> [c = d] (mod m) \<Longrightarrow> [a + c = b + d] (mod m)"
apply (unfold cong_int_def)
apply (subst (1 2) mod_add_left_eq)
@@ -203,35 +203,35 @@
apply simp
done
-lemma int_cong_diff:
+lemma cong_diff_int:
"[(a::int) = b] (mod m) \<Longrightarrow> [c = d] (mod m) \<Longrightarrow> [a - c = b - d] (mod m)"
apply (unfold cong_int_def)
apply (subst (1 2) mod_diff_eq)
apply simp
done
-lemma int_cong_diff_aux:
+lemma cong_diff_aux_int:
"(a::int) >= c \<Longrightarrow> b >= d \<Longrightarrow> [(a::int) = b] (mod m) \<Longrightarrow>
[c = d] (mod m) \<Longrightarrow> [tsub a c = tsub b d] (mod m)"
apply (subst (1 2) tsub_eq)
- apply (auto intro: int_cong_diff)
+ apply (auto intro: cong_diff_int)
done;
-lemma nat_cong_diff:
+lemma cong_diff_nat:
assumes "(a::nat) >= c" and "b >= d" and "[a = b] (mod m)" and
"[c = d] (mod m)"
shows "[a - c = b - d] (mod m)"
- using prems by (rule int_cong_diff_aux [transferred]);
+ using prems by (rule cong_diff_aux_int [transferred]);
-lemma nat_cong_mult:
+lemma cong_mult_nat:
"[(a::nat) = b] (mod m) \<Longrightarrow> [c = d] (mod m) \<Longrightarrow> [a * c = b * d] (mod m)"
apply (unfold cong_nat_def)
apply (subst (1 2) mod_mult_eq)
apply simp
done
-lemma int_cong_mult:
+lemma cong_mult_int:
"[(a::int) = b] (mod m) \<Longrightarrow> [c = d] (mod m) \<Longrightarrow> [a * c = b * d] (mod m)"
apply (unfold cong_int_def)
apply (subst (1 2) zmod_zmult1_eq)
@@ -240,197 +240,197 @@
apply simp
done
-lemma nat_cong_exp: "[(x::nat) = y] (mod n) \<Longrightarrow> [x^k = y^k] (mod n)"
+lemma cong_exp_nat: "[(x::nat) = y] (mod n) \<Longrightarrow> [x^k = y^k] (mod n)"
apply (induct k)
- apply (auto simp add: nat_cong_refl nat_cong_mult)
+ apply (auto simp add: cong_refl_nat cong_mult_nat)
done
-lemma int_cong_exp: "[(x::int) = y] (mod n) \<Longrightarrow> [x^k = y^k] (mod n)"
+lemma cong_exp_int: "[(x::int) = y] (mod n) \<Longrightarrow> [x^k = y^k] (mod n)"
apply (induct k)
- apply (auto simp add: int_cong_refl int_cong_mult)
+ apply (auto simp add: cong_refl_int cong_mult_int)
done
-lemma nat_cong_setsum [rule_format]:
+lemma cong_setsum_nat [rule_format]:
"(ALL x: A. [((f x)::nat) = g x] (mod m)) \<longrightarrow>
[(SUM x:A. f x) = (SUM x:A. g x)] (mod m)"
apply (case_tac "finite A")
apply (induct set: finite)
- apply (auto intro: nat_cong_add)
+ apply (auto intro: cong_add_nat)
done
-lemma int_cong_setsum [rule_format]:
+lemma cong_setsum_int [rule_format]:
"(ALL x: A. [((f x)::int) = g x] (mod m)) \<longrightarrow>
[(SUM x:A. f x) = (SUM x:A. g x)] (mod m)"
apply (case_tac "finite A")
apply (induct set: finite)
- apply (auto intro: int_cong_add)
+ apply (auto intro: cong_add_int)
done
-lemma nat_cong_setprod [rule_format]:
+lemma cong_setprod_nat [rule_format]:
"(ALL x: A. [((f x)::nat) = g x] (mod m)) \<longrightarrow>
[(PROD x:A. f x) = (PROD x:A. g x)] (mod m)"
apply (case_tac "finite A")
apply (induct set: finite)
- apply (auto intro: nat_cong_mult)
+ apply (auto intro: cong_mult_nat)
done
-lemma int_cong_setprod [rule_format]:
+lemma cong_setprod_int [rule_format]:
"(ALL x: A. [((f x)::int) = g x] (mod m)) \<longrightarrow>
[(PROD x:A. f x) = (PROD x:A. g x)] (mod m)"
apply (case_tac "finite A")
apply (induct set: finite)
- apply (auto intro: int_cong_mult)
+ apply (auto intro: cong_mult_int)
done
-lemma nat_cong_scalar: "[(a::nat)= b] (mod m) \<Longrightarrow> [a * k = b * k] (mod m)"
- by (rule nat_cong_mult, simp_all)
+lemma cong_scalar_nat: "[(a::nat)= b] (mod m) \<Longrightarrow> [a * k = b * k] (mod m)"
+ by (rule cong_mult_nat, simp_all)
-lemma int_cong_scalar: "[(a::int)= b] (mod m) \<Longrightarrow> [a * k = b * k] (mod m)"
- by (rule int_cong_mult, simp_all)
+lemma cong_scalar_int: "[(a::int)= b] (mod m) \<Longrightarrow> [a * k = b * k] (mod m)"
+ by (rule cong_mult_int, simp_all)
-lemma nat_cong_scalar2: "[(a::nat)= b] (mod m) \<Longrightarrow> [k * a = k * b] (mod m)"
- by (rule nat_cong_mult, simp_all)
+lemma cong_scalar2_nat: "[(a::nat)= b] (mod m) \<Longrightarrow> [k * a = k * b] (mod m)"
+ by (rule cong_mult_nat, simp_all)
-lemma int_cong_scalar2: "[(a::int)= b] (mod m) \<Longrightarrow> [k * a = k * b] (mod m)"
- by (rule int_cong_mult, simp_all)
+lemma cong_scalar2_int: "[(a::int)= b] (mod m) \<Longrightarrow> [k * a = k * b] (mod m)"
+ by (rule cong_mult_int, simp_all)
-lemma nat_cong_mult_self: "[(a::nat) * m = 0] (mod m)"
+lemma cong_mult_self_nat: "[(a::nat) * m = 0] (mod m)"
by (unfold cong_nat_def, auto)
-lemma int_cong_mult_self: "[(a::int) * m = 0] (mod m)"
+lemma cong_mult_self_int: "[(a::int) * m = 0] (mod m)"
by (unfold cong_int_def, auto)
-lemma int_cong_eq_diff_cong_0: "[(a::int) = b] (mod m) = [a - b = 0] (mod m)"
+lemma cong_eq_diff_cong_0_int: "[(a::int) = b] (mod m) = [a - b = 0] (mod m)"
apply (rule iffI)
- apply (erule int_cong_diff [of a b m b b, simplified])
- apply (erule int_cong_add [of "a - b" 0 m b b, simplified])
+ apply (erule cong_diff_int [of a b m b b, simplified])
+ apply (erule cong_add_int [of "a - b" 0 m b b, simplified])
done
-lemma int_cong_eq_diff_cong_0_aux: "a >= b \<Longrightarrow>
+lemma cong_eq_diff_cong_0_aux_int: "a >= b \<Longrightarrow>
[(a::int) = b] (mod m) = [tsub a b = 0] (mod m)"
- by (subst tsub_eq, assumption, rule int_cong_eq_diff_cong_0)
+ by (subst tsub_eq, assumption, rule cong_eq_diff_cong_0_int)
-lemma nat_cong_eq_diff_cong_0:
+lemma cong_eq_diff_cong_0_nat:
assumes "(a::nat) >= b"
shows "[a = b] (mod m) = [a - b = 0] (mod m)"
- using prems by (rule int_cong_eq_diff_cong_0_aux [transferred])
+ using prems by (rule cong_eq_diff_cong_0_aux_int [transferred])
-lemma nat_cong_diff_cong_0':
+lemma cong_diff_cong_0'_nat:
"[(x::nat) = y] (mod n) \<longleftrightarrow>
(if x <= y then [y - x = 0] (mod n) else [x - y = 0] (mod n))"
apply (case_tac "y <= x")
- apply (frule nat_cong_eq_diff_cong_0 [where m = n])
+ apply (frule cong_eq_diff_cong_0_nat [where m = n])
apply auto [1]
apply (subgoal_tac "x <= y")
- apply (frule nat_cong_eq_diff_cong_0 [where m = n])
- apply (subst nat_cong_sym_eq)
+ apply (frule cong_eq_diff_cong_0_nat [where m = n])
+ apply (subst cong_sym_eq_nat)
apply auto
done
-lemma nat_cong_altdef: "(a::nat) >= b \<Longrightarrow> [a = b] (mod m) = (m dvd (a - b))"
- apply (subst nat_cong_eq_diff_cong_0, assumption)
+lemma cong_altdef_nat: "(a::nat) >= b \<Longrightarrow> [a = b] (mod m) = (m dvd (a - b))"
+ apply (subst cong_eq_diff_cong_0_nat, assumption)
apply (unfold cong_nat_def)
apply (simp add: dvd_eq_mod_eq_0 [symmetric])
done
-lemma int_cong_altdef: "[(a::int) = b] (mod m) = (m dvd (a - b))"
- apply (subst int_cong_eq_diff_cong_0)
+lemma cong_altdef_int: "[(a::int) = b] (mod m) = (m dvd (a - b))"
+ apply (subst cong_eq_diff_cong_0_int)
apply (unfold cong_int_def)
apply (simp add: dvd_eq_mod_eq_0 [symmetric])
done
-lemma int_cong_abs: "[(x::int) = y] (mod abs m) = [x = y] (mod m)"
- by (simp add: int_cong_altdef)
+lemma cong_abs_int: "[(x::int) = y] (mod abs m) = [x = y] (mod m)"
+ by (simp add: cong_altdef_int)
-lemma int_cong_square:
+lemma cong_square_int:
"\<lbrakk> prime (p::int); 0 < a; [a * a = 1] (mod p) \<rbrakk>
\<Longrightarrow> [a = 1] (mod p) \<or> [a = - 1] (mod p)"
- apply (simp only: int_cong_altdef)
- apply (subst int_prime_dvd_mult_eq [symmetric], assumption)
+ apply (simp only: cong_altdef_int)
+ apply (subst prime_dvd_mult_eq_int [symmetric], assumption)
(* any way around this? *)
apply (subgoal_tac "a * a - 1 = (a - 1) * (a - -1)")
apply (auto simp add: ring_simps)
done
-lemma int_cong_mult_rcancel:
+lemma cong_mult_rcancel_int:
"coprime k (m::int) \<Longrightarrow> [a * k = b * k] (mod m) = [a = b] (mod m)"
- apply (subst (1 2) int_cong_altdef)
+ apply (subst (1 2) cong_altdef_int)
apply (subst left_diff_distrib [symmetric])
- apply (rule int_coprime_dvd_mult_iff)
- apply (subst int_gcd_commute, assumption)
+ apply (rule coprime_dvd_mult_iff_int)
+ apply (subst gcd_commute_int, assumption)
done
-lemma nat_cong_mult_rcancel:
+lemma cong_mult_rcancel_nat:
assumes "coprime k (m::nat)"
shows "[a * k = b * k] (mod m) = [a = b] (mod m)"
- apply (rule int_cong_mult_rcancel [transferred])
+ apply (rule cong_mult_rcancel_int [transferred])
using prems apply auto
done
-lemma nat_cong_mult_lcancel:
+lemma cong_mult_lcancel_nat:
"coprime k (m::nat) \<Longrightarrow> [k * a = k * b ] (mod m) = [a = b] (mod m)"
- by (simp add: mult_commute nat_cong_mult_rcancel)
+ by (simp add: mult_commute cong_mult_rcancel_nat)
-lemma int_cong_mult_lcancel:
+lemma cong_mult_lcancel_int:
"coprime k (m::int) \<Longrightarrow> [k * a = k * b] (mod m) = [a = b] (mod m)"
- by (simp add: mult_commute int_cong_mult_rcancel)
+ by (simp add: mult_commute cong_mult_rcancel_int)
(* was zcong_zgcd_zmult_zmod *)
-lemma int_coprime_cong_mult:
+lemma coprime_cong_mult_int:
"[(a::int) = b] (mod m) \<Longrightarrow> [a = b] (mod n) \<Longrightarrow> coprime m n
\<Longrightarrow> [a = b] (mod m * n)"
- apply (simp only: int_cong_altdef)
- apply (erule (2) int_divides_mult)
+ apply (simp only: cong_altdef_int)
+ apply (erule (2) divides_mult_int)
done
-lemma nat_coprime_cong_mult:
+lemma coprime_cong_mult_nat:
assumes "[(a::nat) = b] (mod m)" and "[a = b] (mod n)" and "coprime m n"
shows "[a = b] (mod m * n)"
- apply (rule int_coprime_cong_mult [transferred])
+ apply (rule coprime_cong_mult_int [transferred])
using prems apply auto
done
-lemma nat_cong_less_imp_eq: "0 \<le> (a::nat) \<Longrightarrow>
+lemma cong_less_imp_eq_nat: "0 \<le> (a::nat) \<Longrightarrow>
a < m \<Longrightarrow> 0 \<le> b \<Longrightarrow> b < m \<Longrightarrow> [a = b] (mod m) \<Longrightarrow> a = b"
by (auto simp add: cong_nat_def mod_pos_pos_trivial)
-lemma int_cong_less_imp_eq: "0 \<le> (a::int) \<Longrightarrow>
+lemma cong_less_imp_eq_int: "0 \<le> (a::int) \<Longrightarrow>
a < m \<Longrightarrow> 0 \<le> b \<Longrightarrow> b < m \<Longrightarrow> [a = b] (mod m) \<Longrightarrow> a = b"
by (auto simp add: cong_int_def mod_pos_pos_trivial)
-lemma nat_cong_less_unique:
+lemma cong_less_unique_nat:
"0 < (m::nat) \<Longrightarrow> (\<exists>!b. 0 \<le> b \<and> b < m \<and> [a = b] (mod m))"
apply auto
apply (rule_tac x = "a mod m" in exI)
apply (unfold cong_nat_def, auto)
done
-lemma int_cong_less_unique:
+lemma cong_less_unique_int:
"0 < (m::int) \<Longrightarrow> (\<exists>!b. 0 \<le> b \<and> b < m \<and> [a = b] (mod m))"
apply auto
apply (rule_tac x = "a mod m" in exI)
apply (unfold cong_int_def, auto simp add: mod_pos_pos_trivial)
done
-lemma int_cong_iff_lin: "([(a::int) = b] (mod m)) = (\<exists>k. b = a + m * k)"
- apply (auto simp add: int_cong_altdef dvd_def ring_simps)
+lemma cong_iff_lin_int: "([(a::int) = b] (mod m)) = (\<exists>k. b = a + m * k)"
+ apply (auto simp add: cong_altdef_int dvd_def ring_simps)
apply (rule_tac [!] x = "-k" in exI, auto)
done
-lemma nat_cong_iff_lin: "([(a::nat) = b] (mod m)) =
+lemma cong_iff_lin_nat: "([(a::nat) = b] (mod m)) =
(\<exists>k1 k2. b + k1 * m = a + k2 * m)"
apply (rule iffI)
apply (case_tac "b <= a")
- apply (subst (asm) nat_cong_altdef, assumption)
+ apply (subst (asm) cong_altdef_nat, assumption)
apply (unfold dvd_def, auto)
apply (rule_tac x = k in exI)
apply (rule_tac x = 0 in exI)
apply (auto simp add: ring_simps)
- apply (subst (asm) nat_cong_sym_eq)
- apply (subst (asm) nat_cong_altdef)
+ apply (subst (asm) cong_sym_eq_nat)
+ apply (subst (asm) cong_altdef_nat)
apply force
apply (unfold dvd_def, auto)
apply (rule_tac x = 0 in exI)
@@ -443,50 +443,50 @@
apply auto
done
-lemma int_cong_gcd_eq: "[(a::int) = b] (mod m) \<Longrightarrow> gcd a m = gcd b m"
- apply (subst (asm) int_cong_iff_lin, auto)
+lemma cong_gcd_eq_int: "[(a::int) = b] (mod m) \<Longrightarrow> gcd a m = gcd b m"
+ apply (subst (asm) cong_iff_lin_int, auto)
apply (subst add_commute)
- apply (subst (2) int_gcd_commute)
+ apply (subst (2) gcd_commute_int)
apply (subst mult_commute)
- apply (subst int_gcd_add_mult)
- apply (rule int_gcd_commute)
+ apply (subst gcd_add_mult_int)
+ apply (rule gcd_commute_int)
done
-lemma nat_cong_gcd_eq:
+lemma cong_gcd_eq_nat:
assumes "[(a::nat) = b] (mod m)"
shows "gcd a m = gcd b m"
- apply (rule int_cong_gcd_eq [transferred])
+ apply (rule cong_gcd_eq_int [transferred])
using prems apply auto
done
-lemma nat_cong_imp_coprime: "[(a::nat) = b] (mod m) \<Longrightarrow> coprime a m \<Longrightarrow>
+lemma cong_imp_coprime_nat: "[(a::nat) = b] (mod m) \<Longrightarrow> coprime a m \<Longrightarrow>
coprime b m"
- by (auto simp add: nat_cong_gcd_eq)
+ by (auto simp add: cong_gcd_eq_nat)
-lemma int_cong_imp_coprime: "[(a::int) = b] (mod m) \<Longrightarrow> coprime a m \<Longrightarrow>
+lemma cong_imp_coprime_int: "[(a::int) = b] (mod m) \<Longrightarrow> coprime a m \<Longrightarrow>
coprime b m"
- by (auto simp add: int_cong_gcd_eq)
+ by (auto simp add: cong_gcd_eq_int)
-lemma nat_cong_cong_mod: "[(a::nat) = b] (mod m) =
+lemma cong_cong_mod_nat: "[(a::nat) = b] (mod m) =
[a mod m = b mod m] (mod m)"
by (auto simp add: cong_nat_def)
-lemma int_cong_cong_mod: "[(a::int) = b] (mod m) =
+lemma cong_cong_mod_int: "[(a::int) = b] (mod m) =
[a mod m = b mod m] (mod m)"
by (auto simp add: cong_int_def)
-lemma int_cong_minus [iff]: "[(a::int) = b] (mod -m) = [a = b] (mod m)"
- by (subst (1 2) int_cong_altdef, auto)
+lemma cong_minus_int [iff]: "[(a::int) = b] (mod -m) = [a = b] (mod m)"
+ by (subst (1 2) cong_altdef_int, auto)
-lemma nat_cong_zero [iff]: "[(a::nat) = b] (mod 0) = (a = b)"
+lemma cong_zero_nat [iff]: "[(a::nat) = b] (mod 0) = (a = b)"
by (auto simp add: cong_nat_def)
-lemma int_cong_zero [iff]: "[(a::int) = b] (mod 0) = (a = b)"
+lemma cong_zero_int [iff]: "[(a::int) = b] (mod 0) = (a = b)"
by (auto simp add: cong_int_def)
(*
-lemma int_mod_dvd_mod:
+lemma mod_dvd_mod_int:
"0 < (m::int) \<Longrightarrow> m dvd b \<Longrightarrow> (a mod b mod m) = (a mod m)"
apply (unfold dvd_def, auto)
apply (rule mod_mod_cancel)
@@ -497,79 +497,79 @@
assumes "0 < (m::nat)" and "m dvd b"
shows "(a mod b mod m) = (a mod m)"
- apply (rule int_mod_dvd_mod [transferred])
+ apply (rule mod_dvd_mod_int [transferred])
using prems apply auto
done
*)
-lemma nat_cong_add_lcancel:
+lemma cong_add_lcancel_nat:
"[(a::nat) + x = a + y] (mod n) \<longleftrightarrow> [x = y] (mod n)"
- by (simp add: nat_cong_iff_lin)
+ by (simp add: cong_iff_lin_nat)
-lemma int_cong_add_lcancel:
+lemma cong_add_lcancel_int:
"[(a::int) + x = a + y] (mod n) \<longleftrightarrow> [x = y] (mod n)"
- by (simp add: int_cong_iff_lin)
+ by (simp add: cong_iff_lin_int)
-lemma nat_cong_add_rcancel: "[(x::nat) + a = y + a] (mod n) \<longleftrightarrow> [x = y] (mod n)"
- by (simp add: nat_cong_iff_lin)
+lemma cong_add_rcancel_nat: "[(x::nat) + a = y + a] (mod n) \<longleftrightarrow> [x = y] (mod n)"
+ by (simp add: cong_iff_lin_nat)
-lemma int_cong_add_rcancel: "[(x::int) + a = y + a] (mod n) \<longleftrightarrow> [x = y] (mod n)"
- by (simp add: int_cong_iff_lin)
+lemma cong_add_rcancel_int: "[(x::int) + a = y + a] (mod n) \<longleftrightarrow> [x = y] (mod n)"
+ by (simp add: cong_iff_lin_int)
-lemma nat_cong_add_lcancel_0: "[(a::nat) + x = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
- by (simp add: nat_cong_iff_lin)
+lemma cong_add_lcancel_0_nat: "[(a::nat) + x = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
+ by (simp add: cong_iff_lin_nat)
-lemma int_cong_add_lcancel_0: "[(a::int) + x = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
- by (simp add: int_cong_iff_lin)
+lemma cong_add_lcancel_0_int: "[(a::int) + x = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
+ by (simp add: cong_iff_lin_int)
-lemma nat_cong_add_rcancel_0: "[x + (a::nat) = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
- by (simp add: nat_cong_iff_lin)
+lemma cong_add_rcancel_0_nat: "[x + (a::nat) = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
+ by (simp add: cong_iff_lin_nat)
-lemma int_cong_add_rcancel_0: "[x + (a::int) = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
- by (simp add: int_cong_iff_lin)
+lemma cong_add_rcancel_0_int: "[x + (a::int) = a] (mod n) \<longleftrightarrow> [x = 0] (mod n)"
+ by (simp add: cong_iff_lin_int)
-lemma nat_cong_dvd_modulus: "[(x::nat) = y] (mod m) \<Longrightarrow> n dvd m \<Longrightarrow>
+lemma cong_dvd_modulus_nat: "[(x::nat) = y] (mod m) \<Longrightarrow> n dvd m \<Longrightarrow>
[x = y] (mod n)"
- apply (auto simp add: nat_cong_iff_lin dvd_def)
+ apply (auto simp add: cong_iff_lin_nat dvd_def)
apply (rule_tac x="k1 * k" in exI)
apply (rule_tac x="k2 * k" in exI)
apply (simp add: ring_simps)
done
-lemma int_cong_dvd_modulus: "[(x::int) = y] (mod m) \<Longrightarrow> n dvd m \<Longrightarrow>
+lemma cong_dvd_modulus_int: "[(x::int) = y] (mod m) \<Longrightarrow> n dvd m \<Longrightarrow>
[x = y] (mod n)"
- by (auto simp add: int_cong_altdef dvd_def)
+ by (auto simp add: cong_altdef_int dvd_def)
-lemma nat_cong_dvd_eq: "[(x::nat) = y] (mod n) \<Longrightarrow> n dvd x \<longleftrightarrow> n dvd y"
+lemma cong_dvd_eq_nat: "[(x::nat) = y] (mod n) \<Longrightarrow> n dvd x \<longleftrightarrow> n dvd y"
by (unfold cong_nat_def, auto simp add: dvd_eq_mod_eq_0)
-lemma int_cong_dvd_eq: "[(x::int) = y] (mod n) \<Longrightarrow> n dvd x \<longleftrightarrow> n dvd y"
+lemma cong_dvd_eq_int: "[(x::int) = y] (mod n) \<Longrightarrow> n dvd x \<longleftrightarrow> n dvd y"
by (unfold cong_int_def, auto simp add: dvd_eq_mod_eq_0)
-lemma nat_cong_mod: "(n::nat) ~= 0 \<Longrightarrow> [a mod n = a] (mod n)"
+lemma cong_mod_nat: "(n::nat) ~= 0 \<Longrightarrow> [a mod n = a] (mod n)"
by (simp add: cong_nat_def)
-lemma int_cong_mod: "(n::int) ~= 0 \<Longrightarrow> [a mod n = a] (mod n)"
+lemma cong_mod_int: "(n::int) ~= 0 \<Longrightarrow> [a mod n = a] (mod n)"
by (simp add: cong_int_def)
-lemma nat_mod_mult_cong: "(a::nat) ~= 0 \<Longrightarrow> b ~= 0
+lemma mod_mult_cong_nat: "(a::nat) ~= 0 \<Longrightarrow> b ~= 0
\<Longrightarrow> [x mod (a * b) = y] (mod a) \<longleftrightarrow> [x = y] (mod a)"
by (simp add: cong_nat_def mod_mult2_eq mod_add_left_eq)
-lemma int_neg_cong: "([(a::int) = b] (mod m)) = ([-a = -b] (mod m))"
- apply (simp add: int_cong_altdef)
+lemma neg_cong_int: "([(a::int) = b] (mod m)) = ([-a = -b] (mod m))"
+ apply (simp add: cong_altdef_int)
apply (subst dvd_minus_iff [symmetric])
apply (simp add: ring_simps)
done
-lemma int_cong_modulus_neg: "([(a::int) = b] (mod m)) = ([a = b] (mod -m))"
- by (auto simp add: int_cong_altdef)
+lemma cong_modulus_neg_int: "([(a::int) = b] (mod m)) = ([a = b] (mod -m))"
+ by (auto simp add: cong_altdef_int)
-lemma int_mod_mult_cong: "(a::int) ~= 0 \<Longrightarrow> b ~= 0
+lemma mod_mult_cong_int: "(a::int) ~= 0 \<Longrightarrow> b ~= 0
\<Longrightarrow> [x mod (a * b) = y] (mod a) \<longleftrightarrow> [x = y] (mod a)"
apply (case_tac "b > 0")
apply (simp add: cong_int_def mod_mod_cancel mod_add_left_eq)
- apply (subst (1 2) int_cong_modulus_neg)
+ apply (subst (1 2) cong_modulus_neg_int)
apply (unfold cong_int_def)
apply (subgoal_tac "a * b = (-a * -b)")
apply (erule ssubst)
@@ -577,89 +577,89 @@
apply (auto simp add: mod_add_left_eq)
done
-lemma nat_cong_to_1: "([(a::nat) = 1] (mod n)) \<Longrightarrow> (n dvd (a - 1))"
+lemma cong_to_1_nat: "([(a::nat) = 1] (mod n)) \<Longrightarrow> (n dvd (a - 1))"
apply (case_tac "a = 0")
apply force
- apply (subst (asm) nat_cong_altdef)
+ apply (subst (asm) cong_altdef_nat)
apply auto
done
-lemma nat_0_cong_1: "[(0::nat) = 1] (mod n) = (n = 1)"
+lemma cong_0_1_nat: "[(0::nat) = 1] (mod n) = (n = 1)"
by (unfold cong_nat_def, auto)
-lemma int_0_cong_1: "[(0::int) = 1] (mod n) = ((n = 1) | (n = -1))"
+lemma cong_0_1_int: "[(0::int) = 1] (mod n) = ((n = 1) | (n = -1))"
by (unfold cong_int_def, auto simp add: zmult_eq_1_iff)
-lemma nat_cong_to_1': "[(a::nat) = 1] (mod n) \<longleftrightarrow>
+lemma cong_to_1'_nat: "[(a::nat) = 1] (mod n) \<longleftrightarrow>
a = 0 \<and> n = 1 \<or> (\<exists>m. a = 1 + m * n)"
apply (case_tac "n = 1")
apply auto [1]
apply (drule_tac x = "a - 1" in spec)
apply force
apply (case_tac "a = 0")
- apply (auto simp add: nat_0_cong_1) [1]
+ apply (auto simp add: cong_0_1_nat) [1]
apply (rule iffI)
- apply (drule nat_cong_to_1)
+ apply (drule cong_to_1_nat)
apply (unfold dvd_def)
apply auto [1]
apply (rule_tac x = k in exI)
apply (auto simp add: ring_simps) [1]
- apply (subst nat_cong_altdef)
+ apply (subst cong_altdef_nat)
apply (auto simp add: dvd_def)
done
-lemma nat_cong_le: "(y::nat) <= x \<Longrightarrow> [x = y] (mod n) \<longleftrightarrow> (\<exists>q. x = q * n + y)"
- apply (subst nat_cong_altdef)
+lemma cong_le_nat: "(y::nat) <= x \<Longrightarrow> [x = y] (mod n) \<longleftrightarrow> (\<exists>q. x = q * n + y)"
+ apply (subst cong_altdef_nat)
apply assumption
apply (unfold dvd_def, auto simp add: ring_simps)
apply (rule_tac x = k in exI)
apply auto
done
-lemma nat_cong_solve: "(a::nat) \<noteq> 0 \<Longrightarrow> EX x. [a * x = gcd a n] (mod n)"
+lemma cong_solve_nat: "(a::nat) \<noteq> 0 \<Longrightarrow> EX x. [a * x = gcd a n] (mod n)"
apply (case_tac "n = 0")
apply force
- apply (frule nat_bezout [of a n], auto)
+ apply (frule bezout_nat [of a n], auto)
apply (rule exI, erule ssubst)
- apply (rule nat_cong_trans)
- apply (rule nat_cong_add)
+ apply (rule cong_trans_nat)
+ apply (rule cong_add_nat)
apply (subst mult_commute)
- apply (rule nat_cong_mult_self)
+ apply (rule cong_mult_self_nat)
prefer 2
apply simp
- apply (rule nat_cong_refl)
- apply (rule nat_cong_refl)
+ apply (rule cong_refl_nat)
+ apply (rule cong_refl_nat)
done
-lemma int_cong_solve: "(a::int) \<noteq> 0 \<Longrightarrow> EX x. [a * x = gcd a n] (mod n)"
+lemma cong_solve_int: "(a::int) \<noteq> 0 \<Longrightarrow> EX x. [a * x = gcd a n] (mod n)"
apply (case_tac "n = 0")
apply (case_tac "a \<ge> 0")
apply auto
apply (rule_tac x = "-1" in exI)
apply auto
- apply (insert int_bezout [of a n], auto)
+ apply (insert bezout_int [of a n], auto)
apply (rule exI)
apply (erule subst)
- apply (rule int_cong_trans)
+ apply (rule cong_trans_int)
prefer 2
- apply (rule int_cong_add)
- apply (rule int_cong_refl)
- apply (rule int_cong_sym)
- apply (rule int_cong_mult_self)
+ apply (rule cong_add_int)
+ apply (rule cong_refl_int)
+ apply (rule cong_sym_int)
+ apply (rule cong_mult_self_int)
apply simp
apply (subst mult_commute)
- apply (rule int_cong_refl)
+ apply (rule cong_refl_int)
done
-lemma nat_cong_solve_dvd:
+lemma cong_solve_dvd_nat:
assumes a: "(a::nat) \<noteq> 0" and b: "gcd a n dvd d"
shows "EX x. [a * x = d] (mod n)"
proof -
- from nat_cong_solve [OF a] obtain x where
+ from cong_solve_nat [OF a] obtain x where
"[a * x = gcd a n](mod n)"
by auto
hence "[(d div gcd a n) * (a * x) = (d div gcd a n) * gcd a n] (mod n)"
- by (elim nat_cong_scalar2)
+ by (elim cong_scalar2_nat)
also from b have "(d div gcd a n) * gcd a n = d"
by (rule dvd_div_mult_self)
also have "(d div gcd a n) * (a * x) = a * (d div gcd a n * x)"
@@ -668,15 +668,15 @@
by auto
qed
-lemma int_cong_solve_dvd:
+lemma cong_solve_dvd_int:
assumes a: "(a::int) \<noteq> 0" and b: "gcd a n dvd d"
shows "EX x. [a * x = d] (mod n)"
proof -
- from int_cong_solve [OF a] obtain x where
+ from cong_solve_int [OF a] obtain x where
"[a * x = gcd a n](mod n)"
by auto
hence "[(d div gcd a n) * (a * x) = (d div gcd a n) * gcd a n] (mod n)"
- by (elim int_cong_scalar2)
+ by (elim cong_scalar2_int)
also from b have "(d div gcd a n) * gcd a n = d"
by (rule dvd_div_mult_self)
also have "(d div gcd a n) * (a * x) = a * (d div gcd a n * x)"
@@ -685,41 +685,41 @@
by auto
qed
-lemma nat_cong_solve_coprime: "coprime (a::nat) n \<Longrightarrow>
+lemma cong_solve_coprime_nat: "coprime (a::nat) n \<Longrightarrow>
EX x. [a * x = 1] (mod n)"
apply (case_tac "a = 0")
apply force
- apply (frule nat_cong_solve [of a n])
+ apply (frule cong_solve_nat [of a n])
apply auto
done
-lemma int_cong_solve_coprime: "coprime (a::int) n \<Longrightarrow>
+lemma cong_solve_coprime_int: "coprime (a::int) n \<Longrightarrow>
EX x. [a * x = 1] (mod n)"
apply (case_tac "a = 0")
apply auto
apply (case_tac "n \<ge> 0")
apply auto
apply (subst cong_int_def, auto)
- apply (frule int_cong_solve [of a n])
+ apply (frule cong_solve_int [of a n])
apply auto
done
-lemma nat_coprime_iff_invertible: "m > (1::nat) \<Longrightarrow> coprime a m =
+lemma coprime_iff_invertible_nat: "m > (1::nat) \<Longrightarrow> coprime a m =
(EX x. [a * x = 1] (mod m))"
- apply (auto intro: nat_cong_solve_coprime)
- apply (unfold cong_nat_def, auto intro: nat_invertible_coprime)
+ apply (auto intro: cong_solve_coprime_nat)
+ apply (unfold cong_nat_def, auto intro: invertible_coprime_nat)
done
-lemma int_coprime_iff_invertible: "m > (1::int) \<Longrightarrow> coprime a m =
+lemma coprime_iff_invertible_int: "m > (1::int) \<Longrightarrow> coprime a m =
(EX x. [a * x = 1] (mod m))"
- apply (auto intro: int_cong_solve_coprime)
+ apply (auto intro: cong_solve_coprime_int)
apply (unfold cong_int_def)
- apply (auto intro: int_invertible_coprime)
+ apply (auto intro: invertible_coprime_int)
done
-lemma int_coprime_iff_invertible': "m > (1::int) \<Longrightarrow> coprime a m =
+lemma coprime_iff_invertible'_int: "m > (1::int) \<Longrightarrow> coprime a m =
(EX x. 0 <= x & x < m & [a * x = 1] (mod m))"
- apply (subst int_coprime_iff_invertible)
+ apply (subst coprime_iff_invertible_int)
apply auto
apply (auto simp add: cong_int_def)
apply (rule_tac x = "x mod m" in exI)
@@ -727,200 +727,200 @@
done
-lemma nat_cong_cong_lcm: "[(x::nat) = y] (mod a) \<Longrightarrow>
+lemma cong_cong_lcm_nat: "[(x::nat) = y] (mod a) \<Longrightarrow>
[x = y] (mod b) \<Longrightarrow> [x = y] (mod lcm a b)"
apply (case_tac "y \<le> x")
- apply (auto simp add: nat_cong_altdef nat_lcm_least) [1]
- apply (rule nat_cong_sym)
- apply (subst (asm) (1 2) nat_cong_sym_eq)
- apply (auto simp add: nat_cong_altdef nat_lcm_least)
+ apply (auto simp add: cong_altdef_nat lcm_least_nat) [1]
+ apply (rule cong_sym_nat)
+ apply (subst (asm) (1 2) cong_sym_eq_nat)
+ apply (auto simp add: cong_altdef_nat lcm_least_nat)
done
-lemma int_cong_cong_lcm: "[(x::int) = y] (mod a) \<Longrightarrow>
+lemma cong_cong_lcm_int: "[(x::int) = y] (mod a) \<Longrightarrow>
[x = y] (mod b) \<Longrightarrow> [x = y] (mod lcm a b)"
- by (auto simp add: int_cong_altdef int_lcm_least) [1]
+ by (auto simp add: cong_altdef_int lcm_least_int) [1]
-lemma nat_cong_cong_coprime: "coprime a b \<Longrightarrow> [(x::nat) = y] (mod a) \<Longrightarrow>
+lemma cong_cong_coprime_nat: "coprime a b \<Longrightarrow> [(x::nat) = y] (mod a) \<Longrightarrow>
[x = y] (mod b) \<Longrightarrow> [x = y] (mod a * b)"
- apply (frule (1) nat_cong_cong_lcm)back
+ apply (frule (1) cong_cong_lcm_nat)back
apply (simp add: lcm_nat_def)
done
-lemma int_cong_cong_coprime: "coprime a b \<Longrightarrow> [(x::int) = y] (mod a) \<Longrightarrow>
+lemma cong_cong_coprime_int: "coprime a b \<Longrightarrow> [(x::int) = y] (mod a) \<Longrightarrow>
[x = y] (mod b) \<Longrightarrow> [x = y] (mod a * b)"
- apply (frule (1) int_cong_cong_lcm)back
- apply (simp add: int_lcm_altdef int_cong_abs abs_mult [symmetric])
+ apply (frule (1) cong_cong_lcm_int)back
+ apply (simp add: lcm_altdef_int cong_abs_int abs_mult [symmetric])
done
-lemma nat_cong_cong_setprod_coprime [rule_format]: "finite A \<Longrightarrow>
+lemma cong_cong_setprod_coprime_nat [rule_format]: "finite A \<Longrightarrow>
(ALL i:A. (ALL j:A. i \<noteq> j \<longrightarrow> coprime (m i) (m j))) \<longrightarrow>
(ALL i:A. [(x::nat) = y] (mod m i)) \<longrightarrow>
[x = y] (mod (PROD i:A. m i))"
apply (induct set: finite)
apply auto
- apply (rule nat_cong_cong_coprime)
- apply (subst nat_gcd_commute)
- apply (rule nat_setprod_coprime)
+ apply (rule cong_cong_coprime_nat)
+ apply (subst gcd_commute_nat)
+ apply (rule setprod_coprime_nat)
apply auto
done
-lemma int_cong_cong_setprod_coprime [rule_format]: "finite A \<Longrightarrow>
+lemma cong_cong_setprod_coprime_int [rule_format]: "finite A \<Longrightarrow>
(ALL i:A. (ALL j:A. i \<noteq> j \<longrightarrow> coprime (m i) (m j))) \<longrightarrow>
(ALL i:A. [(x::int) = y] (mod m i)) \<longrightarrow>
[x = y] (mod (PROD i:A. m i))"
apply (induct set: finite)
apply auto
- apply (rule int_cong_cong_coprime)
- apply (subst int_gcd_commute)
- apply (rule int_setprod_coprime)
+ apply (rule cong_cong_coprime_int)
+ apply (subst gcd_commute_int)
+ apply (rule setprod_coprime_int)
apply auto
done
-lemma nat_binary_chinese_remainder_aux:
+lemma binary_chinese_remainder_aux_nat:
assumes a: "coprime (m1::nat) m2"
shows "EX b1 b2. [b1 = 1] (mod m1) \<and> [b1 = 0] (mod m2) \<and>
[b2 = 0] (mod m1) \<and> [b2 = 1] (mod m2)"
proof -
- from nat_cong_solve_coprime [OF a]
+ from cong_solve_coprime_nat [OF a]
obtain x1 where one: "[m1 * x1 = 1] (mod m2)"
by auto
from a have b: "coprime m2 m1"
- by (subst nat_gcd_commute)
- from nat_cong_solve_coprime [OF b]
+ by (subst gcd_commute_nat)
+ from cong_solve_coprime_nat [OF b]
obtain x2 where two: "[m2 * x2 = 1] (mod m1)"
by auto
have "[m1 * x1 = 0] (mod m1)"
- by (subst mult_commute, rule nat_cong_mult_self)
+ by (subst mult_commute, rule cong_mult_self_nat)
moreover have "[m2 * x2 = 0] (mod m2)"
- by (subst mult_commute, rule nat_cong_mult_self)
+ by (subst mult_commute, rule cong_mult_self_nat)
moreover note one two
ultimately show ?thesis by blast
qed
-lemma int_binary_chinese_remainder_aux:
+lemma binary_chinese_remainder_aux_int:
assumes a: "coprime (m1::int) m2"
shows "EX b1 b2. [b1 = 1] (mod m1) \<and> [b1 = 0] (mod m2) \<and>
[b2 = 0] (mod m1) \<and> [b2 = 1] (mod m2)"
proof -
- from int_cong_solve_coprime [OF a]
+ from cong_solve_coprime_int [OF a]
obtain x1 where one: "[m1 * x1 = 1] (mod m2)"
by auto
from a have b: "coprime m2 m1"
- by (subst int_gcd_commute)
- from int_cong_solve_coprime [OF b]
+ by (subst gcd_commute_int)
+ from cong_solve_coprime_int [OF b]
obtain x2 where two: "[m2 * x2 = 1] (mod m1)"
by auto
have "[m1 * x1 = 0] (mod m1)"
- by (subst mult_commute, rule int_cong_mult_self)
+ by (subst mult_commute, rule cong_mult_self_int)
moreover have "[m2 * x2 = 0] (mod m2)"
- by (subst mult_commute, rule int_cong_mult_self)
+ by (subst mult_commute, rule cong_mult_self_int)
moreover note one two
ultimately show ?thesis by blast
qed
-lemma nat_binary_chinese_remainder:
+lemma binary_chinese_remainder_nat:
assumes a: "coprime (m1::nat) m2"
shows "EX x. [x = u1] (mod m1) \<and> [x = u2] (mod m2)"
proof -
- from nat_binary_chinese_remainder_aux [OF a] obtain b1 b2
+ from binary_chinese_remainder_aux_nat [OF a] obtain b1 b2
where "[b1 = 1] (mod m1)" and "[b1 = 0] (mod m2)" and
"[b2 = 0] (mod m1)" and "[b2 = 1] (mod m2)"
by blast
let ?x = "u1 * b1 + u2 * b2"
have "[?x = u1 * 1 + u2 * 0] (mod m1)"
- apply (rule nat_cong_add)
- apply (rule nat_cong_scalar2)
+ apply (rule cong_add_nat)
+ apply (rule cong_scalar2_nat)
apply (rule `[b1 = 1] (mod m1)`)
- apply (rule nat_cong_scalar2)
+ apply (rule cong_scalar2_nat)
apply (rule `[b2 = 0] (mod m1)`)
done
hence "[?x = u1] (mod m1)" by simp
have "[?x = u1 * 0 + u2 * 1] (mod m2)"
- apply (rule nat_cong_add)
- apply (rule nat_cong_scalar2)
+ apply (rule cong_add_nat)
+ apply (rule cong_scalar2_nat)
apply (rule `[b1 = 0] (mod m2)`)
- apply (rule nat_cong_scalar2)
+ apply (rule cong_scalar2_nat)
apply (rule `[b2 = 1] (mod m2)`)
done
hence "[?x = u2] (mod m2)" by simp
with `[?x = u1] (mod m1)` show ?thesis by blast
qed
-lemma int_binary_chinese_remainder:
+lemma binary_chinese_remainder_int:
assumes a: "coprime (m1::int) m2"
shows "EX x. [x = u1] (mod m1) \<and> [x = u2] (mod m2)"
proof -
- from int_binary_chinese_remainder_aux [OF a] obtain b1 b2
+ from binary_chinese_remainder_aux_int [OF a] obtain b1 b2
where "[b1 = 1] (mod m1)" and "[b1 = 0] (mod m2)" and
"[b2 = 0] (mod m1)" and "[b2 = 1] (mod m2)"
by blast
let ?x = "u1 * b1 + u2 * b2"
have "[?x = u1 * 1 + u2 * 0] (mod m1)"
- apply (rule int_cong_add)
- apply (rule int_cong_scalar2)
+ apply (rule cong_add_int)
+ apply (rule cong_scalar2_int)
apply (rule `[b1 = 1] (mod m1)`)
- apply (rule int_cong_scalar2)
+ apply (rule cong_scalar2_int)
apply (rule `[b2 = 0] (mod m1)`)
done
hence "[?x = u1] (mod m1)" by simp
have "[?x = u1 * 0 + u2 * 1] (mod m2)"
- apply (rule int_cong_add)
- apply (rule int_cong_scalar2)
+ apply (rule cong_add_int)
+ apply (rule cong_scalar2_int)
apply (rule `[b1 = 0] (mod m2)`)
- apply (rule int_cong_scalar2)
+ apply (rule cong_scalar2_int)
apply (rule `[b2 = 1] (mod m2)`)
done
hence "[?x = u2] (mod m2)" by simp
with `[?x = u1] (mod m1)` show ?thesis by blast
qed
-lemma nat_cong_modulus_mult: "[(x::nat) = y] (mod m * n) \<Longrightarrow>
+lemma cong_modulus_mult_nat: "[(x::nat) = y] (mod m * n) \<Longrightarrow>
[x = y] (mod m)"
apply (case_tac "y \<le> x")
- apply (simp add: nat_cong_altdef)
+ apply (simp add: cong_altdef_nat)
apply (erule dvd_mult_left)
- apply (rule nat_cong_sym)
- apply (subst (asm) nat_cong_sym_eq)
- apply (simp add: nat_cong_altdef)
+ apply (rule cong_sym_nat)
+ apply (subst (asm) cong_sym_eq_nat)
+ apply (simp add: cong_altdef_nat)
apply (erule dvd_mult_left)
done
-lemma int_cong_modulus_mult: "[(x::int) = y] (mod m * n) \<Longrightarrow>
+lemma cong_modulus_mult_int: "[(x::int) = y] (mod m * n) \<Longrightarrow>
[x = y] (mod m)"
- apply (simp add: int_cong_altdef)
+ apply (simp add: cong_altdef_int)
apply (erule dvd_mult_left)
done
-lemma nat_cong_less_modulus_unique:
+lemma cong_less_modulus_unique_nat:
"[(x::nat) = y] (mod m) \<Longrightarrow> x < m \<Longrightarrow> y < m \<Longrightarrow> x = y"
by (simp add: cong_nat_def)
-lemma nat_binary_chinese_remainder_unique:
+lemma binary_chinese_remainder_unique_nat:
assumes a: "coprime (m1::nat) m2" and
nz: "m1 \<noteq> 0" "m2 \<noteq> 0"
shows "EX! x. x < m1 * m2 \<and> [x = u1] (mod m1) \<and> [x = u2] (mod m2)"
proof -
- from nat_binary_chinese_remainder [OF a] obtain y where
+ from binary_chinese_remainder_nat [OF a] obtain y where
"[y = u1] (mod m1)" and "[y = u2] (mod m2)"
by blast
let ?x = "y mod (m1 * m2)"
from nz have less: "?x < m1 * m2"
by auto
have one: "[?x = u1] (mod m1)"
- apply (rule nat_cong_trans)
+ apply (rule cong_trans_nat)
prefer 2
apply (rule `[y = u1] (mod m1)`)
- apply (rule nat_cong_modulus_mult)
- apply (rule nat_cong_mod)
+ apply (rule cong_modulus_mult_nat)
+ apply (rule cong_mod_nat)
using nz apply auto
done
have two: "[?x = u2] (mod m2)"
- apply (rule nat_cong_trans)
+ apply (rule cong_trans_nat)
prefer 2
apply (rule `[y = u2] (mod m2)`)
apply (subst mult_commute)
- apply (rule nat_cong_modulus_mult)
- apply (rule nat_cong_mod)
+ apply (rule cong_modulus_mult_nat)
+ apply (rule cong_mod_nat)
using nz apply auto
done
have "ALL z. z < m1 * m2 \<and> [z = u1] (mod m1) \<and> [z = u2] (mod m2) \<longrightarrow>
@@ -930,29 +930,29 @@
assume "z < m1 * m2"
assume "[z = u1] (mod m1)" and "[z = u2] (mod m2)"
have "[?x = z] (mod m1)"
- apply (rule nat_cong_trans)
+ apply (rule cong_trans_nat)
apply (rule `[?x = u1] (mod m1)`)
- apply (rule nat_cong_sym)
+ apply (rule cong_sym_nat)
apply (rule `[z = u1] (mod m1)`)
done
moreover have "[?x = z] (mod m2)"
- apply (rule nat_cong_trans)
+ apply (rule cong_trans_nat)
apply (rule `[?x = u2] (mod m2)`)
- apply (rule nat_cong_sym)
+ apply (rule cong_sym_nat)
apply (rule `[z = u2] (mod m2)`)
done
ultimately have "[?x = z] (mod m1 * m2)"
- by (auto intro: nat_coprime_cong_mult a)
+ by (auto intro: coprime_cong_mult_nat a)
with `z < m1 * m2` `?x < m1 * m2` show "z = ?x"
- apply (intro nat_cong_less_modulus_unique)
- apply (auto, erule nat_cong_sym)
+ apply (intro cong_less_modulus_unique_nat)
+ apply (auto, erule cong_sym_nat)
done
qed
with less one two show ?thesis
by auto
qed
-lemma nat_chinese_remainder_aux:
+lemma chinese_remainder_aux_nat:
fixes A :: "'a set" and
m :: "'a \<Rightarrow> nat"
assumes fin: "finite A" and
@@ -963,20 +963,20 @@
fix i
assume "i : A"
with cop have "coprime (PROD j : A - {i}. m j) (m i)"
- by (intro nat_setprod_coprime, auto)
+ by (intro setprod_coprime_nat, auto)
hence "EX x. [(PROD j : A - {i}. m j) * x = 1] (mod m i)"
- by (elim nat_cong_solve_coprime)
+ by (elim cong_solve_coprime_nat)
then obtain x where "[(PROD j : A - {i}. m j) * x = 1] (mod m i)"
by auto
moreover have "[(PROD j : A - {i}. m j) * x = 0]
(mod (PROD j : A - {i}. m j))"
- by (subst mult_commute, rule nat_cong_mult_self)
+ by (subst mult_commute, rule cong_mult_self_nat)
ultimately show "\<exists>a. [a = 1] (mod m i) \<and> [a = 0]
(mod setprod m (A - {i}))"
by blast
qed
-lemma nat_chinese_remainder:
+lemma chinese_remainder_nat:
fixes A :: "'a set" and
m :: "'a \<Rightarrow> nat" and
u :: "'a \<Rightarrow> nat"
@@ -985,7 +985,7 @@
cop: "ALL i:A. (ALL j : A. i \<noteq> j \<longrightarrow> coprime (m i) (m j))"
shows "EX x. (ALL i:A. [x = u i] (mod m i))"
proof -
- from nat_chinese_remainder_aux [OF fin cop] obtain b where
+ from chinese_remainder_aux_nat [OF fin cop] obtain b where
bprop: "ALL i:A. [b i = 1] (mod m i) \<and>
[b i = 0] (mod (PROD j : A - {i}. m j))"
by blast
@@ -1003,13 +1003,13 @@
by auto
also have "[u i * b i + (SUM j:A-{i}. u j * b j) =
u i * 1 + (SUM j:A-{i}. u j * 0)] (mod m i)"
- apply (rule nat_cong_add)
- apply (rule nat_cong_scalar2)
+ apply (rule cong_add_nat)
+ apply (rule cong_scalar2_nat)
using bprop a apply blast
- apply (rule nat_cong_setsum)
- apply (rule nat_cong_scalar2)
+ apply (rule cong_setsum_nat)
+ apply (rule cong_scalar2_nat)
using bprop apply auto
- apply (rule nat_cong_dvd_modulus)
+ apply (rule cong_dvd_modulus_nat)
apply (drule (1) bspec)
apply (erule conjE)
apply assumption
@@ -1022,19 +1022,19 @@
qed
qed
-lemma nat_coprime_cong_prod [rule_format]: "finite A \<Longrightarrow>
+lemma coprime_cong_prod_nat [rule_format]: "finite A \<Longrightarrow>
(ALL i: A. (ALL j: A. i \<noteq> j \<longrightarrow> coprime (m i) (m j))) \<longrightarrow>
(ALL i: A. [(x::nat) = y] (mod m i)) \<longrightarrow>
[x = y] (mod (PROD i:A. m i))"
apply (induct set: finite)
apply auto
- apply (erule (1) nat_coprime_cong_mult)
- apply (subst nat_gcd_commute)
- apply (rule nat_setprod_coprime)
+ apply (erule (1) coprime_cong_mult_nat)
+ apply (subst gcd_commute_nat)
+ apply (rule setprod_coprime_nat)
apply auto
done
-lemma nat_chinese_remainder_unique:
+lemma chinese_remainder_unique_nat:
fixes A :: "'a set" and
m :: "'a \<Rightarrow> nat" and
u :: "'a \<Rightarrow> nat"
@@ -1044,7 +1044,7 @@
cop: "ALL i:A. (ALL j : A. i \<noteq> j \<longrightarrow> coprime (m i) (m j))"
shows "EX! x. x < (PROD i:A. m i) \<and> (ALL i:A. [x = u i] (mod m i))"
proof -
- from nat_chinese_remainder [OF fin cop] obtain y where
+ from chinese_remainder_nat [OF fin cop] obtain y where
one: "(ALL i:A. [y = u i] (mod m i))"
by blast
let ?x = "y mod (PROD i:A. m i)"
@@ -1054,11 +1054,11 @@
by auto
have cong: "ALL i:A. [?x = u i] (mod m i)"
apply auto
- apply (rule nat_cong_trans)
+ apply (rule cong_trans_nat)
prefer 2
using one apply auto
- apply (rule nat_cong_dvd_modulus)
- apply (rule nat_cong_mod)
+ apply (rule cong_dvd_modulus_nat)
+ apply (rule cong_mod_nat)
using prodnz apply auto
apply (rule dvd_setprod)
apply (rule fin)
@@ -1072,16 +1072,16 @@
assume zcong: "(ALL i:A. [z = u i] (mod m i))"
have "ALL i:A. [?x = z] (mod m i)"
apply clarify
- apply (rule nat_cong_trans)
+ apply (rule cong_trans_nat)
using cong apply (erule bspec)
- apply (rule nat_cong_sym)
+ apply (rule cong_sym_nat)
using zcong apply auto
done
with fin cop have "[?x = z] (mod (PROD i:A. m i))"
- by (intro nat_coprime_cong_prod, auto)
+ by (intro coprime_cong_prod_nat, auto)
with zless less show "z = ?x"
- apply (intro nat_cong_less_modulus_unique)
- apply (auto, erule nat_cong_sym)
+ apply (intro cong_less_modulus_unique_nat)
+ apply (auto, erule cong_sym_nat)
done
qed
from less cong unique show ?thesis
--- a/src/HOL/NewNumberTheory/Fib.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/NewNumberTheory/Fib.thy Tue Jul 07 17:39:51 2009 +0200
@@ -86,45 +86,45 @@
subsection {* Fibonacci numbers *}
-lemma nat_fib_0 [simp]: "fib (0::nat) = 0"
+lemma fib_0_nat [simp]: "fib (0::nat) = 0"
by simp
-lemma int_fib_0 [simp]: "fib (0::int) = 0"
+lemma fib_0_int [simp]: "fib (0::int) = 0"
unfolding fib_int_def by simp
-lemma nat_fib_1 [simp]: "fib (1::nat) = 1"
+lemma fib_1_nat [simp]: "fib (1::nat) = 1"
by simp
-lemma nat_fib_Suc_0 [simp]: "fib (Suc 0) = Suc 0"
+lemma fib_Suc_0_nat [simp]: "fib (Suc 0) = Suc 0"
by simp
-lemma int_fib_1 [simp]: "fib (1::int) = 1"
+lemma fib_1_int [simp]: "fib (1::int) = 1"
unfolding fib_int_def by simp
-lemma nat_fib_reduce: "(n::nat) >= 2 \<Longrightarrow> fib n = fib (n - 1) + fib (n - 2)"
+lemma fib_reduce_nat: "(n::nat) >= 2 \<Longrightarrow> fib n = fib (n - 1) + fib (n - 2)"
by simp
declare fib_nat.simps [simp del]
-lemma int_fib_reduce: "(n::int) >= 2 \<Longrightarrow> fib n = fib (n - 1) + fib (n - 2)"
+lemma fib_reduce_int: "(n::int) >= 2 \<Longrightarrow> fib n = fib (n - 1) + fib (n - 2)"
unfolding fib_int_def
- by (auto simp add: nat_fib_reduce nat_diff_distrib)
+ by (auto simp add: fib_reduce_nat nat_diff_distrib)
-lemma int_fib_neg [simp]: "(n::int) < 0 \<Longrightarrow> fib n = 0"
+lemma fib_neg_int [simp]: "(n::int) < 0 \<Longrightarrow> fib n = 0"
unfolding fib_int_def by auto
-lemma nat_fib_2 [simp]: "fib (2::nat) = 1"
- by (subst nat_fib_reduce, auto)
+lemma fib_2_nat [simp]: "fib (2::nat) = 1"
+ by (subst fib_reduce_nat, auto)
-lemma int_fib_2 [simp]: "fib (2::int) = 1"
- by (subst int_fib_reduce, auto)
+lemma fib_2_int [simp]: "fib (2::int) = 1"
+ by (subst fib_reduce_int, auto)
-lemma nat_fib_plus_2: "fib ((n::nat) + 2) = fib (n + 1) + fib n"
- by (subst nat_fib_reduce, auto simp add: One_nat_def)
+lemma fib_plus_2_nat: "fib ((n::nat) + 2) = fib (n + 1) + fib n"
+ by (subst fib_reduce_nat, auto simp add: One_nat_def)
(* the need for One_nat_def is due to the natdiff_cancel_numerals
procedure *)
-lemma nat_fib_induct: "P (0::nat) \<Longrightarrow> P (1::nat) \<Longrightarrow>
+lemma fib_induct_nat: "P (0::nat) \<Longrightarrow> P (1::nat) \<Longrightarrow>
(!!n. P n \<Longrightarrow> P (n + 1) \<Longrightarrow> P (n + 2)) \<Longrightarrow> P n"
apply (atomize, induct n rule: nat_less_induct)
apply auto
@@ -138,13 +138,13 @@
apply (auto simp add: One_nat_def) (* again, natdiff_cancel *)
done
-lemma nat_fib_add: "fib ((n::nat) + k + 1) = fib (k + 1) * fib (n + 1) +
+lemma fib_add_nat: "fib ((n::nat) + k + 1) = fib (k + 1) * fib (n + 1) +
fib k * fib n"
- apply (induct n rule: nat_fib_induct)
+ apply (induct n rule: fib_induct_nat)
apply auto
- apply (subst nat_fib_reduce)
+ apply (subst fib_reduce_nat)
apply (auto simp add: ring_simps)
- apply (subst (1 3 5) nat_fib_reduce)
+ apply (subst (1 3 5) fib_reduce_nat)
apply (auto simp add: ring_simps Suc_eq_plus1)
(* hmmm. Why doesn't "n + (1 + (1 + k))" simplify to "n + k + 2"? *)
apply (subgoal_tac "n + (k + 2) = n + (1 + (1 + k))")
@@ -153,112 +153,112 @@
apply auto
done
-lemma nat_fib_add': "fib (n + Suc k) = fib (Suc k) * fib (Suc n) +
+lemma fib_add'_nat: "fib (n + Suc k) = fib (Suc k) * fib (Suc n) +
fib k * fib n"
- using nat_fib_add by (auto simp add: One_nat_def)
+ using fib_add_nat by (auto simp add: One_nat_def)
(* transfer from nats to ints *)
-lemma int_fib_add [rule_format]: "(n::int) >= 0 \<Longrightarrow> k >= 0 \<Longrightarrow>
+lemma fib_add_int [rule_format]: "(n::int) >= 0 \<Longrightarrow> k >= 0 \<Longrightarrow>
fib (n + k + 1) = fib (k + 1) * fib (n + 1) +
fib k * fib n "
- by (rule nat_fib_add [transferred])
+ by (rule fib_add_nat [transferred])
-lemma nat_fib_neq_0: "(n::nat) > 0 \<Longrightarrow> fib n ~= 0"
- apply (induct n rule: nat_fib_induct)
- apply (auto simp add: nat_fib_plus_2)
+lemma fib_neq_0_nat: "(n::nat) > 0 \<Longrightarrow> fib n ~= 0"
+ apply (induct n rule: fib_induct_nat)
+ apply (auto simp add: fib_plus_2_nat)
done
-lemma nat_fib_gr_0: "(n::nat) > 0 \<Longrightarrow> fib n > 0"
- by (frule nat_fib_neq_0, simp)
+lemma fib_gr_0_nat: "(n::nat) > 0 \<Longrightarrow> fib n > 0"
+ by (frule fib_neq_0_nat, simp)
-lemma int_fib_gr_0: "(n::int) > 0 \<Longrightarrow> fib n > 0"
- unfolding fib_int_def by (simp add: nat_fib_gr_0)
+lemma fib_gr_0_int: "(n::int) > 0 \<Longrightarrow> fib n > 0"
+ unfolding fib_int_def by (simp add: fib_gr_0_nat)
text {*
\medskip Concrete Mathematics, page 278: Cassini's identity. The proof is
much easier using integers, not natural numbers!
*}
-lemma int_fib_Cassini_aux: "fib (int n + 2) * fib (int n) -
+lemma fib_Cassini_aux_int: "fib (int n + 2) * fib (int n) -
(fib (int n + 1))^2 = (-1)^(n + 1)"
apply (induct n)
- apply (auto simp add: ring_simps power2_eq_square int_fib_reduce
+ apply (auto simp add: ring_simps power2_eq_square fib_reduce_int
power_add)
done
-lemma int_fib_Cassini: "n >= 0 \<Longrightarrow> fib (n + 2) * fib n -
+lemma fib_Cassini_int: "n >= 0 \<Longrightarrow> fib (n + 2) * fib n -
(fib (n + 1))^2 = (-1)^(nat n + 1)"
- by (insert int_fib_Cassini_aux [of "nat n"], auto)
+ by (insert fib_Cassini_aux_int [of "nat n"], auto)
(*
-lemma int_fib_Cassini': "n >= 0 \<Longrightarrow> fib (n + 2) * fib n =
+lemma fib_Cassini'_int: "n >= 0 \<Longrightarrow> fib (n + 2) * fib n =
(fib (n + 1))^2 + (-1)^(nat n + 1)"
- by (frule int_fib_Cassini, simp)
+ by (frule fib_Cassini_int, simp)
*)
-lemma int_fib_Cassini': "n >= 0 \<Longrightarrow> fib ((n::int) + 2) * fib n =
+lemma fib_Cassini'_int: "n >= 0 \<Longrightarrow> fib ((n::int) + 2) * fib n =
(if even n then tsub ((fib (n + 1))^2) 1
else (fib (n + 1))^2 + 1)"
- apply (frule int_fib_Cassini, auto simp add: pos_int_even_equiv_nat_even)
+ apply (frule fib_Cassini_int, auto simp add: pos_int_even_equiv_nat_even)
apply (subst tsub_eq)
- apply (insert int_fib_gr_0 [of "n + 1"], force)
+ apply (insert fib_gr_0_int [of "n + 1"], force)
apply auto
done
-lemma nat_fib_Cassini: "fib ((n::nat) + 2) * fib n =
+lemma fib_Cassini_nat: "fib ((n::nat) + 2) * fib n =
(if even n then (fib (n + 1))^2 - 1
else (fib (n + 1))^2 + 1)"
- by (rule int_fib_Cassini' [transferred, of n], auto)
+ by (rule fib_Cassini'_int [transferred, of n], auto)
text {* \medskip Toward Law 6.111 of Concrete Mathematics *}
-lemma nat_coprime_fib_plus_1: "coprime (fib (n::nat)) (fib (n + 1))"
- apply (induct n rule: nat_fib_induct)
+lemma coprime_fib_plus_1_nat: "coprime (fib (n::nat)) (fib (n + 1))"
+ apply (induct n rule: fib_induct_nat)
apply auto
- apply (subst (2) nat_fib_reduce)
+ apply (subst (2) fib_reduce_nat)
apply (auto simp add: Suc_eq_plus1) (* again, natdiff_cancel *)
apply (subst add_commute, auto)
- apply (subst nat_gcd_commute, auto simp add: ring_simps)
+ apply (subst gcd_commute_nat, auto simp add: ring_simps)
done
-lemma nat_coprime_fib_Suc: "coprime (fib n) (fib (Suc n))"
- using nat_coprime_fib_plus_1 by (simp add: One_nat_def)
+lemma coprime_fib_Suc_nat: "coprime (fib n) (fib (Suc n))"
+ using coprime_fib_plus_1_nat by (simp add: One_nat_def)
-lemma int_coprime_fib_plus_1:
+lemma coprime_fib_plus_1_int:
"n >= 0 \<Longrightarrow> coprime (fib (n::int)) (fib (n + 1))"
- by (erule nat_coprime_fib_plus_1 [transferred])
+ by (erule coprime_fib_plus_1_nat [transferred])
-lemma nat_gcd_fib_add: "gcd (fib (m::nat)) (fib (n + m)) = gcd (fib m) (fib n)"
- apply (simp add: nat_gcd_commute [of "fib m"])
- apply (rule nat_cases [of _ m])
+lemma gcd_fib_add_nat: "gcd (fib (m::nat)) (fib (n + m)) = gcd (fib m) (fib n)"
+ apply (simp add: gcd_commute_nat [of "fib m"])
+ apply (rule cases_nat [of _ m])
apply simp
apply (subst add_assoc [symmetric])
- apply (simp add: nat_fib_add)
- apply (subst nat_gcd_commute)
+ apply (simp add: fib_add_nat)
+ apply (subst gcd_commute_nat)
apply (subst mult_commute)
- apply (subst nat_gcd_add_mult)
- apply (subst nat_gcd_commute)
- apply (rule nat_gcd_mult_cancel)
- apply (rule nat_coprime_fib_plus_1)
+ apply (subst gcd_add_mult_nat)
+ apply (subst gcd_commute_nat)
+ apply (rule gcd_mult_cancel_nat)
+ apply (rule coprime_fib_plus_1_nat)
done
-lemma int_gcd_fib_add [rule_format]: "m >= 0 \<Longrightarrow> n >= 0 \<Longrightarrow>
+lemma gcd_fib_add_int [rule_format]: "m >= 0 \<Longrightarrow> n >= 0 \<Longrightarrow>
gcd (fib (m::int)) (fib (n + m)) = gcd (fib m) (fib n)"
- by (erule nat_gcd_fib_add [transferred])
+ by (erule gcd_fib_add_nat [transferred])
-lemma nat_gcd_fib_diff: "(m::nat) \<le> n \<Longrightarrow>
+lemma gcd_fib_diff_nat: "(m::nat) \<le> n \<Longrightarrow>
gcd (fib m) (fib (n - m)) = gcd (fib m) (fib n)"
- by (simp add: nat_gcd_fib_add [symmetric, of _ "n-m"])
+ by (simp add: gcd_fib_add_nat [symmetric, of _ "n-m"])
-lemma int_gcd_fib_diff: "0 <= (m::int) \<Longrightarrow> m \<le> n \<Longrightarrow>
+lemma gcd_fib_diff_int: "0 <= (m::int) \<Longrightarrow> m \<le> n \<Longrightarrow>
gcd (fib m) (fib (n - m)) = gcd (fib m) (fib n)"
- by (simp add: int_gcd_fib_add [symmetric, of _ "n-m"])
+ by (simp add: gcd_fib_add_int [symmetric, of _ "n-m"])
-lemma nat_gcd_fib_mod: "0 < (m::nat) \<Longrightarrow>
+lemma gcd_fib_mod_nat: "0 < (m::nat) \<Longrightarrow>
gcd (fib m) (fib (n mod m)) = gcd (fib m) (fib n)"
proof (induct n rule: less_induct)
case (less n)
@@ -273,7 +273,7 @@
by (simp add: mod_if [of n]) (insert m_n, auto)
also have "\<dots> = gcd (fib m) (fib (n - m))"
by (simp add: less.hyps diff pos_m)
- also have "\<dots> = gcd (fib m) (fib n)" by (simp add: nat_gcd_fib_diff m_n')
+ also have "\<dots> = gcd (fib m) (fib n)" by (simp add: gcd_fib_diff_nat m_n')
finally show "gcd (fib m) (fib (n mod m)) = gcd (fib m) (fib n)" .
next
case False then show "gcd (fib m) (fib (n mod m)) = gcd (fib m) (fib n)"
@@ -281,39 +281,39 @@
qed
qed
-lemma int_gcd_fib_mod:
+lemma gcd_fib_mod_int:
assumes "0 < (m::int)" and "0 <= n"
shows "gcd (fib m) (fib (n mod m)) = gcd (fib m) (fib n)"
- apply (rule nat_gcd_fib_mod [transferred])
+ apply (rule gcd_fib_mod_nat [transferred])
using prems apply auto
done
-lemma nat_fib_gcd: "fib (gcd (m::nat) n) = gcd (fib m) (fib n)"
+lemma fib_gcd_nat: "fib (gcd (m::nat) n) = gcd (fib m) (fib n)"
-- {* Law 6.111 *}
- apply (induct m n rule: nat_gcd_induct)
- apply (simp_all add: nat_gcd_non_0 nat_gcd_commute nat_gcd_fib_mod)
+ apply (induct m n rule: gcd_nat_induct)
+ apply (simp_all add: gcd_non_0_nat gcd_commute_nat gcd_fib_mod_nat)
done
-lemma int_fib_gcd: "m >= 0 \<Longrightarrow> n >= 0 \<Longrightarrow>
+lemma fib_gcd_int: "m >= 0 \<Longrightarrow> n >= 0 \<Longrightarrow>
fib (gcd (m::int) n) = gcd (fib m) (fib n)"
- by (erule nat_fib_gcd [transferred])
+ by (erule fib_gcd_nat [transferred])
-lemma nat_atMost_plus_one: "{..(k::nat) + 1} = insert (k + 1) {..k}"
+lemma atMost_plus_one_nat: "{..(k::nat) + 1} = insert (k + 1) {..k}"
by auto
-theorem nat_fib_mult_eq_setsum:
+theorem fib_mult_eq_setsum_nat:
"fib ((n::nat) + 1) * fib n = (\<Sum>k \<in> {..n}. fib k * fib k)"
apply (induct n)
- apply (auto simp add: nat_atMost_plus_one nat_fib_plus_2 ring_simps)
+ apply (auto simp add: atMost_plus_one_nat fib_plus_2_nat ring_simps)
done
-theorem nat_fib_mult_eq_setsum':
+theorem fib_mult_eq_setsum'_nat:
"fib (Suc n) * fib n = (\<Sum>k \<in> {..n}. fib k * fib k)"
- using nat_fib_mult_eq_setsum by (simp add: One_nat_def)
+ using fib_mult_eq_setsum_nat by (simp add: One_nat_def)
-theorem int_fib_mult_eq_setsum [rule_format]:
+theorem fib_mult_eq_setsum_int [rule_format]:
"n >= 0 \<Longrightarrow> fib ((n::int) + 1) * fib n = (\<Sum>k \<in> {0..n}. fib k * fib k)"
- by (erule nat_fib_mult_eq_setsum [transferred])
+ by (erule fib_mult_eq_setsum_nat [transferred])
end
--- a/src/HOL/NewNumberTheory/MiscAlgebra.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/NewNumberTheory/MiscAlgebra.thy Tue Jul 07 17:39:51 2009 +0200
@@ -12,7 +12,7 @@
(* finiteness stuff *)
-lemma int_bounded_set1 [intro]: "finite {(x::int). a < x & x < b & P x}"
+lemma bounded_set1_int [intro]: "finite {(x::int). a < x & x < b & P x}"
apply (subgoal_tac "{x. a < x & x < b & P x} <= {a<..<b}")
apply (erule finite_subset)
apply auto
--- a/src/HOL/NewNumberTheory/Residues.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/NewNumberTheory/Residues.thy Tue Jul 07 17:39:51 2009 +0200
@@ -105,10 +105,10 @@
apply auto
apply (subgoal_tac "x ~= 0")
apply auto
- apply (rule int_invertible_coprime)
+ apply (rule invertible_coprime_int)
apply (subgoal_tac "x ~= 0")
apply auto
- apply (subst (asm) int_coprime_iff_invertible')
+ apply (subst (asm) coprime_iff_invertible'_int)
apply (rule m_gt_one)
apply (auto simp add: cong_int_def mult_commute)
done
@@ -202,8 +202,8 @@
apply (subgoal_tac "a mod m ~= 0")
apply arith
apply auto
- apply (subst (asm) int_gcd_red)
- apply (subst int_gcd_commute, assumption)
+ apply (subst (asm) gcd_red_int)
+ apply (subst gcd_commute_int, assumption)
done
lemma res_eq_to_cong: "((a mod m) = (b mod m)) = [a = b] (mod (m::int))"
@@ -254,8 +254,8 @@
res_units_eq)
apply (rule classical)
apply (erule notE)
- apply (subst int_gcd_commute)
- apply (rule int_prime_imp_coprime)
+ apply (subst gcd_commute_int)
+ apply (rule prime_imp_coprime_int)
apply (rule p_prime)
apply (rule notI)
apply (frule zdvd_imp_le)
@@ -265,8 +265,8 @@
lemma res_prime_units_eq: "Units R = {1..p - 1}"
apply (subst res_units_eq)
apply auto
- apply (subst int_gcd_commute)
- apply (rule int_prime_imp_coprime)
+ apply (subst gcd_commute_int)
+ apply (rule prime_imp_coprime_int)
apply (rule p_prime)
apply (rule zdvd_not_zless)
apply auto
@@ -367,8 +367,8 @@
apply (intro euler_theorem)
(* auto should get this next part. matching across
substitutions is needed. *)
- apply (frule int_prime_gt_1, arith)
- apply (subst int_gcd_commute, erule int_prime_imp_coprime, assumption)
+ apply (frule prime_gt_1_int, arith)
+ apply (subst gcd_commute_int, erule prime_imp_coprime_int, assumption)
done
also have "phi p = nat p - 1"
by (rule phi_prime, rule prems)
@@ -442,7 +442,7 @@
apply auto
done
also have "\<dots> = fact (p - 1) mod p"
- apply (subst int_fact_altdef)
+ apply (subst fact_altdef_int)
apply (insert prems, force)
apply (subst res_prime_units_eq, rule refl)
done
@@ -452,9 +452,9 @@
qed
lemma wilson_theorem: "prime (p::int) \<Longrightarrow> [fact (p - 1) = - 1] (mod p)"
- apply (frule int_prime_gt_1)
+ apply (frule prime_gt_1_int)
apply (case_tac "p = 2")
- apply (subst int_fact_altdef, simp)
+ apply (subst fact_altdef_int, simp)
apply (subst cong_int_def)
apply simp
apply (rule residues_prime.wilson_theorem1)
--- a/src/HOL/NewNumberTheory/UniqueFactorization.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/NewNumberTheory/UniqueFactorization.thy Tue Jul 07 17:39:51 2009 +0200
@@ -134,7 +134,7 @@
moreover
{
assume "n > 1" and "~ prime n"
- from prems nat_not_prime_eq_prod
+ from prems not_prime_eq_prod_nat
obtain m k where "n = m * k & 1 < m & m < n & 1 < k & k < n"
by blast
with ih obtain Q R where "(ALL p : set_of Q. prime p) & m = (PROD i:#Q. i)"
@@ -182,13 +182,13 @@
a^(count N a) * (PROD i : (set_of N - {a}). i ^ (count N i))".
moreover have "coprime (a ^ count M a)
(PROD i : (set_of N - {a}). i ^ (count N i))"
- apply (subst nat_gcd_commute)
- apply (rule nat_setprod_coprime)
- apply (rule nat_primes_imp_powers_coprime)
+ apply (subst gcd_commute_nat)
+ apply (rule setprod_coprime_nat)
+ apply (rule primes_imp_powers_coprime_nat)
apply (insert prems, auto)
done
ultimately have "a ^ count M a dvd a^(count N a)"
- by (elim nat_coprime_dvd_mult)
+ by (elim coprime_dvd_mult_nat)
with a show ?thesis
by (intro power_dvd_imp_le, auto)
next
@@ -322,66 +322,66 @@
subsection {* Properties of prime factors and multiplicity for nats and ints *}
-lemma int_prime_factors_ge_0 [elim]: "p : prime_factors (n::int) \<Longrightarrow> p >= 0"
+lemma prime_factors_ge_0_int [elim]: "p : prime_factors (n::int) \<Longrightarrow> p >= 0"
by (unfold prime_factors_int_def, auto)
-lemma nat_prime_factors_prime [intro]: "p : prime_factors (n::nat) \<Longrightarrow> prime p"
+lemma prime_factors_prime_nat [intro]: "p : prime_factors (n::nat) \<Longrightarrow> prime p"
apply (case_tac "n = 0")
apply (simp add: prime_factors_nat_def multiset_prime_factorization_def)
apply (auto simp add: prime_factors_nat_def multiset_prime_factorization)
done
-lemma int_prime_factors_prime [intro]:
+lemma prime_factors_prime_int [intro]:
assumes "n >= 0" and "p : prime_factors (n::int)"
shows "prime p"
- apply (rule nat_prime_factors_prime [transferred, of n p])
+ apply (rule prime_factors_prime_nat [transferred, of n p])
using prems apply auto
done
-lemma nat_prime_factors_gt_0 [elim]: "p : prime_factors x \<Longrightarrow> p > (0::nat)"
- by (frule nat_prime_factors_prime, auto)
+lemma prime_factors_gt_0_nat [elim]: "p : prime_factors x \<Longrightarrow> p > (0::nat)"
+ by (frule prime_factors_prime_nat, auto)
-lemma int_prime_factors_gt_0 [elim]: "x >= 0 \<Longrightarrow> p : prime_factors x \<Longrightarrow>
+lemma prime_factors_gt_0_int [elim]: "x >= 0 \<Longrightarrow> p : prime_factors x \<Longrightarrow>
p > (0::int)"
- by (frule (1) int_prime_factors_prime, auto)
+ by (frule (1) prime_factors_prime_int, auto)
-lemma nat_prime_factors_finite [iff]: "finite (prime_factors (n::nat))"
+lemma prime_factors_finite_nat [iff]: "finite (prime_factors (n::nat))"
by (unfold prime_factors_nat_def, auto)
-lemma int_prime_factors_finite [iff]: "finite (prime_factors (n::int))"
+lemma prime_factors_finite_int [iff]: "finite (prime_factors (n::int))"
by (unfold prime_factors_int_def, auto)
-lemma nat_prime_factors_altdef: "prime_factors (n::nat) =
+lemma prime_factors_altdef_nat: "prime_factors (n::nat) =
{p. multiplicity p n > 0}"
by (force simp add: prime_factors_nat_def multiplicity_nat_def)
-lemma int_prime_factors_altdef: "prime_factors (n::int) =
+lemma prime_factors_altdef_int: "prime_factors (n::int) =
{p. p >= 0 & multiplicity p n > 0}"
apply (unfold prime_factors_int_def multiplicity_int_def)
- apply (subst nat_prime_factors_altdef)
+ apply (subst prime_factors_altdef_nat)
apply (auto simp add: image_def)
done
-lemma nat_prime_factorization: "(n::nat) > 0 \<Longrightarrow>
+lemma prime_factorization_nat: "(n::nat) > 0 \<Longrightarrow>
n = (PROD p : prime_factors n. p^(multiplicity p n))"
by (frule multiset_prime_factorization,
simp add: prime_factors_nat_def multiplicity_nat_def msetprod_def)
-thm nat_prime_factorization [transferred]
+thm prime_factorization_nat [transferred]
-lemma int_prime_factorization:
+lemma prime_factorization_int:
assumes "(n::int) > 0"
shows "n = (PROD p : prime_factors n. p^(multiplicity p n))"
- apply (rule nat_prime_factorization [transferred, of n])
+ apply (rule prime_factorization_nat [transferred, of n])
using prems apply auto
done
-lemma nat_neq_zero_eq_gt_zero: "((x::nat) ~= 0) = (x > 0)"
+lemma neq_zero_eq_gt_zero_nat: "((x::nat) ~= 0) = (x > 0)"
by auto
-lemma nat_prime_factorization_unique:
+lemma prime_factorization_unique_nat:
"S = { (p::nat) . f p > 0} \<Longrightarrow> finite S \<Longrightarrow> (ALL p : S. prime p) \<Longrightarrow>
n = (PROD p : S. p^(f p)) \<Longrightarrow>
S = prime_factors n & (ALL p. f p = multiplicity p n)"
@@ -407,23 +407,23 @@
unfolding multiset_def apply force
done
-lemma nat_prime_factors_characterization: "S = {p. 0 < f (p::nat)} \<Longrightarrow>
+lemma prime_factors_characterization_nat: "S = {p. 0 < f (p::nat)} \<Longrightarrow>
finite S \<Longrightarrow> (ALL p:S. prime p) \<Longrightarrow> n = (PROD p:S. p ^ f p) \<Longrightarrow>
prime_factors n = S"
- by (rule nat_prime_factorization_unique [THEN conjunct1, symmetric],
+ by (rule prime_factorization_unique_nat [THEN conjunct1, symmetric],
assumption+)
-lemma nat_prime_factors_characterization':
+lemma prime_factors_characterization'_nat:
"finite {p. 0 < f (p::nat)} \<Longrightarrow>
(ALL p. 0 < f p \<longrightarrow> prime p) \<Longrightarrow>
prime_factors (PROD p | 0 < f p . p ^ f p) = {p. 0 < f p}"
- apply (rule nat_prime_factors_characterization)
+ apply (rule prime_factors_characterization_nat)
apply auto
done
(* A minor glitch:*)
-thm nat_prime_factors_characterization'
+thm prime_factors_characterization'_nat
[where f = "%x. f (int (x::nat))",
transferred direction: nat "op <= (0::int)", rule_format]
@@ -432,106 +432,106 @@
remain a comparison between nats. But the transfer still works.
*)
-lemma int_primes_characterization' [rule_format]:
+lemma primes_characterization'_int [rule_format]:
"finite {p. p >= 0 & 0 < f (p::int)} \<Longrightarrow>
(ALL p. 0 < f p \<longrightarrow> prime p) \<Longrightarrow>
prime_factors (PROD p | p >=0 & 0 < f p . p ^ f p) =
{p. p >= 0 & 0 < f p}"
- apply (insert nat_prime_factors_characterization'
+ apply (insert prime_factors_characterization'_nat
[where f = "%x. f (int (x::nat))",
transferred direction: nat "op <= (0::int)"])
apply auto
done
-lemma int_prime_factors_characterization: "S = {p. 0 < f (p::int)} \<Longrightarrow>
+lemma prime_factors_characterization_int: "S = {p. 0 < f (p::int)} \<Longrightarrow>
finite S \<Longrightarrow> (ALL p:S. prime p) \<Longrightarrow> n = (PROD p:S. p ^ f p) \<Longrightarrow>
prime_factors n = S"
apply simp
apply (subgoal_tac "{p. 0 < f p} = {p. 0 <= p & 0 < f p}")
apply (simp only:)
- apply (subst int_primes_characterization')
+ apply (subst primes_characterization'_int)
apply auto
- apply (auto simp add: int_prime_ge_0)
+ apply (auto simp add: prime_ge_0_int)
done
-lemma nat_multiplicity_characterization: "S = {p. 0 < f (p::nat)} \<Longrightarrow>
+lemma multiplicity_characterization_nat: "S = {p. 0 < f (p::nat)} \<Longrightarrow>
finite S \<Longrightarrow> (ALL p:S. prime p) \<Longrightarrow> n = (PROD p:S. p ^ f p) \<Longrightarrow>
multiplicity p n = f p"
- by (frule nat_prime_factorization_unique [THEN conjunct2, rule_format,
+ by (frule prime_factorization_unique_nat [THEN conjunct2, rule_format,
symmetric], auto)
-lemma nat_multiplicity_characterization': "finite {p. 0 < f (p::nat)} \<longrightarrow>
+lemma multiplicity_characterization'_nat: "finite {p. 0 < f (p::nat)} \<longrightarrow>
(ALL p. 0 < f p \<longrightarrow> prime p) \<longrightarrow>
multiplicity p (PROD p | 0 < f p . p ^ f p) = f p"
apply (rule impI)+
- apply (rule nat_multiplicity_characterization)
+ apply (rule multiplicity_characterization_nat)
apply auto
done
-lemma int_multiplicity_characterization' [rule_format]:
+lemma multiplicity_characterization'_int [rule_format]:
"finite {p. p >= 0 & 0 < f (p::int)} \<Longrightarrow>
(ALL p. 0 < f p \<longrightarrow> prime p) \<Longrightarrow> p >= 0 \<Longrightarrow>
multiplicity p (PROD p | p >= 0 & 0 < f p . p ^ f p) = f p"
- apply (insert nat_multiplicity_characterization'
+ apply (insert multiplicity_characterization'_nat
[where f = "%x. f (int (x::nat))",
transferred direction: nat "op <= (0::int)", rule_format])
apply auto
done
-lemma int_multiplicity_characterization: "S = {p. 0 < f (p::int)} \<Longrightarrow>
+lemma multiplicity_characterization_int: "S = {p. 0 < f (p::int)} \<Longrightarrow>
finite S \<Longrightarrow> (ALL p:S. prime p) \<Longrightarrow> n = (PROD p:S. p ^ f p) \<Longrightarrow>
p >= 0 \<Longrightarrow> multiplicity p n = f p"
apply simp
apply (subgoal_tac "{p. 0 < f p} = {p. 0 <= p & 0 < f p}")
apply (simp only:)
- apply (subst int_multiplicity_characterization')
+ apply (subst multiplicity_characterization'_int)
apply auto
- apply (auto simp add: int_prime_ge_0)
+ apply (auto simp add: prime_ge_0_int)
done
-lemma nat_multiplicity_zero [simp]: "multiplicity (p::nat) 0 = 0"
+lemma multiplicity_zero_nat [simp]: "multiplicity (p::nat) 0 = 0"
by (simp add: multiplicity_nat_def multiset_prime_factorization_def)
-lemma int_multiplicity_zero [simp]: "multiplicity (p::int) 0 = 0"
+lemma multiplicity_zero_int [simp]: "multiplicity (p::int) 0 = 0"
by (simp add: multiplicity_int_def)
-lemma nat_multiplicity_one [simp]: "multiplicity p (1::nat) = 0"
- by (subst nat_multiplicity_characterization [where f = "%x. 0"], auto)
+lemma multiplicity_one_nat [simp]: "multiplicity p (1::nat) = 0"
+ by (subst multiplicity_characterization_nat [where f = "%x. 0"], auto)
-lemma int_multiplicity_one [simp]: "multiplicity p (1::int) = 0"
+lemma multiplicity_one_int [simp]: "multiplicity p (1::int) = 0"
by (simp add: multiplicity_int_def)
-lemma nat_multiplicity_prime [simp]: "prime (p::nat) \<Longrightarrow> multiplicity p p = 1"
- apply (subst nat_multiplicity_characterization
+lemma multiplicity_prime_nat [simp]: "prime (p::nat) \<Longrightarrow> multiplicity p p = 1"
+ apply (subst multiplicity_characterization_nat
[where f = "(%q. if q = p then 1 else 0)"])
apply auto
apply (case_tac "x = p")
apply auto
done
-lemma int_multiplicity_prime [simp]: "prime (p::int) \<Longrightarrow> multiplicity p p = 1"
+lemma multiplicity_prime_int [simp]: "prime (p::int) \<Longrightarrow> multiplicity p p = 1"
unfolding prime_int_def multiplicity_int_def by auto
-lemma nat_multiplicity_prime_power [simp]: "prime (p::nat) \<Longrightarrow>
+lemma multiplicity_prime_power_nat [simp]: "prime (p::nat) \<Longrightarrow>
multiplicity p (p^n) = n"
apply (case_tac "n = 0")
apply auto
- apply (subst nat_multiplicity_characterization
+ apply (subst multiplicity_characterization_nat
[where f = "(%q. if q = p then n else 0)"])
apply auto
apply (case_tac "x = p")
apply auto
done
-lemma int_multiplicity_prime_power [simp]: "prime (p::int) \<Longrightarrow>
+lemma multiplicity_prime_power_int [simp]: "prime (p::int) \<Longrightarrow>
multiplicity p (p^n) = n"
- apply (frule int_prime_ge_0)
+ apply (frule prime_ge_0_int)
apply (auto simp add: prime_int_def multiplicity_int_def nat_power_eq)
done
-lemma nat_multiplicity_nonprime [simp]: "~ prime (p::nat) \<Longrightarrow>
+lemma multiplicity_nonprime_nat [simp]: "~ prime (p::nat) \<Longrightarrow>
multiplicity p n = 0"
apply (case_tac "n = 0")
apply auto
@@ -539,22 +539,22 @@
apply (auto simp add: set_of_def multiplicity_nat_def)
done
-lemma int_multiplicity_nonprime [simp]: "~ prime (p::int) \<Longrightarrow> multiplicity p n = 0"
+lemma multiplicity_nonprime_int [simp]: "~ prime (p::int) \<Longrightarrow> multiplicity p n = 0"
by (unfold multiplicity_int_def prime_int_def, auto)
-lemma nat_multiplicity_not_factor [simp]:
+lemma multiplicity_not_factor_nat [simp]:
"p ~: prime_factors (n::nat) \<Longrightarrow> multiplicity p n = 0"
- by (subst (asm) nat_prime_factors_altdef, auto)
+ by (subst (asm) prime_factors_altdef_nat, auto)
-lemma int_multiplicity_not_factor [simp]:
+lemma multiplicity_not_factor_int [simp]:
"p >= 0 \<Longrightarrow> p ~: prime_factors (n::int) \<Longrightarrow> multiplicity p n = 0"
- by (subst (asm) int_prime_factors_altdef, auto)
+ by (subst (asm) prime_factors_altdef_int, auto)
-lemma nat_multiplicity_product_aux: "(k::nat) > 0 \<Longrightarrow> l > 0 \<Longrightarrow>
+lemma multiplicity_product_aux_nat: "(k::nat) > 0 \<Longrightarrow> l > 0 \<Longrightarrow>
(prime_factors k) Un (prime_factors l) = prime_factors (k * l) &
(ALL p. multiplicity p k + multiplicity p l = multiplicity p (k * l))"
- apply (rule nat_prime_factorization_unique)
- apply (simp only: nat_prime_factors_altdef)
+ apply (rule prime_factorization_unique_nat)
+ apply (simp only: prime_factors_altdef_nat)
apply auto
apply (subst power_add)
apply (subst setprod_timesf)
@@ -568,7 +568,7 @@
(\<Prod>p\<in>prime_factors l - prime_factors k. 1)")
apply (erule ssubst)
apply (simp add: setprod_1)
- apply (erule nat_prime_factorization)
+ apply (erule prime_factorization_nat)
apply (rule setprod_cong, auto)
apply (subgoal_tac "prime_factors k Un prime_factors l = prime_factors l Un
(prime_factors k - prime_factors l)")
@@ -579,47 +579,47 @@
(\<Prod>p\<in>prime_factors k - prime_factors l. 1)")
apply (erule ssubst)
apply (simp add: setprod_1)
- apply (erule nat_prime_factorization)
+ apply (erule prime_factorization_nat)
apply (rule setprod_cong, auto)
done
(* transfer doesn't have the same problem here with the right
choice of rules. *)
-lemma int_multiplicity_product_aux:
+lemma multiplicity_product_aux_int:
assumes "(k::int) > 0" and "l > 0"
shows
"(prime_factors k) Un (prime_factors l) = prime_factors (k * l) &
(ALL p >= 0. multiplicity p k + multiplicity p l = multiplicity p (k * l))"
- apply (rule nat_multiplicity_product_aux [transferred, of l k])
+ apply (rule multiplicity_product_aux_nat [transferred, of l k])
using prems apply auto
done
-lemma nat_prime_factors_product: "(k::nat) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> prime_factors (k * l) =
+lemma prime_factors_product_nat: "(k::nat) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> prime_factors (k * l) =
prime_factors k Un prime_factors l"
- by (rule nat_multiplicity_product_aux [THEN conjunct1, symmetric])
+ by (rule multiplicity_product_aux_nat [THEN conjunct1, symmetric])
-lemma int_prime_factors_product: "(k::int) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> prime_factors (k * l) =
+lemma prime_factors_product_int: "(k::int) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> prime_factors (k * l) =
prime_factors k Un prime_factors l"
- by (rule int_multiplicity_product_aux [THEN conjunct1, symmetric])
+ by (rule multiplicity_product_aux_int [THEN conjunct1, symmetric])
-lemma nat_multiplicity_product: "(k::nat) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> multiplicity p (k * l) =
+lemma multiplicity_product_nat: "(k::nat) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> multiplicity p (k * l) =
multiplicity p k + multiplicity p l"
- by (rule nat_multiplicity_product_aux [THEN conjunct2, rule_format,
+ by (rule multiplicity_product_aux_nat [THEN conjunct2, rule_format,
symmetric])
-lemma int_multiplicity_product: "(k::int) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> p >= 0 \<Longrightarrow>
+lemma multiplicity_product_int: "(k::int) > 0 \<Longrightarrow> l > 0 \<Longrightarrow> p >= 0 \<Longrightarrow>
multiplicity p (k * l) = multiplicity p k + multiplicity p l"
- by (rule int_multiplicity_product_aux [THEN conjunct2, rule_format,
+ by (rule multiplicity_product_aux_int [THEN conjunct2, rule_format,
symmetric])
-lemma nat_multiplicity_setprod: "finite S \<Longrightarrow> (ALL x : S. f x > 0) \<Longrightarrow>
+lemma multiplicity_setprod_nat: "finite S \<Longrightarrow> (ALL x : S. f x > 0) \<Longrightarrow>
multiplicity (p::nat) (PROD x : S. f x) =
(SUM x : S. multiplicity p (f x))"
apply (induct set: finite)
apply auto
- apply (subst nat_multiplicity_product)
+ apply (subst multiplicity_product_nat)
apply auto
done
@@ -643,12 +643,12 @@
add return: transfer_nat_int_sum_prod_closure3
del: transfer_nat_int_sum_prod2 (1)]
-lemma int_multiplicity_setprod: "p >= 0 \<Longrightarrow> finite S \<Longrightarrow>
+lemma multiplicity_setprod_int: "p >= 0 \<Longrightarrow> finite S \<Longrightarrow>
(ALL x : S. f x > 0) \<Longrightarrow>
multiplicity (p::int) (PROD x : S. f x) =
(SUM x : S. multiplicity p (f x))"
- apply (frule nat_multiplicity_setprod
+ apply (frule multiplicity_setprod_nat
[where f = "%x. nat(int(nat(f x)))",
transferred direction: nat "op <= (0::int)"])
apply auto
@@ -663,13 +663,13 @@
declare TransferMorphism_nat_int[transfer
add return: transfer_nat_int_sum_prod2 (1)]
-lemma nat_multiplicity_prod_prime_powers:
+lemma multiplicity_prod_prime_powers_nat:
"finite S \<Longrightarrow> (ALL p : S. prime (p::nat)) \<Longrightarrow>
multiplicity p (PROD p : S. p ^ f p) = (if p : S then f p else 0)"
apply (subgoal_tac "(PROD p : S. p ^ f p) =
(PROD p : S. p ^ (%x. if x : S then f x else 0) p)")
apply (erule ssubst)
- apply (subst nat_multiplicity_characterization)
+ apply (subst multiplicity_characterization_nat)
prefer 5 apply (rule refl)
apply (rule refl)
apply auto
@@ -683,85 +683,85 @@
(* Here the issue with transfer is the implicit quantifier over S *)
-lemma int_multiplicity_prod_prime_powers:
+lemma multiplicity_prod_prime_powers_int:
"(p::int) >= 0 \<Longrightarrow> finite S \<Longrightarrow> (ALL p : S. prime p) \<Longrightarrow>
multiplicity p (PROD p : S. p ^ f p) = (if p : S then f p else 0)"
apply (subgoal_tac "int ` nat ` S = S")
- apply (frule nat_multiplicity_prod_prime_powers [where f = "%x. f(int x)"
+ apply (frule multiplicity_prod_prime_powers_nat [where f = "%x. f(int x)"
and S = "nat ` S", transferred])
apply auto
apply (subst prime_int_def [symmetric])
apply auto
apply (subgoal_tac "xb >= 0")
apply force
- apply (rule int_prime_ge_0)
+ apply (rule prime_ge_0_int)
apply force
apply (subst transfer_nat_int_set_return_embed)
apply (unfold nat_set_def, auto)
done
-lemma nat_multiplicity_distinct_prime_power: "prime (p::nat) \<Longrightarrow> prime q \<Longrightarrow>
+lemma multiplicity_distinct_prime_power_nat: "prime (p::nat) \<Longrightarrow> prime q \<Longrightarrow>
p ~= q \<Longrightarrow> multiplicity p (q^n) = 0"
apply (subgoal_tac "q^n = setprod (%x. x^n) {q}")
apply (erule ssubst)
- apply (subst nat_multiplicity_prod_prime_powers)
+ apply (subst multiplicity_prod_prime_powers_nat)
apply auto
done
-lemma int_multiplicity_distinct_prime_power: "prime (p::int) \<Longrightarrow> prime q \<Longrightarrow>
+lemma multiplicity_distinct_prime_power_int: "prime (p::int) \<Longrightarrow> prime q \<Longrightarrow>
p ~= q \<Longrightarrow> multiplicity p (q^n) = 0"
- apply (frule int_prime_ge_0 [of q])
- apply (frule nat_multiplicity_distinct_prime_power [transferred leaving: n])
+ apply (frule prime_ge_0_int [of q])
+ apply (frule multiplicity_distinct_prime_power_nat [transferred leaving: n])
prefer 4
apply assumption
apply auto
done
-lemma nat_dvd_multiplicity:
+lemma dvd_multiplicity_nat:
"(0::nat) < y \<Longrightarrow> x dvd y \<Longrightarrow> multiplicity p x <= multiplicity p y"
apply (case_tac "x = 0")
- apply (auto simp add: dvd_def nat_multiplicity_product)
+ apply (auto simp add: dvd_def multiplicity_product_nat)
done
-lemma int_dvd_multiplicity:
+lemma dvd_multiplicity_int:
"(0::int) < y \<Longrightarrow> 0 <= x \<Longrightarrow> x dvd y \<Longrightarrow> p >= 0 \<Longrightarrow>
multiplicity p x <= multiplicity p y"
apply (case_tac "x = 0")
apply (auto simp add: dvd_def)
apply (subgoal_tac "0 < k")
- apply (auto simp add: int_multiplicity_product)
+ apply (auto simp add: multiplicity_product_int)
apply (erule zero_less_mult_pos)
apply arith
done
-lemma nat_dvd_prime_factors [intro]:
+lemma dvd_prime_factors_nat [intro]:
"0 < (y::nat) \<Longrightarrow> x dvd y \<Longrightarrow> prime_factors x <= prime_factors y"
- apply (simp only: nat_prime_factors_altdef)
+ apply (simp only: prime_factors_altdef_nat)
apply auto
- apply (frule nat_dvd_multiplicity)
+ apply (frule dvd_multiplicity_nat)
apply auto
(* It is a shame that auto and arith don't get this. *)
apply (erule order_less_le_trans)back
apply assumption
done
-lemma int_dvd_prime_factors [intro]:
+lemma dvd_prime_factors_int [intro]:
"0 < (y::int) \<Longrightarrow> 0 <= x \<Longrightarrow> x dvd y \<Longrightarrow> prime_factors x <= prime_factors y"
- apply (auto simp add: int_prime_factors_altdef)
+ apply (auto simp add: prime_factors_altdef_int)
apply (erule order_less_le_trans)
- apply (rule int_dvd_multiplicity)
+ apply (rule dvd_multiplicity_int)
apply auto
done
-lemma nat_multiplicity_dvd: "0 < (x::nat) \<Longrightarrow> 0 < y \<Longrightarrow>
+lemma multiplicity_dvd_nat: "0 < (x::nat) \<Longrightarrow> 0 < y \<Longrightarrow>
ALL p. multiplicity p x <= multiplicity p y \<Longrightarrow>
x dvd y"
- apply (subst nat_prime_factorization [of x], assumption)
- apply (subst nat_prime_factorization [of y], assumption)
+ apply (subst prime_factorization_nat [of x], assumption)
+ apply (subst prime_factorization_nat [of y], assumption)
apply (rule setprod_dvd_setprod_subset2)
apply force
- apply (subst nat_prime_factors_altdef)+
+ apply (subst prime_factors_altdef_nat)+
apply auto
(* Again, a shame that auto and arith don't get this. *)
apply (drule_tac x = xa in spec, auto)
@@ -769,14 +769,14 @@
apply blast
done
-lemma int_multiplicity_dvd: "0 < (x::int) \<Longrightarrow> 0 < y \<Longrightarrow>
+lemma multiplicity_dvd_int: "0 < (x::int) \<Longrightarrow> 0 < y \<Longrightarrow>
ALL p >= 0. multiplicity p x <= multiplicity p y \<Longrightarrow>
x dvd y"
- apply (subst int_prime_factorization [of x], assumption)
- apply (subst int_prime_factorization [of y], assumption)
+ apply (subst prime_factorization_int [of x], assumption)
+ apply (subst prime_factorization_int [of y], assumption)
apply (rule setprod_dvd_setprod_subset2)
apply force
- apply (subst int_prime_factors_altdef)+
+ apply (subst prime_factors_altdef_int)+
apply auto
apply (rule dvd_power_le)
apply auto
@@ -785,83 +785,83 @@
apply auto
done
-lemma nat_multiplicity_dvd': "(0::nat) < x \<Longrightarrow>
+lemma multiplicity_dvd'_nat: "(0::nat) < x \<Longrightarrow>
\<forall>p. prime p \<longrightarrow> multiplicity p x \<le> multiplicity p y \<Longrightarrow> x dvd y"
apply (cases "y = 0")
apply auto
- apply (rule nat_multiplicity_dvd, auto)
+ apply (rule multiplicity_dvd_nat, auto)
apply (case_tac "prime p")
apply auto
done
-lemma int_multiplicity_dvd': "(0::int) < x \<Longrightarrow> 0 <= y \<Longrightarrow>
+lemma multiplicity_dvd'_int: "(0::int) < x \<Longrightarrow> 0 <= y \<Longrightarrow>
\<forall>p. prime p \<longrightarrow> multiplicity p x \<le> multiplicity p y \<Longrightarrow> x dvd y"
apply (cases "y = 0")
apply auto
- apply (rule int_multiplicity_dvd, auto)
+ apply (rule multiplicity_dvd_int, auto)
apply (case_tac "prime p")
apply auto
done
-lemma nat_dvd_multiplicity_eq: "0 < (x::nat) \<Longrightarrow> 0 < y \<Longrightarrow>
+lemma dvd_multiplicity_eq_nat: "0 < (x::nat) \<Longrightarrow> 0 < y \<Longrightarrow>
(x dvd y) = (ALL p. multiplicity p x <= multiplicity p y)"
- by (auto intro: nat_dvd_multiplicity nat_multiplicity_dvd)
+ by (auto intro: dvd_multiplicity_nat multiplicity_dvd_nat)
-lemma int_dvd_multiplicity_eq: "0 < (x::int) \<Longrightarrow> 0 < y \<Longrightarrow>
+lemma dvd_multiplicity_eq_int: "0 < (x::int) \<Longrightarrow> 0 < y \<Longrightarrow>
(x dvd y) = (ALL p >= 0. multiplicity p x <= multiplicity p y)"
- by (auto intro: int_dvd_multiplicity int_multiplicity_dvd)
+ by (auto intro: dvd_multiplicity_int multiplicity_dvd_int)
-lemma nat_prime_factors_altdef2: "(n::nat) > 0 \<Longrightarrow>
+lemma prime_factors_altdef2_nat: "(n::nat) > 0 \<Longrightarrow>
(p : prime_factors n) = (prime p & p dvd n)"
apply (case_tac "prime p")
apply auto
- apply (subst nat_prime_factorization [where n = n], assumption)
+ apply (subst prime_factorization_nat [where n = n], assumption)
apply (rule dvd_trans)
apply (rule dvd_power [where x = p and n = "multiplicity p n"])
- apply (subst (asm) nat_prime_factors_altdef, force)
+ apply (subst (asm) prime_factors_altdef_nat, force)
apply (rule dvd_setprod)
apply auto
- apply (subst nat_prime_factors_altdef)
- apply (subst (asm) nat_dvd_multiplicity_eq)
+ apply (subst prime_factors_altdef_nat)
+ apply (subst (asm) dvd_multiplicity_eq_nat)
apply auto
apply (drule spec [where x = p])
apply auto
done
-lemma int_prime_factors_altdef2:
+lemma prime_factors_altdef2_int:
assumes "(n::int) > 0"
shows "(p : prime_factors n) = (prime p & p dvd n)"
apply (case_tac "p >= 0")
- apply (rule nat_prime_factors_altdef2 [transferred])
+ apply (rule prime_factors_altdef2_nat [transferred])
using prems apply auto
- apply (auto simp add: int_prime_ge_0 int_prime_factors_ge_0)
+ apply (auto simp add: prime_ge_0_int prime_factors_ge_0_int)
done
-lemma nat_multiplicity_eq:
+lemma multiplicity_eq_nat:
fixes x and y::nat
assumes [arith]: "x > 0" "y > 0" and
mult_eq [simp]: "!!p. prime p \<Longrightarrow> multiplicity p x = multiplicity p y"
shows "x = y"
apply (rule dvd_anti_sym)
- apply (auto intro: nat_multiplicity_dvd')
+ apply (auto intro: multiplicity_dvd'_nat)
done
-lemma int_multiplicity_eq:
+lemma multiplicity_eq_int:
fixes x and y::int
assumes [arith]: "x > 0" "y > 0" and
mult_eq [simp]: "!!p. prime p \<Longrightarrow> multiplicity p x = multiplicity p y"
shows "x = y"
apply (rule dvd_anti_sym [transferred])
- apply (auto intro: int_multiplicity_dvd')
+ apply (auto intro: multiplicity_dvd'_int)
done
subsection {* An application *}
-lemma nat_gcd_eq:
+lemma gcd_eq_nat:
assumes pos [arith]: "x > 0" "y > 0"
shows "gcd (x::nat) y =
(PROD p: prime_factors x Un prime_factors y.
@@ -874,26 +874,26 @@
have aux: "!!p. prime p \<Longrightarrow> multiplicity p z =
min (multiplicity p x) (multiplicity p y)"
unfolding z_def
- apply (subst nat_multiplicity_prod_prime_powers)
- apply (auto simp add: nat_multiplicity_not_factor)
+ apply (subst multiplicity_prod_prime_powers_nat)
+ apply (auto simp add: multiplicity_not_factor_nat)
done
have "z dvd x"
- by (intro nat_multiplicity_dvd', auto simp add: aux)
+ by (intro multiplicity_dvd'_nat, auto simp add: aux)
moreover have "z dvd y"
- by (intro nat_multiplicity_dvd', auto simp add: aux)
+ by (intro multiplicity_dvd'_nat, auto simp add: aux)
moreover have "ALL w. w dvd x & w dvd y \<longrightarrow> w dvd z"
apply auto
apply (case_tac "w = 0", auto)
- apply (erule nat_multiplicity_dvd')
- apply (auto intro: nat_dvd_multiplicity simp add: aux)
+ apply (erule multiplicity_dvd'_nat)
+ apply (auto intro: dvd_multiplicity_nat simp add: aux)
done
ultimately have "z = gcd x y"
- by (subst nat_gcd_unique [symmetric], blast)
+ by (subst gcd_unique_nat [symmetric], blast)
thus ?thesis
unfolding z_def by auto
qed
-lemma nat_lcm_eq:
+lemma lcm_eq_nat:
assumes pos [arith]: "x > 0" "y > 0"
shows "lcm (x::nat) y =
(PROD p: prime_factors x Un prime_factors y.
@@ -906,61 +906,61 @@
have aux: "!!p. prime p \<Longrightarrow> multiplicity p z =
max (multiplicity p x) (multiplicity p y)"
unfolding z_def
- apply (subst nat_multiplicity_prod_prime_powers)
- apply (auto simp add: nat_multiplicity_not_factor)
+ apply (subst multiplicity_prod_prime_powers_nat)
+ apply (auto simp add: multiplicity_not_factor_nat)
done
have "x dvd z"
- by (intro nat_multiplicity_dvd', auto simp add: aux)
+ by (intro multiplicity_dvd'_nat, auto simp add: aux)
moreover have "y dvd z"
- by (intro nat_multiplicity_dvd', auto simp add: aux)
+ by (intro multiplicity_dvd'_nat, auto simp add: aux)
moreover have "ALL w. x dvd w & y dvd w \<longrightarrow> z dvd w"
apply auto
apply (case_tac "w = 0", auto)
- apply (rule nat_multiplicity_dvd')
- apply (auto intro: nat_dvd_multiplicity simp add: aux)
+ apply (rule multiplicity_dvd'_nat)
+ apply (auto intro: dvd_multiplicity_nat simp add: aux)
done
ultimately have "z = lcm x y"
- by (subst nat_lcm_unique [symmetric], blast)
+ by (subst lcm_unique_nat [symmetric], blast)
thus ?thesis
unfolding z_def by auto
qed
-lemma nat_multiplicity_gcd:
+lemma multiplicity_gcd_nat:
assumes [arith]: "x > 0" "y > 0"
shows "multiplicity (p::nat) (gcd x y) =
min (multiplicity p x) (multiplicity p y)"
- apply (subst nat_gcd_eq)
+ apply (subst gcd_eq_nat)
apply auto
- apply (subst nat_multiplicity_prod_prime_powers)
+ apply (subst multiplicity_prod_prime_powers_nat)
apply auto
done
-lemma nat_multiplicity_lcm:
+lemma multiplicity_lcm_nat:
assumes [arith]: "x > 0" "y > 0"
shows "multiplicity (p::nat) (lcm x y) =
max (multiplicity p x) (multiplicity p y)"
- apply (subst nat_lcm_eq)
+ apply (subst lcm_eq_nat)
apply auto
- apply (subst nat_multiplicity_prod_prime_powers)
+ apply (subst multiplicity_prod_prime_powers_nat)
apply auto
done
-lemma nat_gcd_lcm_distrib: "gcd (x::nat) (lcm y z) = lcm (gcd x y) (gcd x z)"
+lemma gcd_lcm_distrib_nat: "gcd (x::nat) (lcm y z) = lcm (gcd x y) (gcd x z)"
apply (case_tac "x = 0 | y = 0 | z = 0")
apply auto
- apply (rule nat_multiplicity_eq)
- apply (auto simp add: nat_multiplicity_gcd nat_multiplicity_lcm
- nat_lcm_pos)
+ apply (rule multiplicity_eq_nat)
+ apply (auto simp add: multiplicity_gcd_nat multiplicity_lcm_nat
+ lcm_pos_nat)
done
-lemma int_gcd_lcm_distrib: "gcd (x::int) (lcm y z) = lcm (gcd x y) (gcd x z)"
- apply (subst (1 2 3) int_gcd_abs)
- apply (subst int_lcm_abs)
+lemma gcd_lcm_distrib_int: "gcd (x::int) (lcm y z) = lcm (gcd x y) (gcd x z)"
+ apply (subst (1 2 3) gcd_abs_int)
+ apply (subst lcm_abs_int)
apply (subst (2) abs_of_nonneg)
apply force
- apply (rule nat_gcd_lcm_distrib [transferred])
+ apply (rule gcd_lcm_distrib_nat [transferred])
apply auto
done
--- a/src/HOL/RealDef.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/RealDef.thy Tue Jul 07 17:39:51 2009 +0200
@@ -925,7 +925,7 @@
have "?gcd' = 1"
proof -
have "?gcd * ?gcd' = gcd (?gcd * ?k) (?gcd * ?l)"
- by (rule nat_gcd_mult_distrib)
+ by (rule gcd_mult_distrib_nat)
with gcd_k gcd_l have "?gcd * ?gcd' = ?gcd" by simp
with gcd show ?thesis by auto
qed
--- a/src/HOL/ex/LocaleTest2.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/ex/LocaleTest2.thy Tue Jul 07 17:39:51 2009 +0200
@@ -599,7 +599,7 @@
apply (rule_tac x = "gcd x y" in exI)
apply auto [1]
apply (rule_tac x = "lcm x y" in exI)
- apply (auto intro: nat_lcm_dvd1 nat_lcm_dvd2 nat_lcm_least)
+ apply (auto intro: lcm_dvd1_nat lcm_dvd2_nat lcm_least_nat)
done
then interpret nat_dvd: dlat "op dvd :: [nat, nat] => bool" .
txt {* Interpretation to ease use of definitions, which are
@@ -613,7 +613,7 @@
apply (unfold nat_dvd.join_def)
apply (rule the_equality)
apply (unfold nat_dvd.is_sup_def)
- by (auto intro: nat_lcm_dvd1 nat_lcm_dvd2 nat_lcm_least)
+ by (auto intro: lcm_dvd1_nat lcm_dvd2_nat lcm_least_nat)
qed
text {* Interpreted theorems from the locales, involving defined terms. *}
--- a/src/HOL/ex/Sqrt.thy Tue Jul 07 07:56:24 2009 +0200
+++ b/src/HOL/ex/Sqrt.thy Tue Jul 07 17:39:51 2009 +0200
@@ -34,12 +34,12 @@
have "p dvd m \<and> p dvd n"
proof
from eq have "p dvd m\<twosuperior>" ..
- with `prime p` pos2 show "p dvd m" by (rule nat_prime_dvd_power)
+ with `prime p` pos2 show "p dvd m" by (rule prime_dvd_power_nat)
then obtain k where "m = p * k" ..
with eq have "p * n\<twosuperior> = p\<twosuperior> * k\<twosuperior>" by (auto simp add: power2_eq_square mult_ac)
with p have "n\<twosuperior> = p * k\<twosuperior>" by (simp add: power2_eq_square)
then have "p dvd n\<twosuperior>" ..
- with `prime p` pos2 show "p dvd n" by (rule nat_prime_dvd_power)
+ with `prime p` pos2 show "p dvd n" by (rule prime_dvd_power_nat)
qed
then have "p dvd gcd m n" ..
with gcd have "p dvd 1" by simp
@@ -48,7 +48,7 @@
qed
corollary "sqrt (real (2::nat)) \<notin> \<rat>"
- by (rule sqrt_prime_irrational) (rule nat_two_is_prime)
+ by (rule sqrt_prime_irrational) (rule two_is_prime_nat)
subsection {* Variations *}
@@ -75,13 +75,13 @@
also have "\<dots> * real (n\<twosuperior>) = real (p * n\<twosuperior>)" by simp
finally have eq: "m\<twosuperior> = p * n\<twosuperior>" ..
then have "p dvd m\<twosuperior>" ..
- with `prime p` pos2 have dvd_m: "p dvd m" by (rule nat_prime_dvd_power)
+ with `prime p` pos2 have dvd_m: "p dvd m" by (rule prime_dvd_power_nat)
then obtain k where "m = p * k" ..
with eq have "p * n\<twosuperior> = p\<twosuperior> * k\<twosuperior>" by (auto simp add: power2_eq_square mult_ac)
with p have "n\<twosuperior> = p * k\<twosuperior>" by (simp add: power2_eq_square)
then have "p dvd n\<twosuperior>" ..
- with `prime p` pos2 have "p dvd n" by (rule nat_prime_dvd_power)
- with dvd_m have "p dvd gcd m n" by (rule nat_gcd_greatest)
+ with `prime p` pos2 have "p dvd n" by (rule prime_dvd_power_nat)
+ with dvd_m have "p dvd gcd m n" by (rule gcd_greatest_nat)
with gcd have "p dvd 1" by simp
then have "p \<le> 1" by (simp add: dvd_imp_le)
with p show False by simp