(* Title: HOL/ex/Word_Msb.thy Author: Florian Haftmann, TU Muenchen *)
section‹An attempt for msb on word›
theory Word_Msb imports"HOL-Library.Word" begin
class word = ring_bit_operations + fixes word_length :: ‹'a itself ==> nat› assumes word_length_positive [simp]: ‹0 🚫 TYPE('a)› and possible_bit_msb: ‹possible_bit TYPE('a) (word_length TYPE('a) - Suc 0)› and not_possible_bit_length: ‹¬ possible_bit TYPE('a) (word_length TYPE('a))› begin
lemma word_length_not_0 [simp]: ‹word_length TYPE('a) ≠ 0› using word_length_positive by simp
lemma possible_bit_iff_less_word_length: ‹possible_bit TYPE('a) n ⟷ n 🚫 TYPE('a)› (is‹?P ⟷ ?Q›) proof assume‹?P› show ?Q proof (rule ccontr) assume‹¬ n 🚫 TYPE('a)› thenhave‹word_length TYPE('a) ≤ n› by simp with‹?P›have‹possible_bit TYPE('a) (word_length TYPE('a))› by (rule possible_bit_less_imp) with not_possible_bit_length show False .. qed next assume‹?Q› thenhave‹n ≤ word_length TYPE('a) - Suc 0› by simp with possible_bit_msb show ?P by (rule possible_bit_less_imp) qed
end
instantiation word :: (len) word begin
definition word_length_word :: ‹'a word itself ==> nat› where [simp, code_unfold]: ‹word_length_word _ = LENGTH('a)›
instance by standard simp_all
end
context word begin
context includes bit_operations_syntax begin
definition msb :: ‹'a ==> bool› where‹msb w = bit w (word_length TYPE('a) - Suc 0)›
lemma not_msb_0 [simp]: ‹¬ msb 0› by (simp add: msb_def)
lemma msb_push_bit_iff: ‹msb (push_bit n w) ⟷ n 🚫 TYPE('a) ∧ bit w (word_length TYPE('a) - Suc n)› by (simp add: msb_def bit_simps le_diff_conv2 Suc_le_eq possible_bit_iff_less_word_length)
lemma msb_drop_bit_iff [simp]: ‹msb (drop_bit n w) ⟷ n = 0 ∧ msb w› by (cases n)
(auto simp add: msb_def bit_simps possible_bit_iff_less_word_length intro!: impossible_bit)
lemma msb_take_bit_iff [simp]: ‹msb (take_bit n w) ⟷ word_length TYPE('a) ≤ n ∧ msb w› by (simp add: take_bit_eq_mask ac_simps)
lemma msb_signed_take_bit_iff: ‹msb (signed_take_bit n w) ⟷ bit w (min n (word_length TYPE('a) - Suc 0))› by (simp add: msb_def bit_simps possible_bit_iff_less_word_length)
definition signed_drop_bit :: ‹nat ==> 'a ==> 'a› where‹signed_drop_bit n w = drop_bit n w OR (of_bool (bit w (word_length TYPE('a) - Suc 0)) * NOT (mask (word_length TYPE('a) - Suc n)))›
lemma msb_signed_drop_bit_iff [simp]: ‹msb (signed_drop_bit n w) ⟷ msb w› by (simp add: signed_drop_bit_def bit_simps not_le not_less)
(simp add: msb_def)
end
end
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-04-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.