src/HOL/Library/Word.thy
changeset 34915 7894c7dab132
parent 33357 2ca60fc13c5a
child 34942 d62eddd9e253
equal deleted inserted replaced
34914:e391c3de0f6b 34915:7894c7dab132
   434     proof
   434     proof
   435       fix l2
   435       fix l2
   436       show "bitval x * 2 ^ (length xs + length l2) + bv_to_nat xs * 2 ^ length l2 = (bitval x * 2 ^ length xs + bv_to_nat xs) * 2 ^ length l2"
   436       show "bitval x * 2 ^ (length xs + length l2) + bv_to_nat xs * 2 ^ length l2 = (bitval x * 2 ^ length xs + bv_to_nat xs) * 2 ^ length l2"
   437       proof -
   437       proof -
   438         have "(2::nat) ^ (length xs + length l2) = 2 ^ length xs * 2 ^ length l2"
   438         have "(2::nat) ^ (length xs + length l2) = 2 ^ length xs * 2 ^ length l2"
   439           by (induct "length xs",simp_all)
   439           by (induct ("length xs")) simp_all
   440         hence "bitval x * 2 ^ (length xs + length l2) + bv_to_nat xs * 2 ^ length l2 =
   440         hence "bitval x * 2 ^ (length xs + length l2) + bv_to_nat xs * 2 ^ length l2 =
   441           bitval x * 2 ^ length xs * 2 ^ length l2 + bv_to_nat xs * 2 ^ length l2"
   441           bitval x * 2 ^ length xs * 2 ^ length l2 + bv_to_nat xs * 2 ^ length l2"
   442           by simp
   442           by simp
   443         also have "... = (bitval x * 2 ^ length xs + bv_to_nat xs) * 2 ^ length l2"
   443         also have "... = (bitval x * 2 ^ length xs + bv_to_nat xs) * 2 ^ length l2"
   444           by (simp add: ring_distribs)
   444           by (simp add: ring_distribs)
  2163 
  2163 
  2164 lemma bv_to_nat_extend [simp]: "bv_to_nat (bv_extend n \<zero> w) = bv_to_nat w"
  2164 lemma bv_to_nat_extend [simp]: "bv_to_nat (bv_extend n \<zero> w) = bv_to_nat w"
  2165   apply (simp add: bv_extend_def)
  2165   apply (simp add: bv_extend_def)
  2166   apply (subst bv_to_nat_dist_append)
  2166   apply (subst bv_to_nat_dist_append)
  2167   apply simp
  2167   apply simp
  2168   apply (induct "n - length w")
  2168   apply (induct ("n - length w"))
  2169    apply simp_all
  2169    apply simp_all
  2170   done
  2170   done
  2171 
  2171 
  2172 lemma bv_msb_extend_same [simp]: "bv_msb w = b ==> bv_msb (bv_extend n b w) = b"
  2172 lemma bv_msb_extend_same [simp]: "bv_msb w = b ==> bv_msb (bv_extend n b w) = b"
  2173   apply (simp add: bv_extend_def)
  2173   apply (simp add: bv_extend_def)
  2174   apply (induct "n - length w")
  2174   apply (cases "n - length w")
  2175    apply simp_all
  2175    apply simp_all
  2176   done
  2176   done
  2177 
  2177 
  2178 lemma bv_to_int_extend [simp]:
  2178 lemma bv_to_int_extend [simp]:
  2179   assumes a: "bv_msb w = b"
  2179   assumes a: "bv_msb w = b"
  2186   assume [simp]: "bv_msb w = \<one>"
  2186   assume [simp]: "bv_msb w = \<one>"
  2187   with a have [simp]: "b = \<one>" by simp
  2187   with a have [simp]: "b = \<one>" by simp
  2188   show ?thesis
  2188   show ?thesis
  2189     apply (simp add: bv_to_int_def)
  2189     apply (simp add: bv_to_int_def)
  2190     apply (simp add: bv_extend_def)
  2190     apply (simp add: bv_extend_def)
  2191     apply (induct "n - length w",simp_all)
  2191     apply (induct ("n - length w"), simp_all)
  2192     done
  2192     done
  2193 qed
  2193 qed
  2194 
  2194 
  2195 lemma length_nat_mono [simp]: "x \<le> y ==> length_nat x \<le> length_nat y"
  2195 lemma length_nat_mono [simp]: "x \<le> y ==> length_nat x \<le> length_nat y"
  2196 proof (rule ccontr)
  2196 proof (rule ccontr)