| author | wenzelm | 
| Sat, 10 Sep 2011 20:41:27 +0200 | |
| changeset 44869 | 328825888426 | 
| parent 43618 | 1c43134ff988 | 
| child 46261 | b03897da3c90 | 
| permissions | -rw-r--r-- | 
| 27043 | 1 | theory Document_Preparation | 
| 42651 | 2 | imports Base Main | 
| 27043 | 3 | begin | 
| 4 | ||
| 5 | chapter {* Document preparation \label{ch:document-prep} *}
 | |
| 6 | ||
| 28746 | 7 | text {* Isabelle/Isar provides a simple document preparation system
 | 
| 8 |   based on regular {PDF-\LaTeX} technology, with full support for
 | |
| 9 | hyper-links and bookmarks. Thus the results are well suited for WWW | |
| 10 | browsing and as printed copies. | |
| 27043 | 11 | |
| 28746 | 12 |   \medskip Isabelle generates {\LaTeX} output while running a
 | 
| 27043 | 13 |   \emph{logic session} (see also \cite{isabelle-sys}).  Getting
 | 
| 14 | started with a working configuration for common situations is quite | |
| 15 |   easy by using the Isabelle @{verbatim mkdir} and @{verbatim make}
 | |
| 16 | tools. First invoke | |
| 17 | \begin{ttbox}
 | |
| 28504 
7ad7d7d6df47
simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
 wenzelm parents: 
27881diff
changeset | 18 | isabelle mkdir Foo | 
| 27043 | 19 | \end{ttbox}
 | 
| 28746 | 20 |   to initialize a separate directory for session @{verbatim Foo} (it
 | 
| 21 |   is safe to experiment, since @{verbatim "isabelle mkdir"} never
 | |
| 22 |   overwrites existing files).  Ensure that @{verbatim "Foo/ROOT.ML"}
 | |
| 27043 | 23 | holds ML commands to load all theories required for this session; | 
| 24 |   furthermore @{verbatim "Foo/document/root.tex"} should include any
 | |
| 25 |   special {\LaTeX} macro packages required for your document (the
 | |
| 26 | default is usually sufficient as a start). | |
| 27 | ||
| 28 |   The session is controlled by a separate @{verbatim IsaMakefile}
 | |
| 29 | (with crude source dependencies by default). This file is located | |
| 30 |   one level up from the @{verbatim Foo} directory location.  Now
 | |
| 31 | invoke | |
| 32 | \begin{ttbox}
 | |
| 28504 
7ad7d7d6df47
simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
 wenzelm parents: 
27881diff
changeset | 33 | isabelle make Foo | 
| 27043 | 34 | \end{ttbox}
 | 
| 35 |   to run the @{verbatim Foo} session, with browser information and
 | |
| 36 | document preparation enabled. Unless any errors are reported by | |
| 37 |   Isabelle or {\LaTeX}, the output will appear inside the directory
 | |
| 28746 | 38 |   defined by the @{verbatim ISABELLE_BROWSER_INFO} setting (as
 | 
| 39 | reported by the batch job in verbose mode). | |
| 27043 | 40 | |
| 41 |   \medskip You may also consider to tune the @{verbatim usedir}
 | |
| 28746 | 42 |   options in @{verbatim IsaMakefile}, for example to switch the output
 | 
| 43 |   format between @{verbatim pdf} and @{verbatim dvi}, or activate the
 | |
| 27043 | 44 |   @{verbatim "-D"} option to retain a second copy of the generated
 | 
| 28746 | 45 |   {\LaTeX} sources (for manual inspection or separate runs of
 | 
| 46 |   @{executable latex}).
 | |
| 27043 | 47 | |
| 48 |   \medskip See \emph{The Isabelle System Manual} \cite{isabelle-sys}
 | |
| 49 | for further details on Isabelle logic sessions and theory | |
| 50 |   presentation.  The Isabelle/HOL tutorial \cite{isabelle-hol-book}
 | |
| 28746 | 51 | also covers theory presentation to some extent. | 
| 27043 | 52 | *} | 
| 53 | ||
| 54 | ||
| 55 | section {* Markup commands \label{sec:markup} *}
 | |
| 56 | ||
| 57 | text {*
 | |
| 58 |   \begin{matharray}{rcl}
 | |
| 28761 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 59 |     @{command_def "header"} & : & @{text "toplevel \<rightarrow> toplevel"} \\[0.5ex]
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 60 |     @{command_def "chapter"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 61 |     @{command_def "section"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 62 |     @{command_def "subsection"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 63 |     @{command_def "subsubsection"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 64 |     @{command_def "text"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 65 |     @{command_def "text_raw"} & : & @{text "local_theory \<rightarrow> local_theory"} \\[0.5ex]
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 66 |     @{command_def "sect"} & : & @{text "proof \<rightarrow> proof"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 67 |     @{command_def "subsect"} & : & @{text "proof \<rightarrow> proof"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 68 |     @{command_def "subsubsect"} & : & @{text "proof \<rightarrow> proof"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 69 |     @{command_def "txt"} & : & @{text "proof \<rightarrow> proof"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 70 |     @{command_def "txt_raw"} & : & @{text "proof \<rightarrow> proof"} \\
 | 
| 27043 | 71 |   \end{matharray}
 | 
| 72 | ||
| 28747 | 73 | Markup commands provide a structured way to insert text into the | 
| 74 | document generated from a theory. Each markup command takes a | |
| 75 |   single @{syntax text} argument, which is passed as argument to a
 | |
| 76 |   corresponding {\LaTeX} macro.  The default macros provided by
 | |
| 40800 
330eb65c9469
Parse.liberal_name for document antiquotations and attributes;
 wenzelm parents: 
40255diff
changeset | 77 |   @{file "~~/lib/texinputs/isabelle.sty"} can be redefined according
 | 
| 28747 | 78 |   to the needs of the underlying document and {\LaTeX} styles.
 | 
| 79 | ||
| 80 |   Note that formal comments (\secref{sec:comments}) are similar to
 | |
| 81 | markup commands, but have a different status within Isabelle/Isar | |
| 82 | syntax. | |
| 27043 | 83 | |
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 84 |   @{rail "
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 85 |     (@@{command chapter} | @@{command section} | @@{command subsection} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 86 |       @@{command subsubsection} | @@{command text}) @{syntax target}? @{syntax text}
 | 
| 27043 | 87 | ; | 
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 88 |     (@@{command header} | @@{command text_raw} | @@{command sect} | @@{command subsect} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 89 |       @@{command subsubsect} | @@{command txt} | @@{command txt_raw}) @{syntax text}
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 90 | "} | 
| 27043 | 91 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 92 |   \begin{description}
 | 
| 27043 | 93 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 94 |   \item @{command header} provides plain text markup just preceding
 | 
| 28747 | 95 |   the formal beginning of a theory.  The corresponding {\LaTeX} macro
 | 
| 96 |   is @{verbatim "\\isamarkupheader"}, which acts like @{command
 | |
| 97 | section} by default. | |
| 27049 | 98 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 99 |   \item @{command chapter}, @{command section}, @{command subsection},
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 100 |   and @{command subsubsection} mark chapter and section headings
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 101 | within the main theory body or local theory targets. The | 
| 28747 | 102 |   corresponding {\LaTeX} macros are @{verbatim "\\isamarkupchapter"},
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 103 |   @{verbatim "\\isamarkupsection"}, @{verbatim
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 104 | "\\isamarkupsubsection"} etc. | 
| 28747 | 105 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 106 |   \item @{command sect}, @{command subsect}, and @{command subsubsect}
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 107 |   mark section headings within proofs.  The corresponding {\LaTeX}
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 108 |   macros are @{verbatim "\\isamarkupsect"}, @{verbatim
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 109 | "\\isamarkupsubsect"} etc. | 
| 27043 | 110 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 111 |   \item @{command text} and @{command txt} specify paragraphs of plain
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 112 |   text.  This corresponds to a {\LaTeX} environment @{verbatim
 | 
| 28747 | 113 |   "\\begin{isamarkuptext}"} @{text "\<dots>"} @{verbatim
 | 
| 114 |   "\\end{isamarkuptext}"} etc.
 | |
| 27043 | 115 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 116 |   \item @{command text_raw} and @{command txt_raw} insert {\LaTeX}
 | 
| 28747 | 117 | source into the output, without additional markup. Thus the full | 
| 118 | range of document manipulations becomes available, at the risk of | |
| 119 | messing up document output. | |
| 27043 | 120 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 121 |   \end{description}
 | 
| 27043 | 122 | |
| 28747 | 123 |   Except for @{command "text_raw"} and @{command "txt_raw"}, the text
 | 
| 124 | passed to any of the above markup commands may refer to formal | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 125 |   entities via \emph{document antiquotations}, see also
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 126 |   \secref{sec:antiq}.  These are interpreted in the present theory or
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 127 |   proof context, or the named @{text "target"}.
 | 
| 27043 | 128 | |
| 129 | \medskip The proof markup commands closely resemble those for theory | |
| 130 | specifications, but have a different formal status and produce | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 131 |   different {\LaTeX} macros.  The default definitions coincide for
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 132 |   analogous commands such as @{command section} and @{command sect}.
 | 
| 27043 | 133 | *} | 
| 134 | ||
| 135 | ||
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 136 | section {* Document Antiquotations \label{sec:antiq} *}
 | 
| 27043 | 137 | |
| 138 | text {*
 | |
| 139 |   \begin{matharray}{rcl}
 | |
| 28761 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 140 |     @{antiquotation_def "theory"} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 141 |     @{antiquotation_def "thm"} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 142 |     @{antiquotation_def "lemma"} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 143 |     @{antiquotation_def "prop"} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 144 |     @{antiquotation_def "term"} & : & @{text antiquotation} \\
 | 
| 32898 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 145 |     @{antiquotation_def term_type} & : & @{text antiquotation} \\
 | 
| 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 146 |     @{antiquotation_def typeof} & : & @{text antiquotation} \\
 | 
| 28761 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 147 |     @{antiquotation_def const} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 148 |     @{antiquotation_def abbrev} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 149 |     @{antiquotation_def typ} & : & @{text antiquotation} \\
 | 
| 39305 
d4fa19eb0822
'class' and 'type' are now antiquoations by default
 haftmann parents: 
32898diff
changeset | 150 |     @{antiquotation_def type} & : & @{text antiquotation} \\
 | 
| 
d4fa19eb0822
'class' and 'type' are now antiquoations by default
 haftmann parents: 
32898diff
changeset | 151 |     @{antiquotation_def class} & : & @{text antiquotation} \\
 | 
| 28761 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 152 |     @{antiquotation_def "text"} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 153 |     @{antiquotation_def goals} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 154 |     @{antiquotation_def subgoals} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 155 |     @{antiquotation_def prf} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 156 |     @{antiquotation_def full_prf} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 157 |     @{antiquotation_def ML} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 158 |     @{antiquotation_def ML_type} & : & @{text antiquotation} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 159 |     @{antiquotation_def ML_struct} & : & @{text antiquotation} \\
 | 
| 40801 | 160 |     @{antiquotation_def "file"} & : & @{text antiquotation} \\
 | 
| 27043 | 161 |   \end{matharray}
 | 
| 162 | ||
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 163 | The overall content of an Isabelle/Isar theory may alternate between | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 164 | formal and informal text. The main body consists of formal | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 165 | specification and proof commands, interspersed with markup commands | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 166 |   (\secref{sec:markup}) or document comments (\secref{sec:comments}).
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 167 | The argument of markup commands quotes informal text to be printed | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 168 | in the resulting document, but may again refer to formal entities | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 169 |   via \emph{document antiquotations}.
 | 
| 27043 | 170 | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 171 |   For example, embedding of ``@{text [source=false] "@{term [show_types] \"f x = a + x\"}"}''
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 172 | within a text block makes | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 173 |   \isa{{\isacharparenleft}f{\isasymColon}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a{\isacharparenright}\ {\isacharparenleft}x{\isasymColon}{\isacharprime}a{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}a{\isasymColon}{\isacharprime}a{\isacharparenright}\ {\isacharplus}\ x} appear in the final {\LaTeX} document.
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 174 | |
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 175 | Antiquotations usually spare the author tedious typing of logical | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 176 | entities in full detail. Even more importantly, some degree of | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 177 | consistency-checking between the main body of formal text and its | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 178 | informal explanation is achieved, since terms and types appearing in | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 179 | antiquotations are checked within the current theory or proof | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 180 | context. | 
| 27043 | 181 | |
| 43618 | 182 | %% FIXME less monolithic presentation, move to individual sections!? | 
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 183 |   @{rail "
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 184 |     '@{' antiquotation '}'
 | 
| 27043 | 185 | ; | 
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 186 |     @{syntax_def antiquotation}:
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 187 |       @@{antiquotation theory} options @{syntax name} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 188 |       @@{antiquotation thm} options styles @{syntax thmrefs} |
 | 
| 42617 | 189 |       @@{antiquotation lemma} options @{syntax prop} @'by' @{syntax method} @{syntax method}? |
 | 
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 190 |       @@{antiquotation prop} options styles @{syntax prop} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 191 |       @@{antiquotation term} options styles @{syntax term} |
 | 
| 43618 | 192 |       @@{antiquotation (HOL) value} options styles @{syntax term} |
 | 
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 193 |       @@{antiquotation term_type} options styles @{syntax term} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 194 |       @@{antiquotation typeof} options styles @{syntax term} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 195 |       @@{antiquotation const} options @{syntax term} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 196 |       @@{antiquotation abbrev} options @{syntax term} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 197 |       @@{antiquotation typ} options @{syntax type} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 198 |       @@{antiquotation type} options @{syntax name} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 199 |       @@{antiquotation class} options @{syntax name} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 200 |       @@{antiquotation text} options @{syntax name} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 201 |       @@{antiquotation goals} options |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 202 |       @@{antiquotation subgoals} options |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 203 |       @@{antiquotation prf} options @{syntax thmrefs} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 204 |       @@{antiquotation full_prf} options @{syntax thmrefs} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 205 |       @@{antiquotation ML} options @{syntax name} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 206 |       @@{antiquotation ML_type} options @{syntax name} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 207 |       @@{antiquotation ML_struct} options @{syntax name} |
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 208 |       @@{antiquotation \"file\"} options @{syntax name}
 | 
| 27043 | 209 | ; | 
| 210 | options: '[' (option * ',') ']' | |
| 211 | ; | |
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 212 |     option: @{syntax name} | @{syntax name} '=' @{syntax name}
 | 
| 27043 | 213 | ; | 
| 32892 | 214 |     styles: '(' (style + ',') ')'
 | 
| 32891 | 215 | ; | 
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 216 |     style: (@{syntax name} +)
 | 
| 42617 | 217 | "} | 
| 27043 | 218 | |
| 219 |   Note that the syntax of antiquotations may \emph{not} include source
 | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 220 |   comments @{verbatim "(*"}~@{text "\<dots>"}~@{verbatim "*)"} nor verbatim
 | 
| 27043 | 221 |   text @{verbatim "{"}@{verbatim "*"}~@{text "\<dots>"}~@{verbatim
 | 
| 222 |   "*"}@{verbatim "}"}.
 | |
| 223 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 224 |   \begin{description}
 | 
| 27043 | 225 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 226 |   \item @{text "@{theory A}"} prints the name @{text "A"}, which is
 | 
| 27043 | 227 | guaranteed to refer to a valid ancestor theory in the current | 
| 228 | context. | |
| 229 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 230 |   \item @{text "@{thm a\<^sub>1 \<dots> a\<^sub>n}"} prints theorems @{text "a\<^sub>1 \<dots> a\<^sub>n"}.
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 231 | Full fact expressions are allowed here, including attributes | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 232 |   (\secref{sec:syn-att}).
 | 
| 27043 | 233 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 234 |   \item @{text "@{prop \<phi>}"} prints a well-typed proposition @{text
 | 
| 27043 | 235 | "\<phi>"}. | 
| 236 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 237 |   \item @{text "@{lemma \<phi> by m}"} proves a well-typed proposition
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 238 |   @{text "\<phi>"} by method @{text m} and prints the original @{text "\<phi>"}.
 | 
| 27453 | 239 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 240 |   \item @{text "@{term t}"} prints a well-typed term @{text "t"}.
 | 
| 43613 
7afbaf5a406b
adding a minimalistic documentation of the value antiquotation in the Isar reference manual
 bulwahn parents: 
42936diff
changeset | 241 | |
| 43618 | 242 |   \item @{text "@{value t}"} evaluates a term @{text "t"} and prints
 | 
| 243 |   its result, see also @{command_ref (HOL) value}.
 | |
| 27043 | 244 | |
| 32898 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 245 |   \item @{text "@{term_type t}"} prints a well-typed term @{text "t"}
 | 
| 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 246 | annotated with its type. | 
| 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 247 | |
| 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 248 |   \item @{text "@{typeof t}"} prints the type of a well-typed term
 | 
| 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 249 |   @{text "t"}.
 | 
| 
e871d897969c
term styles also cover antiquotations term_type and typeof
 haftmann parents: 
32892diff
changeset | 250 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 251 |   \item @{text "@{const c}"} prints a logical or syntactic constant
 | 
| 27043 | 252 |   @{text "c"}.
 | 
| 253 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 254 |   \item @{text "@{abbrev c x\<^sub>1 \<dots> x\<^sub>n}"} prints a constant abbreviation
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 255 |   @{text "c x\<^sub>1 \<dots> x\<^sub>n \<equiv> rhs"} as defined in the current context.
 | 
| 39305 
d4fa19eb0822
'class' and 'type' are now antiquoations by default
 haftmann parents: 
32898diff
changeset | 256 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 257 |   \item @{text "@{typ \<tau>}"} prints a well-formed type @{text "\<tau>"}.
 | 
| 39305 
d4fa19eb0822
'class' and 'type' are now antiquoations by default
 haftmann parents: 
32898diff
changeset | 258 | |
| 39689 
78b185bf7660
clarified @{type} antiquotation: abbreviations and nonterminals count as "syntactic", disallow TFrees;
 wenzelm parents: 
39305diff
changeset | 259 |   \item @{text "@{type \<kappa>}"} prints a (logical or syntactic) type
 | 
| 
78b185bf7660
clarified @{type} antiquotation: abbreviations and nonterminals count as "syntactic", disallow TFrees;
 wenzelm parents: 
39305diff
changeset | 260 |     constructor @{text "\<kappa>"}.
 | 
| 39305 
d4fa19eb0822
'class' and 'type' are now antiquoations by default
 haftmann parents: 
32898diff
changeset | 261 | |
| 
d4fa19eb0822
'class' and 'type' are now antiquoations by default
 haftmann parents: 
32898diff
changeset | 262 |   \item @{text "@{class c}"} prints a class @{text c}.
 | 
| 
d4fa19eb0822
'class' and 'type' are now antiquoations by default
 haftmann parents: 
32898diff
changeset | 263 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 264 |   \item @{text "@{text s}"} prints uninterpreted source text @{text
 | 
| 27043 | 265 | s}. This is particularly useful to print portions of text according | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 266 | to the Isabelle document style, without demanding well-formedness, | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 267 | e.g.\ small pieces of terms that should not be parsed or | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 268 | type-checked yet. | 
| 27043 | 269 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 270 |   \item @{text "@{goals}"} prints the current \emph{dynamic} goal
 | 
| 27043 | 271 | state. This is mainly for support of tactic-emulation scripts | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 272 | within Isar. Presentation of goal states does not conform to the | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 273 | idea of human-readable proof documents! | 
| 27043 | 274 | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 275 | When explaining proofs in detail it is usually better to spell out | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 276 | the reasoning via proper Isar proof commands, instead of peeking at | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 277 | the internal machine configuration. | 
| 27043 | 278 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 279 |   \item @{text "@{subgoals}"} is similar to @{text "@{goals}"}, but
 | 
| 27043 | 280 | does not print the main goal. | 
| 281 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 282 |   \item @{text "@{prf a\<^sub>1 \<dots> a\<^sub>n}"} prints the (compact) proof terms
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 283 |   corresponding to the theorems @{text "a\<^sub>1 \<dots> a\<^sub>n"}. Note that this
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 284 | requires proof terms to be switched on for the current logic | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 285 | session. | 
| 27043 | 286 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 287 |   \item @{text "@{full_prf a\<^sub>1 \<dots> a\<^sub>n}"} is like @{text "@{prf a\<^sub>1 \<dots>
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 288 | a\<^sub>n}"}, but prints the full proof terms, i.e.\ also displays | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 289 | information omitted in the compact proof term, which is denoted by | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 290 |   ``@{text _}'' placeholders there.
 | 
| 27043 | 291 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 292 |   \item @{text "@{ML s}"}, @{text "@{ML_type s}"}, and @{text
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 293 |   "@{ML_struct s}"} check text @{text s} as ML value, type, and
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 294 | structure, respectively. The source is printed verbatim. | 
| 27043 | 295 | |
| 40801 | 296 |   \item @{text "@{file path}"} checks that @{text "path"} refers to a
 | 
| 297 | file (or directory) and prints it verbatim. | |
| 298 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 299 |   \end{description}
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 300 | *} | 
| 27043 | 301 | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 302 | |
| 42936 | 303 | subsection {* Styled antiquotations *}
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 304 | |
| 32891 | 305 | text {* The antiquotations @{text thm}, @{text prop} and @{text
 | 
| 306 |   term} admit an extra \emph{style} specification to modify the
 | |
| 307 | printed result. A style is specified by a name with a possibly | |
| 308 | empty number of arguments; multiple styles can be sequenced with | |
| 309 | commas. The following standard styles are available: | |
| 27043 | 310 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 311 |   \begin{description}
 | 
| 27043 | 312 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 313 |   \item @{text lhs} extracts the first argument of any application
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 314 | form with at least two arguments --- typically meta-level or | 
| 27043 | 315 | object-level equality, or any other binary relation. | 
| 316 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 317 |   \item @{text rhs} is like @{text lhs}, but extracts the second
 | 
| 27043 | 318 | argument. | 
| 319 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 320 |   \item @{text "concl"} extracts the conclusion @{text C} from a rule
 | 
| 27043 | 321 |   in Horn-clause normal form @{text "A\<^sub>1 \<Longrightarrow> \<dots> A\<^sub>n \<Longrightarrow> C"}.
 | 
| 322 | ||
| 32891 | 323 |   \item @{text "prem"} @{text n} extract premise number
 | 
| 324 |   @{text "n"} from from a rule in Horn-clause
 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 325 |   normal form @{text "A\<^sub>1 \<Longrightarrow> \<dots> A\<^sub>n \<Longrightarrow> C"}
 | 
| 27043 | 326 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 327 |   \end{description}
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 328 | *} | 
| 27043 | 329 | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 330 | |
| 42936 | 331 | subsection {* General options *}
 | 
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 332 | |
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 333 | text {* The following options are available to tune the printed output
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 334 | of antiquotations. Note that many of these coincide with global ML | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 335 | flags of the same names. | 
| 27043 | 336 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 337 |   \begin{description}
 | 
| 27043 | 338 | |
| 30397 | 339 |   \item @{antiquotation_option_def show_types}~@{text "= bool"} and
 | 
| 340 |   @{antiquotation_option_def show_sorts}~@{text "= bool"} control
 | |
| 341 | printing of explicit type and sort constraints. | |
| 27043 | 342 | |
| 30397 | 343 |   \item @{antiquotation_option_def show_structs}~@{text "= bool"}
 | 
| 344 | controls printing of implicit structures. | |
| 27043 | 345 | |
| 40879 
ca132ef44944
configuration option "show_abbrevs" supersedes print mode "no_abbrevs", with inverted meaning;
 wenzelm parents: 
40801diff
changeset | 346 |   \item @{antiquotation_option_def show_abbrevs}~@{text "= bool"}
 | 
| 
ca132ef44944
configuration option "show_abbrevs" supersedes print mode "no_abbrevs", with inverted meaning;
 wenzelm parents: 
40801diff
changeset | 347 | controls folding of abbreviations. | 
| 
ca132ef44944
configuration option "show_abbrevs" supersedes print mode "no_abbrevs", with inverted meaning;
 wenzelm parents: 
40801diff
changeset | 348 | |
| 42669 
04dfffda5671
more conventional naming scheme: names_long, names_short, names_unique;
 wenzelm parents: 
42658diff
changeset | 349 |   \item @{antiquotation_option_def names_long}~@{text "= bool"} forces
 | 
| 30397 | 350 | names of types and constants etc.\ to be printed in their fully | 
| 351 | qualified internal form. | |
| 27043 | 352 | |
| 42669 
04dfffda5671
more conventional naming scheme: names_long, names_short, names_unique;
 wenzelm parents: 
42658diff
changeset | 353 |   \item @{antiquotation_option_def names_short}~@{text "= bool"}
 | 
| 30397 | 354 | forces names of types and constants etc.\ to be printed unqualified. | 
| 355 | Note that internalizing the output again in the current context may | |
| 356 | well yield a different result. | |
| 27043 | 357 | |
| 42669 
04dfffda5671
more conventional naming scheme: names_long, names_short, names_unique;
 wenzelm parents: 
42658diff
changeset | 358 |   \item @{antiquotation_option_def names_unique}~@{text "= bool"}
 | 
| 30397 | 359 | determines whether the printed version of qualified names should be | 
| 360 | made sufficiently long to avoid overlap with names declared further | |
| 361 |   back.  Set to @{text false} for more concise output.
 | |
| 27043 | 362 | |
| 30397 | 363 |   \item @{antiquotation_option_def eta_contract}~@{text "= bool"}
 | 
| 364 |   prints terms in @{text \<eta>}-contracted form.
 | |
| 27043 | 365 | |
| 30397 | 366 |   \item @{antiquotation_option_def display}~@{text "= bool"} indicates
 | 
| 367 | if the text is to be output as multi-line ``display material'', | |
| 368 | rather than a small piece of text without line breaks (which is the | |
| 369 | default). | |
| 27043 | 370 | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 371 | In this mode the embedded entities are printed in the same style as | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 372 | the main theory text. | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 373 | |
| 30397 | 374 |   \item @{antiquotation_option_def break}~@{text "= bool"} controls
 | 
| 375 | line breaks in non-display material. | |
| 27043 | 376 | |
| 30397 | 377 |   \item @{antiquotation_option_def quotes}~@{text "= bool"} indicates
 | 
| 378 | if the output should be enclosed in double quotes. | |
| 27043 | 379 | |
| 30397 | 380 |   \item @{antiquotation_option_def mode}~@{text "= name"} adds @{text
 | 
| 381 | name} to the print mode to be used for presentation. Note that the | |
| 382 |   standard setup for {\LaTeX} output is already present by default,
 | |
| 383 |   including the modes @{text latex} and @{text xsymbols}.
 | |
| 27043 | 384 | |
| 30397 | 385 |   \item @{antiquotation_option_def margin}~@{text "= nat"} and
 | 
| 386 |   @{antiquotation_option_def indent}~@{text "= nat"} change the margin
 | |
| 387 | or indentation for pretty printing of display material. | |
| 27043 | 388 | |
| 30397 | 389 |   \item @{antiquotation_option_def goals_limit}~@{text "= nat"}
 | 
| 390 | determines the maximum number of goals to be printed (for goal-based | |
| 391 | antiquotation). | |
| 27043 | 392 | |
| 30397 | 393 |   \item @{antiquotation_option_def source}~@{text "= bool"} prints the
 | 
| 394 | original source text of the antiquotation arguments, rather than its | |
| 395 | internal representation. Note that formal checking of | |
| 396 |   @{antiquotation "thm"}, @{antiquotation "term"}, etc. is still
 | |
| 397 |   enabled; use the @{antiquotation "text"} antiquotation for unchecked
 | |
| 398 | output. | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 399 | |
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 400 |   Regular @{text "term"} and @{text "typ"} antiquotations with @{text
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 401 | "source = false"} involve a full round-trip from the original source | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 402 | to an internalized logical entity back to a source form, according | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 403 | to the syntax of the current context. Thus the printed output is | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 404 | not under direct control of the author, it may even fluctuate a bit | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 405 | as the underlying theory is changed later on. | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 406 | |
| 42626 | 407 |   In contrast, @{antiquotation_option source}~@{text "= true"}
 | 
| 30397 | 408 | admits direct printing of the given source text, with the desirable | 
| 409 | well-formedness check in the background, but without modification of | |
| 410 | the printed text. | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 411 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 412 |   \end{description}
 | 
| 27043 | 413 | |
| 414 |   For boolean flags, ``@{text "name = true"}'' may be abbreviated as
 | |
| 415 |   ``@{text name}''.  All of the above flags are disabled by default,
 | |
| 28749 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 416 |   unless changed from ML, say in the @{verbatim "ROOT.ML"} of the
 | 
| 
99f6da3bbbf7
renamed "formal comments" to "document comments";
 wenzelm parents: 
28747diff
changeset | 417 | logic session. | 
| 27043 | 418 | *} | 
| 419 | ||
| 420 | ||
| 28750 | 421 | section {* Markup via command tags \label{sec:tags} *}
 | 
| 27043 | 422 | |
| 28750 | 423 | text {* Each Isabelle/Isar command may be decorated by additional
 | 
| 424 | presentation tags, to indicate some modification in the way it is | |
| 425 | printed in the document. | |
| 27043 | 426 | |
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 427 |   @{rail "
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 428 |     @{syntax_def tags}: ( tag * )
 | 
| 27043 | 429 | ; | 
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 430 |     tag: '%' (@{syntax ident} | @{syntax string})
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 431 | "} | 
| 27043 | 432 | |
| 28750 | 433 | Some tags are pre-declared for certain classes of commands, serving | 
| 434 | as default markup if no tags are given in the text: | |
| 27043 | 435 | |
| 28750 | 436 | \medskip | 
| 27043 | 437 |   \begin{tabular}{ll}
 | 
| 438 |     @{text "theory"} & theory begin/end \\
 | |
| 439 |     @{text "proof"} & all proof commands \\
 | |
| 440 |     @{text "ML"} & all commands involving ML code \\
 | |
| 441 |   \end{tabular}
 | |
| 442 | ||
| 28750 | 443 | \medskip The Isabelle document preparation system | 
| 444 |   \cite{isabelle-sys} allows tagged command regions to be presented
 | |
| 27043 | 445 | specifically, e.g.\ to fold proof texts, or drop parts of the text | 
| 446 | completely. | |
| 447 | ||
| 28750 | 448 |   For example ``@{command "by"}~@{text "%invisible auto"}'' causes
 | 
| 449 |   that piece of proof to be treated as @{text invisible} instead of
 | |
| 450 |   @{text "proof"} (the default), which may be shown or hidden
 | |
| 27043 | 451 |   depending on the document setup.  In contrast, ``@{command
 | 
| 28750 | 452 |   "by"}~@{text "%visible auto"}'' forces this text to be shown
 | 
| 27043 | 453 | invariably. | 
| 454 | ||
| 455 | Explicit tag specifications within a proof apply to all subsequent | |
| 456 |   commands of the same level of nesting.  For example, ``@{command
 | |
| 28750 | 457 |   "proof"}~@{text "%visible \<dots>"}~@{command "qed"}'' forces the whole
 | 
| 458 |   sub-proof to be typeset as @{text visible} (unless some of its parts
 | |
| 459 | are tagged differently). | |
| 460 | ||
| 461 | \medskip Command tags merely produce certain markup environments for | |
| 462 |   type-setting.  The meaning of these is determined by {\LaTeX}
 | |
| 40800 
330eb65c9469
Parse.liberal_name for document antiquotations and attributes;
 wenzelm parents: 
40255diff
changeset | 463 |   macros, as defined in @{file "~~/lib/texinputs/isabelle.sty"} or
 | 
| 28750 | 464 | by the document author. The Isabelle document preparation tools | 
| 465 | also provide some high-level options to specify the meaning of | |
| 466 | arbitrary tags to ``keep'', ``drop'', or ``fold'' the corresponding | |
| 467 | parts of the text. Logic sessions may also specify ``document | |
| 468 | versions'', where given tags are interpreted in some particular way. | |
| 469 |   Again see \cite{isabelle-sys} for further details.
 | |
| 27043 | 470 | *} | 
| 471 | ||
| 472 | ||
| 42658 | 473 | section {* Railroad diagrams *}
 | 
| 474 | ||
| 475 | text {*
 | |
| 476 |   \begin{matharray}{rcl}
 | |
| 477 |     @{antiquotation_def "rail"} & : & @{text antiquotation} \\
 | |
| 478 |   \end{matharray}
 | |
| 479 | ||
| 480 |   @{rail "'rail' string"}
 | |
| 481 | ||
| 482 |   The @{antiquotation rail} antiquotation allows to include syntax
 | |
| 483 |   diagrams into Isabelle documents.  {\LaTeX} requires the style file
 | |
| 484 |   @{"file" "~~/lib/texinputs/pdfsetup.sty"}, which can be used via
 | |
| 485 |   @{verbatim "\\usepackage{pdfsetup}"} in @{verbatim "root.tex"}, for
 | |
| 486 | example. | |
| 487 | ||
| 488 |   The rail specification language is quoted here as Isabelle @{syntax
 | |
| 489 | string}; it has its own grammar given below. | |
| 490 | ||
| 491 |   @{rail "
 | |
| 492 | rule? + ';' | |
| 493 | ; | |
| 494 |   rule: ((identifier | @{syntax antiquotation}) ':')? body
 | |
| 495 | ; | |
| 496 | body: concatenation + '|' | |
| 497 | ; | |
| 498 |   concatenation: ((atom '?'?) +) (('*' | '+') atom?)?
 | |
| 499 | ; | |
| 500 |   atom: '(' body? ')' | identifier |
 | |
| 501 |     '@'? (string | @{syntax antiquotation}) |
 | |
| 502 | '\\\\\\\\' | |
| 503 | "} | |
| 504 | ||
| 505 |   The lexical syntax of @{text "identifier"} coincides with that of
 | |
| 506 |   @{syntax ident} in regular Isabelle syntax, but @{text string} uses
 | |
| 507 |   single quotes instead of double quotes of the standard @{syntax
 | |
| 508 | string} category, to avoid extra escapes. | |
| 509 | ||
| 510 |   Each @{text rule} defines a formal language (with optional name),
 | |
| 511 | using a notation that is similar to EBNF or regular expressions with | |
| 512 | recursion. The meaning and visual appearance of these rail language | |
| 513 | elements is illustrated by the following representative examples. | |
| 514 | ||
| 515 |   \begin{itemize}
 | |
| 516 | ||
| 517 |   \item Empty @{verbatim "()"}
 | |
| 518 | ||
| 519 |   @{rail "()"}
 | |
| 520 | ||
| 521 |   \item Nonterminal @{verbatim "A"}
 | |
| 522 | ||
| 523 |   @{rail "A"}
 | |
| 524 | ||
| 525 | \item Nonterminal via Isabelle antiquotation | |
| 526 |   @{verbatim "@{syntax method}"}
 | |
| 527 | ||
| 528 |   @{rail "@{syntax method}"}
 | |
| 529 | ||
| 530 |   \item Terminal @{verbatim "'xyz'"}
 | |
| 531 | ||
| 532 |   @{rail "'xyz'"}
 | |
| 533 | ||
| 534 |   \item Terminal in keyword style @{verbatim "@'xyz'"}
 | |
| 535 | ||
| 536 |   @{rail "@'xyz'"}
 | |
| 537 | ||
| 538 | \item Terminal via Isabelle antiquotation | |
| 539 |   @{verbatim "@@{method rule}"}
 | |
| 540 | ||
| 541 |   @{rail "@@{method rule}"}
 | |
| 542 | ||
| 543 |   \item Concatenation @{verbatim "A B C"}
 | |
| 544 | ||
| 545 |   @{rail "A B C"}
 | |
| 546 | ||
| 547 |   \item Linebreak @{verbatim "\\\\"} inside
 | |
| 548 |   concatenation\footnote{Strictly speaking, this is only a single
 | |
| 549 |   backslash, but the enclosing @{syntax string} syntax requires a
 | |
| 550 |   second one for escaping.} @{verbatim "A B C \\\\ D E F"}
 | |
| 551 | ||
| 552 |   @{rail "A B C \\ D E F"}
 | |
| 553 | ||
| 554 |   \item Variants @{verbatim "A | B | C"}
 | |
| 555 | ||
| 556 |   @{rail "A | B | C"}
 | |
| 557 | ||
| 558 |   \item Option @{verbatim "A ?"}
 | |
| 559 | ||
| 560 |   @{rail "A ?"}
 | |
| 561 | ||
| 562 |   \item Repetition @{verbatim "A *"}
 | |
| 563 | ||
| 564 |   @{rail "A *"}
 | |
| 565 | ||
| 566 |   \item Repetition with separator @{verbatim "A * sep"}
 | |
| 567 | ||
| 568 |   @{rail "A * sep"}
 | |
| 569 | ||
| 570 |   \item Strict repetition @{verbatim "A +"}
 | |
| 571 | ||
| 572 |   @{rail "A +"}
 | |
| 573 | ||
| 574 |   \item Strict repetition with separator @{verbatim "A + sep"}
 | |
| 575 | ||
| 576 |   @{rail "A + sep"}
 | |
| 577 | ||
| 578 |   \end{itemize}
 | |
| 579 | *} | |
| 580 | ||
| 581 | ||
| 27043 | 582 | section {* Draft presentation *}
 | 
| 583 | ||
| 584 | text {*
 | |
| 585 |   \begin{matharray}{rcl}
 | |
| 28761 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 586 |     @{command_def "display_drafts"}@{text "\<^sup>*"} & : & @{text "any \<rightarrow>"} \\
 | 
| 
9ec4482c9201
updated/refined types of Isar language elements, removed special LaTeX macros;
 wenzelm parents: 
28760diff
changeset | 587 |     @{command_def "print_drafts"}@{text "\<^sup>*"} & : & @{text "any \<rightarrow>"} \\
 | 
| 27043 | 588 |   \end{matharray}
 | 
| 589 | ||
| 42596 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 590 |   @{rail "
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 591 |     (@@{command display_drafts} | @@{command print_drafts}) (@{syntax name} +)
 | 
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 592 | |
| 
6c621a9d612a
modernized rail diagrams using @{rail} antiquotation;
 wenzelm parents: 
40879diff
changeset | 593 | "} | 
| 27043 | 594 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 595 |   \begin{description}
 | 
| 27043 | 596 | |
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 597 |   \item @{command "display_drafts"}~@{text paths} and @{command
 | 
| 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 598 |   "print_drafts"}~@{text paths} perform simple output of a given list
 | 
| 27043 | 599 | of raw source files. Only those symbols that do not require | 
| 600 |   additional {\LaTeX} packages are displayed properly, everything else
 | |
| 601 | is left verbatim. | |
| 602 | ||
| 28760 
cbc435f7b16b
unified use of declaration environment with IsarImplementation;
 wenzelm parents: 
28750diff
changeset | 603 |   \end{description}
 | 
| 27043 | 604 | *} | 
| 605 | ||
| 606 | end |