src/HOL/Word/Size.thy
author berghofe
Thu, 03 Jan 2008 23:17:01 +0100
changeset 25822 05756950011c
parent 25262 d0928156e326
child 26514 eff55c0a6d34
permissions -rw-r--r--
Added function partition_rules'.
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
*)
25262
d0928156e326 Added reference to Jeremy Dawson's paper on the word library.
kleing
parents: 24465
diff changeset
     8
d0928156e326 Added reference to Jeremy Dawson's paper on the word library.
kleing
parents: 24465
diff changeset
     9
header "The size class"
d0928156e326 Added reference to Jeremy Dawson's paper on the word library.
kleing
parents: 24465
diff changeset
    10
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    11
theory Size
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    12
imports Numeral_Type
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    13
begin
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    14
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    15
text {*
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    16
  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
    17
  default instantiation for numeral types. This independence requires
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    18
  some duplication with the definitions in Numeral\_Type.
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    19
*}
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    20
axclass len0 < type
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
consts
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    23
  len_of :: "('a :: len0 itself) => nat"
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
text {* 
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    26
  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
    27
*}
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    28
axclass len < len0
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    29
  len_gt_0 [iff]: "0 < len_of TYPE ('a :: len0)"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    30
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    31
instance num0  :: len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    32
instance num1 :: len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    33
instance bit0 :: (len0) len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    34
instance bit1 :: (len0) len0 ..
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    35
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    36
defs (overloaded)
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    37
  len_num0:  "len_of (x::num0 itself) == 0"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    38
  len_num1: "len_of (x::num1 itself) == 1"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    39
  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
    40
  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
    41
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    42
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
    43
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    44
instance num1 :: len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    45
instance bit0 :: (len) len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    46
instance bit1 :: (len0) len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    47
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    48
-- "Examples:"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    49
lemma "len_of TYPE(17) = 17" by simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    50
lemma "len_of TYPE(0) = 0" by simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    51
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    52
-- "not simplified:"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    53
lemma "len_of TYPE('a::len0) = x"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    54
  oops
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    55
   
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    56
end
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    57