| 35762 |      1 | (*  Title:      ZF/ex/BinEx.thy
 | 
| 11399 |      2 |     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
 | 
|  |      3 |     Copyright   1994  University of Cambridge
 | 
|  |      4 | 
 | 
| 35762 |      5 | Examples of performing binary arithmetic by simplification.
 | 
| 11399 |      6 | *)
 | 
|  |      7 | 
 | 
| 16417 |      8 | theory BinEx imports Main begin
 | 
| 11399 |      9 | (*All runtimes below are on a 300MHz Pentium*)
 | 
|  |     10 | 
 | 
|  |     11 | lemma "#13  $+  #19 = #32"
 | 
|  |     12 | by simp (*0 secs*)
 | 
|  |     13 | 
 | 
|  |     14 | lemma "#1234  $+  #5678 = #6912"
 | 
|  |     15 | by simp (*190 msec*)
 | 
|  |     16 | 
 | 
|  |     17 | lemma "#1359  $+  #-2468 = #-1109"
 | 
|  |     18 | by simp (*160 msec*)
 | 
|  |     19 | 
 | 
|  |     20 | lemma "#93746  $+  #-46375 = #47371"
 | 
|  |     21 | by simp (*300 msec*)
 | 
|  |     22 | 
 | 
|  |     23 | lemma "$- #65745 = #-65745"
 | 
|  |     24 | by simp (*80 msec*)
 | 
|  |     25 | 
 | 
|  |     26 | (* negation of ~54321 *)
 | 
|  |     27 | lemma "$- #-54321 = #54321"
 | 
|  |     28 | by simp (*90 msec*)
 | 
|  |     29 | 
 | 
|  |     30 | lemma "#13  $*  #19 = #247"
 | 
|  |     31 | by simp (*110 msec*)
 | 
|  |     32 | 
 | 
|  |     33 | lemma "#-84  $*  #51 = #-4284"
 | 
|  |     34 | by simp (*210 msec*)
 | 
|  |     35 | 
 | 
|  |     36 | (*The worst case for 8-bit operands *)
 | 
|  |     37 | lemma "#255  $*  #255 = #65025"
 | 
|  |     38 | by simp (*730 msec*)
 | 
|  |     39 | 
 | 
|  |     40 | lemma "#1359  $*  #-2468 = #-3354012"
 | 
|  |     41 | by simp (*1.04 secs*)
 | 
|  |     42 | 
 | 
|  |     43 | 
 | 
|  |     44 | (** Comparisons **)
 | 
|  |     45 | 
 | 
|  |     46 | lemma "(#89) $* #10 \<noteq> #889"
 | 
|  |     47 | by simp
 | 
|  |     48 | 
 | 
|  |     49 | lemma "(#13) $< #18 $- #4"
 | 
|  |     50 | by simp
 | 
|  |     51 | 
 | 
|  |     52 | lemma "(#-345) $< #-242 $+ #-100"
 | 
|  |     53 | by simp
 | 
|  |     54 | 
 | 
|  |     55 | lemma "(#13557456) $< #18678654"
 | 
|  |     56 | by simp
 | 
|  |     57 | 
 | 
|  |     58 | lemma "(#999999) $<= (#1000001 $+ #1) $- #2"
 | 
|  |     59 | by simp
 | 
|  |     60 | 
 | 
|  |     61 | lemma "(#1234567) $<= #1234567"
 | 
|  |     62 | by simp
 | 
|  |     63 | 
 | 
|  |     64 | 
 | 
|  |     65 | (*** Quotient and remainder!! [they could be faster] ***)
 | 
|  |     66 | 
 | 
|  |     67 | lemma "#23 zdiv #3 = #7"
 | 
|  |     68 | by simp
 | 
|  |     69 | 
 | 
|  |     70 | lemma "#23 zmod #3 = #2"
 | 
|  |     71 | by simp
 | 
|  |     72 | 
 | 
|  |     73 | (** negative dividend **)
 | 
|  |     74 | 
 | 
|  |     75 | lemma "#-23 zdiv #3 = #-8"
 | 
|  |     76 | by simp
 | 
|  |     77 | 
 | 
|  |     78 | lemma "#-23 zmod #3 = #1"
 | 
|  |     79 | by simp
 | 
|  |     80 | 
 | 
|  |     81 | (** negative divisor **)
 | 
|  |     82 | 
 | 
|  |     83 | lemma "#23 zdiv #-3 = #-8"
 | 
|  |     84 | by simp
 | 
|  |     85 | 
 | 
|  |     86 | lemma "#23 zmod #-3 = #-1"
 | 
|  |     87 | by simp
 | 
|  |     88 | 
 | 
|  |     89 | (** Negative dividend and divisor **)
 | 
|  |     90 | 
 | 
|  |     91 | lemma "#-23 zdiv #-3 = #7"
 | 
|  |     92 | by simp
 | 
|  |     93 | 
 | 
|  |     94 | lemma "#-23 zmod #-3 = #-2"
 | 
|  |     95 | by simp
 | 
|  |     96 | 
 | 
|  |     97 | end
 | 
|  |     98 | 
 |