753 of_bl (drop lend bl) = (of_bl bl :: 'a word)" |
753 of_bl (drop lend bl) = (of_bl bl :: 'a word)" |
754 apply (unfold of_bl_def) |
754 apply (unfold of_bl_def) |
755 apply (clarsimp simp add : trunc_bl2bin [symmetric]) |
755 apply (clarsimp simp add : trunc_bl2bin [symmetric]) |
756 done |
756 done |
757 |
757 |
758 lemma of_bl_no: "of_bl bl = number_of (bl_to_bin bl)" |
|
759 by (fact of_bl_def [folded word_number_of_def]) |
|
760 |
|
761 lemma test_bit_of_bl: |
758 lemma test_bit_of_bl: |
762 "(of_bl bl::'a::len0 word) !! n = (rev bl ! n \<and> n < len_of TYPE('a) \<and> n < length bl)" |
759 "(of_bl bl::'a::len0 word) !! n = (rev bl ! n \<and> n < len_of TYPE('a) \<and> n < length bl)" |
763 apply (unfold of_bl_def word_test_bit_def) |
760 apply (unfold of_bl_def word_test_bit_def) |
764 apply (auto simp add: word_size word_ubin.eq_norm nth_bintr bin_nth_of_bl) |
761 apply (auto simp add: word_size word_ubin.eq_norm nth_bintr bin_nth_of_bl) |
765 done |
762 done |
766 |
763 |
767 lemma no_of_bl: |
764 lemma no_of_bl: |
768 "(number_of bin ::'a::len0 word) = of_bl (bin_to_bl (len_of TYPE ('a)) bin)" |
765 "(number_of bin ::'a::len0 word) = of_bl (bin_to_bl (len_of TYPE ('a)) bin)" |
769 unfolding word_size of_bl_no by (simp add : word_number_of_def) |
766 unfolding word_size of_bl_def by (simp add: word_number_of_def) |
770 |
767 |
771 lemma uint_bl: "to_bl w = bin_to_bl (size w) (uint w)" |
768 lemma uint_bl: "to_bl w = bin_to_bl (size w) (uint w)" |
772 unfolding word_size to_bl_def by auto |
769 unfolding word_size to_bl_def by auto |
773 |
770 |
774 lemma to_bl_bin: "bl_to_bin (to_bl w) = uint w" |
771 lemma to_bl_bin: "bl_to_bin (to_bl w) = uint w" |
1003 by (rule inj_on_inverseI, erule ucast_down_ucast_id) |
1000 by (rule inj_on_inverseI, erule ucast_down_ucast_id) |
1004 |
1001 |
1005 lemma of_bl_append_same: "of_bl (X @ to_bl w) = w" |
1002 lemma of_bl_append_same: "of_bl (X @ to_bl w) = w" |
1006 by (rule word_bl.Rep_eqD) (simp add: word_rep_drop) |
1003 by (rule word_bl.Rep_eqD) (simp add: word_rep_drop) |
1007 |
1004 |
1008 lemma ucast_down_no [OF refl]: |
1005 lemma ucast_down_wi [OF refl]: |
1009 "uc = ucast \<Longrightarrow> is_down uc \<Longrightarrow> uc (number_of bin) = number_of bin" |
1006 "uc = ucast \<Longrightarrow> is_down uc \<Longrightarrow> uc (word_of_int x) = word_of_int x" |
1010 apply (unfold word_number_of_def is_down) |
1007 apply (unfold is_down) |
1011 apply (clarsimp simp add: ucast_def word_ubin.eq_norm) |
1008 apply (clarsimp simp add: ucast_def word_ubin.eq_norm) |
1012 apply (rule word_ubin.norm_eq_iff [THEN iffD1]) |
1009 apply (rule word_ubin.norm_eq_iff [THEN iffD1]) |
1013 apply (erule bintrunc_bintrunc_ge) |
1010 apply (erule bintrunc_bintrunc_ge) |
1014 done |
1011 done |
1015 |
1012 |
|
1013 lemma ucast_down_no [OF refl]: |
|
1014 "uc = ucast \<Longrightarrow> is_down uc \<Longrightarrow> uc (number_of bin) = number_of bin" |
|
1015 unfolding word_number_of_alt by clarify (rule ucast_down_wi) |
|
1016 |
1016 lemma ucast_down_bl [OF refl]: |
1017 lemma ucast_down_bl [OF refl]: |
1017 "uc = ucast \<Longrightarrow> is_down uc \<Longrightarrow> uc (of_bl bl) = of_bl bl" |
1018 "uc = ucast \<Longrightarrow> is_down uc \<Longrightarrow> uc (of_bl bl) = of_bl bl" |
1018 unfolding of_bl_no by clarify (erule ucast_down_no) |
1019 unfolding of_bl_def by clarify (erule ucast_down_wi) |
1019 |
1020 |
1020 lemmas slice_def' = slice_def [unfolded word_size] |
1021 lemmas slice_def' = slice_def [unfolded word_size] |
1021 lemmas test_bit_def' = word_test_bit_def [THEN fun_cong] |
1022 lemmas test_bit_def' = word_test_bit_def [THEN fun_cong] |
1022 |
1023 |
1023 lemmas word_log_defs = word_and_def word_or_def word_xor_def word_not_def |
1024 lemmas word_log_defs = word_and_def word_or_def word_xor_def word_not_def |
2029 "a ^ n = (word_of_int (uint a ^ n) :: 'a :: len word)" |
2030 "a ^ n = (word_of_int (uint a ^ n) :: 'a :: len word)" |
2030 by (simp add : word_of_int_power_hom [symmetric]) |
2031 by (simp add : word_of_int_power_hom [symmetric]) |
2031 |
2032 |
2032 lemma of_bl_length_less: |
2033 lemma of_bl_length_less: |
2033 "length x = k \<Longrightarrow> k < len_of TYPE('a) \<Longrightarrow> (of_bl x :: 'a :: len word) < 2 ^ k" |
2034 "length x = k \<Longrightarrow> k < len_of TYPE('a) \<Longrightarrow> (of_bl x :: 'a :: len word) < 2 ^ k" |
2034 apply (unfold of_bl_no [unfolded word_number_of_def] |
2035 apply (unfold of_bl_def word_less_alt word_number_of_alt) |
2035 word_less_alt word_number_of_alt) |
|
2036 apply safe |
2036 apply safe |
2037 apply (simp (no_asm) add: word_of_int_power_hom word_uint.eq_norm |
2037 apply (simp (no_asm) add: word_of_int_power_hom word_uint.eq_norm |
2038 del: word_of_int_bin) |
2038 del: word_of_int_bin) |
2039 apply (simp add: mod_pos_pos_trivial) |
2039 apply (simp add: mod_pos_pos_trivial) |
2040 apply (subst mod_pos_pos_trivial) |
2040 apply (subst mod_pos_pos_trivial) |
2041 apply (rule bl_to_bin_ge0) |
2041 apply (rule bl_to_bin_ge0) |
2042 apply (rule order_less_trans) |
2042 apply (rule order_less_trans) |
2043 apply (rule bl_to_bin_lt2p) |
2043 apply (rule bl_to_bin_lt2p) |
2044 apply simp |
2044 apply simp |
2045 apply (rule bl_to_bin_lt2p) |
2045 apply (rule bl_to_bin_lt2p) |
2046 done |
2046 done |
2047 |
2047 |
2048 |
2048 |
2049 subsection "Cardinality, finiteness of set of words" |
2049 subsection "Cardinality, finiteness of set of words" |
2050 |
2050 |