doc-src/AxClass/Nat/document/NatClass.tex
author wenzelm
Mon, 29 Aug 2005 11:44:23 +0200
changeset 17181 5f42dd5e6570
parent 17175 1eced27ee0e1
child 17187 45bee2f6e61f
permissions -rw-r--r--
updated;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
     1
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
     2
\begin{isabellebody}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
     3
\def\isabellecontext{NatClass}%
17181
5f42dd5e6570 updated;
wenzelm
parents: 17175
diff changeset
     4
\isamarkupfalse%
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
     5
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
     6
\isamarkupheader{Defining natural numbers in FOL \label{sec:ex-natclass}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
     7
}
17175
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
     8
\isamarkuptrue%
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
     9
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    10
\isadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    11
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    12
\endisadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    13
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    14
\isatagtheory
17175
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    15
\isacommand{theory}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    16
\ NatClass\ \isakeyword{imports}\ FOL\ \isakeyword{begin}%
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    17
\endisatagtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    18
{\isafoldtheory}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    19
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    20
\isadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    21
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    22
\endisadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    23
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    24
\begin{isamarkuptext}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    25
\medskip\noindent Axiomatic type classes abstract over exactly one
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    26
 type argument. Thus, any \emph{axiomatic} theory extension where each
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    27
 axiom refers to at most one type variable, may be trivially turned
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    28
 into a \emph{definitional} one.
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    29
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    30
 We illustrate this with the natural numbers in
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    31
 Isabelle/FOL.\footnote{See also
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    32
 \url{http://isabelle.in.tum.de/library/FOL/ex/NatClass.html}}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    33
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    34
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    35
\isacommand{consts}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    36
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    37
\ \ zero\ {\isacharcolon}{\isacharcolon}\ {\isacharprime}a\ \ \ \ {\isacharparenleft}{\isachardoublequoteopen}{\isasymzero}{\isachardoublequoteclose}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    38
\ \ Suc\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequoteclose}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    39
\ \ rec\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequoteclose}\isanewline
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    40
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    41
\isacommand{axclass}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    42
\ nat\ {\isasymsubseteq}\ {\isachardoublequoteopen}term{\isachardoublequoteclose}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    43
\ \ induct{\isacharcolon}\ {\isachardoublequoteopen}P{\isacharparenleft}{\isasymzero}{\isacharparenright}\ {\isasymLongrightarrow}\ {\isacharparenleft}{\isasymAnd}x{\isachardot}\ P{\isacharparenleft}x{\isacharparenright}\ {\isasymLongrightarrow}\ P{\isacharparenleft}Suc{\isacharparenleft}x{\isacharparenright}{\isacharparenright}{\isacharparenright}\ {\isasymLongrightarrow}\ P{\isacharparenleft}n{\isacharparenright}{\isachardoublequoteclose}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    44
\ \ Suc{\isacharunderscore}inject{\isacharcolon}\ {\isachardoublequoteopen}Suc{\isacharparenleft}m{\isacharparenright}\ {\isacharequal}\ Suc{\isacharparenleft}n{\isacharparenright}\ {\isasymLongrightarrow}\ m\ {\isacharequal}\ n{\isachardoublequoteclose}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    45
\ \ Suc{\isacharunderscore}neq{\isacharunderscore}{\isadigit{0}}{\isacharcolon}\ {\isachardoublequoteopen}Suc{\isacharparenleft}m{\isacharparenright}\ {\isacharequal}\ {\isasymzero}\ {\isasymLongrightarrow}\ R{\isachardoublequoteclose}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    46
\ \ rec{\isacharunderscore}{\isadigit{0}}{\isacharcolon}\ {\isachardoublequoteopen}rec{\isacharparenleft}{\isasymzero}{\isacharcomma}\ a{\isacharcomma}\ f{\isacharparenright}\ {\isacharequal}\ a{\isachardoublequoteclose}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    47
\ \ rec{\isacharunderscore}Suc{\isacharcolon}\ {\isachardoublequoteopen}rec{\isacharparenleft}Suc{\isacharparenleft}m{\isacharparenright}{\isacharcomma}\ a{\isacharcomma}\ f{\isacharparenright}\ {\isacharequal}\ f{\isacharparenleft}m{\isacharcomma}\ rec{\isacharparenleft}m{\isacharcomma}\ a{\isacharcomma}\ f{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    48
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    49
\isacommand{constdefs}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    50
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    51
\ \ add\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a{\isacharcolon}{\isacharcolon}nat\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequoteclose}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isacharplus}{\isachardoublequoteclose}\ {\isadigit{6}}{\isadigit{0}}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    52
\ \ {\isachardoublequoteopen}m\ {\isacharplus}\ n\ {\isasymequiv}\ rec{\isacharparenleft}m{\isacharcomma}\ n{\isacharcomma}\ {\isasymlambda}x\ y{\isachardot}\ Suc{\isacharparenleft}y{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}%
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    53
\begin{isamarkuptext}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    54
This is an abstract version of the plain \isa{Nat} theory in
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    55
 FOL.\footnote{See
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    56
 \url{http://isabelle.in.tum.de/library/FOL/ex/Nat.html}} Basically,
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    57
 we have just replaced all occurrences of type \isa{nat} by \isa{{\isacharprime}a} and used the natural number axioms to define class \isa{nat}.
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    58
 There is only a minor snag, that the original recursion operator
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    59
 \isa{rec} had to be made monomorphic.
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    60
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    61
 Thus class \isa{nat} contains exactly those types \isa{{\isasymtau}} that
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    62
 are isomorphic to ``the'' natural numbers (with signature \isa{{\isasymzero}}, \isa{Suc}, \isa{rec}).
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    63
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    64
 \medskip What we have done here can be also viewed as \emph{type
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    65
 specification}.  Of course, it still remains open if there is some
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    66
 type at all that meets the class axioms.  Now a very nice property of
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    67
 axiomatic type classes is that abstract reasoning is always possible
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    68
 --- independent of satisfiability.  The meta-logic won't break, even
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    69
 if some classes (or general sorts) turns out to be empty later ---
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    70
 ``inconsistent'' class definitions may be useless, but do not cause
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    71
 any harm.
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    72
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    73
 Theorems of the abstract natural numbers may be derived in the same
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    74
 way as for the concrete version.  The original proof scripts may be
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    75
 re-used with some trivial changes only (mostly adding some type
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    76
 constraints).%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    77
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    78
\isamarkuptrue%
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    79
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    80
\isadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    81
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    82
\endisadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    83
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    84
\isatagtheory
17175
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    85
\isacommand{end}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17128
diff changeset
    86
%
17128
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    87
\endisatagtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    88
{\isafoldtheory}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    89
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    90
\isadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    91
%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    92
\endisadelimtheory
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    93
\end{isabellebody}%
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    94
%%% Local Variables:
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    95
%%% mode: latex
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    96
%%% TeX-master: "root"
bb09ba3e5b2f updated;
wenzelm
parents:
diff changeset
    97
%%% End: