doc-src/AxClass/Group/document/Semigroups.tex
author wenzelm
Mon, 29 Aug 2005 16:18:04 +0200
changeset 17184 3d80209e9a53
parent 17181 5f42dd5e6570
child 17187 45bee2f6e61f
permissions -rw-r--r--
use AList operations;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
     1
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
     2
\begin{isabellebody}%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
     3
\def\isabellecontext{Semigroups}%
17181
5f42dd5e6570 updated;
wenzelm
parents: 17175
diff changeset
     4
\isamarkupfalse%
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
     5
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
     6
\isamarkupheader{Semigroups%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
     7
}
17175
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
     8
\isamarkuptrue%
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
     9
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    10
\isadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    11
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    12
\endisadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    13
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    14
\isatagtheory
17175
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    15
\isacommand{theory}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    16
\ Semigroups\ \isakeyword{imports}\ Main\ \isakeyword{begin}%
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    17
\endisatagtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    18
{\isafoldtheory}%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    19
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    20
\isadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    21
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    22
\endisadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    23
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    24
\begin{isamarkuptext}%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    25
\medskip\noindent An axiomatic type class is simply a class of types
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    26
  that all meet certain properties, which are also called \emph{class
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    27
  axioms}. Thus, type classes may be also understood as type
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    28
  predicates --- i.e.\ abstractions over a single type argument \isa{{\isacharprime}a}.  Class axioms typically contain polymorphic constants that
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    29
  depend on this type \isa{{\isacharprime}a}.  These \emph{characteristic
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    30
  constants} behave like operations associated with the ``carrier''
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    31
  type \isa{{\isacharprime}a}.
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    32
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    33
  We illustrate these basic concepts by the following formulation of
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    34
  semigroups.%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    35
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    36
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    37
\isacommand{consts}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    38
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    39
\ \ times\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequoteclose}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymodot}{\isachardoublequoteclose}\ {\isadigit{7}}{\isadigit{0}}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    40
\isacommand{axclass}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    41
\ semigroup\ {\isasymsubseteq}\ type\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    42
\ \ assoc{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isasymodot}\ y{\isacharparenright}\ {\isasymodot}\ z\ {\isacharequal}\ x\ {\isasymodot}\ {\isacharparenleft}y\ {\isasymodot}\ z{\isacharparenright}{\isachardoublequoteclose}%
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    43
\begin{isamarkuptext}%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    44
\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
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    45
  all types \isa{{\isasymtau}} such that \isa{{\isasymodot}\ {\isasymColon}\ {\isasymtau}\ {\isasymRightarrow}\ {\isasymtau}\ {\isasymRightarrow}\ {\isasymtau}} is indeed an
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    46
  associative operator.  The \isa{assoc} axiom contains exactly one
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    47
  type variable, which is invisible in the above presentation, though.
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    48
  Also note that free term variables (like \isa{x}, \isa{y},
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    49
  \isa{z}) are allowed for user convenience --- conceptually all of
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    50
  these are bound by outermost universal quantifiers.
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    51
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    52
  \medskip In general, type classes may be used to describe
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    53
  \emph{structures} with exactly one carrier \isa{{\isacharprime}a} and a fixed
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    54
  \emph{signature}.  Different signatures require different classes.
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    55
  Below, class \isa{plus{\isacharunderscore}semigroup} represents semigroups \isa{{\isacharparenleft}{\isasymtau}{\isacharcomma}\ {\isasymoplus}\isactrlsup {\isasymtau}{\isacharparenright}}, while the original \isa{semigroup} would
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    56
  correspond to semigroups of the form \isa{{\isacharparenleft}{\isasymtau}{\isacharcomma}\ {\isasymodot}\isactrlsup {\isasymtau}{\isacharparenright}}.%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    57
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    58
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    59
\isacommand{consts}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    60
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    61
\ \ plus\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequoteclose}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymoplus}{\isachardoublequoteclose}\ {\isadigit{7}}{\isadigit{0}}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    62
\isacommand{axclass}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    63
\ plus{\isacharunderscore}semigroup\ {\isasymsubseteq}\ type\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    64
\ \ assoc{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isasymoplus}\ y{\isacharparenright}\ {\isasymoplus}\ z\ {\isacharequal}\ x\ {\isasymoplus}\ {\isacharparenleft}y\ {\isasymoplus}\ z{\isacharparenright}{\isachardoublequoteclose}%
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    65
\begin{isamarkuptext}%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    66
\noindent Even if classes \isa{plus{\isacharunderscore}semigroup} and \isa{semigroup} both represent semigroups in a sense, they are certainly
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    67
  not quite the same.%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    68
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    69
\isamarkuptrue%
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    70
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    71
\isadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    72
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    73
\endisadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    74
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    75
\isatagtheory
17175
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    76
\isacommand{end}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17133
diff changeset
    77
%
17133
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    78
\endisatagtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    79
{\isafoldtheory}%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    80
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    81
\isadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    82
%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    83
\endisadelimtheory
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    84
\isanewline
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    85
\end{isabellebody}%
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    86
%%% Local Variables:
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    87
%%% mode: latex
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    88
%%% TeX-master: "root"
096792bdc58e tuned generated stuff;
wenzelm
parents:
diff changeset
    89
%%% End: