diff -r a4bffc0de967 -r 3e162c63371a src/HOL/Library/Z2.thy --- a/src/HOL/Library/Z2.thy Thu Jun 18 09:07:30 2020 +0000 +++ b/src/HOL/Library/Z2.thy Thu Jun 18 09:07:30 2020 +0000 @@ -5,7 +5,7 @@ section \The Field of Integers mod 2\ theory Z2 -imports Main +imports Main "HOL-Library.Bit_Operations" begin text \ @@ -218,6 +218,42 @@ end +instantiation bit :: ring_bit_operations +begin + +definition not_bit :: \bit \ bit\ + where \NOT b = of_bool (even b)\ for b :: bit + +definition and_bit :: \bit \ bit \ bit\ + where \b AND c = of_bool (odd b \ odd c)\ for b c :: bit + +definition or_bit :: \bit \ bit \ bit\ + where \b OR c = of_bool (odd b \ odd c)\ for b c :: bit + +definition xor_bit :: \bit \ bit \ bit\ + where \b XOR c = of_bool (odd b \ odd c)\ for b c :: bit + +instance + by standard (auto simp add: and_bit_def or_bit_def xor_bit_def not_bit_def add_eq_0_iff) + +end + +lemma add_bit_eq_xor: + \(+) = ((XOR) :: bit \ _)\ + by (auto simp add: fun_eq_iff plus_bit_def xor_bit_def) + +lemma mult_bit_eq_and: + \(*) = ((AND) :: bit \ _)\ + by (simp add: fun_eq_iff times_bit_def and_bit_def split: bit.split) + +lemma bit_NOT_eq_1_iff [simp]: "NOT b = 1 \ b = 0" + for b :: bit + by (cases b) simp_all + +lemma bit_AND_eq_1_iff [simp]: "a AND b = 1 \ a = 1 \ b = 1" + for a b :: bit + by (cases a; cases b) simp_all + hide_const (open) set