simplified implementation of the_signed_int
authorhaftmann
Fri, 28 Mar 2025 11:56:18 +0100
changeset 82367 07e95760a612
parent 82366 7816e7be7bc7
child 82370 3c3ae21cf12d
simplified implementation of the_signed_int
src/HOL/Library/Word.thy
--- a/src/HOL/Library/Word.thy	Fri Mar 28 08:56:13 2025 +0100
+++ b/src/HOL/Library/Word.thy	Fri Mar 28 11:56:18 2025 +0100
@@ -475,9 +475,10 @@
   by (rule; transfer) simp
 
 lemma [code]:
-  \<open>Word.the_signed_int w = signed_take_bit (LENGTH('a) - Suc 0) (Word.the_int w)\<close>
+  \<open>Word.the_signed_int w = (let k = Word.the_int w
+    in if bit k (LENGTH('a) - Suc 0) then k + push_bit LENGTH('a) (- 1) else k)\<close>
   for w :: \<open>'a::len word\<close>
-  by transfer (simp add: signed_take_bit_take_bit)
+  by transfer (simp add: bit_simps signed_take_bit_eq_take_bit_add)
 
 lemma [code_abbrev, simp]:
   \<open>Word.the_signed_int = sint\<close>