src/HOL/Word/Size.thy
author haftmann
Wed, 31 Oct 2007 10:10:50 +0100
changeset 25247 7bacd1798fc4
parent 24465 70f0214b3ecc
child 25262 d0928156e326
permissions -rw-r--r--
tuned
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     1
(* 
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     2
    ID:         $Id$
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     3
    Author:     John Matthews, Galois Connections, Inc., copyright 2006
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     4
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     5
    A typeclass for parameterizing types by size.
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     6
    Used primarily to parameterize machine word sizes. 
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     7
*)
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     8
theory Size
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     9
imports Numeral_Type
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    10
begin
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    11
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    12
text {*
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    13
  The aim of this is to allow any type as index type, but to provide a
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    14
  default instantiation for numeral types. This independence requires
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    15
  some duplication with the definitions in Numeral\_Type.
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    16
*}
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    17
axclass len0 < type
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    18
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    19
consts
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    20
  len_of :: "('a :: len0 itself) => nat"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    21
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    22
text {* 
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    23
  Some theorems are only true on words with length greater 0.
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    24
*}
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    25
axclass len < len0
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    26
  len_gt_0 [iff]: "0 < len_of TYPE ('a :: len0)"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    27
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    28
instance num0  :: len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    29
instance num1 :: len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    30
instance bit0 :: (len0) len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    31
instance bit1 :: (len0) len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    32
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    33
defs (overloaded)
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    34
  len_num0:  "len_of (x::num0 itself) == 0"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    35
  len_num1: "len_of (x::num1 itself) == 1"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    36
  len_bit0: "len_of (x::'a::len0 bit0 itself) == 2 * len_of TYPE ('a)"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    37
  len_bit1: "len_of (x::'a::len0 bit1 itself) == 2 * len_of TYPE ('a) + 1"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    38
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    39
lemmas len_of_numeral_defs [simp] = len_num0 len_num1 len_bit0 len_bit1
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    40
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    41
instance num1 :: len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    42
instance bit0 :: (len) len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    43
instance bit1 :: (len0) len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    44
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    45
-- "Examples:"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    46
lemma "len_of TYPE(17) = 17" by simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    47
lemma "len_of TYPE(0) = 0" by simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    48
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    49
-- "not simplified:"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    50
lemma "len_of TYPE('a::len0) = x"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    51
  oops
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    52
   
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    53
end
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    54