diff -r 08b34c902618 -r b963e9cee2a0 src/HOL/Integ/Int.thy --- a/src/HOL/Integ/Int.thy Mon Nov 24 15:33:07 2003 +0100 +++ b/src/HOL/Integ/Int.thy Tue Nov 25 10:37:03 2003 +0100 @@ -239,15 +239,6 @@ subsection{*Instances of the equations above, for zero*} -(*instantiate a variable to zero and simplify*) - -declare zless_zminus [of 0, simplified, simp] -declare zminus_zless [of _ 0, simplified, simp] -declare zle_zminus [of 0, simplified, simp] -declare zminus_zle [of _ 0, simplified, simp] -declare equation_zminus [of 0, simplified, simp] -declare zminus_equation [of _ 0, simplified, simp] - lemma negative_zless_0: "- (int (Suc n)) < 0" by (simp add: zless_def) @@ -343,53 +334,10 @@ apply (auto simp add: nat_mono_iff linorder_not_less) done -(* a case theorem distinguishing non-negative and negative int *) - -lemma int_cases: - "[|!! n. z = int n ==> P; !! n. z = - (int (Suc n)) ==> P |] ==> P" -apply (case_tac "neg z") -apply (fast dest!: negD) -apply (drule not_neg_nat [symmetric], auto) -done - - -subsection{*Monotonicity of Multiplication*} - -lemma zmult_zle_mono1_lemma: "i \ (j::int) ==> i * int k \ j * int k" -apply (induct_tac "k") -apply (simp_all (no_asm_simp) add: int_Suc zadd_zmult_distrib2 zadd_zle_mono int_Suc0_eq_1) -done - -lemma zmult_zle_mono1: "[| i \ j; (0::int) \ k |] ==> i*k \ j*k" -apply (rule_tac t = k in not_neg_nat [THEN subst]) -apply (erule_tac [2] zmult_zle_mono1_lemma) -apply (simp (no_asm_use) add: not_neg_eq_ge_0) -done -lemma zmult_zle_mono1_neg: "[| i \ j; k \ (0::int) |] ==> j*k \ i*k" -apply (rule zminus_zle_zminus [THEN iffD1]) -apply (simp add: zmult_zminus_right [symmetric] zmult_zle_mono1 zle_zminus) -done - -lemma zmult_zle_mono2: "[| i \ j; (0::int) \ k |] ==> k*i \ k*j" -apply (drule zmult_zle_mono1) -apply (simp_all add: zmult_commute) -done +subsection{*Strict Monotonicity of Multiplication*} -lemma zmult_zle_mono2_neg: "[| i \ j; k \ (0::int) |] ==> k*j \ k*i" -apply (drule zmult_zle_mono1_neg) -apply (simp_all add: zmult_commute) -done - -(* \ monotonicity, BOTH arguments*) -lemma zmult_zle_mono: "[| i \ j; k \ l; (0::int) \ j; (0::int) \ k |] ==> i*k \ j*l" -apply (erule zmult_zle_mono1 [THEN order_trans], assumption) -apply (erule zmult_zle_mono2, assumption) -done - - -subsection{*strict, in 1st argument; proof is by induction on k>0*} - +text{*strict, in 1st argument; proof is by induction on k>0*} lemma zmult_zless_mono2_lemma: "i 0 int k * i < int k * j" apply (induct_tac "k", simp) apply (simp add: int_Suc) @@ -423,6 +371,25 @@ show "\i\ = (if i < 0 then -i else i)" by (simp only: zabs_def) qed +subsection{*Monotonicity of Multiplication*} + +lemma zmult_zle_mono1: "[| i \ j; (0::int) \ k |] ==> i*k \ j*k" + by (rule mult_right_mono) + +lemma zmult_zle_mono1_neg: "[| i \ j; k \ (0::int) |] ==> j*k \ i*k" + by (rule mult_right_mono_neg) + +lemma zmult_zle_mono2: "[| i \ j; (0::int) \ k |] ==> k*i \ k*j" + by (rule mult_left_mono) + +lemma zmult_zle_mono2_neg: "[| i \ j; k \ (0::int) |] ==> k*j \ k*i" + by (rule mult_left_mono_neg) + +(* \ monotonicity, BOTH arguments*) +lemma zmult_zle_mono: + "[| i \ j; k \ l; (0::int) \ j; (0::int) \ k |] ==> i*k \ j*l" + by (rule mult_mono) + lemma zmult_zless_mono1: "[| i i*k < j*k" by (rule Ring_and_Field.mult_strict_right_mono) @@ -467,6 +434,16 @@ apply (auto simp add: int_Suc symmetric zdiff_def) done +(* a case theorem distinguishing non-negative and negative int *) + +lemma int_cases: + "[|!! n. z = int n ==> P; !! n. z = - (int (Suc n)) ==> P |] ==> P" +apply (case_tac "neg z") +apply (fast dest!: negD) +apply (drule not_neg_nat [symmetric], auto) +done + + ML