doc-src/Ref/theory-syntax.tex
author lcp
Fri, 07 Apr 1995 10:12:01 +0200
changeset 1022 c4921e635bf7
parent 325 49baeba86546
child 1080 13c35eb5169b
permissions -rw-r--r--
Local version of (original) hypsubst: needs no simplifier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
285
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
     1
%% $Id$
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
     2
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
     3
\appendix
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
     4
\newlinechar=-1  %mathsing.sty sets \newlinechar=`\|, which would cause mayhem
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
     5
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
     6
\chapter{Syntax of Isabelle Theories}\label{app:TheorySyntax}
325
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
     7
Chapter~\ref{sec:ref-defining-theories} explains the meanings of these
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
     8
constructs.  The syntax obeys the following conventions:
285
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
     9
\begin{itemize}
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    10
\item {\tt Typewriter font} denotes terminal symbols.
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    11
\item $id$, $tid$, $nat$, $string$ and $text$ are the lexical classes of
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    12
  identifiers, type identifiers, natural numbers, \ML\ strings (with their
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    13
  quotation marks) and arbitrary \ML\ text.  The first three are fully defined
325
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    14
  in 
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    15
\iflabelundefined{Defining-Logics}%
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    16
    {{\it The Isabelle Reference Manual}, chapter `Defining Logics'}%
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    17
    {Chap.\ts\ref{Defining-Logics}}.
285
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    18
\end{itemize}
325
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    19
Comments in theories take the form {\tt (*} {\it text\/} {\tt*)}, where
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    20
{\it text\/} should not contain the character sequence {\tt*)}.
285
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    21
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    22
\begin{rail}
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    23
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    24
theoryDef : id '=' (name + '+') ('+' extension | ());
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    25
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    26
name: id | string;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    27
295
dcde5024895d have broken line
nipkow
parents: 285
diff changeset
    28
extension : classes default types arities consts trans rules \\ 'end' ml
285
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    29
          ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    30
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    31
classes : ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    32
        | 'classes' ( ( id (  ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    33
                            | '<' (id + ',')
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    34
                           ) 
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    35
                       ) + )
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    36
        ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    37
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    38
default : ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    39
        | 'default' sort 
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    40
        ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    41
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    42
sort :  id
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    43
     | '\{' (id * ',') '\}'
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    44
     ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    45
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    46
types :  ()
325
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    47
      | 'types' ( ( typeDecl ( () | '(' infix ')' ) ) + )
285
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    48
      ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    49
325
49baeba86546 penultimate Springer draft
lcp
parents: 295
diff changeset
    50
typeDecl : ( () | tid | '(' ( tid + ',' ) ')') name ( () | '='  string );
285
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    51
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    52
infix : ( 'infixr' | 'infixl' ) nat;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    53
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    54
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    55
arities :  ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    56
        | 'arities' ((( name + ',' ) '::' arity ) + )
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    57
        ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    58
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    59
arity   : ( () 
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    60
          | '(' (sort + ',') ')' 
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    61
          ) id
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    62
        ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    63
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    64
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    65
consts :  ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    66
       | 'consts' ( ( constDecl ( () | ( '(' mixfix ')' ) ) ) + )
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    67
       ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    68
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    69
constDecl : ( name + ',') '::' string ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    70
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    71
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    72
mixfix :  string ( () | ( () | ('[' (nat + ',') ']')) nat )
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    73
       | infix
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    74
       | 'binder' string nat ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    75
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    76
trans : ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    77
      | 'translations' ( pat ( '==' | '=>' | '<=' ) pat + )
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    78
      ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    79
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    80
pat : ( () | ( '(' id ')' ) ) string;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    81
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    82
rules :  ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    83
      | 'rules' (( id string ) + )
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    84
      ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    85
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    86
ml :  ()
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    87
   | 'ML' text
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    88
   ;
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    89
fd4a6585e5bf first draft of Springer book
lcp
parents:
diff changeset
    90
\end{rail}