src/HOL/Word/Examples/WordExamples.thy
changeset 65363 5eb619751b14
parent 58874 7172c7ffb047
child 66453 cc19f7ca2ed6
--- a/src/HOL/Word/Examples/WordExamples.thy	Mon Apr 03 21:17:47 2017 +0200
+++ b/src/HOL/Word/Examples/WordExamples.thy	Mon Apr 03 23:12:16 2017 +0200
@@ -1,13 +1,13 @@
-(* 
-  Authors: Gerwin Klein and Thomas Sewell, NICTA
+(*  Title:      HOL/Word/Examples/WordExamples.thy
+    Authors:    Gerwin Klein and Thomas Sewell, NICTA
 
-  Examples demonstrating and testing various word operations.
+Examples demonstrating and testing various word operations.
 *)
 
 section "Examples of word operations"
 
 theory WordExamples
-imports "../Word" "../WordBitwise"
+  imports "../Word" "../WordBitwise"
 begin
 
 type_synonym word32 = "32 word"
@@ -28,7 +28,7 @@
 
 text "number ring simps"
 
-lemma 
+lemma
   "27 + 11 = (38::'a::len word)"
   "27 + 11 = (6::5 word)"
   "7 * 3 = (21::'a::len word)"
@@ -40,7 +40,7 @@
 lemma "word_pred 2 = 1" by simp
 
 lemma "word_succ (- 3) = -2" by simp
-  
+
 lemma "23 < (27::8 word)" by simp
 lemma "23 \<le> (27::8 word)" by simp
 lemma "\<not> 23 < (27::2 word)" by simp
@@ -69,8 +69,10 @@
 lemma "ucast (1 :: 4 word) = (1 :: 2 word)" by simp
 
 text "reducing goals to nat or int and arith:"
-lemma "i < x ==> i < (i + 1 :: 'a :: len word)" by unat_arith
-lemma "i < x ==> i < (i + 1 :: 'a :: len word)" by uint_arith
+lemma "i < x \<Longrightarrow> i < i + 1" for i x :: "'a::len word"
+  by unat_arith
+lemma "i < x \<Longrightarrow> i < i + 1" for i x :: "'a::len word"
+  by unat_arith
 
 text "bool lists"
 
@@ -111,7 +113,7 @@
 lemma "\<not> (0b1000 :: 3 word) !! 4" by simp
 lemma "\<not> (1 :: 3 word) !! 2" by simp
 
-lemma "(0b11000 :: 10 word) !! n = (n = 4 \<or> n = 3)" 
+lemma "(0b11000 :: 10 word) !! n = (n = 4 \<or> n = 3)"
   by (auto simp add: bin_nth_Bit0 bin_nth_Bit1)
 
 lemma "set_bit 55 7 True = (183::'a::len0 word)" by simp
@@ -133,7 +135,7 @@
 lemma "\<not> msb (0::4 word)" by simp
 
 lemma "word_cat (27::4 word) (27::8 word) = (2843::'a::len word)" by simp
-lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)" 
+lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)"
   by simp
 
 lemma "0b1011 << 2 = (0b101100::'a::len0 word)" by simp
@@ -171,20 +173,24 @@
 
 text "more proofs using bitwise expansion"
 
-lemma "((x :: 10 word) AND NOT 3) >> 4 << 2 = ((x >> 2) AND NOT 3)"
+lemma "(x AND NOT 3) >> 4 << 2 = ((x >> 2) AND NOT 3)"
+  for x :: "10 word"
   by word_bitwise
 
-lemma "(((x :: 12 word) AND -8) >> 3) AND 7 = (x AND 56) >> 3"
+lemma "((x AND -8) >> 3) AND 7 = (x AND 56) >> 3"
+  for x :: "12 word"
   by word_bitwise
 
 text "some problems require further reasoning after bit expansion"
 
-lemma "x \<le> (42 :: 8 word) \<Longrightarrow> x \<le> 89"
+lemma "x \<le> 42 \<Longrightarrow> x \<le> 89"
+  for x :: "8 word"
   apply word_bitwise
   apply blast
   done
 
-lemma "((x :: word32) AND 1023) = 0 \<Longrightarrow> x \<le> -1024"
+lemma "(x AND 1023) = 0 \<Longrightarrow> x \<le> -1024"
+  for x :: word32
   apply word_bitwise
   apply clarsimp
   done
@@ -192,11 +198,10 @@
 text "operations like shifts by non-numerals will expose some internal list
  representations but may still be easy to solve"
 
-lemma shiftr_overflow:
-  "32 \<le> a \<Longrightarrow> (b::word32) >> a = 0"
-  apply (word_bitwise)
+lemma shiftr_overflow: "32 \<le> a \<Longrightarrow> b >> a = 0"
+  for b :: word32
+  apply word_bitwise
   apply simp
   done
 
-
 end