diff -r db43ee05066d -r beeadb35e357 src/HOL/Library/Bit_Operations.thy --- a/src/HOL/Library/Bit_Operations.thy Wed Sep 23 08:52:41 2020 +0000 +++ b/src/HOL/Library/Bit_Operations.thy Wed Sep 23 11:14:38 2020 +0000 @@ -159,6 +159,10 @@ by (rule bit_eqI) (auto simp add: bit_take_bit_iff bit_and_iff bit_mask_iff) +lemma or_eq_0_iff: + \a OR b = 0 \ a = 0 \ b = 0\ + by (auto simp add: bit_eq_iff bit_or_iff) + lemma disjunctive_add: \a + b = a OR b\ if \\n. \ bit a n \ \ bit b n\ by (rule bit_eqI) (use that in \simp add: bit_disjunctive_add_iff bit_or_iff\) @@ -249,6 +253,30 @@ \NOT (a - b) = NOT a + b\ using not_add_distrib [of a \- b\] by simp +lemma (in ring_bit_operations) and_eq_minus_1_iff: + \a AND b = - 1 \ a = - 1 \ b = - 1\ +proof + assume \a = - 1 \ b = - 1\ + then show \a AND b = - 1\ + by simp +next + assume \a AND b = - 1\ + have *: \bit a n\ \bit b n\ if \2 ^ n \ 0\ for n + proof - + from \a AND b = - 1\ + have \bit (a AND b) n = bit (- 1) n\ + by (simp add: bit_eq_iff) + then show \bit a n\ \bit b n\ + using that by (simp_all add: bit_and_iff) + qed + have \a = - 1\ + by (rule bit_eqI) (simp add: *) + moreover have \b = - 1\ + by (rule bit_eqI) (simp add: *) + ultimately show \a = - 1 \ b = - 1\ + by simp +qed + lemma disjunctive_diff: \a - b = a AND NOT b\ if \\n. bit b n \ bit a n\ proof -