src/HOL/Word/Word.thy
changeset 66808 1907167b6038
parent 66453 cc19f7ca2ed6
child 66912 a99a7cbf0fb5
equal deleted inserted replaced
66807:c3631f32dfeb 66808:1907167b6038
  2022 lemmas word_diff_ls = mcs [where z = "w + x", unfolded add_diff_cancel] for w x
  2022 lemmas word_diff_ls = mcs [where z = "w + x", unfolded add_diff_cancel] for w x
  2023 lemmas word_plus_mcs = word_diff_ls [where y = "v + x", unfolded add_diff_cancel] for v x
  2023 lemmas word_plus_mcs = word_diff_ls [where y = "v + x", unfolded add_diff_cancel] for v x
  2024 
  2024 
  2025 lemmas le_unat_uoi = unat_le [THEN word_unat.Abs_inverse]
  2025 lemmas le_unat_uoi = unat_le [THEN word_unat.Abs_inverse]
  2026 
  2026 
  2027 lemmas thd = refl [THEN [2] split_div_lemma [THEN iffD2], THEN conjunct1]
  2027 lemmas thd = times_div_less_eq_dividend
  2028 
  2028 
  2029 lemmas uno_simps [THEN le_unat_uoi] = mod_le_divisor div_le_dividend dtle
  2029 lemmas uno_simps [THEN le_unat_uoi] = mod_le_divisor div_le_dividend dtle
  2030 
  2030 
  2031 lemma word_mod_div_equality: "(n div b) * b + (n mod b) = n"
  2031 lemma word_mod_div_equality: "(n div b) * b + (n mod b) = n"
  2032   for n b :: "'a::len word"
  2032   for n b :: "'a::len word"
  3722   by (auto simp: length_word_rsplit_exp_size given_quot_alt)
  3722   by (auto simp: length_word_rsplit_exp_size given_quot_alt)
  3723 
  3723 
  3724 lemmas length_word_rsplit_exp_size' = refl [THEN length_word_rsplit_exp_size]
  3724 lemmas length_word_rsplit_exp_size' = refl [THEN length_word_rsplit_exp_size]
  3725 
  3725 
  3726 (* alternative proof of word_rcat_rsplit *)
  3726 (* alternative proof of word_rcat_rsplit *)
  3727 lemmas tdle = iffD2 [OF split_div_lemma refl, THEN conjunct1]
  3727 lemmas tdle = times_div_less_eq_dividend
  3728 lemmas dtle = xtr4 [OF tdle mult.commute]
  3728 lemmas dtle = xtr4 [OF tdle mult.commute]
  3729 
  3729 
  3730 lemma word_rcat_rsplit: "word_rcat (word_rsplit w) = w"
  3730 lemma word_rcat_rsplit: "word_rcat (word_rsplit w) = w"
  3731   apply (rule word_eqI)
  3731   apply (rule word_eqI)
  3732   apply (clarsimp simp: test_bit_rcat word_size)
  3732   apply (clarsimp simp: test_bit_rcat word_size)
  3733   apply (subst refl [THEN test_bit_rsplit])
  3733   apply (subst refl [THEN test_bit_rsplit])
  3734     apply (simp_all add: word_size
  3734     apply (simp_all add: word_size
  3735       refl [THEN length_word_rsplit_size [simplified not_less [symmetric], simplified]])
  3735       refl [THEN length_word_rsplit_size [simplified not_less [symmetric], simplified]])
  3736    apply safe
  3736    apply safe
  3737    apply (erule xtr7, rule len_gt_0 [THEN dtle])+
  3737    apply (erule xtr7, rule dtle)+
  3738   done
  3738   done
  3739 
  3739 
  3740 lemma size_word_rsplit_rcat_size:
  3740 lemma size_word_rsplit_rcat_size:
  3741   "word_rcat ws = frcw \<Longrightarrow> size frcw = length ws * len_of TYPE('a)
  3741   "word_rcat ws = frcw \<Longrightarrow> size frcw = length ws * len_of TYPE('a)
  3742     \<Longrightarrow> length (word_rsplit frcw::'a word list) = length ws"
  3742     \<Longrightarrow> length (word_rsplit frcw::'a word list) = length ws"