doc-src/AxClass/generated/NatClass.tex
author wenzelm
Mon, 22 May 2000 10:31:44 +0200
changeset 8906 fc7841f31388
parent 8903 78d6e47469e4
child 8907 813fabceec00
permissions -rw-r--r--
tuned;
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}}
wenzelm
parents: 8903
diff changeset
     4
\isacommand{theory}~NatClass~=~FOL:%
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
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    16
~~zero~::~'a~~~~({"}0{"})\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    17
~~Suc~::~{"}'a~{\isasymRightarrow}~'a{"}\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    18
~~rec~::~{"}'a~{\isasymRightarrow}~'a~{\isasymRightarrow}~('a~{\isasymRightarrow}~'a~{\isasymRightarrow}~'a)~{\isasymRightarrow}~'a{"}\isanewline
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
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    21
~~nat~<~{"}term{"}\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    22
~~induct:~~~~~{"}P(0)~{\isasymLongrightarrow}~({\isasymAnd}x.~P(x)~{\isasymLongrightarrow}~P(Suc(x)))~{\isasymLongrightarrow}~P(n){"}\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    23
~~Suc\_inject:~{"}Suc(m)~=~Suc(n)~{\isasymLongrightarrow}~m~=~n{"}\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    24
~~Suc\_neq\_0:~~{"}Suc(m)~=~0~{\isasymLongrightarrow}~R{"}\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    25
~~rec\_0:~~~~~~{"}rec(0,~a,~f)~=~a{"}\isanewline
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    26
~~rec\_Suc:~~~~{"}rec(Suc(m),~a,~f)~=~f(m,~rec(m,~a,~f)){"}\isanewline
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
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    29
~~add~::~{"}'a::nat~{\isasymRightarrow}~'a~{\isasymRightarrow}~'a{"}~~~~(\isakeyword{infixl}~{"}+{"}~60)\isanewline
8906
wenzelm
parents: 8903
diff changeset
    30
~~{"}m~+~n~{\isasymequiv}~rec(m,~n,~{\isasymlambda}x~y.~Suc(y)){"}%
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
wenzelm
parents: 8903
diff changeset
    34
 \url{http://isabelle.in.tum.de/library/FOL/ex/Nat.html}}
wenzelm
parents: 8903
diff changeset
    35
wenzelm
parents: 8903
diff changeset
    36
 Basically, we have just replaced all occurrences of type $nat$ by
wenzelm
parents: 8903
diff changeset
    37
 $\alpha$ and used the natural number axioms to define class $nat$.
wenzelm
parents: 8903
diff changeset
    38
 There is only a minor snag, that the original recursion operator
wenzelm
parents: 8903
diff changeset
    39
 $rec$ had to be made monomorphic, in a sense.  Thus class $nat$
wenzelm
parents: 8903
diff changeset
    40
 contains exactly those types $\tau$ that are isomorphic to ``the''
wenzelm
parents: 8903
diff changeset
    41
 natural numbers (with signature $0$, $Suc$, $rec$).
wenzelm
parents: 8903
diff changeset
    42
wenzelm
parents: 8903
diff changeset
    43
 \medskip What we have done here can be also viewed as \emph{type
wenzelm
parents: 8903
diff changeset
    44
 specification}.  Of course, it still remains open if there is some
wenzelm
parents: 8903
diff changeset
    45
 type at all that meets the class axioms.  Now a very nice property of
wenzelm
parents: 8903
diff changeset
    46
 axiomatic type classes is, that abstract reasoning is always possible
wenzelm
parents: 8903
diff changeset
    47
 --- independent of satisfiability.  The meta-logic won't break, even
wenzelm
parents: 8903
diff changeset
    48
 if some classes (or general sorts) turns out to be empty
wenzelm
parents: 8903
diff changeset
    49
 (``inconsistent'') later.
wenzelm
parents: 8903
diff changeset
    50
wenzelm
parents: 8903
diff changeset
    51
 Theorems of the abstract natural numbers may be derived in the same
wenzelm
parents: 8903
diff changeset
    52
 way as for the concrete version.  The original proof scripts may be
wenzelm
parents: 8903
diff changeset
    53
 used with some trivial changes only (mostly adding some type
wenzelm
parents: 8903
diff changeset
    54
 constraints).%
wenzelm
parents: 8903
diff changeset
    55
\end{isamarkuptext}%
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    56
\isacommand{end}\end{isabelle}%