doc-src/AxClass/generated/NatClass.tex
author wenzelm
Mon, 21 Aug 2000 13:47:24 +0200
changeset 9665 2a6d7f1409f9
parent 9519 fdc3b5bcd79d
child 9672 2c208c98f541
permissions -rw-r--r--
updated;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     1
\begin{isabelle}%
8906
wenzelm
parents: 8903
diff changeset
     2
%
wenzelm
parents: 8903
diff changeset
     3
\isamarkupheader{Defining natural numbers in FOL \label{sec:ex-natclass}}
9519
fdc3b5bcd79d updated;
wenzelm
parents: 9145
diff changeset
     4
\isacommand{theory}\ NatClass\ =\ FOL:%
8906
wenzelm
parents: 8903
diff changeset
     5
\begin{isamarkuptext}%
wenzelm
parents: 8903
diff changeset
     6
\medskip\noindent Axiomatic type classes abstract over exactly one
wenzelm
parents: 8903
diff changeset
     7
 type argument. Thus, any \emph{axiomatic} theory extension where each
wenzelm
parents: 8903
diff changeset
     8
 axiom refers to at most one type variable, may be trivially turned
wenzelm
parents: 8903
diff changeset
     9
 into a \emph{definitional} one.
wenzelm
parents: 8903
diff changeset
    10
wenzelm
parents: 8903
diff changeset
    11
 We illustrate this with the natural numbers in
wenzelm
parents: 8903
diff changeset
    12
 Isabelle/FOL.\footnote{See also
wenzelm
parents: 8903
diff changeset
    13
 \url{http://isabelle.in.tum.de/library/FOL/ex/NatClass.html}}%
wenzelm
parents: 8903
diff changeset
    14
\end{isamarkuptext}%
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    15
\isacommand{consts}\isanewline
9665
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    16
\ \ zero\ ::\ {\isacharprime}a\ \ \ \ {\isacharparenleft}{\isachardoublequote}0{\isachardoublequote}{\isacharparenright}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    17
\ \ Suc\ ::\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    18
\ \ rec\ ::\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\isanewline
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    19
\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    20
\isacommand{axclass}\isanewline
9665
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    21
\ \ nat\ {\isacharless}\ {\isachardoublequote}term{\isachardoublequote}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    22
\ \ induct:\ \ \ \ \ {\isachardoublequote}P{\isacharparenleft}0{\isacharparenright}\ {\isasymLongrightarrow}\ {\isacharparenleft}{\isasymAnd}x.\ P{\isacharparenleft}x{\isacharparenright}\ {\isasymLongrightarrow}\ P{\isacharparenleft}Suc{\isacharparenleft}x{\isacharparenright}{\isacharparenright}{\isacharparenright}\ {\isasymLongrightarrow}\ P{\isacharparenleft}n{\isacharparenright}{\isachardoublequote}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    23
\ \ Suc{\isacharunderscore}inject:\ {\isachardoublequote}Suc{\isacharparenleft}m{\isacharparenright}\ =\ Suc{\isacharparenleft}n{\isacharparenright}\ {\isasymLongrightarrow}\ m\ =\ n{\isachardoublequote}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    24
\ \ Suc{\isacharunderscore}neq{\isacharunderscore}0:\ \ {\isachardoublequote}Suc{\isacharparenleft}m{\isacharparenright}\ =\ 0\ {\isasymLongrightarrow}\ R{\isachardoublequote}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    25
\ \ rec{\isacharunderscore}0:\ \ \ \ \ \ {\isachardoublequote}rec{\isacharparenleft}0,\ a,\ f{\isacharparenright}\ =\ a{\isachardoublequote}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    26
\ \ rec{\isacharunderscore}Suc:\ \ \ \ {\isachardoublequote}rec{\isacharparenleft}Suc{\isacharparenleft}m{\isacharparenright},\ a,\ f{\isacharparenright}\ =\ f{\isacharparenleft}m,\ rec{\isacharparenleft}m,\ a,\ f{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isanewline
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    27
\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    28
\isacommand{constdefs}\isanewline
9665
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    29
\ \ add\ ::\ {\isachardoublequote}{\isacharprime}a::nat\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequote}+{\isachardoublequote}\ 60{\isacharparenright}\isanewline
2a6d7f1409f9 updated;
wenzelm
parents: 9519
diff changeset
    30
\ \ {\isachardoublequote}m\ +\ n\ {\isasymequiv}\ rec{\isacharparenleft}m,\ n,\ {\isasymlambda}x\ y.\ Suc{\isacharparenleft}y{\isacharparenright}{\isacharparenright}{\isachardoublequote}%
8906
wenzelm
parents: 8903
diff changeset
    31
\begin{isamarkuptext}%
wenzelm
parents: 8903
diff changeset
    32
This is an abstract version of the plain $Nat$ theory in
wenzelm
parents: 8903
diff changeset
    33
 FOL.\footnote{See
8907
wenzelm
parents: 8906
diff changeset
    34
 \url{http://isabelle.in.tum.de/library/FOL/ex/Nat.html}} Basically,
wenzelm
parents: 8906
diff changeset
    35
 we have just replaced all occurrences of type $nat$ by $\alpha$ and
wenzelm
parents: 8906
diff changeset
    36
 used the natural number axioms to define class $nat$.  There is only
wenzelm
parents: 8906
diff changeset
    37
 a minor snag, that the original recursion operator $rec$ had to be
wenzelm
parents: 8906
diff changeset
    38
 made monomorphic.
8906
wenzelm
parents: 8903
diff changeset
    39
8907
wenzelm
parents: 8906
diff changeset
    40
 Thus class $nat$ contains exactly those types $\tau$ that are
wenzelm
parents: 8906
diff changeset
    41
 isomorphic to ``the'' natural numbers (with signature $0$, $Suc$,
wenzelm
parents: 8906
diff changeset
    42
 $rec$).
8906
wenzelm
parents: 8903
diff changeset
    43
wenzelm
parents: 8903
diff changeset
    44
 \medskip What we have done here can be also viewed as \emph{type
wenzelm
parents: 8903
diff changeset
    45
 specification}.  Of course, it still remains open if there is some
wenzelm
parents: 8903
diff changeset
    46
 type at all that meets the class axioms.  Now a very nice property of
8907
wenzelm
parents: 8906
diff changeset
    47
 axiomatic type classes is that abstract reasoning is always possible
8906
wenzelm
parents: 8903
diff changeset
    48
 --- independent of satisfiability.  The meta-logic won't break, even
8907
wenzelm
parents: 8906
diff changeset
    49
 if some classes (or general sorts) turns out to be empty later ---
wenzelm
parents: 8906
diff changeset
    50
 ``inconsistent'' class definitions may be useless, but do not cause
wenzelm
parents: 8906
diff changeset
    51
 any harm.
8906
wenzelm
parents: 8903
diff changeset
    52
wenzelm
parents: 8903
diff changeset
    53
 Theorems of the abstract natural numbers may be derived in the same
wenzelm
parents: 8903
diff changeset
    54
 way as for the concrete version.  The original proof scripts may be
8907
wenzelm
parents: 8906
diff changeset
    55
 re-used with some trivial changes only (mostly adding some type
8906
wenzelm
parents: 8903
diff changeset
    56
 constraints).%
wenzelm
parents: 8903
diff changeset
    57
\end{isamarkuptext}%
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    58
\isacommand{end}\end{isabelle}%
9145
9f7b8de5bfaf updated;
wenzelm
parents: 8907
diff changeset
    59
%%% Local Variables:
9f7b8de5bfaf updated;
wenzelm
parents: 8907
diff changeset
    60
%%% mode: latex
9f7b8de5bfaf updated;
wenzelm
parents: 8907
diff changeset
    61
%%% TeX-master: "root"
9f7b8de5bfaf updated;
wenzelm
parents: 8907
diff changeset
    62
%%% End: