doc-src/TutorialI/Types/Overloading2.thy
author nipkow
Sun, 22 Mar 2009 19:36:04 +0100
changeset 30649 57753e0ec1d4
parent 17914 99ead7a7eb42
permissions -rw-r--r--
1. New cancellation simprocs for common factors in inequations 2. Updated the documentation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17914
99ead7a7eb42 fix headers;
wenzelm
parents: 14357
diff changeset
     1
(*<*)theory Overloading2 imports Overloading1 begin(*>*)
10305
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
30649
57753e0ec1d4 1. New cancellation simprocs for common factors in inequations
nipkow
parents: 17914
diff changeset
    18
The infix function @{text"!"} yields the nth element of a list, starting with 0.
11494
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    19
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    20
\begin{warn}
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    21
A type constructor can be instantiated in only one way to
12334
60bf75e157e4 *** empty log message ***
nipkow
parents: 11494
diff changeset
    22
a given type class.  For example, our two instantiations of @{text list} must
60bf75e157e4 *** empty log message ***
nipkow
parents: 11494
diff changeset
    23
reside in separate theories with disjoint scopes.
11494
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    24
\end{warn}
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    25
*}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    26
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10761
diff changeset
    27
subsubsection{*Predefined Overloading*}
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    28
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    29
text{*
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    30
HOL comes with a number of overloaded constants and corresponding classes.
10978
5eebea8f359f *** empty log message ***
nipkow
parents: 10971
diff changeset
    31
The most important ones are listed in Table~\ref{tab:overloading} in the appendix. They are
10971
6852682eaf16 *** empty log message ***
nipkow
parents: 10885
diff changeset
    32
defined on all numeric types and sometimes on other types as well, for example
11494
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    33
$-$ and @{text"\<le>"} on sets.
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    34
14357
e49d5d5ae66a print translation for ALL x <= n. P x
kleing
parents: 12334
diff changeset
    35
In addition there is a special syntax for bounded quantifiers:
10696
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    36
\begin{center}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    37
\begin{tabular}{lcl}
14357
e49d5d5ae66a print translation for ALL x <= n. P x
kleing
parents: 12334
diff changeset
    38
@{prop"\<forall>x \<le> y. P x"} & @{text"\<rightleftharpoons>"} & @{prop [source] "\<forall>x. x \<le> y \<longrightarrow> P x"} \\
e49d5d5ae66a print translation for ALL x <= n. P x
kleing
parents: 12334
diff changeset
    39
@{prop"\<exists>x \<le> y. P x"} & @{text"\<rightleftharpoons>"} & @{prop [source] "\<exists>x. x \<le> y \<and> P x"}
10696
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    40
\end{tabular}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    41
\end{center}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    42
And analogously for @{text"<"} instead of @{text"\<le>"}.
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    43
*}(*<*)end(*>*)