src/HOL/Word/Bits_Int.thy
changeset 70192 b4bf82ed0ad5
parent 70191 bdc835d934b7
child 70193 49a65e3f04c9
equal deleted inserted replaced
70191:bdc835d934b7 70192:b4bf82ed0ad5
  1287 definition [iff]: "i !! n \<longleftrightarrow> bin_nth i n"
  1287 definition [iff]: "i !! n \<longleftrightarrow> bin_nth i n"
  1288 
  1288 
  1289 definition "lsb i = i !! 0" for i :: int
  1289 definition "lsb i = i !! 0" for i :: int
  1290 
  1290 
  1291 definition "set_bit i n b = bin_sc n b i"
  1291 definition "set_bit i n b = bin_sc n b i"
  1292 
       
  1293 definition
       
  1294   "set_bits f =
       
  1295     (if \<exists>n. \<forall>n'\<ge>n. \<not> f n' then
       
  1296       let n = LEAST n. \<forall>n'\<ge>n. \<not> f n'
       
  1297       in bl_to_bin (rev (map f [0..<n]))
       
  1298      else if \<exists>n. \<forall>n'\<ge>n. f n' then
       
  1299       let n = LEAST n. \<forall>n'\<ge>n. f n'
       
  1300       in sbintrunc n (bl_to_bin (True # rev (map f [0..<n])))
       
  1301      else 0 :: int)"
       
  1302 
  1292 
  1303 definition "shiftl x n = x * 2 ^ n" for x :: int
  1293 definition "shiftl x n = x * 2 ^ n" for x :: int
  1304 
  1294 
  1305 definition "shiftr x n = x div 2 ^ n" for x :: int
  1295 definition "shiftr x n = x div 2 ^ n" for x :: int
  1306 
  1296 
  2173 
  2163 
  2174 lemma bin_set_conv_OR:
  2164 lemma bin_set_conv_OR:
  2175   "bin_sc n True i = i OR (1 << n)"
  2165   "bin_sc n True i = i OR (1 << n)"
  2176 by(induct n arbitrary: i)(auto intro: bin_rl_eqI)
  2166 by(induct n arbitrary: i)(auto intro: bin_rl_eqI)
  2177 
  2167 
  2178 lemma int_set_bits_K_True [simp]: "(BITS _. True) = (-1 :: int)"
       
  2179   by (auto simp add: set_bits_int_def bl_to_bin_def)
       
  2180 
       
  2181 lemma int_set_bits_K_False [simp]: "(BITS _. False) = (0 :: int)"
       
  2182   by (simp add: set_bits_int_def)
       
  2183 
       
  2184 lemma msb_conv_bin_sign: "msb x \<longleftrightarrow> bin_sign x = -1"
  2168 lemma msb_conv_bin_sign: "msb x \<longleftrightarrow> bin_sign x = -1"
  2185 by(simp add: bin_sign_def not_le msb_int_def)
  2169 by(simp add: bin_sign_def not_le msb_int_def)
  2186 
  2170 
  2187 lemma msb_BIT [simp]: "msb (x BIT b) = msb x"
  2171 lemma msb_BIT [simp]: "msb (x BIT b) = msb x"
  2188 by(simp add: msb_int_def)
  2172 by(simp add: msb_int_def)