doc-src/AxClass/generated/Semigroups.tex
author nipkow
Fri, 19 Aug 2005 09:40:44 +0200
changeset 17124 19ea4a0f4ec9
parent 12338 de0f4a63baa5
child 17132 153fe83804c9
permissions -rw-r--r--
-H deleted
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9767
dc2ee9b2e065 updated;
wenzelm
parents: 9672
diff changeset
     1
%
dc2ee9b2e065 updated;
wenzelm
parents: 9672
diff changeset
     2
\begin{isabellebody}%
9921
7acefd99e748 updated;
wenzelm
parents: 9767
diff changeset
     3
\def\isabellecontext{Semigroups}%
8906
wenzelm
parents: 8903
diff changeset
     4
%
10395
7ef380745743 updated;
wenzelm
parents: 10223
diff changeset
     5
\isamarkupheader{Semigroups%
7ef380745743 updated;
wenzelm
parents: 10223
diff changeset
     6
}
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
     7
\isamarkuptrue%
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
     8
\isacommand{theory}\ Semigroups\ {\isacharequal}\ Main{\isacharcolon}\isamarkupfalse%
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
     9
%
8906
wenzelm
parents: 8903
diff changeset
    10
\begin{isamarkuptext}%
wenzelm
parents: 8903
diff changeset
    11
\medskip\noindent An axiomatic type class is simply a class of types
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    12
  that all meet certain properties, which are also called \emph{class
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    13
  axioms}. Thus, type classes may be also understood as type
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    14
  predicates --- i.e.\ abstractions over a single type argument \isa{{\isacharprime}a}.  Class axioms typically contain polymorphic constants that
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    15
  depend on this type \isa{{\isacharprime}a}.  These \emph{characteristic
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    16
  constants} behave like operations associated with the ``carrier''
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    17
  type \isa{{\isacharprime}a}.
8906
wenzelm
parents: 8903
diff changeset
    18
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    19
  We illustrate these basic concepts by the following formulation of
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    20
  semigroups.%
8906
wenzelm
parents: 8903
diff changeset
    21
\end{isamarkuptext}%
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    22
\isamarkuptrue%
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    23
\isacommand{consts}\isanewline
10207
c7c64cd26fc9 updated;
wenzelm
parents: 10140
diff changeset
    24
\ \ times\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequote}{\isasymodot}{\isachardoublequote}\ {\isadigit{7}}{\isadigit{0}}{\isacharparenright}\isanewline
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    25
\isamarkupfalse%
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    26
\isacommand{axclass}\ semigroup\ {\isasymsubseteq}\ type\isanewline
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    27
\ \ assoc{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}x\ {\isasymodot}\ y{\isacharparenright}\ {\isasymodot}\ z\ {\isacharequal}\ x\ {\isasymodot}\ {\isacharparenleft}y\ {\isasymodot}\ z{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    28
%
8906
wenzelm
parents: 8903
diff changeset
    29
\begin{isamarkuptext}%
10140
ba9297b71897 major cleanup -- improved typesetting;
wenzelm
parents: 9921
diff changeset
    30
\noindent Above we have first declared a polymorphic constant \isa{{\isasymodot}\ {\isasymColon}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a} and then defined the class \isa{semigroup} of
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    31
  all types \isa{{\isasymtau}} such that \isa{{\isasymodot}\ {\isasymColon}\ {\isasymtau}\ {\isasymRightarrow}\ {\isasymtau}\ {\isasymRightarrow}\ {\isasymtau}} is indeed an
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    32
  associative operator.  The \isa{assoc} axiom contains exactly one
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    33
  type variable, which is invisible in the above presentation, though.
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    34
  Also note that free term variables (like \isa{x}, \isa{y},
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    35
  \isa{z}) are allowed for user convenience --- conceptually all of
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    36
  these are bound by outermost universal quantifiers.
8906
wenzelm
parents: 8903
diff changeset
    37
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    38
  \medskip In general, type classes may be used to describe
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    39
  \emph{structures} with exactly one carrier \isa{{\isacharprime}a} and a fixed
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    40
  \emph{signature}.  Different signatures require different classes.
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    41
  Below, class \isa{plus{\isacharunderscore}semigroup} represents semigroups \isa{{\isacharparenleft}{\isasymtau}{\isacharcomma}\ {\isasymoplus}\isactrlsup {\isasymtau}{\isacharparenright}}, while the original \isa{semigroup} would
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    42
  correspond to semigroups of the form \isa{{\isacharparenleft}{\isasymtau}{\isacharcomma}\ {\isasymodot}\isactrlsup {\isasymtau}{\isacharparenright}}.%
8906
wenzelm
parents: 8903
diff changeset
    43
\end{isamarkuptext}%
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    44
\isamarkuptrue%
8906
wenzelm
parents: 8903
diff changeset
    45
\isacommand{consts}\isanewline
10207
c7c64cd26fc9 updated;
wenzelm
parents: 10140
diff changeset
    46
\ \ plus\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequote}{\isasymoplus}{\isachardoublequote}\ {\isadigit{7}}{\isadigit{0}}{\isacharparenright}\isanewline
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    47
\isamarkupfalse%
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    48
\isacommand{axclass}\ plus{\isacharunderscore}semigroup\ {\isasymsubseteq}\ type\isanewline
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    49
\ \ assoc{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}x\ {\isasymoplus}\ y{\isacharparenright}\ {\isasymoplus}\ z\ {\isacharequal}\ x\ {\isasymoplus}\ {\isacharparenleft}y\ {\isasymoplus}\ z{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    50
%
8906
wenzelm
parents: 8903
diff changeset
    51
\begin{isamarkuptext}%
10140
ba9297b71897 major cleanup -- improved typesetting;
wenzelm
parents: 9921
diff changeset
    52
\noindent Even if classes \isa{plus{\isacharunderscore}semigroup} and \isa{semigroup} both represent semigroups in a sense, they are certainly
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    53
  not quite the same.%
8906
wenzelm
parents: 8903
diff changeset
    54
\end{isamarkuptext}%
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    55
\isamarkuptrue%
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    56
\isacommand{end}\isanewline
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 11964
diff changeset
    57
\isamarkupfalse%
11964
828ea309dc21 updated;
wenzelm
parents: 11099
diff changeset
    58
\end{isabellebody}%
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: