src/HOL/Word/Size.thy
author wenzelm
Wed, 31 Dec 2008 18:53:16 +0100
changeset 29270 0eade173f77e
parent 26560 d2fc9a18ee8a
child 29608 564ea783ace8
permissions -rw-r--r--
moved old add_type_XXX, add_term_XXX etc. to structure OldTerm;
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
26560
haftmann
parents: 26514
diff changeset
     9
header "The len classes"
25262
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
26560
haftmann
parents: 26514
diff changeset
    18
  some duplication with the definitions in @{text "Numeral_Type"}.
24465
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
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    21
class len0 = type +
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    22
  fixes len_of :: "'a itself \<Rightarrow> nat"
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    23
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    24
text {* 
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    25
  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
    26
*}
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    27
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    28
class len = len0 +
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    29
  assumes len_gt_0 [iff]: "0 < len_of TYPE ('a)"
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    30
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    31
instantiation num0 and num1 :: len0
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    32
begin
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    33
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    34
definition
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    35
  len_num0:  "len_of (x::num0 itself) = 0"
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    36
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    37
definition
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    38
  len_num1: "len_of (x::num1 itself) = 1"
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    39
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    40
instance ..
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    41
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    42
end
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    43
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    44
instantiation bit0 and bit1 :: (len0) len0
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    45
begin
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    46
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    47
definition
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    48
  len_bit0: "len_of (x::'a::len0 bit0 itself) = 2 * len_of TYPE ('a)"
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    49
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    50
definition
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    51
  len_bit1: "len_of (x::'a::len0 bit1 itself) = 2 * len_of TYPE ('a) + 1"
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    52
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    53
instance ..
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    54
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    55
end
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    56
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    57
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
    58
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    59
instance num1 :: len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    60
instance bit0 :: (len) len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    61
instance bit1 :: (len0) len by (intro_classes) simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    62
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    63
-- "Examples:"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    64
lemma "len_of TYPE(17) = 17" by simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    65
lemma "len_of TYPE(0) = 0" by simp
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    66
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    67
-- "not simplified:"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    68
lemma "len_of TYPE('a::len0) = x"
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    69
  oops
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    70
   
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    71
end
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    72