src/HOL/Divides.thy
changeset 66630 034cabc4fda5
parent 65556 fcd599570afa
child 66800 128e9ed9f63c
equal deleted inserted replaced
66629:d9ceebfba0af 66630:034cabc4fda5
   499   "even a \<longleftrightarrow> a mod 2 = 0"
   499   "even a \<longleftrightarrow> a mod 2 = 0"
   500   by (fact dvd_eq_mod_eq_0)
   500   by (fact dvd_eq_mod_eq_0)
   501 
   501 
   502 lemma odd_iff_mod_2_eq_one:
   502 lemma odd_iff_mod_2_eq_one:
   503   "odd a \<longleftrightarrow> a mod 2 = 1"
   503   "odd a \<longleftrightarrow> a mod 2 = 1"
   504   by (auto simp add: even_iff_mod_2_eq_zero)
   504   by (simp add: even_iff_mod_2_eq_zero)
   505 
   505 
   506 lemma even_succ_div_two [simp]:
   506 lemma even_succ_div_two [simp]:
   507   "even a \<Longrightarrow> (a + 1) div 2 = a div 2"
   507   "even a \<Longrightarrow> (a + 1) div 2 = a div 2"
   508   by (cases "a = 0") (auto elim!: evenE dest: mult_not_zero)
   508   by (cases "a = 0") (auto elim!: evenE dest: mult_not_zero)
   509 
   509 
  1851   shows "(sgn v * \<bar>k\<bar>) div (sgn v * \<bar>l\<bar>) = \<bar>k\<bar> div \<bar>l\<bar>"
  1851   shows "(sgn v * \<bar>k\<bar>) div (sgn v * \<bar>l\<bar>) = \<bar>k\<bar> div \<bar>l\<bar>"
  1852 proof -
  1852 proof -
  1853   from assms have "sgn v = - 1 \<or> sgn v = 1"
  1853   from assms have "sgn v = - 1 \<or> sgn v = 1"
  1854     by (cases "v \<ge> 0") auto
  1854     by (cases "v \<ge> 0") auto
  1855   then show ?thesis
  1855   then show ?thesis
  1856   using assms unfolding divide_int_def [of "sgn v * \<bar>k\<bar>" "sgn v * \<bar>l\<bar>"]
  1856     using assms unfolding divide_int_def [of "sgn v * \<bar>k\<bar>" "sgn v * \<bar>l\<bar>"]
  1857     by (auto simp add: not_less div_abs_eq_div_nat)
  1857     by (fastforce simp add: not_less div_abs_eq_div_nat)
  1858 qed
  1858 qed
  1859 
  1859 
  1860 lemma div_eq_sgn_abs:
  1860 lemma div_eq_sgn_abs:
  1861   fixes k l v :: int
  1861   fixes k l v :: int
  1862   assumes "sgn k = sgn l"
  1862   assumes "sgn k = sgn l"
  2029 
  2029 
  2030 lemma zminus1_lemma:
  2030 lemma zminus1_lemma:
  2031      "eucl_rel_int a b (q, r) ==> b \<noteq> 0
  2031      "eucl_rel_int a b (q, r) ==> b \<noteq> 0
  2032       ==> eucl_rel_int (-a) b (if r=0 then -q else -q - 1,
  2032       ==> eucl_rel_int (-a) b (if r=0 then -q else -q - 1,
  2033                           if r=0 then 0 else b-r)"
  2033                           if r=0 then 0 else b-r)"
  2034 by (force simp add: split_ifs eucl_rel_int_iff linorder_neq_iff right_diff_distrib)
  2034 by (force simp add: eucl_rel_int_iff right_diff_distrib)
  2035 
  2035 
  2036 
  2036 
  2037 lemma zdiv_zminus1_eq_if:
  2037 lemma zdiv_zminus1_eq_if:
  2038      "b \<noteq> (0::int)
  2038      "b \<noteq> (0::int)
  2039       ==> (-a) div b =
  2039       ==> (-a) div b =