# HG changeset patch # User nipkow # Date 1245497694 -7200 # Node ID d74830dc3e4ab51ad3e3e609aebe2a516834687f # Parent b9299916d618f07cc50e01a913938edad4afba16 added lemmas; tuned diff -r b9299916d618 -r d74830dc3e4a src/HOL/Decision_Procs/Cooper.thy --- a/src/HOL/Decision_Procs/Cooper.thy Sat Jun 20 01:53:39 2009 +0200 +++ b/src/HOL/Decision_Procs/Cooper.thy Sat Jun 20 13:34:54 2009 +0200 @@ -1106,18 +1106,18 @@ let ?d = "\ (And p q)" from prems int_lcm_pos have dp: "?d >0" by simp have d1: "\ p dvd \ (And p q)" using prems by simp - hence th: "d\ p ?d" using delta_mono prems(3-4) by(simp del:int_lcm_dvd1) + hence th: "d\ p ?d" using delta_mono prems(3-4) by(simp only: iszlfm.simps) have "\ q dvd \ (And p q)" using prems by simp - hence th': "d\ q ?d" using delta_mono prems by(simp del:int_lcm_dvd2) + hence th': "d\ q ?d" using delta_mono prems by(simp only: iszlfm.simps) from th th' dp show ?case by simp next case (2 p q) let ?d = "\ (And p q)" from prems int_lcm_pos have dp: "?d >0" by simp have "\ p dvd \ (And p q)" using prems by simp - hence th: "d\ p ?d" using delta_mono prems by(simp del:int_lcm_dvd1) + hence th: "d\ p ?d" using delta_mono prems by(simp only: iszlfm.simps) have "\ q dvd \ (And p q)" using prems by simp - hence th': "d\ q ?d" using delta_mono prems by(simp del:int_lcm_dvd2) + hence th': "d\ q ?d" using delta_mono prems by(simp only: iszlfm.simps) from th th' dp show ?case by simp qed simp_all diff -r b9299916d618 -r d74830dc3e4a src/HOL/Decision_Procs/MIR.thy --- a/src/HOL/Decision_Procs/MIR.thy Sat Jun 20 01:53:39 2009 +0200 +++ b/src/HOL/Decision_Procs/MIR.thy Sat Jun 20 13:34:54 2009 +0200 @@ -2129,18 +2129,18 @@ from prems int_lcm_pos have dp: "?d >0" by simp have d1: "\ p dvd \ (And p q)" using prems by simp hence th: "d\ p ?d" - using delta_mono prems by (auto simp del: int_lcm_dvd1) + using delta_mono prems by(simp only: iszlfm.simps) blast have "\ q dvd \ (And p q)" using prems by simp - hence th': "d\ q ?d" using delta_mono prems by (auto simp del: int_lcm_dvd2) + hence th': "d\ q ?d" using delta_mono prems by(simp only: iszlfm.simps) blast from th th' dp show ?case by simp next case (2 p q) let ?d = "\ (And p q)" from prems int_lcm_pos have dp: "?d >0" by simp have "\ p dvd \ (And p q)" using prems by simp hence th: "d\ p ?d" using delta_mono prems - by (auto simp del: int_lcm_dvd1) - have "\ q dvd \ (And p q)" using prems by simp hence th': "d\ q ?d" using delta_mono prems by (auto simp del: int_lcm_dvd2) - from th th' dp show ?case by simp + by(simp only: iszlfm.simps) blast + have "\ q dvd \ (And p q)" using prems by simp hence th': "d\ q ?d" using delta_mono prems by(simp only: iszlfm.simps) blast + from th th' dp show ?case by simp qed simp_all diff -r b9299916d618 -r d74830dc3e4a src/HOL/GCD.thy --- a/src/HOL/GCD.thy Sat Jun 20 01:53:39 2009 +0200 +++ b/src/HOL/GCD.thy Sat Jun 20 13:34:54 2009 +0200 @@ -283,6 +283,18 @@ apply auto done +lemma dvd_gcd_D1_nat: "k dvd gcd m n \ (k::nat) dvd m" +by(metis nat_gcd_dvd1 dvd_trans) + +lemma dvd_gcd_D2_nat: "k dvd gcd m n \ (k::nat) dvd n" +by(metis nat_gcd_dvd2 dvd_trans) + +lemma dvd_gcd_D1_int: "i dvd gcd m n \ (i::int) dvd m" +by(metis int_gcd_dvd1 dvd_trans) + +lemma dvd_gcd_D2_int: "i dvd gcd m n \ (i::int) dvd n" +by(metis int_gcd_dvd2 dvd_trans) + lemma nat_gcd_le1 [simp]: "a \ 0 \ gcd (a::nat) b \ a" by (rule dvd_imp_le, auto) @@ -1386,7 +1398,7 @@ using prems apply auto done -lemma nat_lcm_dvd1 [iff]: "(m::nat) dvd lcm m n" +lemma nat_lcm_dvd1: "(m::nat) dvd lcm m n" proof (cases m) case 0 then show ?thesis by simp next @@ -1407,7 +1419,7 @@ qed qed -lemma int_lcm_dvd1 [iff]: "(m::int) dvd lcm m n" +lemma int_lcm_dvd1: "(m::int) dvd lcm m n" apply (subst int_lcm_abs) apply (rule dvd_trans) prefer 2 @@ -1415,27 +1427,27 @@ apply auto done -lemma nat_lcm_dvd2 [iff]: "(n::nat) dvd lcm m n" +lemma nat_lcm_dvd2: "(n::nat) dvd lcm m n" by (subst nat_lcm_commute, rule nat_lcm_dvd1) -lemma int_lcm_dvd2 [iff]: "(n::int) dvd lcm m n" +lemma int_lcm_dvd2: "(n::int) dvd lcm m n" by (subst int_lcm_commute, rule int_lcm_dvd1) -lemma dvd_lcm_if_dvd1_nat: "(k::nat) dvd m \ k dvd lcm m n" +lemma dvd_lcm_I1_nat[simp]: "(k::nat) dvd m \ k dvd lcm m n" by(metis nat_lcm_dvd1 dvd_trans) -lemma dvd_lcm_if_dvd2_nat: "(k::nat) dvd n \ k dvd lcm m n" +lemma dvd_lcm_I2_nat[simp]: "(k::nat) dvd n \ k dvd lcm m n" by(metis nat_lcm_dvd2 dvd_trans) -lemma dvd_lcm_if_dvd1_int: "(i::int) dvd m \ i dvd lcm m n" +lemma dvd_lcm_I1_int[simp]: "(i::int) dvd m \ i dvd lcm m n" by(metis int_lcm_dvd1 dvd_trans) -lemma dvd_lcm_if_dvd2_int: "(i::int) dvd n \ i dvd lcm m n" +lemma dvd_lcm_I2_int[simp]: "(i::int) dvd n \ i dvd lcm m n" by(metis int_lcm_dvd2 dvd_trans) lemma nat_lcm_unique: "(a::nat) dvd d \ b dvd d \ (\e. a dvd e \ b dvd e \ d dvd e) \ d = lcm a b" - by (auto intro: dvd_anti_sym nat_lcm_least) + by (auto intro: dvd_anti_sym nat_lcm_least nat_lcm_dvd1 nat_lcm_dvd2) lemma int_lcm_unique: "d >= 0 \ (a::int) dvd d \ b dvd d \ (\e. a dvd e \ b dvd e \ d dvd e) \ d = lcm a b"