# HG changeset patch # User haftmann # Date 1749066193 0 # Node ID 97b9ac57751e8f24dd4b8d783c6f2c7781518823 # Parent e6f299c5dec6ef3f7fa95e87359f926e62fd50f6 some more lemmas diff -r e6f299c5dec6 -r 97b9ac57751e src/HOL/Library/Word.thy --- a/src/HOL/Library/Word.thy Wed Jun 04 19:43:13 2025 +0000 +++ b/src/HOL/Library/Word.thy Wed Jun 04 19:43:13 2025 +0000 @@ -3180,6 +3180,40 @@ for i m :: "'a::len word" by uint_arith +lemma less_imp_less_eq_dec: + \v \ w - 1\ if \v < w\ for v w :: \'a::len word\ +using that proof transfer + show \take_bit LENGTH('a) k \ take_bit LENGTH('a) (l - 1)\ + if \take_bit LENGTH('a) k < take_bit LENGTH('a) l\ + for k l :: int + using that by (cases \take_bit LENGTH('a) l = 0\) + (auto simp add: take_bit_decr_eq) +qed + +lemma inc_less_eq_triv_imp: + \w = - 1\ if \w + 1 \ w\ for w :: \'a::len word\ +proof (rule ccontr) + assume \w \ - 1\ + with that show False + by transfer (auto simp add: take_bit_eq_mask_iff dest: take_bit_decr_eq) +qed + +lemma less_eq_dec_triv_imp: + \w = 0\ if \w \ w - 1\ for w :: \'a::len word\ +proof (rule ccontr) + assume \w \ 0\ + with that show False + by transfer (auto simp add: take_bit_eq_mask_iff dest: take_bit_decr_eq) +qed + +lemma inc_less_eq_iff: + \v + 1 \ w \ v = - 1 \ v < w\ for v w :: \'a::len word\ + by (auto intro: inc_less_eq_triv_imp inc_le) + +lemma less_eq_dec_iff: + \v \ w - 1 \ w = 0 \ v < w\ for v w :: \'a::len word\ + by (auto intro: less_eq_dec_triv_imp less_imp_less_eq_dec) + lemma inc_i: "1 \ i \ i < m \ 1 \ i + 1 \ i + 1 \ m" for i m :: "'a::len word" by uint_arith