src/HOL/Library/Type_Length.thy
author wenzelm
Thu, 01 Sep 2016 20:59:51 +0200
changeset 63762 6920b1885eff
parent 61799 src/HOL/Word/Type_Length.thy@4cf66f21b764
child 64113 86efd3d4dc98
permissions -rw-r--r--
clarified session; misc tuning and modernization;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
     1
(*  Title:      HOL/Library/Type_Length.thy
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
     2
    Author:     John Matthews, Galois Connections, Inc., Copyright 2006
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     3
*)
25262
d0928156e326 Added reference to Jeremy Dawson's paper on the word library.
kleing
parents: 24465
diff changeset
     4
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
     5
section \<open>Assigning lengths to types by type classes\<close>
25262
d0928156e326 Added reference to Jeremy Dawson's paper on the word library.
kleing
parents: 24465
diff changeset
     6
37655
f4d616d41a59 more speaking theory names
haftmann
parents: 29631
diff changeset
     7
theory Type_Length
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
     8
imports Numeral_Type
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
     9
begin
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    10
61799
4cf66f21b764 isabelle update_cartouches -c -t;
wenzelm
parents: 58874
diff changeset
    11
text \<open>
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    12
  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
    13
  default instantiation for numeral types. This independence requires
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    14
  some duplication with the definitions in \<^file>\<open>Numeral_Type.thy\<close>.
61799
4cf66f21b764 isabelle update_cartouches -c -t;
wenzelm
parents: 58874
diff changeset
    15
\<close>
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    16
29608
564ea783ace8 no base sort in class import
haftmann
parents: 26560
diff changeset
    17
class len0 =
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    18
  fixes len_of :: "'a itself \<Rightarrow> nat"
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    19
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    20
text \<open>Some theorems are only true on words with length greater 0.\<close>
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    21
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    22
class len = len0 +
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    23
  assumes len_gt_0 [iff]: "0 < len_of TYPE ('a)"
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    24
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    25
instantiation num0 and num1 :: len0
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    26
begin
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    27
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    28
definition len_num0: "len_of (_ :: num0 itself) = 0"
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    29
definition len_num1: "len_of (_ :: num1 itself) = 1"
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    30
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    31
instance ..
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    32
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    33
end
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    34
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    35
instantiation bit0 and bit1 :: (len0) len0
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    36
begin
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    37
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    38
definition len_bit0: "len_of (_ :: 'a::len0 bit0 itself) = 2 * len_of TYPE('a)"
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    39
definition len_bit1: "len_of (_ :: 'a::len0 bit1 itself) = 2 * len_of TYPE('a) + 1"
26514
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    40
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    41
instance ..
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    42
eff55c0a6d34 tuned towards code generation
haftmann
parents: 25262
diff changeset
    43
end
24465
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
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
    46
63762
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    47
instance num1 :: len
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    48
  by standard simp
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    49
instance bit0 :: (len) len
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    50
  by standard simp
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    51
instance bit1 :: (len0) len
6920b1885eff clarified session;
wenzelm
parents: 61799
diff changeset
    52
  by standard simp
24465
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    53
70f0214b3ecc revert to Word library version from 2007/08/20
huffman
parents:
diff changeset
    54
end