equal
deleted
inserted
replaced
513 by simp |
513 by simp |
514 |
514 |
515 lemma mod_integer_code [code]: |
515 lemma mod_integer_code [code]: |
516 "k mod l = snd (divmod_integer k l)" |
516 "k mod l = snd (divmod_integer k l)" |
517 by simp |
517 by simp |
|
518 |
|
519 definition bit_cut_integer :: "integer \<Rightarrow> integer \<times> bool" |
|
520 where "bit_cut_integer k = (k div 2, odd k)" |
|
521 |
|
522 lemma bit_cut_integer_code [code]: |
|
523 "bit_cut_integer k = (if k = 0 then (0, False) |
|
524 else let (r, s) = Code_Numeral.divmod_abs k 2 |
|
525 in (if k > 0 then r else - r - s, s = 1))" |
|
526 proof - |
|
527 have "bit_cut_integer k = (let (r, s) = divmod_integer k 2 in (r, s = 1))" |
|
528 by (simp add: divmod_integer_def bit_cut_integer_def odd_iff_mod_2_eq_one) |
|
529 then show ?thesis |
|
530 by (simp add: divmod_integer_code) (auto simp add: split_def) |
|
531 qed |
518 |
532 |
519 lemma equal_integer_code [code]: |
533 lemma equal_integer_code [code]: |
520 "HOL.equal 0 (0::integer) \<longleftrightarrow> True" |
534 "HOL.equal 0 (0::integer) \<longleftrightarrow> True" |
521 "HOL.equal 0 (Pos l) \<longleftrightarrow> False" |
535 "HOL.equal 0 (Pos l) \<longleftrightarrow> False" |
522 "HOL.equal 0 (Neg l) \<longleftrightarrow> False" |
536 "HOL.equal 0 (Neg l) \<longleftrightarrow> False" |