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