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