src/HOL/Code_Numeral.thy
changeset 68028 1f9f973eed2a
parent 68010 3f223b9a0066
child 69593 3dda49e08b9d
equal deleted inserted replaced
68027:64559e1ca05b 68028:1f9f973eed2a
   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"