diff -r 8e07304ecd0c -r fdf294ee08b2 src/HOL/Int.thy --- a/src/HOL/Int.thy Thu Dec 10 17:34:09 2009 +0000 +++ b/src/HOL/Int.thy Thu Dec 10 17:34:18 2009 +0000 @@ -1791,16 +1791,28 @@ lemma zabs_less_one_iff [simp]: "(\z\ < 1) = (z = (0::int))" by arith -lemma abs_zmult_eq_1: "(\m * n\ = 1) ==> \m\ = (1::int)" -apply (cases "\n\=1") -apply (simp add: abs_mult) -apply (rule ccontr) -apply (auto simp add: linorder_neq_iff abs_mult) -apply (subgoal_tac "2 \ \m\ & 2 \ \n\") - prefer 2 apply arith -apply (subgoal_tac "2*2 \ \m\ * \n\", simp) -apply (rule mult_mono, auto) -done +lemma abs_zmult_eq_1: + assumes mn: "\m * n\ = 1" + shows "\m\ = (1::int)" +proof - + have 0: "m \ 0 & n \ 0" using mn + by auto + have "~ (2 \ \m\)" + proof + assume "2 \ \m\" + hence "2*\n\ \ \m\*\n\" + by (simp add: mult_mono 0) + also have "... = \m*n\" + by (simp add: abs_mult) + also have "... = 1" + by (simp add: mn) + finally have "2*\n\ \ 1" . + thus "False" using 0 + by auto + qed + thus ?thesis using 0 + by auto +qed lemma pos_zmult_eq_1_iff_lemma: "(m * n = 1) ==> m = (1::int) | m = -1" by (insert abs_zmult_eq_1 [of m n], arith)