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