doc-src/TutorialI/Types/Overloading.thy
author paulson
Thu, 09 Aug 2001 18:12:15 +0200
changeset 11494 23a118849801
parent 11196 bb4ede27fcb7
child 12338 de0f4a63baa5
permissions -rw-r--r--
revisions and indexing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     1
(*<*)theory Overloading = Overloading1:(*>*)
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     2
instance list :: ("term")ordrel
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     3
by intro_classes
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     5
text{*\noindent
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     6
This \isacommand{instance} declaration can be read like the declaration of
11494
23a118849801 revisions and indexing
paulson
parents: 11196
diff changeset
     7
a function on types.  The constructor @{text list} maps types of class @{text
23a118849801 revisions and indexing
paulson
parents: 11196
diff changeset
     8
term} (all HOL types), to types of class @{text ordrel};
23a118849801 revisions and indexing
paulson
parents: 11196
diff changeset
     9
in other words,
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    10
if @{text"ty :: term"} then @{text"ty list :: ordrel"}.
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    11
Of course we should also define the meaning of @{text <<=} and
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    12
@{text <<} on lists:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
*}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    14
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    15
defs (overloaded)
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
prefix_def:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
  "xs <<= (ys::'a::ordrel list)  \<equiv>  \<exists>zs. ys = xs@zs"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    18
strict_prefix_def:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    19
  "xs << (ys::'a::ordrel list)   \<equiv>  xs <<= ys \<and> xs \<noteq> ys"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    20
(*<*)end(*>*)