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" |