src/HOL/Divides.thy
changeset 58646 cd63a4b12a33
parent 58511 97aec08d6f28
child 58710 7216a10d69ba
equal deleted inserted replaced
58645:94bef115c08f 58646:cd63a4b12a33
   504 
   504 
   505 end
   505 end
   506 
   506 
   507 class semiring_div_parity = semiring_div + semiring_numeral +
   507 class semiring_div_parity = semiring_div + semiring_numeral +
   508   assumes parity: "a mod 2 = 0 \<or> a mod 2 = 1"
   508   assumes parity: "a mod 2 = 0 \<or> a mod 2 = 1"
       
   509   assumes one_mod_two_eq_one: "1 mod 2 = 1"
   509 begin
   510 begin
   510 
   511 
   511 lemma parity_cases [case_names even odd]:
   512 lemma parity_cases [case_names even odd]:
   512   assumes "a mod 2 = 0 \<Longrightarrow> P"
   513   assumes "a mod 2 = 0 \<Longrightarrow> P"
   513   assumes "a mod 2 = 1 \<Longrightarrow> P"
   514   assumes "a mod 2 = 1 \<Longrightarrow> P"
   567     with discrete have "1 \<le> a mod 2" by simp
   568     with discrete have "1 \<le> a mod 2" by simp
   568     with `a mod 2 \<noteq> 1` have "1 < a mod 2" by simp
   569     with `a mod 2 \<noteq> 1` have "1 < a mod 2" by simp
   569     with discrete have "2 \<le> a mod 2" by simp
   570     with discrete have "2 \<le> a mod 2" by simp
   570     with `a mod 2 < 2` show False by simp
   571     with `a mod 2 < 2` show False by simp
   571   qed
   572   qed
       
   573 next
       
   574   show "1 mod 2 = 1"
       
   575     by (rule mod_less) simp_all
   572 qed
   576 qed
   573 
   577 
   574 lemma divmod_digit_1:
   578 lemma divmod_digit_1:
   575   assumes "0 \<le> a" "0 < b" and "b \<le> a mod (2 * b)"
   579   assumes "0 \<le> a" "0 < b" and "b \<le> a mod (2 * b)"
   576   shows "2 * (a div (2 * b)) + 1 = a div b" (is "?P")
   580   shows "2 * (a div (2 * b)) + 1 = a div b" (is "?P")