doc-src/TutorialI/Types/Overloading.thy
author nipkow
Wed, 07 Mar 2001 15:54:11 +0100
changeset 11196 bb4ede27fcb7
parent 10328 bf33cbd76c05
child 11494 23a118849801
permissions -rw-r--r--
*** empty log message ***
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
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     7
a function on types: the constructor @{text list} maps types of class @{text
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     8
term}, i.e.\ all HOL types, to types of class @{text ordrel}, i.e.\
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     9
if @{text"ty :: term"} then @{text"ty list :: ordrel"}.
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    10
Of course we should also define the meaning of @{text <<=} and
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    11
@{text <<} on lists:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    12
*}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    14
defs (overloaded)
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    15
prefix_def:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
  "xs <<= (ys::'a::ordrel list)  \<equiv>  \<exists>zs. ys = xs@zs"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
strict_prefix_def:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    18
  "xs << (ys::'a::ordrel list)   \<equiv>  xs <<= ys \<and> xs \<noteq> ys"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    19
(*<*)end(*>*)