equal
deleted
inserted
replaced
118 transfer_prover |
118 transfer_prover |
119 qed |
119 qed |
120 |
120 |
121 end |
121 end |
122 |
122 |
|
123 lemma exp_eq_zero_iff [simp]: |
|
124 \<open>2 ^ n = (0 :: 'a::len word) \<longleftrightarrow> n \<ge> LENGTH('a)\<close> |
|
125 by transfer simp |
|
126 |
123 lemma word_exp_length_eq_0 [simp]: |
127 lemma word_exp_length_eq_0 [simp]: |
124 \<open>(2 :: 'a::len word) ^ LENGTH('a) = 0\<close> |
128 \<open>(2 :: 'a::len word) ^ LENGTH('a) = 0\<close> |
125 by transfer simp |
129 by simp |
126 |
|
127 lemma exp_eq_zero_iff: |
|
128 \<open>2 ^ n = (0 :: 'a::len word) \<longleftrightarrow> n \<ge> LENGTH('a)\<close> |
|
129 by transfer simp |
|
130 |
130 |
131 |
131 |
132 subsubsection \<open>Basic tool setup\<close> |
132 subsubsection \<open>Basic tool setup\<close> |
133 |
133 |
134 ML_file \<open>Tools/word_lib.ML\<close> |
134 ML_file \<open>Tools/word_lib.ML\<close> |
1100 for w :: \<open>'b::len word\<close> |
1100 for w :: \<open>'b::len word\<close> |
1101 by (rule bit_eqI) (simp add: bit_unsigned_iff bit_take_bit_iff Parity.bit_take_bit_iff) |
1101 by (rule bit_eqI) (simp add: bit_unsigned_iff bit_take_bit_iff Parity.bit_take_bit_iff) |
1102 |
1102 |
1103 end |
1103 end |
1104 |
1104 |
|
1105 context unique_euclidean_semiring_with_bit_shifts |
|
1106 begin |
|
1107 |
|
1108 lemma unsigned_drop_bit_eq: |
|
1109 \<open>unsigned (drop_bit n w) = drop_bit n (take_bit LENGTH('b) (unsigned w))\<close> |
|
1110 for w :: \<open>'b::len word\<close> |
|
1111 by (rule bit_eqI) (auto simp add: bit_unsigned_iff bit_take_bit_iff bit_drop_bit_eq Parity.bit_drop_bit_eq dest: bit_imp_le_length) |
|
1112 |
|
1113 end |
|
1114 |
1105 context semiring_bit_operations |
1115 context semiring_bit_operations |
1106 begin |
1116 begin |
1107 |
1117 |
1108 lemma unsigned_and_eq: |
1118 lemma unsigned_and_eq: |
1109 \<open>unsigned (v AND w) = unsigned v AND unsigned w\<close> |
1119 \<open>unsigned (v AND w) = unsigned v AND unsigned w\<close> |
4546 |
4556 |
4547 |
4557 |
4548 subsection \<open>More\<close> |
4558 subsection \<open>More\<close> |
4549 |
4559 |
4550 lemma mask_1: "mask 1 = 1" |
4560 lemma mask_1: "mask 1 = 1" |
4551 by transfer (simp add: min_def mask_Suc_exp) |
4561 by simp |
4552 |
4562 |
4553 lemma mask_Suc_0: "mask (Suc 0) = 1" |
4563 lemma mask_Suc_0: "mask (Suc 0) = 1" |
4554 using mask_1 by simp |
4564 by simp |
4555 |
4565 |
4556 lemma bin_last_bintrunc: "odd (take_bit l n) \<longleftrightarrow> l > 0 \<and> odd n" |
4566 lemma bin_last_bintrunc: "odd (take_bit l n) \<longleftrightarrow> l > 0 \<and> odd n" |
4557 by simp |
4567 by simp |
4558 |
4568 |
4559 |
4569 |
|
4570 lemma push_bit_word_beyond [simp]: |
|
4571 \<open>push_bit n w = 0\<close> if \<open>LENGTH('a) \<le> n\<close> for w :: \<open>'a::len word\<close> |
|
4572 using that by (transfer fixing: n) (simp add: take_bit_push_bit) |
|
4573 |
|
4574 lemma drop_bit_word_beyond [simp]: |
|
4575 \<open>drop_bit n w = 0\<close> if \<open>LENGTH('a) \<le> n\<close> for w :: \<open>'a::len word\<close> |
|
4576 using that by (transfer fixing: n) (simp add: drop_bit_take_bit) |
|
4577 |
|
4578 lemma signed_drop_bit_beyond: |
|
4579 \<open>signed_drop_bit n w = (if bit w (LENGTH('a) - Suc 0) then - 1 else 0)\<close> |
|
4580 if \<open>LENGTH('a) \<le> n\<close> for w :: \<open>'a::len word\<close> |
|
4581 by (rule bit_word_eqI) (simp add: bit_signed_drop_bit_iff that) |
|
4582 |
|
4583 |
4560 subsection \<open>SMT support\<close> |
4584 subsection \<open>SMT support\<close> |
4561 |
4585 |
4562 ML_file \<open>Tools/smt_word.ML\<close> |
4586 ML_file \<open>Tools/smt_word.ML\<close> |
4563 |
4587 |
4564 end |
4588 end |