doc-src/TutorialI/Types/Overloading2.thy
author nipkow
Mon, 06 Nov 2000 11:32:23 +0100
changeset 10396 5ab08609e6c8
parent 10328 bf33cbd76c05
child 10654 458068404143
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 Overloading2 = Overloading1:(*>*)
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     2
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     3
text{*
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
Of course this is not the only possible definition of the two relations.
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     5
Componentwise comparison of lists of equal length also makes sense. This time
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     6
the elements of the list must also be of class @{text ordrel} to permit their
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     7
comparison:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     8
*}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     9
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    10
instance list :: (ordrel)ordrel
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    11
by intro_classes
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    12
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
defs (overloaded)
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    14
le_list_def: "xs <<= (ys::'a::ordrel list) \<equiv>
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    15
              size xs = size ys \<and> (\<forall>i<size xs. xs!i <<= ys!i)"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    17
text{*\noindent
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    18
The infix function @{text"!"} yields the nth element of a list.
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    19
*}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    20
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    21
subsubsection{*Predefined overloading*}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    22
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    23
text{*
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    24
HOL comes with a number of overloaded constants and corresponding classes.
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    25
The most important ones are listed in Table~\ref{tab:overloading}. They are
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    26
defined on all numeric types and somtimes on other types as well, for example
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    27
@{text"-"}, @{text"\<le>"} and @{text"<"} on sets.
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    28
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    29
\begin{table}[htbp]
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    30
\begin{center}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    31
\begin{tabular}{lll}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    32
Constant & Type & Syntax \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    33
\hline
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    34
@{term 0} & @{text "'a::zero"} \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    35
@{text"+"} & @{text "('a::plus) \<Rightarrow> 'a \<Rightarrow> 'a"} & (infixl 65) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    36
@{text"-"} & @{text "('a::minus) \<Rightarrow> 'a \<Rightarrow> 'a"} &  (infixl 65) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    37
@{text"*"} & @{text "('a::times) \<Rightarrow> 'a \<Rightarrow> 'a"} & (infixl 70) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    38
@{text"^"} & @{text "('a::power) \<Rightarrow> nat \<Rightarrow> 'a"} & (infixr 80) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    39
@{text"-"} & @{text "('a::minus) \<Rightarrow> 'a"} \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    40
@{term abs} &  @{text "('a::minus) \<Rightarrow> 'a"} \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    41
@{text"\<le>"} & @{text "('a::ord) \<Rightarrow> 'a \<Rightarrow> bool"} & (infixl 50) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    42
@{text"<"} & @{text "('a::ord) \<Rightarrow> 'a \<Rightarrow> bool"} & (infixl 50) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    43
@{term min} &  @{text "('a::ord) \<Rightarrow> 'a \<Rightarrow> 'a"} \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    44
@{term max} &  @{text "('a::ord) \<Rightarrow> 'a \<Rightarrow> 'a"} \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    45
\end{tabular}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    46
\caption{Overloaded constants in HOL}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    47
\label{tab:overloading}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    48
\end{center}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    49
\end{table}
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    50
*}(*<*)end(*>*)