--- a/doc-src/IsarRef/Thy/Document_Preparation.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/Document_Preparation.thy Mon May 02 01:20:28 2011 +0200
@@ -81,12 +81,13 @@
markup commands, but have a different status within Isabelle/Isar
syntax.
- \begin{rail}
- ('chapter' | 'section' | 'subsection' | 'subsubsection' | 'text') target? text
+ @{rail "
+ (@@{command chapter} | @@{command section} | @@{command subsection} |
+ @@{command subsubsection} | @@{command text}) @{syntax target}? @{syntax text}
;
- ('header' | 'text_raw' | 'sect' | 'subsect' | 'subsubsect' | 'txt' | 'txt_raw') text
- ;
- \end{rail}
+ (@@{command header} | @@{command text_raw} | @@{command sect} | @@{command subsect} |
+ @@{command subsubsect} | @@{command txt} | @@{command txt_raw}) @{syntax text}
+ "}
\begin{description}
@@ -178,42 +179,40 @@
antiquotations are checked within the current theory or proof
context.
- \begin{rail}
- atsign lbrace antiquotation rbrace
+ @{rail "
+ '@{' antiquotation '}'
;
-
- antiquotation:
- 'theory' options name |
- 'thm' options styles thmrefs |
- 'lemma' options prop 'by' method |
- 'prop' options styles prop |
- 'term' options styles term |
- 'term_type' options styles term |
- 'typeof' options styles term |
- 'const' options term |
- 'abbrev' options term |
- 'typ' options type |
- 'type' options name |
- 'class' options name |
- 'text' options name |
- 'goals' options |
- 'subgoals' options |
- 'prf' options thmrefs |
- 'full_prf' options thmrefs |
- 'ML' options name |
- 'ML_type' options name |
- 'ML_struct' options name |
- 'file' options name
+ @{syntax_def antiquotation}:
+ @@{antiquotation theory} options @{syntax name} |
+ @@{antiquotation thm} options styles @{syntax thmrefs} |
+ @@{antiquotation lemma} options @{syntax prop} @'by' @{syntax method} |
+ @@{antiquotation prop} options styles @{syntax prop} |
+ @@{antiquotation term} options styles @{syntax term} |
+ @@{antiquotation term_type} options styles @{syntax term} |
+ @@{antiquotation typeof} options styles @{syntax term} |
+ @@{antiquotation const} options @{syntax term} |
+ @@{antiquotation abbrev} options @{syntax term} |
+ @@{antiquotation typ} options @{syntax type} |
+ @@{antiquotation type} options @{syntax name} |
+ @@{antiquotation class} options @{syntax name} |
+ @@{antiquotation text} options @{syntax name} |
+ @@{antiquotation goals} options |
+ @@{antiquotation subgoals} options |
+ @@{antiquotation prf} options @{syntax thmrefs} |
+ @@{antiquotation full_prf} options @{syntax thmrefs} |
+ @@{antiquotation ML} options @{syntax name} |
+ @@{antiquotation ML_type} options @{syntax name} |
+ @@{antiquotation ML_struct} options @{syntax name} |
+ @@{antiquotation \"file\"} options @{syntax name}
;
options: '[' (option * ',') ']'
;
- option: name | name '=' name
+ option: @{syntax name} | @{syntax name} '=' @{syntax name}
;
styles: '(' (style + ',') ')'
;
- style: (name +)
- ;
- \end{rail}
+ style: (@{syntax name} +)
+ "} %% FIXME check lemma
Note that the syntax of antiquotations may \emph{not} include source
comments @{verbatim "(*"}~@{text "\<dots>"}~@{verbatim "*)"} nor verbatim
@@ -420,12 +419,11 @@
presentation tags, to indicate some modification in the way it is
printed in the document.
- \indexouternonterm{tags}
- \begin{rail}
- tags: ( tag * )
+ @{rail "
+ @{syntax_def tags}: ( tag * )
;
- tag: '\%' (ident | string)
- \end{rail}
+ tag: '%' (@{syntax ident} | @{syntax string})
+ "}
Some tags are pre-declared for certain classes of commands, serving
as default markup if no tags are given in the text:
@@ -475,10 +473,10 @@
@{command_def "print_drafts"}@{text "\<^sup>*"} & : & @{text "any \<rightarrow>"} \\
\end{matharray}
- \begin{rail}
- ('display_drafts' | 'print_drafts') (name +)
- ;
- \end{rail}
+ @{rail "
+ (@@{command display_drafts} | @@{command print_drafts}) (@{syntax name} +)
+
+ "}
\begin{description}
--- a/doc-src/IsarRef/Thy/Generic.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/Generic.thy Mon May 02 01:20:28 2011 +0200
@@ -25,9 +25,9 @@
@{command_def "print_configs"} & : & @{text "context \<rightarrow>"} \\
\end{matharray}
- \begin{rail}
- name ('=' ('true' | 'false' | int | float | name))?
- \end{rail}
+ @{rail "
+ @{syntax name} ('=' ('true' | 'false' | @{syntax int} | @{syntax float} | @{syntax name}))?
+ "}
\begin{description}
@@ -59,12 +59,12 @@
@{method_def fail} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- ('fold' | 'unfold' | 'insert') thmrefs
+ @{rail "
+ (@@{method fold} | @@{method unfold} | @@{method insert}) @{syntax thmrefs}
;
- ('erule' | 'drule' | 'frule') ('('nat')')? thmrefs
- ;
- \end{rail}
+ (@@{method erule} | @@{method drule} | @@{method frule})
+ ('(' @{syntax nat} ')')? @{syntax thmrefs}
+ "}
\begin{description}
@@ -117,17 +117,17 @@
@{attribute_def no_vars}@{text "\<^sup>*"} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'tagged' name name
+ @{rail "
+ @@{attribute tagged} @{syntax name} @{syntax name}
;
- 'untagged' name
+ @@{attribute untagged} @{syntax name}
;
- ('THEN' | 'COMP') ('[' nat ']')? thmref
+ (@@{attribute THEN} | @@{attribute COMP}) ('[' @{syntax nat} ']')? @{syntax thmref}
;
- ('unfolded' | 'folded') thmrefs
+ (@@{attribute unfolded} | @@{attribute folded}) @{syntax thmrefs}
;
- 'rotated' ( int )?
- \end{rail}
+ @@{attribute rotated} @{syntax int}?
+ "}
\begin{description}
@@ -179,12 +179,11 @@
@{method_def split} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- 'subst' ('(' 'asm' ')')? ('(' (nat+) ')')? thmref
+ @{rail "
+ @@{method subst} ('(' 'asm' ')')? ('(' (@{syntax nat}+) ')')? @{syntax thmref}
;
- 'split' ('(' 'asm' ')')? thmrefs
- ;
- \end{rail}
+ @@{method split} ('(' 'asm' ')')? @{syntax thmrefs}
+ "}
These methods provide low-level facilities for equational reasoning
that are intended for specialized applications only. Normally,
@@ -282,22 +281,22 @@
@{method_def raw_tactic}@{text "\<^sup>*"} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- ( 'rule_tac' | 'erule_tac' | 'drule_tac' | 'frule_tac' | 'cut_tac' | 'thin_tac' ) goalspec?
- ( insts thmref | thmrefs )
- ;
- 'subgoal_tac' goalspec? (prop +)
+ @{rail "
+ (@@{method rule_tac} | @@{method erule_tac} | @@{method drule_tac} |
+ @@{method frule_tac} | @@{method cut_tac} | @@{method thin_tac}) @{syntax goalspec}?
+ ( insts @{syntax thmref} | @{syntax thmrefs} )
;
- 'rename_tac' goalspec? (name +)
+ @@{method subgoal_tac} @{syntax goalspec}? (@{syntax prop} +)
+ ;
+ @@{method rename_tac} @{syntax goalspec}? (@{syntax name} +)
;
- 'rotate_tac' goalspec? int?
+ @@{method rotate_tac} @{syntax goalspec}? @{syntax int}?
;
- ('tactic' | 'raw_tactic') text
+ (@@{method tactic} | @@{method raw_tactic}) @{syntax text}
;
- insts: ((name '=' term) + 'and') 'in'
- ;
- \end{rail}
+ insts: ((@{syntax name} '=' @{syntax term}) + @'and') @'in'
+ "} % FIXME check use of insts
\begin{description}
@@ -361,31 +360,29 @@
@{method_def simp_all} & : & @{text method} \\
\end{matharray}
- \indexouternonterm{simpmod}
- \begin{rail}
- ('simp' | 'simp_all') opt? (simpmod *)
+ @{rail "
+ (@@{method simp} | @@{method simp_all}) opt? (@{syntax simpmod} * )
;
opt: '(' ('no_asm' | 'no_asm_simp' | 'no_asm_use' | 'asm_lr' ) ')'
;
- simpmod: ('add' | 'del' | 'only' | 'cong' (() | 'add' | 'del') |
- 'split' (() | 'add' | 'del')) ':' thmrefs
- ;
- \end{rail}
+ @{syntax_def simpmod}: ('add' | 'del' | 'only' | 'cong' (() | 'add' | 'del') |
+ 'split' (() | 'add' | 'del')) ':' @{syntax thmrefs}
+ "}
\begin{description}
\item @{method simp} invokes the Simplifier, after declaring
additional rules according to the arguments given. Note that the
- \railtterm{only} modifier first removes all other rewrite rules,
+ @{text only} modifier first removes all other rewrite rules,
congruences, and looper tactics (including splits), and then behaves
- like \railtterm{add}.
+ like @{text add}.
- \medskip The \railtterm{cong} modifiers add or delete Simplifier
+ \medskip The @{text cong} modifiers add or delete Simplifier
congruence rules (see also \cite{isabelle-ref}), the default is to
add.
- \medskip The \railtterm{split} modifiers add or delete rules for the
+ \medskip The @{text split} modifiers add or delete rules for the
Splitter (see also \cite{isabelle-ref}), the default is to add.
This works only if the Simplifier method has been properly setup to
include the Splitter (all major object logics such HOL, HOLCF, FOL,
@@ -440,10 +437,9 @@
@{attribute_def split} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- ('simp' | 'cong' | 'split') (() | 'add' | 'del')
- ;
- \end{rail}
+ @{rail "
+ (@@{attribute simp} | @@{attribute cong} | @@{attribute split}) (() | 'add' | 'del')
+ "}
\begin{description}
@@ -469,13 +465,13 @@
simproc & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'simproc_setup' name '(' (term + '|') ')' '=' text \\ ('identifier' (nameref+))?
+ @{rail "
+ @@{command simproc_setup} @{syntax name} '(' (@{syntax term} + '|') ')' '='
+ @{syntax text} \\ (@'identifier' (@{syntax nameref}+))?
;
- 'simproc' (('add' ':')? | 'del' ':') (name+)
- ;
- \end{rail}
+ @@{attribute simproc} (('add' ':')? | 'del' ':') (@{syntax name}+)
+ "}
\begin{description}
@@ -514,13 +510,12 @@
@{attribute_def simplified} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'simplified' opt? thmrefs?
+ @{rail "
+ @@{attribute simplified} opt? @{syntax thmrefs}?
;
opt: '(' ('no_asm' | 'no_asm_simp' | 'no_asm_use') ')'
- ;
- \end{rail}
+ "}
\begin{description}
@@ -553,10 +548,9 @@
@{method_def elim} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- ('rule' | 'intro' | 'elim') thmrefs?
- ;
- \end{rail}
+ @{rail "
+ (@@{method rule} | @@{method intro} | @@{method elim}) @{syntax thmrefs}?
+ "}
\begin{description}
@@ -598,16 +592,16 @@
@{method_def clarify} & : & @{text method} \\
\end{matharray}
- \indexouternonterm{clamod}
- \begin{rail}
- 'blast' nat? (clamod *)
+ @{rail "
+ @@{method blast} @{syntax nat}? (@{syntax clamod} * )
;
- ('fast' | 'slow' | 'best' | 'safe' | 'clarify') (clamod *)
+ (@@{method fast} | @@{method slow} | @@{method best} | @@{method safe} | @@{method clarify})
+ (@{syntax clamod} * )
;
- clamod: (('intro' | 'elim' | 'dest') ('!' | () | '?') | 'del') ':' thmrefs
- ;
- \end{rail}
+ @{syntax_def clamod}:
+ (('intro' | 'elim' | 'dest') ('!' | () | '?') | 'del') ':' @{syntax thmrefs}
+ "}
\begin{description}
@@ -642,18 +636,18 @@
@{method_def bestsimp} & : & @{text method} \\
\end{matharray}
- \indexouternonterm{clasimpmod}
- \begin{rail}
- 'auto' (nat nat)? (clasimpmod *)
+ @{rail "
+ @@{method auto} (@{syntax nat} @{syntax nat})? (@{syntax clasimpmod} * )
;
- ('force' | 'clarsimp' | 'fastsimp' | 'slowsimp' | 'bestsimp') (clasimpmod *)
+ (@@{method force} | @@{method clarsimp} | @@{method fastsimp} | @@{method slowsimp} |
+ @@{method bestsimp}) (@{syntax clasimpmod} * )
;
- clasimpmod: ('simp' (() | 'add' | 'del' | 'only') |
+ @{syntax_def clasimpmod}: ('simp' (() | 'add' | 'del' | 'only') |
('cong' | 'split') (() | 'add' | 'del') |
'iff' (((() | 'add') '?'?) | 'del') |
- (('intro' | 'elim' | 'dest') ('!' | () | '?') | 'del')) ':' thmrefs
- \end{rail}
+ (('intro' | 'elim' | 'dest') ('!' | () | '?') | 'del')) ':' @{syntax thmrefs}
+ "}
\begin{description}
@@ -665,7 +659,7 @@
added as wrapper, see \cite{isabelle-ref} for more information. The
modifier arguments correspond to those given in
\secref{sec:simplifier} and \secref{sec:classical}. Just note that
- the ones related to the Simplifier are prefixed by \railtterm{simp}
+ the ones related to the Simplifier are prefixed by @{text simp}
here.
Facts provided by forward chaining are inserted into the goal before
@@ -687,14 +681,13 @@
@{attribute_def iff} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- ('intro' | 'elim' | 'dest') ('!' | () | '?') nat?
+ @{rail "
+ (@@{attribute intro} | @@{attribute elim} | @@{attribute dest}) ('!' | () | '?') @{syntax nat}?
;
- 'rule' 'del'
+ @@{attribute rule} 'del'
;
- 'iff' (((() | 'add') '?'?) | 'del')
- ;
- \end{rail}
+ @@{attribute iff} (((() | 'add') '?'?) | 'del')
+ "}
\begin{description}
@@ -779,14 +772,13 @@
Generic tools may refer to the information provided by object-logic
declarations internally.
- \begin{rail}
- 'judgment' constdecl
+ @{rail "
+ @@{command judgment} @{syntax constdecl}
;
- 'atomize' ('(' 'full' ')')?
+ @@{attribute atomize} ('(' 'full' ')')?
;
- 'rule_format' ('(' 'noasm' ')')?
- ;
- \end{rail}
+ @@{attribute rule_format} ('(' 'noasm' ')')?
+ "}
\begin{description}
--- a/doc-src/IsarRef/Thy/HOLCF_Specific.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/HOLCF_Specific.thy Mon May 02 01:20:28 2011 +0200
@@ -34,16 +34,17 @@
@{command_def (HOLCF) "domain"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- 'domain' parname? (dmspec + 'and')
+ @{rail "
+ @@{command (HOLCF) domain} @{syntax parname}? (dmspec + @'and')
;
- dmspec: typespec '=' (cons + '|')
+ dmspec: @{syntax typespec} '=' (cons + '|')
+ ;
+ cons: @{syntax name} (@{syntax type} * ) @{syntax mixfix}?
;
- cons: name (type *) mixfix?
- ;
- dtrules: 'distinct' thmrefs 'inject' thmrefs 'induction' thmrefs
- \end{rail}
+ dtrules: @'distinct' @{syntax thmrefs} @'inject' @{syntax thmrefs}
+ @'induction' @{syntax thmrefs}
+ "}
Recursive domains in HOLCF are analogous to datatypes in classical
HOL (cf.\ \secref{sec:hol-datatype}). Mutual recursion is
--- a/doc-src/IsarRef/Thy/HOL_Specific.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/HOL_Specific.thy Mon May 02 01:20:28 2011 +0200
@@ -11,17 +11,16 @@
@{command_def (HOL) "typedef"} & : & @{text "local_theory \<rightarrow> proof(prove)"} \\
\end{matharray}
- \begin{rail}
- 'typedef' altname? abstype '=' repset
+ @{rail "
+ @@{command (HOL) typedef} altname? abstype '=' repset
;
- altname: '(' (name | 'open' | 'open' name) ')'
- ;
- abstype: typespecsorts mixfix?
+ altname: '(' (@{syntax name} | @'open' | @'open' @{syntax name}) ')'
;
- repset: term ('morphisms' name name)?
+ abstype: @{syntax typespecsorts} @{syntax mixfix}?
;
- \end{rail}
+ repset: @{syntax term} (@'morphisms' @{syntax name} @{syntax name})?
+ "}
\begin{description}
@@ -68,13 +67,12 @@
text {*
\begin{matharray}{rcl}
- @{attribute (HOL) split_format}@{text "\<^sup>*"} & : & @{text attribute} \\
+ @{attribute_def (HOL) split_format}@{text "\<^sup>*"} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'split_format' '(' 'complete' ')'
- ;
- \end{rail}
+ @{rail "
+ @@{attribute (HOL) split_format} ('(' 'complete' ')')?
+ "}
\begin{description}
@@ -173,10 +171,9 @@
@{command_def (HOL) "record"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- 'record' typespecsorts '=' (type '+')? (constdecl +)
- ;
- \end{rail}
+ @{rail "
+ @@{command (HOL) record} @{syntax typespecsorts} '=' (@{syntax type} '+')? (@{syntax constdecl} +)
+ "}
\begin{description}
@@ -348,16 +345,16 @@
@{command_def (HOL) "rep_datatype"} & : & @{text "theory \<rightarrow> proof(prove)"} \\
\end{matharray}
- \begin{rail}
- 'datatype' (dtspec + 'and')
+ @{rail "
+ @@{command (HOL) datatype} (dtspec + @'and')
;
- 'rep_datatype' ('(' (name +) ')')? (term +)
+ @@{command (HOL) rep_datatype} ('(' (@{syntax name} +) ')')? (@{syntax term} +)
;
- dtspec: parname? typespec mixfix? '=' (cons + '|')
+ dtspec: @{syntax parname}? @{syntax typespec} @{syntax mixfix}? '=' (cons + '|')
;
- cons: name ( type * ) mixfix?
- \end{rail}
+ cons: @{syntax name} (@{syntax type} * ) @{syntax mixfix}?
+ "}
\begin{description}
@@ -391,10 +388,10 @@
@{command_def (HOL) "enriched_type"} & : & @{text "local_theory \<rightarrow> proof(prove)"}
\end{matharray}
- \begin{rail}
- 'enriched_type' (prefix ':')? term
+ @{rail "
+ @@{command (HOL) enriched_type} (prefix ':')? @{syntax term}
;
- \end{rail}
+ "} % FIXME check prefix
\begin{description}
@@ -437,17 +434,19 @@
@{command_def (HOL) "termination"} & : & @{text "local_theory \<rightarrow> proof(prove)"} \\
\end{matharray}
- \begin{rail}
- 'primrec' target? fixes 'where' equations
+ @{rail "
+ @@{command (HOL) primrec} @{syntax target}? @{syntax \"fixes\"} @'where' equations
;
- ('fun' | 'function') target? functionopts? fixes \\ 'where' equations
+ (@@{command (HOL) fun} | @@{command (HOL) function}) @{syntax target}? functionopts?
+ @{syntax \"fixes\"} \\ @'where' equations
;
- equations: (thmdecl? prop + '|')
+
+ equations: (@{syntax thmdecl}? @{syntax prop} + '|')
;
functionopts: '(' (('sequential' | 'domintros') + ',') ')'
;
- 'termination' ( term )?
- \end{rail}
+ @@{command (HOL) termination} @{syntax term}?
+ "}
\begin{description}
@@ -529,15 +528,15 @@
@{method_def (HOL) size_change} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- 'relation' term
+ @{rail "
+ @@{method (HOL) relation} @{syntax term}
;
- 'lexicographic_order' ( clasimpmod * )
+ @@{method (HOL) lexicographic_order} (@{syntax clasimpmod} * )
;
- 'size_change' ( orders ( clasimpmod * ) )
+ @@{method (HOL) size_change} ( orders (@{syntax clasimpmod} * ) )
;
orders: ( 'max' | 'min' | 'ms' ) *
- \end{rail}
+ "}
\begin{description}
@@ -587,9 +586,10 @@
@{attribute_def (HOL) "partial_function_mono"} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'partial_function' target? '(' mode ')' fixes \\ 'where' thmdecl? prop
- \end{rail}
+ @{rail "
+ @@{command (HOL) partial_function} @{syntax target}?
+ '(' mode ')' @{syntax \"fixes\"} \\ @'where' @{syntax thmdecl}? @{syntax prop}
+ "} % FIXME check mode
\begin{description}
@@ -657,18 +657,19 @@
@{command_def (HOL) "recdef_tc"}@{text "\<^sup>*"} & : & @{text "theory \<rightarrow> proof(prove)"} \\
\end{matharray}
- \begin{rail}
- 'recdef' ('(' 'permissive' ')')? \\ name term (prop +) hints?
+ @{rail "
+ @@{command (HOL) recdef} ('(' @'permissive' ')')? \\
+ @{syntax name} @{syntax term} (@{syntax prop} +) hints?
;
- recdeftc thmdecl? tc
+ recdeftc @{syntax thmdecl}? tc
;
- hints: '(' 'hints' ( recdefmod * ) ')'
- ;
- recdefmod: (('recdef_simp' | 'recdef_cong' | 'recdef_wf') (() | 'add' | 'del') ':' thmrefs) | clasimpmod
+ hints: '(' @'hints' ( recdefmod * ) ')'
;
- tc: nameref ('(' nat ')')?
+ recdefmod: (('recdef_simp' | 'recdef_cong' | 'recdef_wf')
+ (() | 'add' | 'del') ':' @{syntax thmrefs}) | @{syntax clasimpmod}
;
- \end{rail}
+ tc: @{syntax nameref} ('(' @{syntax nat} ')')?
+ "}
\begin{description}
@@ -702,10 +703,10 @@
@{attribute_def (HOL) recdef_wf} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- ('recdef_simp' | 'recdef_cong' | 'recdef_wf') (() | 'add' | 'del')
- ;
- \end{rail}
+ @{rail "
+ (@@{attribute (HOL) recdef_simp} | @@{attribute (HOL) recdef_cong} |
+ @@{attribute (HOL) recdef_wf}) (() | 'add' | 'del')
+ "}
*}
@@ -742,15 +743,16 @@
@{attribute_def (HOL) mono} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- ('inductive' | 'inductive_set' | 'coinductive' | 'coinductive_set') target? fixes ('for' fixes)? \\
- ('where' clauses)? ('monos' thmrefs)?
+ @{rail "
+ (@@{command (HOL) inductive} | @@{command (HOL) inductive_set} |
+ @@{command (HOL) coinductive} | @@{command (HOL) coinductive_set})
+ @{syntax target}? @{syntax \"fixes\"} (@'for' @{syntax \"fixes\"})? \\
+ (@'where' clauses)? (@'monos' @{syntax thmrefs})?
;
- clauses: (thmdecl? prop + '|')
+ clauses: (@{syntax thmdecl}? @{syntax prop} + '|')
;
- 'mono' (() | 'add' | 'del')
- ;
- \end{rail}
+ @@{attribute (HOL) mono} (() | 'add' | 'del')
+ "}
\begin{description}
@@ -879,10 +881,9 @@
@{method_def (HOL) iprover} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- 'iprover' ( rulemod * )
- ;
- \end{rail}
+ @{rail "
+ @@{method (HOL) iprover} ( @{syntax rulemod} * )
+ "}
The @{method (HOL) iprover} method performs intuitionistic proof
search, depending on specifically declared rules from the context,
@@ -907,10 +908,9 @@
@{method_def (HOL) "coherent"} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- 'coherent' thmrefs?
- ;
- \end{rail}
+ @{rail "
+ @@{method (HOL) coherent} @{syntax thmrefs}?
+ "}
The @{method (HOL) coherent} method solves problems of
\emph{Coherent Logic} \cite{Bezem-Coquand:2005}, which covers
@@ -934,25 +934,23 @@
@{command_def (HOL) "sledgehammer_params"} & : & @{text "theory \<rightarrow> theory"}
\end{matharray}
- \begin{rail}
- 'solve_direct'
+ @{rail "
+ @@{command (HOL) try} ( ( ( 'simp' | 'intro' | 'elim' | 'dest' ) ':' @{syntax thmrefs} ) + ) ?
+ @{syntax nat}?
;
-
- 'try' ( ( ( 'simp' | 'intro' | 'elim' | 'dest' ) ':' thmrefs ) + ) ? nat?
- ;
-
- 'sledgehammer' ( '[' args ']' ) ? facts? nat?
+ @@{command (HOL) sledgehammer} ( '[' args ']' )? facts? @{syntax nat}?
;
- 'sledgehammer_params' ( ( '[' args ']' ) ? )
+ @@{command (HOL) sledgehammer_params} ( ( '[' args ']' ) ? )
;
- args: ( name '=' value + ',' )
+ args: ( @{syntax name} '=' value + ',' )
;
- facts: '(' ( ( ( ( 'add' | 'del' ) ':' ) ? thmrefs ) + ) ? ')'
+ facts: '(' ( ( ( ( 'add' | 'del' ) ':' ) ? @{syntax thmrefs} ) + ) ? ')'
;
- \end{rail}
+ "} % FIXME try: proper clasimpmod!?
+ % FIXME check args "value"
\begin{description}
@@ -994,22 +992,24 @@
@{command_def (HOL) "nitpick_params"} & : & @{text "theory \<rightarrow> theory"}
\end{matharray}
- \begin{rail}
- 'value' ( ( '[' name ']' ) ? ) modes? term
+ @{rail "
+ @@{command (HOL) value} ( '[' name ']' )? modes? @{syntax term}
;
- ('quickcheck' | 'refute' | 'nitpick') ( ( '[' args ']' ) ? ) nat?
+ (@@{command (HOL) quickcheck} | @@{command (HOL) refute} | @@{command (HOL) nitpick})
+ ( '[' args ']' )? @{syntax nat}?
;
- ('quickcheck_params' | 'refute_params' | 'nitpick_params') ( ( '[' args ']' ) ? )
+ (@@{command (HOL) quickcheck_params} | @@{command (HOL) refute_params} |
+ @@{command (HOL) nitpick_params}) ( '[' args ']' )?
;
- modes: '(' (name + ) ')'
+ modes: '(' (@{syntax name} +) ')'
;
- args: ( name '=' value + ',' )
+ args: ( @{syntax name} '=' value + ',' )
;
- \end{rail}
+ "} % FIXME check "value"
\begin{description}
@@ -1133,19 +1133,18 @@
@{command_def (HOL) "inductive_cases"}@{text "\<^sup>*"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
\end{matharray}
- \begin{rail}
- 'case_tac' goalspec? term rule?
+ @{rail "
+ @@{method (HOL) case_tac} @{syntax goalspec}? @{syntax term} rule?
;
- 'induct_tac' goalspec? (insts * 'and') rule?
+ @@{method (HOL) induct_tac} @{syntax goalspec}? (@{syntax insts} * @'and') rule?
;
- 'ind_cases' (prop +) ('for' (name +)) ?
+ @@{method (HOL) ind_cases} (@{syntax prop}+) (@'for' (@{syntax name}+))?
;
- 'inductive_cases' (thmdecl? (prop +) + 'and')
+ @@{command (HOL) inductive_cases} (@{syntax thmdecl}? (@{syntax prop}+) + @'and')
;
- rule: ('rule' ':' thmref)
- ;
- \end{rail}
+ rule: 'rule' ':' @{syntax thmref}
+ "}
\begin{description}
@@ -1220,85 +1219,83 @@
@{command_def (HOL) "code_reflect"} & : & @{text "theory \<rightarrow> theory"}
\end{matharray}
- \begin{rail}
- 'export_code' ( constexpr + ) \\
- ( ( 'in' target ( 'module_name' string ) ? \\
- ( 'file' ( string | '-' ) ) ? ( '(' args ')' ) ?) + ) ?
+ @{rail "
+ @@{command (HOL) export_code} ( constexpr + ) \\
+ ( ( @'in' target ( @'module_name' @{syntax string} ) ? \\
+ ( @'file' ( @{syntax string} | '-' ) ) ? ( '(' args ')' ) ?) + ) ?
;
- const: term
+ const: @{syntax term}
;
constexpr: ( const | 'name._' | '_' )
;
- typeconstructor: nameref
+ typeconstructor: @{syntax nameref}
;
- class: nameref
+ class: @{syntax nameref}
;
target: 'SML' | 'OCaml' | 'Haskell' | 'Scala'
;
- 'code' ( 'del' | 'abstype' | 'abstract' ) ?
+ @@{attribute (HOL) code} ( 'del' | 'abstype' | 'abstract' )?
;
- 'code_abort' ( const + )
+ @@{command (HOL) code_abort} ( const + )
;
- 'code_datatype' ( const + )
+ @@{command (HOL) code_datatype} ( const + )
;
- 'code_inline' ( 'del' ) ?
+ @@{attribute (HOL) code_inline} ( 'del' ) ?
;
- 'code_post' ( 'del' ) ?
+ @@{attribute (HOL) code_post} ( 'del' ) ?
;
- 'code_thms' ( constexpr + ) ?
+ @@{command (HOL) code_thms} ( constexpr + ) ?
;
- 'code_deps' ( constexpr + ) ?
+ @@{command (HOL) code_deps} ( constexpr + ) ?
;
- 'code_const' (const + 'and') \\
- ( ( '(' target ( syntax ? + 'and' ) ')' ) + )
- ;
-
- 'code_type' (typeconstructor + 'and') \\
- ( ( '(' target ( syntax ? + 'and' ) ')' ) + )
+ @@{command (HOL) code_const} (const + @'and') \\
+ ( ( '(' target ( syntax ? + @'and' ) ')' ) + )
;
- 'code_class' (class + 'and') \\
- ( ( '(' target \\ ( string ? + 'and' ) ')' ) + )
+ @@{command (HOL) code_type} (typeconstructor + @'and') \\
+ ( ( '(' target ( syntax ? + @'and' ) ')' ) + )
;
- 'code_instance' (( typeconstructor '::' class ) + 'and') \\
- ( ( '(' target ( '-' ? + 'and' ) ')' ) + )
+ @@{command (HOL) code_class} (class + @'and') \\
+ ( ( '(' target \\ ( @{syntax string} ? + @'and' ) ')' ) + )
;
- 'code_reserved' target ( string + )
+ @@{command (HOL) code_instance} (( typeconstructor '::' class ) + @'and') \\
+ ( ( '(' target ( '-' ? + @'and' ) ')' ) + )
;
- 'code_monad' const const target
+ @@{command (HOL) code_reserved} target ( @{syntax string} + )
;
- 'code_include' target ( string ( string | '-') )
+ @@{command (HOL) code_monad} const const target
;
- 'code_modulename' target ( ( string string ) + )
+ @@{command (HOL) code_include} target ( @{syntax string} ( @{syntax string} | '-') )
;
- 'code_reflect' string \\
- ( 'datatypes' ( string '=' ( '_' | ( string + '|' ) + 'and' ) ) ) ? \\
- ( 'functions' ( string + ) ) ? ( 'file' string ) ?
+ @@{command (HOL) code_modulename} target ( ( @{syntax string} @{syntax string} ) + )
;
- syntax: string | ( 'infix' | 'infixl' | 'infixr' ) nat string
+ @@{command (HOL) code_reflect} @{syntax string} \\
+ ( @'datatypes' ( @{syntax string} '=' ( '_' | ( @{syntax string} + '|' ) + @'and' ) ) ) ? \\
+ ( @'functions' ( @{syntax string} + ) ) ? ( @'file' @{syntax string} ) ?
;
- \end{rail}
+ syntax: @{syntax string} | ( @'infix' | @'infixl' | @'infixr' ) @{syntax nat} @{syntax string}
+ "}
\begin{description}
@@ -1424,40 +1421,38 @@
@{attribute_def (HOL) code} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- ( 'code_module' | 'code_library' ) modespec ? name ? \\
- ( 'file' name ) ? ( 'imports' ( name + ) ) ? \\
- 'contains' ( ( name '=' term ) + | term + )
+ @{rail "
+ ( @@{command (HOL) code_module} | @@{command (HOL) code_library} ) modespec? @{syntax name}? \\
+ ( @'file' name ) ? ( @'imports' ( @{syntax name} + ) ) ? \\
+ @'contains' ( ( @{syntax name} '=' @{syntax term} ) + | @{syntax term} + )
;
- modespec: '(' ( name * ) ')'
+ modespec: '(' ( @{syntax name} * ) ')'
;
- 'consts_code' (codespec +)
+ @@{command (HOL) consts_code} (codespec +)
;
codespec: const template attachment ?
;
- 'types_code' (tycodespec +)
+ @@{command (HOL) types_code} (tycodespec +)
;
- tycodespec: name template attachment ?
+ tycodespec: @{syntax name} template attachment ?
;
- const: term
+ const: @{syntax term}
;
- template: '(' string ')'
+ template: '(' @{syntax string} ')'
;
- attachment: 'attach' modespec ? verblbrace text verbrbrace
+ attachment: 'attach' modespec? '{' @{syntax text} '}'
;
- 'code' (name)?
- ;
- \end{rail}
-
+ @@{attribute (HOL) code} (name)?
+ "}
*}
@@ -1469,11 +1464,12 @@
@{command_def (HOL) "ax_specification"} & : & @{text "theory \<rightarrow> proof(prove)"} \\
\end{matharray}
- \begin{rail}
- ('specification' | 'ax_specification') '(' (decl +) ')' \\ (thmdecl? prop +)
+ @{rail "
+ (@@{command (HOL) specification} | @@{command (HOL) ax_specification})
+ '(' (decl +) ')' \\ (@{syntax thmdecl}? @{syntax prop} +)
;
- decl: ((name ':')? term '(' 'overloaded' ')'?)
- \end{rail}
+ decl: ((@{syntax name} ':')? @{syntax term} '(' @'overloaded' ')'?)
+ "}
\begin{description}
--- a/doc-src/IsarRef/Thy/Inner_Syntax.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/Inner_Syntax.thy Mon May 02 01:20:28 2011 +0200
@@ -22,23 +22,22 @@
These diagnostic commands assist interactive development by printing
internal logical entities in a human-readable fashion.
- \begin{rail}
- 'typ' modes? type
+ @{rail "
+ @@{command typ} @{syntax modes}? @{syntax type}
;
- 'term' modes? term
+ @@{command term} @{syntax modes}? @{syntax term}
;
- 'prop' modes? prop
+ @@{command prop} @{syntax modes}? @{syntax prop}
;
- 'thm' modes? thmrefs
+ @@{command thm} @{syntax modes}? @{syntax thmrefs}
;
- ( 'prf' | 'full_prf' ) modes? thmrefs?
+ ( @@{command prf} | @@{command full_prf} ) @{syntax modes}? @{syntax thmrefs}?
;
- 'pr' modes? nat?
+ @@{command pr} @{syntax modes}? @{syntax nat}?
;
- modes: '(' (name + ) ')'
- ;
- \end{rail}
+ @{syntax_def modes}: '(' (@{syntax name} + ) ')'
+ "}
\begin{description}
@@ -247,20 +246,20 @@
theorem statements, locale specifications etc.\ also admit mixfix
annotations.
- \indexouternonterm{infix}\indexouternonterm{mixfix}\indexouternonterm{structmixfix}
- \begin{rail}
- infix: '(' ('infix' | 'infixl' | 'infixr') string nat ')'
+ @{rail "
+ @{syntax_def \"infix\"}: '(' (@'infix' | @'infixl' | @'infixr')
+ @{syntax string} @{syntax nat} ')'
;
- mixfix: infix | '(' string prios? nat? ')' | '(' 'binder' string prios? nat ')'
+ @{syntax_def mixfix}: @{syntax \"infix\"} | '(' @{syntax string} prios? @{syntax nat}? ')' |
+ '(' @'binder' @{syntax string} prios? @{syntax nat} ')'
;
- structmixfix: mixfix | '(' 'structure' ')'
+ @{syntax_def structmixfix}: @{syntax mixfix} | '(' @'structure' ')'
;
- prios: '[' (nat + ',') ']'
- ;
- \end{rail}
+ prios: '[' (@{syntax nat} + ',') ']'
+ "}
- Here the \railtok{string} specifications refer to the actual mixfix
+ Here the @{syntax string} specifications refer to the actual mixfix
template, which may include literal text, spacing, blocks, and
arguments (denoted by ``@{text _}''); the special symbol
``@{verbatim "\<index>"}'' (printed as ``@{text "\<index>"}'') represents an index
@@ -367,14 +366,15 @@
@{command_def "write"} & : & @{text "proof(state) \<rightarrow> proof(state)"} \\
\end{matharray}
- \begin{rail}
- ('type_notation' | 'no_type_notation') target? mode? \\ (nameref mixfix + 'and')
+ @{rail "
+ (@@{command type_notation} | @@{command no_type_notation}) @{syntax target}?
+ @{syntax mode}? \\ (@{syntax nameref} @{syntax mixfix} + @'and')
;
- ('notation' | 'no_notation') target? mode? \\ (nameref structmixfix + 'and')
+ (@@{command notation} | @@{command no_notation}) @{syntax target}? @{syntax mode}? \\
+ (@{syntax nameref} @{syntax structmixfix} + @'and')
;
- 'write' mode? (nameref structmixfix + 'and')
- ;
- \end{rail}
+ @@{command write} @{syntax mode}? (@{syntax nameref} @{syntax structmixfix} + @'and')
+ "}
\begin{description}
@@ -730,19 +730,19 @@
@{command_def "no_translations"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- 'nonterminal' (name + 'and')
+ @{rail "
+ @@{command nonterminal} (@{syntax name} + @'and')
;
- ('syntax' | 'no_syntax') mode? (constdecl +)
+ (@@{command syntax} | @@{command no_syntax}) @{syntax mode}? (@{syntax constdecl} +)
;
- ('translations' | 'no_translations') (transpat ('==' | '=>' | '<=' | rightleftharpoons | rightharpoonup | leftharpoondown) transpat +)
+ (@@{command translations} | @@{command no_translations})
+ (transpat ('==' | '=>' | '<=' | '\<rightleftharpoons>' | '\<rightharpoonup>' | '\<leftharpoondown>') transpat +)
;
- mode: ('(' ( name | 'output' | name 'output' ) ')')
+ mode: ('(' ( @{syntax name} | @'output' | @{syntax name} @'output' ) ')')
;
- transpat: ('(' nameref ')')? string
- ;
- \end{rail}
+ transpat: ('(' @{syntax nameref} ')')? @{syntax string}
+ "}
\begin{description}
@@ -788,15 +788,15 @@
@{command_def "print_ast_translation"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- ( 'parse_ast_translation' | 'parse_translation' | 'print_translation' |
- 'typed_print_translation' | 'print_ast_translation' ) ('(advanced)')? text
- ;
- \end{rail}
+ @{rail "
+ ( @@{command parse_ast_translation} | @@{command parse_translation} |
+ @@{command print_translation} | @@{command typed_print_translation} |
+ @@{command print_ast_translation}) ('(' @'advanced' ')')? @{syntax text}
+ "}
Syntax translation functions written in ML admit almost arbitrary
manipulations of Isabelle's inner syntax. Any of the above commands
- have a single \railqtok{text} argument that refers to an ML
+ have a single @{syntax text} argument that refers to an ML
expression of appropriate type, which are as follows by default:
%FIXME proper antiquotations
--- a/doc-src/IsarRef/Thy/Misc.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/Misc.thy Mon May 02 01:20:28 2011 +0200
@@ -21,24 +21,24 @@
@{command_def "print_binds"}@{text "\<^sup>*"} & : & @{text "context \<rightarrow>"} \\
\end{matharray}
- \begin{rail}
- ('print_theory' | 'print_theorems') ('!'?)
+ @{rail "
+ (@@{command print_theory} | @@{command print_theorems}) ('!'?)
;
- 'find_theorems' (('(' (nat)? ('with_dups')? ')')?) (thmcriterion *)
+ @@{command find_theorems} ('(' @{syntax nat}? 'with_dups'? ')')? \\ (thmcriterion * )
;
- thmcriterion: ('-'?) ('name' ':' nameref | 'intro' | 'elim' | 'dest' |
- 'solves' | 'simp' ':' term | term)
+ thmcriterion: ('-'?) ('name' ':' @{syntax nameref} | 'intro' | 'elim' | 'dest' |
+ 'solves' | 'simp' ':' @{syntax term} | @{syntax term})
;
- 'find_consts' (constcriterion *)
+ @@{command find_consts} (constcriterion * )
;
- constcriterion: ('-'?) ('name' ':' nameref | 'strict' ':' type | type)
- ;
- 'thm_deps' thmrefs
+ constcriterion: ('-'?)
+ ('name' ':' @{syntax nameref} | 'strict' ':' @{syntax type} | @{syntax type})
;
- 'unused_thms' (('name'+) '-' ('name'*))?
+ @@{command thm_deps} @{syntax thmrefs}
;
- \end{rail}
+ @@{command unused_thms} ((@{syntax name} +) '-' (@{syntax name} * ))?
+ "}
These commands print certain parts of the theory and proof context.
Note that there are some further ones available, such as for the set
@@ -152,10 +152,9 @@
@{command_def "use_thy"}@{text "\<^sup>*"} & : & @{text "any \<rightarrow>"} \\
\end{matharray}
- \begin{rail}
- ('cd' | 'use_thy') name
- ;
- \end{rail}
+ @{rail "
+ (@@{command cd} | @@{command use_thy}) @{syntax name}
+ "}
\begin{description}
--- a/doc-src/IsarRef/Thy/Outer_Syntax.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/Outer_Syntax.thy Mon May 02 01:20:28 2011 +0200
@@ -187,24 +187,22 @@
subsection {* Names *}
-text {*
- Entity \railqtok{name} usually refers to any name of types,
+text {* Entity @{syntax name} usually refers to any name of types,
constants, theorems etc.\ that are to be \emph{declared} or
\emph{defined} (so qualified identifiers are excluded here). Quoted
strings provide an escape for non-identifier names or those ruled
out by outer syntax keywords (e.g.\ quoted @{verbatim "\"let\""}).
- Already existing objects are usually referenced by
- \railqtok{nameref}.
+ Already existing objects are usually referenced by @{syntax
+ nameref}.
- \indexoutertoken{name}\indexoutertoken{parname}\indexoutertoken{nameref}
- \begin{rail}
- name: ident | symident | string | nat
+ @{rail "
+ @{syntax_def name}: @{syntax ident} | @{syntax symident} |
+ @{syntax string} | @{syntax nat}
;
- parname: '(' name ')'
+ @{syntax_def parname}: '(' @{syntax name} ')'
;
- nameref: name | longident
- ;
- \end{rail}
+ @{syntax_def nameref}: @{syntax name} | @{syntax longident}
+ "}
*}
@@ -214,37 +212,32 @@
natural numbers and floating point numbers. These are combined as
@{syntax int} and @{syntax real} as follows.
- \indexoutertoken{int}\indexoutertoken{real}
- \begin{rail}
- int: nat | '-' nat
+ @{rail "
+ @{syntax_def int}: @{syntax nat} | '-' @{syntax nat}
;
- real: float | int
- ;
- \end{rail}
+ @{syntax_def real}: @{syntax float} | @{syntax int}
+ "}
- Note that there is an overlap with the category \railqtok{name},
+ Note that there is an overlap with the category @{syntax name},
which also includes @{syntax nat}.
*}
subsection {* Comments \label{sec:comments} *}
-text {*
- Large chunks of plain \railqtok{text} are usually given
- \railtok{verbatim}, i.e.\ enclosed in @{verbatim "{"}@{verbatim
+text {* Large chunks of plain @{syntax text} are usually given
+ @{syntax verbatim}, i.e.\ enclosed in @{verbatim "{"}@{verbatim
"*"}~@{text "\<dots>"}~@{verbatim "*"}@{verbatim "}"}. For convenience,
- any of the smaller text units conforming to \railqtok{nameref} are
- admitted as well. A marginal \railnonterm{comment} is of the form
- @{verbatim "--"} \railqtok{text}. Any number of these may occur
+ any of the smaller text units conforming to @{syntax nameref} are
+ admitted as well. A marginal @{syntax comment} is of the form
+ @{verbatim "--"}~@{syntax text}. Any number of these may occur
within Isabelle/Isar commands.
- \indexoutertoken{text}\indexouternonterm{comment}
- \begin{rail}
- text: verbatim | nameref
+ @{rail "
+ @{syntax_def text}: @{syntax verbatim} | @{syntax nameref}
;
- comment: '--' text
- ;
- \end{rail}
+ @{syntax_def comment}: '--' @{syntax text}
+ "}
*}
@@ -257,16 +250,13 @@
intersection of these classes. The syntax of type arities is given
directly at the outer level.
- \indexouternonterm{sort}\indexouternonterm{arity}
- \indexouternonterm{classdecl}
- \begin{rail}
- classdecl: name (('<' | subseteq) (nameref + ','))?
+ @{rail "
+ @{syntax_def classdecl}: @{syntax name} (('<' | '\<subseteq>') (@{syntax nameref} + ','))?
;
- sort: nameref
+ @{syntax_def sort}: @{syntax nameref}
;
- arity: ('(' (sort + ',') ')')? sort
- ;
- \end{rail}
+ @{syntax_def arity}: ('(' (@{syntax sort} + ',') ')')? @{syntax sort}
+ "}
*}
@@ -286,84 +276,74 @@
by commands or other keywords already (such as @{verbatim "="} or
@{verbatim "+"}).
- \indexoutertoken{type}\indexoutertoken{term}\indexoutertoken{prop}
- \begin{rail}
- type: nameref | typefree | typevar
+ @{rail "
+ @{syntax_def type}: @{syntax nameref} | @{syntax typefree} |
+ @{syntax typevar}
;
- term: nameref | var
+ @{syntax_def term}: @{syntax nameref} | @{syntax var}
;
- prop: term
- ;
- \end{rail}
+ @{syntax_def prop}: @{syntax term}
+ "}
Positional instantiations are indicated by giving a sequence of
terms, or the placeholder ``@{text _}'' (underscore), which means to
skip a position.
- \indexoutertoken{inst}\indexoutertoken{insts}
- \begin{rail}
- inst: underscore | term
+ @{rail "
+ @{syntax_def inst}: '_' | @{syntax term}
;
- insts: (inst *)
- ;
- \end{rail}
+ @{syntax_def insts}: (@{syntax inst} *)
+ "}
- Type declarations and definitions usually refer to
- \railnonterm{typespec} on the left-hand side. This models basic
- type constructor application at the outer syntax level. Note that
- only plain postfix notation is available here, but no infixes.
+ Type declarations and definitions usually refer to @{syntax
+ typespec} on the left-hand side. This models basic type constructor
+ application at the outer syntax level. Note that only plain postfix
+ notation is available here, but no infixes.
- \indexouternonterm{typespec}
- \indexouternonterm{typespecsorts}
- \begin{rail}
- typespec: (() | typefree | '(' ( typefree + ',' ) ')') name
+ @{rail "
+ @{syntax_def typespec}:
+ (() | @{syntax typefree} | '(' ( @{syntax typefree} + ',' ) ')') @{syntax name}
;
-
- typespecsorts: (() | (typefree ('::' sort)?) | '(' ( (typefree ('::' sort)?) + ',' ) ')') name
- ;
- \end{rail}
+ @{syntax_def typespecsorts}:
+ (() | (@{syntax typefree} ('::' @{syntax sort})?) |
+ '(' ( (@{syntax typefree} ('::' @{syntax sort})?) + ',' ) ')') @{syntax name}
+ "}
*}
subsection {* Term patterns and declarations \label{sec:term-decls} *}
-text {*
- Wherever explicit propositions (or term fragments) occur in a proof
- text, casual binding of schematic term variables may be given
- specified via patterns of the form ``@{text "(\<IS> p\<^sub>1 \<dots>
- p\<^sub>n)"}''. This works both for \railqtok{term} and \railqtok{prop}.
+text {* Wherever explicit propositions (or term fragments) occur in a
+ proof text, casual binding of schematic term variables may be given
+ specified via patterns of the form ``@{text "(\<IS> p\<^sub>1 \<dots> p\<^sub>n)"}''.
+ This works both for @{syntax term} and @{syntax prop}.
- \indexouternonterm{termpat}\indexouternonterm{proppat}
- \begin{rail}
- termpat: '(' ('is' term +) ')'
+ @{rail "
+ @{syntax_def termpat}: '(' (@'is' @{syntax term} +) ')'
;
- proppat: '(' ('is' prop +) ')'
- ;
- \end{rail}
+ @{syntax_def proppat}: '(' (@'is' @{syntax prop} +) ')'
+ "}
\medskip Declarations of local variables @{text "x :: \<tau>"} and
logical propositions @{text "a : \<phi>"} represent different views on
the same principle of introducing a local scope. In practice, one
- may usually omit the typing of \railnonterm{vars} (due to
+ may usually omit the typing of @{syntax vars} (due to
type-inference), and the naming of propositions (due to implicit
references of current facts). In any case, Isar proof elements
usually admit to introduce multiple such items simultaneously.
- \indexouternonterm{vars}\indexouternonterm{props}
- \begin{rail}
- vars: (name+) ('::' type)?
+ @{rail "
+ @{syntax_def vars}: (@{syntax name} +) ('::' @{syntax type})?
;
- props: thmdecl? (prop proppat? +)
- ;
- \end{rail}
+ @{syntax_def props}: @{syntax thmdecl}? (@{syntax prop} @{syntax proppat}? +)
+ "}
The treatment of multiple declarations corresponds to the
- complementary focus of \railnonterm{vars} versus
- \railnonterm{props}. In ``@{text "x\<^sub>1 \<dots> x\<^sub>n :: \<tau>"}''
- the typing refers to all variables, while in @{text "a: \<phi>\<^sub>1 \<dots>
- \<phi>\<^sub>n"} the naming refers to all propositions collectively.
- Isar language elements that refer to \railnonterm{vars} or
- \railnonterm{props} typically admit separate typings or namings via
+ complementary focus of @{syntax vars} versus @{syntax props}. In
+ ``@{text "x\<^sub>1 \<dots> x\<^sub>n :: \<tau>"}'' the typing refers to all variables, while
+ in @{text "a: \<phi>\<^sub>1 \<dots> \<phi>\<^sub>n"} the naming refers to all propositions
+ collectively. Isar language elements that refer to @{syntax vars}
+ or @{syntax props} typically admit separate typings or namings via
another level of iteration, with explicit @{keyword_ref "and"}
separators; e.g.\ see @{command "fix"} and @{command "assume"} in
\secref{sec:proof-context}.
@@ -373,31 +353,30 @@
subsection {* Attributes and theorems \label{sec:syn-att} *}
text {* Attributes have their own ``semi-inner'' syntax, in the sense
- that input conforming to \railnonterm{args} below is parsed by the
+ that input conforming to @{syntax args} below is parsed by the
attribute a second time. The attribute argument specifications may
be any sequence of atomic entities (identifiers, strings etc.), or
- properly bracketed argument lists. Below \railqtok{atom} refers to
- any atomic entity, including any \railtok{keyword} conforming to
- \railtok{symident}.
+ properly bracketed argument lists. Below @{syntax atom} refers to
+ any atomic entity, including any @{syntax keyword} conforming to
+ @{syntax symident}.
- \indexoutertoken{atom}\indexouternonterm{args}\indexouternonterm{attributes}
- \begin{rail}
- atom: nameref | typefree | typevar | var | nat | float | keyword
+ @{rail "
+ @{syntax_def atom}: @{syntax nameref} | @{syntax typefree} |
+ @{syntax typevar} | @{syntax var} | @{syntax nat} | @{syntax float} |
+ @{syntax keyword}
;
- arg: atom | '(' args ')' | '[' args ']'
+ arg: @{syntax atom} | '(' @{syntax args} ')' | '[' @{syntax args} ']'
;
- args: arg *
+ @{syntax_def args}: arg *
;
- attributes: '[' (nameref args * ',') ']'
- ;
- \end{rail}
+ @{syntax_def attributes}: '[' (@{syntax nameref} @{syntax args} * ',') ']'
+ "}
- Theorem specifications come in several flavors:
- \railnonterm{axmdecl} and \railnonterm{thmdecl} usually refer to
- axioms, assumptions or results of goal statements, while
- \railnonterm{thmdef} collects lists of existing theorems. Existing
- theorems are given by \railnonterm{thmref} and
- \railnonterm{thmrefs}, the former requires an actual singleton
+ Theorem specifications come in several flavors: @{syntax axmdecl}
+ and @{syntax thmdecl} usually refer to axioms, assumptions or
+ results of goal statements, while @{syntax thmdef} collects lists of
+ existing theorems. Existing theorems are given by @{syntax thmref}
+ and @{syntax thmrefs}, the former requires an actual singleton
result.
There are three forms of theorem references:
@@ -426,26 +405,24 @@
This form of in-place declarations is particularly useful with
commands like @{command "declare"} and @{command "using"}.
- \indexouternonterm{axmdecl}\indexouternonterm{thmdecl}
- \indexouternonterm{thmdef}\indexouternonterm{thmref}
- \indexouternonterm{thmrefs}\indexouternonterm{selection}
- \begin{rail}
- axmdecl: name attributes? ':'
+ @{rail "
+ @{syntax_def axmdecl}: @{syntax name} @{syntax attributes}? ':'
+ ;
+ @{syntax_def thmdecl}: thmbind ':'
;
- thmdecl: thmbind ':'
- ;
- thmdef: thmbind '='
+ @{syntax_def thmdef}: thmbind '='
;
- thmref: (nameref selection? | altstring) attributes? | '[' attributes ']'
+ @{syntax_def thmref}:
+ (@{syntax nameref} selection? | @{syntax altstring}) @{syntax attributes}? |
+ '[' @{syntax attributes} ']'
;
- thmrefs: thmref +
+ @{syntax_def thmrefs}: @{syntax thmref} +
;
- thmbind: name attributes | name | attributes
+ thmbind: @{syntax name} @{syntax attributes} | @{syntax name} | @{syntax attributes}
;
- selection: '(' ((nat | nat '-' nat?) + ',') ')'
- ;
- \end{rail}
+ selection: '(' ((@{syntax nat} | @{syntax nat} '-' @{syntax nat}?) + ',') ')'
+ "}
*}
end
--- a/doc-src/IsarRef/Thy/Proof.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/Proof.thy Mon May 02 01:20:28 2011 +0200
@@ -53,12 +53,11 @@
@{command_def "notepad"} & : & @{text "local_theory \<rightarrow> proof(state)"} \\
\end{matharray}
- \begin{rail}
- 'notepad' 'begin'
+ @{rail "
+ @@{command notepad} @'begin'
;
- 'end'
- ;
- \end{rail}
+ @@{command end}
+ "}
\begin{description}
@@ -188,16 +187,15 @@
exporting some result @{text "x \<equiv> t \<turnstile> \<phi>[x]"} yields @{text "\<turnstile>
\<phi>[t]"}.
- \begin{rail}
- 'fix' (vars + 'and')
+ @{rail "
+ @@{command fix} (@{syntax vars} + @'and')
;
- ('assume' | 'presume') (props + 'and')
+ (@@{command assume} | @@{command presume}) (@{syntax props} + @'and')
;
- 'def' (def + 'and')
+ @@{command def} (def + @'and')
;
- def: thmdecl? \\ name ('==' | equiv) term termpat?
- ;
- \end{rail}
+ def: @{syntax thmdecl}? \\ @{syntax name} ('==' | '\<equiv>') @{syntax term} @{syntax termpat}?
+ "}
\begin{description}
@@ -267,13 +265,12 @@
input process just after type checking. Also note that @{command
"def"} does not support polymorphism.
- \begin{rail}
- 'let' ((term + 'and') '=' term + 'and')
- ;
- \end{rail}
+ @{rail "
+ @@{command let} ((@{syntax term} + @'and') '=' @{syntax term} + @'and')
+ "}
- The syntax of @{keyword "is"} patterns follows \railnonterm{termpat}
- or \railnonterm{proppat} (see \secref{sec:term-decls}).
+ The syntax of @{keyword "is"} patterns follows @{syntax termpat} or
+ @{syntax proppat} (see \secref{sec:term-decls}).
\begin{description}
@@ -324,12 +321,12 @@
to the most recently established facts, but only \emph{before}
issuing a follow-up claim.
- \begin{rail}
- 'note' (thmdef? thmrefs + 'and')
+ @{rail "
+ @@{command note} (@{syntax thmdef}? @{syntax thmrefs} + @'and')
;
- ('from' | 'with' | 'using' | 'unfolding') (thmrefs + 'and')
- ;
- \end{rail}
+ (@@{command from} | @@{command with} | @@{command using} | @@{command unfolding})
+ (@{syntax thmrefs} + @'and')
+ "}
\begin{description}
@@ -435,33 +432,33 @@
contexts of (essentially a big disjunction of eliminated parameters
and assumptions, cf.\ \secref{sec:obtain}).
- \begin{rail}
- ('lemma' | 'theorem' | 'corollary' |
- 'schematic_lemma' | 'schematic_theorem' | 'schematic_corollary') target? (goal | longgoal)
+ @{rail "
+ (@@{command lemma} | @@{command theorem} | @@{command corollary} |
+ @@{command schematic_lemma} | @@{command schematic_theorem} |
+ @@{command schematic_corollary}) @{syntax target}? (goal | longgoal)
;
- ('have' | 'show' | 'hence' | 'thus') goal
+ (@@{command have} | @@{command show} | @@{command hence} | @@{command thus}) goal
;
- 'print_statement' modes? thmrefs
+ @@{command print_statement} @{syntax modes}? @{syntax thmrefs}
;
- goal: (props + 'and')
+ goal: (@{syntax props} + @'and')
;
- longgoal: thmdecl? (contextelem *) conclusion
+ longgoal: @{syntax thmdecl}? (@{syntax contextelem} * ) conclusion
;
- conclusion: 'shows' goal | 'obtains' (parname? case + '|')
+ conclusion: @'shows' goal | @'obtains' (@{syntax parname}? case + '|')
;
- case: (vars + 'and') 'where' (props + 'and')
- ;
- \end{rail}
+ case: (@{syntax vars} + @'and') @'where' (@{syntax props} + @'and')
+ "}
\begin{description}
\item @{command "lemma"}~@{text "a: \<phi>"} enters proof mode with
@{text \<phi>} as main goal, eventually resulting in some fact @{text "\<turnstile>
- \<phi>"} to be put back into the target context. An additional
- \railnonterm{context} specification may build up an initial proof
- context for the subsequent claim; this includes local definitions
- and syntax as well, see the definition of @{syntax contextelem} in
+ \<phi>"} to be put back into the target context. An additional @{syntax
+ context} specification may build up an initial proof context for the
+ subsequent claim; this includes local definitions and syntax as
+ well, see the definition of @{syntax contextelem} in
\secref{sec:locale}.
\item @{command "theorem"}~@{text "a: \<phi>"} and @{command
@@ -537,25 +534,22 @@
subsection {* Proof method expressions \label{sec:proof-meth} *}
-text {*
- Proof methods are either basic ones, or expressions composed of
- methods via ``@{verbatim ","}'' (sequential composition),
- ``@{verbatim "|"}'' (alternative choices), ``@{verbatim "?"}''
+text {* Proof methods are either basic ones, or expressions composed
+ of methods via ``@{verbatim ","}'' (sequential composition),
+ ``@{verbatim "|"}'' (alternative choices), ``@{verbatim "?"}''
(try), ``@{verbatim "+"}'' (repeat at least once), ``@{verbatim
"["}@{text n}@{verbatim "]"}'' (restriction to first @{text n}
sub-goals, with default @{text "n = 1"}). In practice, proof
- methods are usually just a comma separated list of
- \railqtok{nameref}~\railnonterm{args} specifications. Note that
- parentheses may be dropped for single method specifications (with no
- arguments).
+ methods are usually just a comma separated list of @{syntax
+ nameref}~@{syntax args} specifications. Note that parentheses may
+ be dropped for single method specifications (with no arguments).
- \indexouternonterm{method}
- \begin{rail}
- method: (nameref | '(' methods ')') (() | '?' | '+' | '[' nat? ']')
+ @{rail "
+ @{syntax_def method}:
+ (@{syntax nameref} | '(' methods ')') (() | '?' | '+' | '[' @{syntax nat}? ']')
;
- methods: (nameref args | method) + (',' | '|')
- ;
- \end{rail}
+ methods: (@{syntax nameref} @{syntax args} | @{syntax method}) + (',' | '|')
+ "}
Proper Isar proof methods do \emph{not} admit arbitrary goal
addressing, but refer either to the first sub-goal or all sub-goals
@@ -573,11 +567,10 @@
all goals, and ``@{text "[n-]"}'' to all goals starting from @{text
"n"}.
- \indexouternonterm{goalspec}
- \begin{rail}
- goalspec: '[' (nat '-' nat | nat '-' | nat | '!' ) ']'
- ;
- \end{rail}
+ @{rail "
+ @{syntax_def goalspec}:
+ '[' (@{syntax nat} '-' @{syntax nat} | @{syntax nat} '-' | @{syntax nat} | '!' ) ']'
+ "}
*}
@@ -630,16 +623,15 @@
There is no separate default terminal method. Any remaining goals
are always solved by assumption in the very last step.
- \begin{rail}
- 'proof' method?
+ @{rail "
+ @@{command proof} method?
;
- 'qed' method?
+ @@{command qed} method?
;
- 'by' method method?
+ @@{command \"by\"} method method?
;
- ('.' | '..' | 'sorry')
- ;
- \end{rail}
+ (@@{command \".\"} | @@{command \"..\"} | @@{command sorry})
+ "}
\begin{description}
@@ -715,24 +707,27 @@
@{attribute_def "where"} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'fact' thmrefs?
+ @{rail "
+ @@{method fact} @{syntax thmrefs}?
+ ;
+ @@{method rule} @{syntax thmrefs}?
;
- 'rule' thmrefs?
+ rulemod: ('intro' | 'elim' | 'dest')
+ ((('!' | () | '?') @{syntax nat}?) | 'del') ':' @{syntax thmrefs}
;
- rulemod: ('intro' | 'elim' | 'dest') ((('!' | () | '?') nat?) | 'del') ':' thmrefs
- ;
- ('intro' | 'elim' | 'dest') ('!' | () | '?') nat?
+ (@@{attribute intro} | @@{attribute elim} | @@{attribute dest})
+ ('!' | () | '?') @{syntax nat}?
;
- 'rule' 'del'
+ @@{attribute rule} 'del'
;
- 'OF' thmrefs
+ @@{attribute OF} @{syntax thmrefs}
;
- 'of' insts ('concl' ':' insts)?
+ @@{attribute of} @{syntax insts} ('concl' ':' @{syntax insts})?
;
- 'where' ((name | var | typefree | typevar) '=' (type | term) * 'and')
- ;
- \end{rail}
+ @@{attribute \"where\"}
+ ((@{syntax name} | @{syntax var} | @{syntax typefree} | @{syntax typevar}) '='
+ (@{syntax type} | @{syntax term}) * @'and')
+ "}
\begin{description}
@@ -838,14 +833,13 @@
@{command_def "back"}@{text "\<^sup>*"} & : & @{text "proof \<rightarrow> proof"} \\
\end{matharray}
- \begin{rail}
- ( 'apply' | 'apply_end' ) method
+ @{rail "
+ ( @@{command apply} | @@{command apply_end} ) @{syntax method}
;
- 'defer' nat?
+ @@{command defer} @{syntax nat}?
;
- 'prefer' nat
- ;
- \end{rail}
+ @@{command prefer} @{syntax nat}
+ "}
\begin{description}
@@ -900,10 +894,10 @@
@{command_def "method_setup"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- 'method_setup' name '=' text text
+ @{rail "
+ @@{command method_setup} @{syntax name} '=' @{syntax text} @{syntax text}
;
- \end{rail}
+ "}
\begin{description}
@@ -956,12 +950,12 @@
later, provided that the corresponding parameters do \emph{not}
occur in the conclusion.
- \begin{rail}
- 'obtain' parname? (vars + 'and') 'where' (props + 'and')
+ @{rail "
+ @@{command obtain} @{syntax parname}? (@{syntax vars} + @'and')
+ @'where' (@{syntax props} + @'and')
;
- 'guess' (vars + 'and')
- ;
- \end{rail}
+ @@{command guess} (@{syntax vars} + @'and')
+ "}
The derived Isar command @{command "obtain"} is defined as follows
(where @{text "b\<^sub>1, \<dots>, b\<^sub>k"} shall refer to (optional)
@@ -1071,12 +1065,11 @@
@{command "ultimately"} & \equiv & @{command "moreover"}~@{command "from"}~@{text calculation} \\
\end{matharray}
- \begin{rail}
- ('also' | 'finally') ('(' thmrefs ')')?
+ @{rail "
+ (@@{command also} | @@{command finally}) ('(' @{syntax thmrefs} ')')?
;
- 'trans' (() | 'add' | 'del')
- ;
- \end{rail}
+ @@{attribute trans} (() | 'add' | 'del')
+ "}
\begin{description}
@@ -1189,21 +1182,20 @@
derived manually become ready to use in advanced case analysis
later.
- \begin{rail}
- 'case' (caseref | '(' caseref ((name | underscore) +) ')')
+ @{rail "
+ @@{command case} (caseref | '(' caseref (('_' | @{syntax name}) +) ')')
;
caseref: nameref attributes?
;
- 'case_names' (name +)
+ @@{attribute case_names} (@{syntax name} +)
;
- 'case_conclusion' name (name *)
+ @@{attribute case_conclusion} @{syntax name} (@{syntax name} * )
;
- 'params' ((name *) + 'and')
+ @@{attribute params} ((@{syntax name} * ) + @'and')
;
- 'consumes' nat?
- ;
- \end{rail}
+ @@{attribute consumes} @{syntax nat}?
+ "}
\begin{description}
@@ -1281,25 +1273,24 @@
and parameters separately). This avoids cumbersome encoding of
``strengthened'' inductive statements within the object-logic.
- \begin{rail}
- 'cases' '(no_simp)'? (insts * 'and') rule?
+ @{rail "
+ @@{method cases} ('(' 'no_simp' ')')? (@{syntax insts} * @'and') rule?
;
- 'induct' '(no_simp)'? (definsts * 'and') \\ arbitrary? taking? rule?
+ @@{method induct} ('(' 'no_simp' ')')? (definsts * @'and') \\ arbitrary? taking? rule?
;
- 'coinduct' insts taking rule?
+ @@{method coinduct} insts taking rule?
;
- rule: ('type' | 'pred' | 'set') ':' (nameref +) | 'rule' ':' (thmref +)
+ rule: ('type' | 'pred' | 'set') ':' (@{syntax nameref} +) | 'rule' ':' (@{syntax thmref} +)
;
- definst: name ('==' | equiv) term | '(' term ')' | inst
+ definst: @{syntax name} ('==' | '\<equiv>') @{syntax term} | '(' @{syntax term} ')' | @{syntax inst}
;
- definsts: ( definst *)
+ definsts: ( definst * )
;
- arbitrary: 'arbitrary' ':' ((term *) 'and' +)
+ arbitrary: 'arbitrary' ':' ((@{syntax term} * ) @'and' +)
;
taking: 'taking' ':' insts
- ;
- \end{rail}
+ "}
\begin{description}
@@ -1467,23 +1458,22 @@
@{attribute_def coinduct} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'cases' spec
+ @{rail "
+ @@{attribute cases} spec
;
- 'induct' spec
+ @@{attribute induct} spec
;
- 'coinduct' spec
+ @@{attribute coinduct} spec
;
- spec: (('type' | 'pred' | 'set') ':' nameref) | 'del'
- ;
- \end{rail}
+ spec: (('type' | 'pred' | 'set') ':' @{syntax nameref}) | 'del'
+ "}
\begin{description}
\item @{command "print_induct_rules"} prints cases and induct rules
for predicates (or sets) and types of the current context.
-
+
\item @{attribute cases}, @{attribute induct}, and @{attribute
coinduct} (as attributes) declare rules for reasoning about
(co)inductive predicates (or sets) and types, using the
--- a/doc-src/IsarRef/Thy/Spec.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/Spec.thy Mon May 02 01:20:28 2011 +0200
@@ -50,12 +50,12 @@
although some user-interfaces might pretend that trailing input is
admissible.
- \begin{rail}
- 'theory' name 'imports' (name +) uses? 'begin'
+ @{rail "
+ @@{command theory} @{syntax name} @'imports' (@{syntax name} +) uses? @'begin'
;
- uses: 'uses' ((name | parname) +);
- \end{rail}
+ uses: @'uses' ((@{syntax name} | @{syntax parname}) +)
+ "}
\begin{description}
@@ -102,14 +102,12 @@
@{command_def (local) "end"} & : & @{text "local_theory \<rightarrow> theory"} \\
\end{matharray}
- \indexouternonterm{target}
- \begin{rail}
- 'context' name 'begin'
+ @{rail "
+ @@{command context} @{syntax name} @'begin'
;
- target: '(' 'in' name ')'
- ;
- \end{rail}
+ @{syntax_def target}: '(' @'in' @{syntax name} ')'
+ "}
\begin{description}
@@ -172,21 +170,23 @@
\secref{sec:axms-thms}). In particular, type-inference is commonly
available, and result names need not be given.
- \begin{rail}
- 'axiomatization' target? fixes? ('where' specs)?
+ @{rail "
+ @@{command axiomatization} @{syntax target}? @{syntax \"fixes\"}? (@'where' specs)?
;
- 'definition' target? (decl 'where')? thmdecl? prop
+ @@{command definition} @{syntax target}? (decl @'where')?
+ @{syntax thmdecl}? @{syntax prop}
;
- 'abbreviation' target? mode? (decl 'where')? prop
+ @@{command abbreviation} @{syntax target}? @{syntax mode}?
+ (decl @'where')? @{syntax prop}
;
- fixes: ((name ('::' type)? mixfix? | vars) + 'and')
- ;
- specs: (thmdecl? props + 'and')
+ @{syntax_def \"fixes\"}: ((@{syntax name} ('::' @{syntax type})?
+ @{syntax mixfix}? | @{syntax vars}) + @'and')
;
- decl: name ('::' type)? mixfix?
+ specs: (@{syntax thmdecl}? @{syntax props} + @'and')
;
- \end{rail}
+ decl: @{syntax name} ('::' @{syntax type})? @{syntax mixfix}?
+ "}
\begin{description}
@@ -257,12 +257,12 @@
@{command_def "declare"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
\end{matharray}
- \begin{rail}
- ('declaration' | 'syntax_declaration') ('(pervasive)')? target? text
+ @{rail "
+ (@@{command declaration} | @@{command syntax_declaration})
+ ('(' @'pervasive' ')')? @{syntax target}? @{syntax text}
;
- 'declare' target? (thmrefs + 'and')
- ;
- \end{rail}
+ @@{command declare} @{syntax target}? (@{syntax thmrefs} + @'and')
+ "}
\begin{description}
@@ -310,19 +310,17 @@
elements from equal instances are never repeated, thus avoiding
duplicate declarations.
- \indexouternonterm{localeexpr}
- \begin{rail}
- localeexpr: (instance + '+') ('for' (fixes + 'and'))?
+ @{rail "
+ @{syntax_def localeexpr}: (instance + '+') (@'for' (@{syntax \"fixes\"} + @'and'))?
;
- instance: (qualifier ':')? nameref (posinsts | namedinsts)
+ instance: (qualifier ':')? @{syntax nameref} (posinsts | namedinsts)
;
- qualifier: name ('?' | '!')?
- ;
- posinsts: (term | '_')*
+ qualifier: @{syntax name} ('?' | '!')?
;
- namedinsts: 'where' (name '=' term + 'and')
+ posinsts: ('_' | @{syntax term})*
;
- \end{rail}
+ namedinsts: @'where' (@{syntax name} '=' @{syntax term} + @'and')
+ "}
A locale instance consists of a reference to a locale and either
positional or named parameter instantiations. Identical
@@ -359,24 +357,23 @@
@{method_def unfold_locales} & : & @{text method} \\
\end{matharray}
- \indexouternonterm{contextelem}
\indexisarelem{fixes}\indexisarelem{constrains}\indexisarelem{assumes}
\indexisarelem{defines}\indexisarelem{notes}
- \begin{rail}
- 'locale' name ('=' locale)? 'begin'?
+ @{rail "
+ @@{command locale} @{syntax name} ('=' @{syntax locale})? @'begin'?
;
- 'print_locale' '!'? nameref
+ @@{command print_locale} '!'? @{syntax nameref}
;
- locale: contextelem+ | localeexpr ('+' (contextelem+))?
+ @{syntax_def locale}: @{syntax contextelem}+ |
+ @{syntax localeexpr} ('+' (@{syntax contextelem}+))?
;
- contextelem:
- 'fixes' (fixes + 'and')
- | 'constrains' (name '::' type + 'and')
- | 'assumes' (props + 'and')
- | 'defines' (thmdecl? prop proppat? + 'and')
- | 'notes' (thmdef? thmrefs + 'and')
- ;
- \end{rail}
+ @{syntax_def contextelem}:
+ @'fixes' (@{syntax \"fixes\"} + @'and') |
+ @'constrains' (@{syntax name} '::' @{syntax type} + @'and') |
+ @'assumes' (@{syntax props} + @'and') |
+ @'defines' (@{syntax thmdecl}? @{syntax prop} @{syntax proppat}? + @'and') |
+ @'notes' (@{syntax thmdef}? @{syntax thmrefs} + @'and')
+ "}
\begin{description}
@@ -501,21 +498,20 @@
@{command_def "print_interps"}@{text "\<^sup>*"} & : & @{text "context \<rightarrow>"} \\
\end{matharray}
- \indexouternonterm{interp}
- \begin{rail}
- 'interpretation' localeexpr equations?
+ @{rail "
+ @@{command interpretation} @{syntax localeexpr} equations?
;
- 'interpret' localeexpr equations?
+ @@{command interpret} @{syntax localeexpr} equations?
;
- 'sublocale' nameref ('<' | subseteq) localeexpr equations?
+ @@{command sublocale} @{syntax nameref} ('<' | '\<subseteq>') @{syntax localeexpr} equations?
;
- 'print_dependencies' '!'? localeexpr
+ @@{command print_dependencies} '!'? @{syntax localeexpr}
;
- 'print_interps' nameref
+ @@{command print_interps} @{syntax nameref}
;
- equations: 'where' (thmdecl? prop + 'and')
- ;
- \end{rail}
+
+ equations: @'where' (@{syntax thmdecl}? @{syntax prop} + @'and')
+ "}
\begin{description}
@@ -642,28 +638,29 @@
@{method_def intro_classes} & : & @{text method} \\
\end{matharray}
- \begin{rail}
- 'class' name '=' ((superclassexpr '+' (contextelem+)) | superclassexpr | (contextelem+)) \\
- 'begin'?
+ @{rail "
+ @@{command class} @{syntax name} '='
+ ((superclassexpr '+' (@{syntax contextelem}+)) |
+ superclassexpr | (@{syntax contextelem}+)) \\
+ @'begin'?
;
- 'instantiation' (nameref + 'and') '::' arity 'begin'
+ @@{command instantiation} (@{syntax nameref} + @'and') '::' @{syntax arity} @'begin'
;
- 'instance'
+ @@{command instance}
;
- 'instance' (nameref + 'and') '::' arity
+ @@{command instance} (@{syntax nameref} + @'and') '::' @{syntax arity}
;
- 'subclass' target? nameref
+ @@{command subclass} @{syntax target}? @{syntax nameref}
;
- 'instance' nameref ('<' | subseteq) nameref
+ @@{command instance} @{syntax nameref} ('<' | '\<subseteq>') @{syntax nameref}
;
- 'print_classes'
+ @@{command print_classes}
;
- 'class_deps'
+ @@{command class_deps}
;
- superclassexpr: nameref | (nameref '+' superclassexpr)
- ;
- \end{rail}
+ superclassexpr: @{syntax nameref} | (@{syntax nameref} '+' superclassexpr)
+ "} %% FIXME check superclassexpr
\begin{description}
@@ -822,10 +819,11 @@
@{command_def "overloading"} & : & @{text "theory \<rightarrow> local_theory"} \\
\end{matharray}
- \begin{rail}
- 'overloading' \\
- ( string ( '==' | equiv ) term ( '(' 'unchecked' ')' )? + ) 'begin'
- \end{rail}
+ @{rail "
+ @@{command overloading} \\
+ ( @{syntax string} ( '==' | '\<equiv>' ) @{syntax term}
+ ( '(' @'unchecked' ')' )? +) @'begin'
+ "} %% FIXME check string vs. name
\begin{description}
@@ -863,14 +861,14 @@
@{command_def "attribute_setup"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- 'use' name
+ @{rail "
+ @@{command use} @{syntax name}
;
- ('ML' | 'ML_prf' | 'ML_val' | 'ML_command' | 'setup' | 'local_setup') text
+ (@@{command ML} | @@{command ML_prf} | @@{command ML_val} |
+ @@{command ML_command} | @@{command setup} | @@{command local_setup}) @{syntax text}
;
- 'attribute_setup' name '=' text text
- ;
- \end{rail}
+ @@{command attribute_setup} @{syntax name} '=' @{syntax text} @{syntax text}
+ "}
\begin{description}
@@ -951,14 +949,13 @@
@{command_def "default_sort"} & : & @{text "local_theory \<rightarrow> local_theory"}
\end{matharray}
- \begin{rail}
- 'classes' (classdecl +)
+ @{rail "
+ @@{command classes} (@{syntax classdecl} +)
;
- 'classrel' (nameref ('<' | subseteq) nameref + 'and')
+ @@{command classrel} (@{syntax nameref} ('<' | '\<subseteq>') @{syntax nameref} + @'and')
;
- 'default_sort' sort
- ;
- \end{rail}
+ @@{command default_sort} @{syntax sort}
+ "}
\begin{description}
@@ -999,14 +996,13 @@
@{command_def "arities"} & : & @{text "theory \<rightarrow> theory"} & (axiomatic!) \\
\end{matharray}
- \begin{rail}
- 'type_synonym' (typespec '=' type mixfix?)
+ @{rail "
+ @@{command type_synonym} (@{syntax typespec} '=' @{syntax type} @{syntax mixfix}?)
;
- 'typedecl' typespec mixfix?
+ @@{command typedecl} @{syntax typespec} @{syntax mixfix}?
;
- 'arities' (nameref '::' arity +)
- ;
- \end{rail}
+ @@{command arities} (@{syntax nameref} '::' @{syntax arity} +)
+ "}
\begin{description}
@@ -1078,12 +1074,12 @@
@{command_def "defs"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- 'consts' ((name '::' type mixfix?) +)
+ @{rail "
+ @@{command consts} ((@{syntax name} '::' @{syntax type} @{syntax mixfix}?) +)
;
- 'defs' ('(' 'unchecked'? 'overloaded'? ')')? \\ (axmdecl prop +)
- ;
- \end{rail}
+ @@{command defs} ('(' @'unchecked'? @'overloaded'? ')')? \\
+ (@{syntax axmdecl} @{syntax prop} +)
+ "}
\begin{description}
@@ -1118,12 +1114,12 @@
@{command_def "theorems"} & : & @{text "local_theory \<rightarrow> local_theory"} \\
\end{matharray}
- \begin{rail}
- 'axioms' (axmdecl prop +)
+ @{rail "
+ @@{command axioms} (@{syntax axmdecl} @{syntax prop} +)
;
- ('lemmas' | 'theorems') target? (thmdef? thmrefs + 'and')
- ;
- \end{rail}
+ (@@{command lemmas} | @@{command theorems}) @{syntax target}?
+ (@{syntax thmdef}? @{syntax thmrefs} + @'and')
+ "}
\begin{description}
@@ -1169,10 +1165,9 @@
@{command_def "oracle"} & : & @{text "theory \<rightarrow> theory"} & (axiomatic!) \\
\end{matharray}
- \begin{rail}
- 'oracle' name '=' text
- ;
- \end{rail}
+ @{rail "
+ @@{command oracle} @{syntax name} '=' @{syntax text}
+ "}
\begin{description}
@@ -1201,10 +1196,10 @@
@{command_def "hide_fact"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- ( 'hide_class' | 'hide_type' | 'hide_const' | 'hide_fact' ) ('(open)')? (nameref + )
- ;
- \end{rail}
+ @{rail "
+ ( @{command hide_class} | @{command hide_type} |
+ @{command hide_const} | @{command hide_fact} ) ('(' @'open' ')')? (@{syntax nameref} + )
+ "}
Isabelle organizes any kind of name declarations (of types,
constants, theorems etc.) by separate hierarchically structured name
--- a/doc-src/IsarRef/Thy/ZF_Specific.thy Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/ZF_Specific.thy Mon May 02 01:20:28 2011 +0200
@@ -19,10 +19,9 @@
@{attribute_def (ZF) TC} & : & @{text attribute} \\
\end{matharray}
- \begin{rail}
- 'TC' (() | 'add' | 'del')
- ;
- \end{rail}
+ @{rail "
+ @@{attribute (ZF) TC} (() | 'add' | 'del')
+ "}
\begin{description}
@@ -55,42 +54,40 @@
@{command_def (ZF) "codatatype"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- ('inductive' | 'coinductive') domains intros hints
+ @{rail "
+ (@@{command (ZF) inductive} | @@{command (ZF) coinductive}) domains intros hints
;
- domains: 'domains' (term + '+') ('<=' | subseteq) term
- ;
- intros: 'intros' (thmdecl? prop +)
+ domains: @'domains' (@{syntax term} + '+') ('<=' | '\<subseteq>') @{syntax term}
;
- hints: monos? condefs? typeintros? typeelims?
+ intros: @'intros' (@{syntax thmdecl}? @{syntax prop} +)
;
- monos: ('monos' thmrefs)?
+ hints: @{syntax (ZF) \"monos\"}? condefs? @{syntax (ZF) typeintros}? @{syntax (ZF) typeelims}?
;
- condefs: ('con_defs' thmrefs)?
+ @{syntax_def (ZF) \"monos\"}: @'monos' @{syntax thmrefs}
;
- typeintros: ('type_intros' thmrefs)?
+ condefs: @'con_defs' @{syntax thmrefs}
;
- typeelims: ('type_elims' thmrefs)?
+ @{syntax_def (ZF) typeintros}: @'type_intros' @{syntax thmrefs}
;
- \end{rail}
+ @{syntax_def (ZF) typeelims}: @'type_elims' @{syntax thmrefs}
+ "}
In the following syntax specification @{text "monos"}, @{text
typeintros}, and @{text typeelims} are the same as above.
- \begin{rail}
- ('datatype' | 'codatatype') domain? (dtspec + 'and') hints
+ @{rail "
+ (@@{command (ZF) datatype} | @@{command (ZF) codatatype}) domain? (dtspec + @'and') hints
;
- domain: ('<=' | subseteq) term
+ domain: ('<=' | '\<subseteq>') @{syntax term}
;
- dtspec: term '=' (con + '|')
+ dtspec: @{syntax term} '=' (con + '|')
;
- con: name ('(' (term ',' +) ')')?
+ con: @{syntax name} ('(' (@{syntax term} ',' +) ')')?
;
- hints: monos? typeintros? typeelims?
- ;
- \end{rail}
+ hints: @{syntax (ZF) \"monos\"}? @{syntax (ZF) typeintros}? @{syntax (ZF) typeelims}?
+ "}
See \cite{isabelle-ZF} for further information on inductive
definitions in ZF, but note that this covers the old-style theory
@@ -105,10 +102,9 @@
@{command_def (ZF) "primrec"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- 'primrec' (thmdecl? prop +)
- ;
- \end{rail}
+ @{rail "
+ @@{command (ZF) primrec} (@{syntax thmdecl}? @{syntax prop} +)
+ "}
*}
@@ -125,14 +121,14 @@
@{command_def (ZF) "inductive_cases"} & : & @{text "theory \<rightarrow> theory"} \\
\end{matharray}
- \begin{rail}
- ('case_tac' | 'induct_tac') goalspec? name
+ @{rail "
+ (@@{method (ZF) case_tac} | @@{method (ZF) induct_tac}) @{syntax goalspec}? @{syntax name}
;
- indcases (prop +)
+ @@{method (ZF) ind_cases} (@{syntax prop} +)
;
- inductivecases (thmdecl? (prop +) + 'and')
+ @@{command (ZF) inductive_cases} (@{syntax thmdecl}? (@{syntax prop} +) + @'and')
;
- \end{rail}
+ "}
*}
end
--- a/doc-src/IsarRef/Thy/document/Document_Preparation.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/Document_Preparation.tex Mon May 02 01:20:28 2011 +0200
@@ -102,12 +102,45 @@
markup commands, but have a different status within Isabelle/Isar
syntax.
- \begin{rail}
- ('chapter' | 'section' | 'subsection' | 'subsubsection' | 'text') target? text
- ;
- ('header' | 'text_raw' | 'sect' | 'subsect' | 'subsubsect' | 'txt' | 'txt_raw') text
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{5}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.chapter}{\mbox{\isa{\isacommand{chapter}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.section}{\mbox{\isa{\isacommand{section}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.subsection}{\mbox{\isa{\isacommand{subsection}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.subsubsection}{\mbox{\isa{\isacommand{subsubsection}}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{command.text}{\mbox{\isa{\isacommand{text}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\rail@begin{7}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.header}{\mbox{\isa{\isacommand{header}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.text-raw}{\mbox{\isa{\isacommand{text{\isaliteral{5F}{\isacharunderscore}}raw}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.sect}{\mbox{\isa{\isacommand{sect}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.subsect}{\mbox{\isa{\isacommand{subsect}}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{command.subsubsect}{\mbox{\isa{\isacommand{subsubsect}}}}}[]
+\rail@nextbar{5}
+\rail@term{\hyperlink{command.txt}{\mbox{\isa{\isacommand{txt}}}}}[]
+\rail@nextbar{6}
+\rail@term{\hyperlink{command.txt-raw}{\mbox{\isa{\isacommand{txt{\isaliteral{5F}{\isacharunderscore}}raw}}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -196,42 +229,142 @@
antiquotations are checked within the current theory or proof
context.
- \begin{rail}
- atsign lbrace antiquotation rbrace
- ;
-
- antiquotation:
- 'theory' options name |
- 'thm' options styles thmrefs |
- 'lemma' options prop 'by' method |
- 'prop' options styles prop |
- 'term' options styles term |
- 'term_type' options styles term |
- 'typeof' options styles term |
- 'const' options term |
- 'abbrev' options term |
- 'typ' options type |
- 'type' options name |
- 'class' options name |
- 'text' options name |
- 'goals' options |
- 'subgoals' options |
- 'prf' options thmrefs |
- 'full_prf' options thmrefs |
- 'ML' options name |
- 'ML_type' options name |
- 'ML_struct' options name |
- 'file' options name
- ;
- options: '[' (option * ',') ']'
- ;
- option: name | name '=' name
- ;
- styles: '(' (style + ',') ')'
- ;
- style: (name +)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\isa{{\isaliteral{40}{\isacharat}}{\isaliteral{7B}{\isacharbraceleft}}}}[]
+\rail@nont{\isa{antiquotation}}[]
+\rail@term{\isa{{\isaliteral{7D}{\isacharbraceright}}}}[]
+\rail@end
+\rail@begin{21}{\indexdef{}{syntax}{antiquotation}\hypertarget{syntax.antiquotation}{\hyperlink{syntax.antiquotation}{\mbox{\isa{antiquotation}}}}}
+\rail@bar
+\rail@term{\hyperlink{antiquotation.theory}{\mbox{\isa{theory}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{antiquotation.thm}{\mbox{\isa{thm}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\isa{styles}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{antiquotation.lemma}{\mbox{\isa{lemma}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@term{\isa{\isakeyword{by}}}[]
+\rail@nont{\hyperlink{syntax.method}{\mbox{\isa{method}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{antiquotation.prop}{\mbox{\isa{prop}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\isa{styles}}[]
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{antiquotation.term}{\mbox{\isa{term}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\isa{styles}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextbar{5}
+\rail@term{\hyperlink{antiquotation.term-type}{\mbox{\isa{term{\isaliteral{5F}{\isacharunderscore}}type}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\isa{styles}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextbar{6}
+\rail@term{\hyperlink{antiquotation.typeof}{\mbox{\isa{typeof}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\isa{styles}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextbar{7}
+\rail@term{\hyperlink{antiquotation.const}{\mbox{\isa{const}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextbar{8}
+\rail@term{\hyperlink{antiquotation.abbrev}{\mbox{\isa{abbrev}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextbar{9}
+\rail@term{\hyperlink{antiquotation.typ}{\mbox{\isa{typ}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@nextbar{10}
+\rail@term{\hyperlink{antiquotation.type}{\mbox{\isa{type}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{11}
+\rail@term{\hyperlink{antiquotation.class}{\mbox{\isa{class}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{12}
+\rail@term{\hyperlink{antiquotation.text}{\mbox{\isa{text}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{13}
+\rail@term{\hyperlink{antiquotation.goals}{\mbox{\isa{goals}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nextbar{14}
+\rail@term{\hyperlink{antiquotation.subgoals}{\mbox{\isa{subgoals}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nextbar{15}
+\rail@term{\hyperlink{antiquotation.prf}{\mbox{\isa{prf}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextbar{16}
+\rail@term{\hyperlink{antiquotation.full-prf}{\mbox{\isa{full{\isaliteral{5F}{\isacharunderscore}}prf}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextbar{17}
+\rail@term{\hyperlink{antiquotation.ML}{\mbox{\isa{ML}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{18}
+\rail@term{\hyperlink{antiquotation.ML-type}{\mbox{\isa{ML{\isaliteral{5F}{\isacharunderscore}}type}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{19}
+\rail@term{\hyperlink{antiquotation.ML-struct}{\mbox{\isa{ML{\isaliteral{5F}{\isacharunderscore}}struct}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{20}
+\rail@term{\hyperlink{antiquotation.file}{\mbox{\isa{file}}}}[]
+\rail@nont{\isa{options}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{options}}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\isa{option}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@endbar
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{option}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{styles}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\isa{style}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{style}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\end{railoutput}
+ %% FIXME check lemma
Note that the syntax of antiquotations may \emph{not} include source
comments \verb|(*|~\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{22}{\isachardoublequote}}}~\verb|*)| nor verbatim
@@ -439,12 +572,23 @@
presentation tags, to indicate some modification in the way it is
printed in the document.
- \indexouternonterm{tags}
- \begin{rail}
- tags: ( tag * )
- ;
- tag: '\%' (ident | string)
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\indexdef{}{syntax}{tags}\hypertarget{syntax.tags}{\hyperlink{syntax.tags}{\mbox{\isa{tags}}}}}
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\isa{tag}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{tag}}
+\rail@term{\isa{{\isaliteral{25}{\isacharpercent}}}}[]
+\rail@bar
+\rail@nont{\hyperlink{syntax.ident}{\mbox{\isa{ident}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
Some tags are pre-declared for certain classes of commands, serving
as default markup if no tags are given in the text:
@@ -494,10 +638,20 @@
\indexdef{}{command}{print\_drafts}\hypertarget{command.print-drafts}{\hyperlink{command.print-drafts}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}drafts}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}any\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('display_drafts' | 'print_drafts') (name +)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.display-drafts}{\mbox{\isa{\isacommand{display{\isaliteral{5F}{\isacharunderscore}}drafts}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.print-drafts}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}drafts}}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
--- a/doc-src/IsarRef/Thy/document/Generic.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/Generic.tex Mon May 02 01:20:28 2011 +0200
@@ -45,9 +45,27 @@
\indexdef{}{command}{print\_configs}\hypertarget{command.print-configs}{\hyperlink{command.print-configs}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}configs}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- name ('=' ('true' | 'false' | int | float | name))?
- \end{rail}
+ \begin{railoutput}
+\rail@begin{6}{\isa{}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@bar
+\rail@term{\isa{true}}[]
+\rail@nextbar{2}
+\rail@term{\isa{false}}[]
+\rail@nextbar{3}
+\rail@nont{\hyperlink{syntax.int}{\mbox{\isa{int}}}}[]
+\rail@nextbar{4}
+\rail@nont{\hyperlink{syntax.float}{\mbox{\isa{float}}}}[]
+\rail@nextbar{5}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endbar
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -83,12 +101,35 @@
\indexdef{}{method}{fail}\hypertarget{method.fail}{\hyperlink{method.fail}{\mbox{\isa{fail}}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- ('fold' | 'unfold' | 'insert') thmrefs
- ;
- ('erule' | 'drule' | 'frule') ('('nat')')? thmrefs
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.fold}{\mbox{\isa{fold}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.unfold}{\mbox{\isa{unfold}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{method.insert}{\mbox{\isa{insert}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.erule}{\mbox{\isa{erule}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.drule}{\mbox{\isa{drule}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{method.frule}{\mbox{\isa{frule}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -138,17 +179,47 @@
\indexdef{}{attribute}{no\_vars}\hypertarget{attribute.no-vars}{\hyperlink{attribute.no-vars}{\mbox{\isa{no{\isaliteral{5F}{\isacharunderscore}}vars}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'tagged' name name
- ;
- 'untagged' name
- ;
- ('THEN' | 'COMP') ('[' nat ']')? thmref
- ;
- ('unfolded' | 'folded') thmrefs
- ;
- 'rotated' ( int )?
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.tagged}{\mbox{\isa{tagged}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.untagged}{\mbox{\isa{untagged}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{attribute.THEN}{\mbox{\isa{THEN}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{attribute.COMP}{\mbox{\isa{COMP}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{attribute.unfolded}{\mbox{\isa{unfolded}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{attribute.folded}{\mbox{\isa{folded}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.rotated}{\mbox{\isa{rotated}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.int}{\mbox{\isa{int}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -199,12 +270,38 @@
\indexdef{}{method}{split}\hypertarget{method.split}{\hyperlink{method.split}{\mbox{\isa{split}}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- 'subst' ('(' 'asm' ')')? ('(' (nat+) ')')? thmref
- ;
- 'split' ('(' 'asm' ')')? thmrefs
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{method.subst}{\mbox{\isa{subst}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{asm}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.split}{\mbox{\isa{split}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{asm}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\end{railoutput}
+
These methods provide low-level facilities for equational reasoning
that are intended for specialized applications only. Normally,
@@ -302,22 +399,85 @@
\indexdef{}{method}{raw\_tactic}\hypertarget{method.raw-tactic}{\hyperlink{method.raw-tactic}{\mbox{\isa{raw{\isaliteral{5F}{\isacharunderscore}}tactic}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- ( 'rule_tac' | 'erule_tac' | 'drule_tac' | 'frule_tac' | 'cut_tac' | 'thin_tac' ) goalspec?
- ( insts thmref | thmrefs )
- ;
- 'subgoal_tac' goalspec? (prop +)
- ;
- 'rename_tac' goalspec? (name +)
- ;
- 'rotate_tac' goalspec? int?
- ;
- ('tactic' | 'raw_tactic') text
- ;
-
- insts: ((name '=' term) + 'and') 'in'
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{6}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.rule-tac}{\mbox{\isa{rule{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.erule-tac}{\mbox{\isa{erule{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{method.drule-tac}{\mbox{\isa{drule{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{method.frule-tac}{\mbox{\isa{frule{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{method.cut-tac}{\mbox{\isa{cut{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@nextbar{5}
+\rail@term{\hyperlink{method.thin-tac}{\mbox{\isa{thin{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nont{\isa{insts}}[]
+\rail@nont{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.subgoal-tac}{\mbox{\isa{subgoal{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.rename-tac}{\mbox{\isa{rename{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.rotate-tac}{\mbox{\isa{rotate{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.int}{\mbox{\isa{int}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.tactic}{\mbox{\isa{tactic}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.raw-tactic}{\mbox{\isa{raw{\isaliteral{5F}{\isacharunderscore}}tactic}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\rail@begin{2}{\isa{insts}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{\isakeyword{in}}}[]
+\rail@end
+\end{railoutput}
+ % FIXME check use of insts
\begin{description}
@@ -383,31 +543,78 @@
\indexdef{}{method}{simp\_all}\hypertarget{method.simp-all}{\hyperlink{method.simp-all}{\mbox{\isa{simp{\isaliteral{5F}{\isacharunderscore}}all}}}} & : & \isa{method} \\
\end{matharray}
- \indexouternonterm{simpmod}
- \begin{rail}
- ('simp' | 'simp_all') opt? (simpmod *)
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.simp}{\mbox{\isa{simp}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.simp-all}{\mbox{\isa{simp{\isaliteral{5F}{\isacharunderscore}}all}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{opt}}[]
+\rail@endbar
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.simpmod}{\mbox{\isa{simpmod}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{4}{\isa{opt}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}asm}}[]
+\rail@nextbar{1}
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}asm{\isaliteral{5F}{\isacharunderscore}}simp}}[]
+\rail@nextbar{2}
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}asm{\isaliteral{5F}{\isacharunderscore}}use}}[]
+\rail@nextbar{3}
+\rail@term{\isa{asm{\isaliteral{5F}{\isacharunderscore}}lr}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{9}{\indexdef{}{syntax}{simpmod}\hypertarget{syntax.simpmod}{\hyperlink{syntax.simpmod}{\mbox{\isa{simpmod}}}}}
+\rail@bar
+\rail@term{\isa{add}}[]
+\rail@nextbar{1}
+\rail@term{\isa{del}}[]
+\rail@nextbar{2}
+\rail@term{\isa{only}}[]
+\rail@nextbar{3}
+\rail@term{\isa{cong}}[]
+\rail@bar
+\rail@nextbar{4}
+\rail@term{\isa{add}}[]
+\rail@nextbar{5}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@nextbar{6}
+\rail@term{\isa{split}}[]
+\rail@bar
+\rail@nextbar{7}
+\rail@term{\isa{add}}[]
+\rail@nextbar{8}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\end{railoutput}
- opt: '(' ('no_asm' | 'no_asm_simp' | 'no_asm_use' | 'asm_lr' ) ')'
- ;
- simpmod: ('add' | 'del' | 'only' | 'cong' (() | 'add' | 'del') |
- 'split' (() | 'add' | 'del')) ':' thmrefs
- ;
- \end{rail}
\begin{description}
\item \hyperlink{method.simp}{\mbox{\isa{simp}}} invokes the Simplifier, after declaring
additional rules according to the arguments given. Note that the
- \railtterm{only} modifier first removes all other rewrite rules,
+ \isa{only} modifier first removes all other rewrite rules,
congruences, and looper tactics (including splits), and then behaves
- like \railtterm{add}.
+ like \isa{add}.
- \medskip The \railtterm{cong} modifiers add or delete Simplifier
+ \medskip The \isa{cong} modifiers add or delete Simplifier
congruence rules (see also \cite{isabelle-ref}), the default is to
add.
- \medskip The \railtterm{split} modifiers add or delete rules for the
+ \medskip The \isa{split} modifiers add or delete rules for the
Splitter (see also \cite{isabelle-ref}), the default is to add.
This works only if the Simplifier method has been properly setup to
include the Splitter (all major object logics such HOL, HOLCF, FOL,
@@ -459,10 +666,24 @@
\indexdef{}{attribute}{split}\hypertarget{attribute.split}{\hyperlink{attribute.split}{\mbox{\isa{split}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- ('simp' | 'cong' | 'split') (() | 'add' | 'del')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{attribute.simp}{\mbox{\isa{simp}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{attribute.cong}{\mbox{\isa{cong}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{attribute.split}{\mbox{\isa{split}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -490,13 +711,48 @@
simproc & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'simproc_setup' name '(' (term + '|') ')' '=' text \\ ('identifier' (nameref+))?
- ;
+ \begin{railoutput}
+\rail@begin{6}{\isa{}}
+\rail@term{\hyperlink{command.simproc-setup}{\mbox{\isa{\isacommand{simproc{\isaliteral{5F}{\isacharunderscore}}setup}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@cr{3}
+\rail@bar
+\rail@nextbar{4}
+\rail@term{\isa{\isakeyword{identifier}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextplus{5}
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{attribute.simproc}{\mbox{\isa{simproc}}}}[]
+\rail@bar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@endbar
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\end{railoutput}
- 'simproc' (('add' ':')? | 'del' ':') (name+)
- ;
- \end{rail}
\begin{description}
@@ -535,13 +791,31 @@
\indexdef{}{attribute}{simplified}\hypertarget{attribute.simplified}{\hyperlink{attribute.simplified}{\mbox{\isa{simplified}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'simplified' opt? thmrefs?
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.simplified}{\mbox{\isa{simplified}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{opt}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{opt}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}asm}}[]
+\rail@nextbar{1}
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}asm{\isaliteral{5F}{\isacharunderscore}}simp}}[]
+\rail@nextbar{2}
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}asm{\isaliteral{5F}{\isacharunderscore}}use}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\end{railoutput}
- opt: '(' ('no_asm' | 'no_asm_simp' | 'no_asm_use') ')'
- ;
- \end{rail}
\begin{description}
@@ -576,10 +850,22 @@
\indexdef{}{method}{elim}\hypertarget{method.elim}{\hyperlink{method.elim}{\mbox{\isa{elim}}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- ('rule' | 'intro' | 'elim') thmrefs?
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.rule}{\mbox{\isa{rule}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.intro}{\mbox{\isa{intro}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{method.elim}{\mbox{\isa{elim}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -623,16 +909,58 @@
\indexdef{}{method}{clarify}\hypertarget{method.clarify}{\hyperlink{method.clarify}{\mbox{\isa{clarify}}}} & : & \isa{method} \\
\end{matharray}
- \indexouternonterm{clamod}
- \begin{rail}
- 'blast' nat? (clamod *)
- ;
- ('fast' | 'slow' | 'best' | 'safe' | 'clarify') (clamod *)
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.blast}{\mbox{\isa{blast}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.clamod}{\mbox{\isa{clamod}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{5}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.fast}{\mbox{\isa{fast}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.slow}{\mbox{\isa{slow}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{method.best}{\mbox{\isa{best}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{method.safe}{\mbox{\isa{safe}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{method.clarify}{\mbox{\isa{clarify}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.clamod}{\mbox{\isa{clamod}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{4}{\indexdef{}{syntax}{clamod}\hypertarget{syntax.clamod}{\hyperlink{syntax.clamod}{\mbox{\isa{clamod}}}}}
+\rail@bar
+\rail@bar
+\rail@term{\isa{intro}}[]
+\rail@nextbar{1}
+\rail@term{\isa{elim}}[]
+\rail@nextbar{2}
+\rail@term{\isa{dest}}[]
+\rail@endbar
+\rail@bar
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@nextbar{1}
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@endbar
+\rail@nextbar{3}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\end{railoutput}
- clamod: (('intro' | 'elim' | 'dest') ('!' | () | '?') | 'del') ':' thmrefs
- ;
- \end{rail}
\begin{description}
@@ -667,18 +995,97 @@
\indexdef{}{method}{bestsimp}\hypertarget{method.bestsimp}{\hyperlink{method.bestsimp}{\mbox{\isa{bestsimp}}}} & : & \isa{method} \\
\end{matharray}
- \indexouternonterm{clasimpmod}
- \begin{rail}
- 'auto' (nat nat)? (clasimpmod *)
- ;
- ('force' | 'clarsimp' | 'fastsimp' | 'slowsimp' | 'bestsimp') (clasimpmod *)
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.auto}{\mbox{\isa{auto}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{5}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.force}{\mbox{\isa{force}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.clarsimp}{\mbox{\isa{clarsimp}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{method.fastsimp}{\mbox{\isa{fastsimp}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{method.slowsimp}{\mbox{\isa{slowsimp}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{method.bestsimp}{\mbox{\isa{bestsimp}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{14}{\indexdef{}{syntax}{clasimpmod}\hypertarget{syntax.clasimpmod}{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}}
+\rail@bar
+\rail@term{\isa{simp}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@nextbar{3}
+\rail@term{\isa{only}}[]
+\rail@endbar
+\rail@nextbar{4}
+\rail@bar
+\rail@term{\isa{cong}}[]
+\rail@nextbar{5}
+\rail@term{\isa{split}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{5}
+\rail@term{\isa{add}}[]
+\rail@nextbar{6}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@nextbar{7}
+\rail@term{\isa{iff}}[]
+\rail@bar
+\rail@bar
+\rail@nextbar{8}
+\rail@term{\isa{add}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{8}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@endbar
+\rail@nextbar{9}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@nextbar{10}
+\rail@bar
+\rail@bar
+\rail@term{\isa{intro}}[]
+\rail@nextbar{11}
+\rail@term{\isa{elim}}[]
+\rail@nextbar{12}
+\rail@term{\isa{dest}}[]
+\rail@endbar
+\rail@bar
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@nextbar{11}
+\rail@nextbar{12}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@endbar
+\rail@nextbar{13}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\end{railoutput}
- clasimpmod: ('simp' (() | 'add' | 'del' | 'only') |
- ('cong' | 'split') (() | 'add' | 'del') |
- 'iff' (((() | 'add') '?'?) | 'del') |
- (('intro' | 'elim' | 'dest') ('!' | () | '?') | 'del')) ':' thmrefs
- \end{rail}
\begin{description}
@@ -688,7 +1095,7 @@
added as wrapper, see \cite{isabelle-ref} for more information. The
modifier arguments correspond to those given in
\secref{sec:simplifier} and \secref{sec:classical}. Just note that
- the ones related to the Simplifier are prefixed by \railtterm{simp}
+ the ones related to the Simplifier are prefixed by \isa{simp}
here.
Facts provided by forward chaining are inserted into the goal before
@@ -712,14 +1119,47 @@
\indexdef{}{attribute}{iff}\hypertarget{attribute.iff}{\hyperlink{attribute.iff}{\mbox{\isa{iff}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- ('intro' | 'elim' | 'dest') ('!' | () | '?') nat?
- ;
- 'rule' 'del'
- ;
- 'iff' (((() | 'add') '?'?) | 'del')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{attribute.intro}{\mbox{\isa{intro}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{attribute.elim}{\mbox{\isa{elim}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{attribute.dest}{\mbox{\isa{dest}}}}[]
+\rail@endbar
+\rail@bar
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@nextbar{1}
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.rule}{\mbox{\isa{rule}}}}[]
+\rail@term{\isa{del}}[]
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{attribute.iff}{\mbox{\isa{iff}}}}[]
+\rail@bar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@endbar
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -805,14 +1245,31 @@
Generic tools may refer to the information provided by object-logic
declarations internally.
- \begin{rail}
- 'judgment' constdecl
- ;
- 'atomize' ('(' 'full' ')')?
- ;
- 'rule_format' ('(' 'noasm' ')')?
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.judgment}{\mbox{\isa{\isacommand{judgment}}}}}[]
+\rail@nont{\hyperlink{syntax.constdecl}{\mbox{\isa{constdecl}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.atomize}{\mbox{\isa{atomize}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{full}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.rule-format}{\mbox{\isa{rule{\isaliteral{5F}{\isacharunderscore}}format}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{noasm}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
--- a/doc-src/IsarRef/Thy/document/HOLCF_Specific.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/HOLCF_Specific.tex Mon May 02 01:20:28 2011 +0200
@@ -54,16 +54,49 @@
\indexdef{HOLCF}{command}{domain}\hypertarget{command.HOLCF.domain}{\hyperlink{command.HOLCF.domain}{\mbox{\isa{\isacommand{domain}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'domain' parname? (dmspec + 'and')
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOLCF.domain}{\mbox{\isa{\isacommand{domain}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.parname}{\mbox{\isa{parname}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\isa{dmspec}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{dmspec}}
+\rail@nont{\hyperlink{syntax.typespec}{\mbox{\isa{typespec}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@plus
+\rail@nont{\isa{cons}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{cons}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@endplus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{dtrules}}
+\rail@term{\isa{\isakeyword{distinct}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@term{\isa{\isakeyword{inject}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@term{\isa{\isakeyword{induction}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\end{railoutput}
- dmspec: typespec '=' (cons + '|')
- ;
- cons: name (type *) mixfix?
- ;
- dtrules: 'distinct' thmrefs 'inject' thmrefs 'induction' thmrefs
- \end{rail}
Recursive domains in HOLCF are analogous to datatypes in classical
HOL (cf.\ \secref{sec:hol-datatype}). Mutual recursion is
--- a/doc-src/IsarRef/Thy/document/HOL_Specific.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/HOL_Specific.tex Mon May 02 01:20:28 2011 +0200
@@ -31,17 +31,47 @@
\indexdef{HOL}{command}{typedef}\hypertarget{command.HOL.typedef}{\hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'typedef' altname? abstype '=' repset
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{altname}}[]
+\rail@endbar
+\rail@nont{\isa{abstype}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\isa{repset}}[]
+\rail@end
+\rail@begin{3}{\isa{altname}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{open}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{\isakeyword{open}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{abstype}}
+\rail@nont{\hyperlink{syntax.typespecsorts}{\mbox{\isa{typespecsorts}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{repset}}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{morphisms}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- altname: '(' (name | 'open' | 'open' name) ')'
- ;
- abstype: typespecsorts mixfix?
- ;
- repset: term ('morphisms' name name)?
- ;
- \end{rail}
\begin{description}
@@ -89,13 +119,21 @@
%
\begin{isamarkuptext}%
\begin{matharray}{rcl}
- \hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isaliteral{5F}{\isacharunderscore}}format}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{attribute} \\
+ \indexdef{HOL}{attribute}{split\_format}\hypertarget{attribute.HOL.split-format}{\hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isaliteral{5F}{\isacharunderscore}}format}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'split_format' '(' 'complete' ')'
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isaliteral{5F}{\isacharunderscore}}format}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{complete}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -198,10 +236,23 @@
\indexdef{HOL}{command}{record}\hypertarget{command.HOL.record}{\hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'record' typespecsorts '=' (type '+')? (constdecl +)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}}}[]
+\rail@nont{\hyperlink{syntax.typespecsorts}{\mbox{\isa{typespecsorts}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@term{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.constdecl}{\mbox{\isa{constdecl}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -358,16 +409,61 @@
\indexdef{HOL}{command}{rep\_datatype}\hypertarget{command.HOL.rep-datatype}{\hyperlink{command.HOL.rep-datatype}{\mbox{\isa{\isacommand{rep{\isaliteral{5F}{\isacharunderscore}}datatype}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'datatype' (dtspec + 'and')
- ;
- 'rep_datatype' ('(' (name +) ')')? (term +)
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.datatype}{\mbox{\isa{\isacommand{datatype}}}}}[]
+\rail@plus
+\rail@nont{\isa{dtspec}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.HOL.rep-datatype}{\mbox{\isa{\isacommand{rep{\isaliteral{5F}{\isacharunderscore}}datatype}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{dtspec}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.parname}{\mbox{\isa{parname}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.typespec}{\mbox{\isa{typespec}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@plus
+\rail@nont{\isa{cons}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{cons}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@endplus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- dtspec: parname? typespec mixfix? '=' (cons + '|')
- ;
- cons: name ( type * ) mixfix?
- \end{rail}
\begin{description}
@@ -402,10 +498,18 @@
\indexdef{HOL}{command}{enriched\_type}\hypertarget{command.HOL.enriched-type}{\hyperlink{command.HOL.enriched-type}{\mbox{\isa{\isacommand{enriched{\isaliteral{5F}{\isacharunderscore}}type}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}
\end{matharray}
- \begin{rail}
- 'enriched_type' (prefix ':')? term
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.enriched-type}{\mbox{\isa{\isacommand{enriched{\isaliteral{5F}{\isacharunderscore}}type}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{prefix}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\end{railoutput}
+ % FIXME check prefix
\begin{description}
@@ -447,17 +551,69 @@
\indexdef{HOL}{command}{termination}\hypertarget{command.HOL.termination}{\hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'primrec' target? fixes 'where' equations
- ;
- ('fun' | 'function') target? functionopts? fixes \\ 'where' equations
- ;
- equations: (thmdecl? prop + '|')
- ;
- functionopts: '(' (('sequential' | 'domintros') + ',') ')'
- ;
- 'termination' ( term )?
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@nont{\isa{equations}}[]
+\rail@end
+\rail@begin{4}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.HOL.fun}{\mbox{\isa{\isacommand{fun}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{functionopts}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@cr{3}
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@nont{\isa{equations}}[]
+\rail@end
+\rail@begin{3}{\isa{equations}}
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{functionopts}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@bar
+\rail@term{\isa{sequential}}[]
+\rail@nextbar{1}
+\rail@term{\isa{domintros}}[]
+\rail@endbar
+\rail@nextplus{2}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -539,15 +695,40 @@
\indexdef{HOL}{method}{size\_change}\hypertarget{method.HOL.size-change}{\hyperlink{method.HOL.size-change}{\mbox{\isa{size{\isaliteral{5F}{\isacharunderscore}}change}}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- 'relation' term
- ;
- 'lexicographic_order' ( clasimpmod * )
- ;
- 'size_change' ( orders ( clasimpmod * ) )
- ;
- orders: ( 'max' | 'min' | 'ms' ) *
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{method.HOL.relation}{\mbox{\isa{relation}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.HOL.lexicographic-order}{\mbox{\isa{lexicographic{\isaliteral{5F}{\isacharunderscore}}order}}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.HOL.size-change}{\mbox{\isa{size{\isaliteral{5F}{\isacharunderscore}}change}}}}[]
+\rail@nont{\isa{orders}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{4}{\isa{orders}}
+\rail@plus
+\rail@nextplus{1}
+\rail@bar
+\rail@term{\isa{max}}[]
+\rail@nextbar{2}
+\rail@term{\isa{min}}[]
+\rail@nextbar{3}
+\rail@term{\isa{ms}}[]
+\rail@endbar
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -599,9 +780,27 @@
\indexdef{HOL}{attribute}{partial\_function\_mono}\hypertarget{attribute.HOL.partial-function-mono}{\hyperlink{attribute.HOL.partial-function-mono}{\mbox{\isa{partial{\isaliteral{5F}{\isacharunderscore}}function{\isaliteral{5F}{\isacharunderscore}}mono}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'partial_function' target? '(' mode ')' fixes \\ 'where' thmdecl? prop
- \end{rail}
+ \begin{railoutput}
+\rail@begin{5}{\isa{}}
+\rail@term{\hyperlink{command.HOL.partial-function}{\mbox{\isa{\isacommand{partial{\isaliteral{5F}{\isacharunderscore}}function}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{mode}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@cr{3}
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@end
+\end{railoutput}
+ % FIXME check mode
\begin{description}
@@ -666,18 +865,76 @@
\indexdef{HOL}{command}{recdef\_tc}\hypertarget{command.HOL.recdef-tc}{\hyperlink{command.HOL.recdef-tc}{\mbox{\isa{\isacommand{recdef{\isaliteral{5F}{\isacharunderscore}}tc}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'recdef' ('(' 'permissive' ')')? \\ name term (prop +) hints?
- ;
- recdeftc thmdecl? tc
- ;
- hints: '(' 'hints' ( recdefmod * ) ')'
- ;
- recdefmod: (('recdef_simp' | 'recdef_cong' | 'recdef_wf') (() | 'add' | 'del') ':' thmrefs) | clasimpmod
- ;
- tc: nameref ('(' nat ')')?
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{5}{\isa{}}
+\rail@term{\hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{permissive}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@cr{3}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{4}
+\rail@endplus
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\isa{hints}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@nont{\isa{recdeftc}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\isa{tc}}[]
+\rail@end
+\rail@begin{2}{\isa{hints}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{hints}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\isa{recdefmod}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{4}{\isa{recdefmod}}
+\rail@bar
+\rail@bar
+\rail@term{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}simp}}[]
+\rail@nextbar{1}
+\rail@term{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}cong}}[]
+\rail@nextbar{2}
+\rail@term{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}wf}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextbar{3}
+\rail@nont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{tc}}
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -710,10 +967,23 @@
\indexdef{HOL}{attribute}{recdef\_wf}\hypertarget{attribute.HOL.recdef-wf}{\hyperlink{attribute.HOL.recdef-wf}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}wf}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- ('recdef_simp' | 'recdef_cong' | 'recdef_wf') (() | 'add' | 'del')
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{attribute.HOL.recdef-simp}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}simp}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{attribute.HOL.recdef-cong}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}cong}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{attribute.HOL.recdef-wf}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}wf}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -752,15 +1022,61 @@
\indexdef{HOL}{attribute}{mono}\hypertarget{attribute.HOL.mono}{\hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- ('inductive' | 'inductive_set' | 'coinductive' | 'coinductive_set') target? fixes ('for' fixes)? \\
- ('where' clauses)? ('monos' thmrefs)?
- ;
- clauses: (thmdecl? prop + '|')
- ;
- 'mono' (() | 'add' | 'del')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{7}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.HOL.inductive-set}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}set}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.HOL.coinductive}{\mbox{\isa{\isacommand{coinductive}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.HOL.coinductive-set}{\mbox{\isa{\isacommand{coinductive{\isaliteral{5F}{\isacharunderscore}}set}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{for}}}[]
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@endbar
+\rail@cr{5}
+\rail@bar
+\rail@nextbar{6}
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@nont{\isa{clauses}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{6}
+\rail@term{\isa{\isakeyword{monos}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{clauses}}
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -893,10 +1209,16 @@
\indexdef{HOL}{method}{iprover}\hypertarget{method.HOL.iprover}{\hyperlink{method.HOL.iprover}{\mbox{\isa{iprover}}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- 'iprover' ( rulemod * )
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.HOL.iprover}{\mbox{\isa{iprover}}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.rulemod}{\mbox{\isa{rulemod}}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
The \hyperlink{method.HOL.iprover}{\mbox{\isa{iprover}}} method performs intuitionistic proof
search, depending on specifically declared rules from the context,
@@ -923,10 +1245,16 @@
\indexdef{HOL}{method}{coherent}\hypertarget{method.HOL.coherent}{\hyperlink{method.HOL.coherent}{\mbox{\isa{coherent}}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- 'coherent' thmrefs?
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.HOL.coherent}{\mbox{\isa{coherent}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
The \hyperlink{method.HOL.coherent}{\mbox{\isa{coherent}}} method solves problems of
\emph{Coherent Logic} \cite{Bezem-Coquand:2005}, which covers
@@ -952,25 +1280,89 @@
\indexdef{HOL}{command}{sledgehammer\_params}\hypertarget{command.HOL.sledgehammer-params}{\hyperlink{command.HOL.sledgehammer-params}{\mbox{\isa{\isacommand{sledgehammer{\isaliteral{5F}{\isacharunderscore}}params}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}}
\end{matharray}
- \begin{rail}
- 'solve_direct'
- ;
-
- 'try' ( ( ( 'simp' | 'intro' | 'elim' | 'dest' ) ':' thmrefs ) + ) ? nat?
- ;
-
- 'sledgehammer' ( '[' args ']' ) ? facts? nat?
- ;
-
- 'sledgehammer_params' ( ( '[' args ']' ) ? )
- ;
-
- args: ( name '=' value + ',' )
- ;
-
- facts: '(' ( ( ( ( 'add' | 'del' ) ':' ) ? thmrefs ) + ) ? ')'
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{6}{\isa{}}
+\rail@term{\hyperlink{command.HOL.try}{\mbox{\isa{\isacommand{try}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@bar
+\rail@term{\isa{simp}}[]
+\rail@nextbar{2}
+\rail@term{\isa{intro}}[]
+\rail@nextbar{3}
+\rail@term{\isa{elim}}[]
+\rail@nextbar{4}
+\rail@term{\isa{dest}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextplus{5}
+\rail@endplus
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.sledgehammer}{\mbox{\isa{\isacommand{sledgehammer}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\isa{args}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{facts}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.sledgehammer-params}{\mbox{\isa{\isacommand{sledgehammer{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\isa{args}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{args}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\isa{value}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{5}{\isa{facts}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@bar
+\rail@nextbar{2}
+\rail@bar
+\rail@term{\isa{add}}[]
+\rail@nextbar{3}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextplus{4}
+\rail@endplus
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\end{railoutput}
+ % FIXME try: proper clasimpmod!?
+ % FIXME check args "value"
\begin{description}
@@ -1014,22 +1406,74 @@
\indexdef{HOL}{command}{nitpick\_params}\hypertarget{command.HOL.nitpick-params}{\hyperlink{command.HOL.nitpick-params}{\mbox{\isa{\isacommand{nitpick{\isaliteral{5F}{\isacharunderscore}}params}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}}
\end{matharray}
- \begin{rail}
- 'value' ( ( '[' name ']' ) ? ) modes? term
- ;
-
- ('quickcheck' | 'refute' | 'nitpick') ( ( '[' args ']' ) ? ) nat?
- ;
-
- ('quickcheck_params' | 'refute_params' | 'nitpick_params') ( ( '[' args ']' ) ? )
- ;
-
- modes: '(' (name + ) ')'
- ;
-
- args: ( name '=' value + ',' )
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.value}{\mbox{\isa{\isacommand{value}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\isa{name}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{modes}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.HOL.quickcheck}{\mbox{\isa{\isacommand{quickcheck}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.HOL.refute}{\mbox{\isa{\isacommand{refute}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.HOL.nitpick}{\mbox{\isa{\isacommand{nitpick}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\isa{args}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.HOL.quickcheck-params}{\mbox{\isa{\isacommand{quickcheck{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.HOL.refute-params}{\mbox{\isa{\isacommand{refute{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.HOL.nitpick-params}{\mbox{\isa{\isacommand{nitpick{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\isa{args}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{modes}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{args}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\isa{value}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+ % FIXME check "value"
\begin{description}
@@ -1154,19 +1598,75 @@
\indexdef{HOL}{command}{inductive\_cases}\hypertarget{command.HOL.inductive-cases}{\hyperlink{command.HOL.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'case_tac' goalspec? term rule?
- ;
- 'induct_tac' goalspec? (insts * 'and') rule?
- ;
- 'ind_cases' (prop +) ('for' (name +)) ?
- ;
- 'inductive_cases' (thmdecl? (prop +) + 'and')
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.HOL.case-tac}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{rule}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{method.HOL.induct-tac}{\mbox{\isa{induct{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\hyperlink{syntax.insts}{\mbox{\isa{insts}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{rule}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{method.HOL.ind-cases}{\mbox{\isa{ind{\isaliteral{5F}{\isacharunderscore}}cases}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{for}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.HOL.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{1}{\isa{rule}}
+\rail@term{\isa{rule}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}[]
+\rail@end
+\end{railoutput}
- rule: ('rule' ':' thmref)
- ;
- \end{rail}
\begin{description}
@@ -1237,85 +1737,317 @@
\indexdef{HOL}{command}{code\_reflect}\hypertarget{command.HOL.code-reflect}{\hyperlink{command.HOL.code-reflect}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reflect}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}}
\end{matharray}
- \begin{rail}
- 'export_code' ( constexpr + ) \\
- ( ( 'in' target ( 'module_name' string ) ? \\
- ( 'file' ( string | '-' ) ) ? ( '(' args ')' ) ?) + ) ?
- ;
-
- const: term
- ;
-
- constexpr: ( const | 'name._' | '_' )
- ;
-
- typeconstructor: nameref
- ;
-
- class: nameref
- ;
-
- target: 'SML' | 'OCaml' | 'Haskell' | 'Scala'
- ;
-
- 'code' ( 'del' | 'abstype' | 'abstract' ) ?
- ;
-
- 'code_abort' ( const + )
- ;
-
- 'code_datatype' ( const + )
- ;
-
- 'code_inline' ( 'del' ) ?
- ;
-
- 'code_post' ( 'del' ) ?
- ;
-
- 'code_thms' ( constexpr + ) ?
- ;
+ \begin{railoutput}
+\rail@begin{11}{\isa{}}
+\rail@term{\hyperlink{command.HOL.export-code}{\mbox{\isa{\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}}}}}[]
+\rail@plus
+\rail@nont{\isa{constexpr}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@cr{3}
+\rail@bar
+\rail@nextbar{4}
+\rail@plus
+\rail@term{\isa{\isakeyword{in}}}[]
+\rail@nont{\isa{target}}[]
+\rail@bar
+\rail@nextbar{5}
+\rail@term{\isa{\isakeyword{module{\isaliteral{5F}{\isacharunderscore}}name}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@endbar
+\rail@cr{7}
+\rail@bar
+\rail@nextbar{8}
+\rail@term{\isa{\isakeyword{file}}}[]
+\rail@bar
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextbar{9}
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@endbar
+\rail@endbar
+\rail@bar
+\rail@nextbar{8}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{args}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nextplus{10}
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{const}}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\rail@begin{3}{\isa{constexpr}}
+\rail@bar
+\rail@nont{\isa{const}}[]
+\rail@nextbar{1}
+\rail@term{\isa{name{\isaliteral{2E}{\isachardot}}{\isaliteral{5F}{\isacharunderscore}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{5F}{\isacharunderscore}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{typeconstructor}}
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@end
+\rail@begin{1}{\isa{class}}
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@end
+\rail@begin{4}{\isa{target}}
+\rail@bar
+\rail@term{\isa{SML}}[]
+\rail@nextbar{1}
+\rail@term{\isa{OCaml}}[]
+\rail@nextbar{2}
+\rail@term{\isa{Haskell}}[]
+\rail@nextbar{3}
+\rail@term{\isa{Scala}}[]
+\rail@endbar
+\rail@end
+\rail@begin{4}{\isa{}}
+\rail@term{\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@bar
+\rail@term{\isa{del}}[]
+\rail@nextbar{2}
+\rail@term{\isa{abstype}}[]
+\rail@nextbar{3}
+\rail@term{\isa{abstract}}[]
+\rail@endbar
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-abort}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}abort}}}}}[]
+\rail@plus
+\rail@nont{\isa{const}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-datatype}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}datatype}}}}}[]
+\rail@plus
+\rail@nont{\isa{const}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.HOL.code-inline}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}inline}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.HOL.code-post}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}post}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-thms}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}thms}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\isa{constexpr}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-deps}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}deps}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\isa{constexpr}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{7}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-const}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}const}}}}}[]
+\rail@plus
+\rail@nont{\isa{const}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@cr{3}
+\rail@plus
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{target}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\isa{syntax}}[]
+\rail@endbar
+\rail@nextplus{5}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nextplus{6}
+\rail@endplus
+\rail@end
+\rail@begin{7}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-type}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}type}}}}}[]
+\rail@plus
+\rail@nont{\isa{typeconstructor}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@cr{3}
+\rail@plus
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{target}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\isa{syntax}}[]
+\rail@endbar
+\rail@nextplus{5}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nextplus{6}
+\rail@endplus
+\rail@end
+\rail@begin{9}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-class}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}class}}}}}[]
+\rail@plus
+\rail@nont{\isa{class}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@cr{3}
+\rail@plus
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{target}}[]
+\rail@cr{5}
+\rail@plus
+\rail@bar
+\rail@nextbar{6}
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@endbar
+\rail@nextplus{7}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nextplus{8}
+\rail@endplus
+\rail@end
+\rail@begin{7}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-instance}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}instance}}}}}[]
+\rail@plus
+\rail@nont{\isa{typeconstructor}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\isa{class}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@cr{3}
+\rail@plus
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{target}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{4}
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@endbar
+\rail@nextplus{5}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nextplus{6}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-reserved}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reserved}}}}}[]
+\rail@nont{\isa{target}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-monad}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}monad}}}}}[]
+\rail@nont{\isa{const}}[]
+\rail@nont{\isa{const}}[]
+\rail@nont{\isa{target}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-include}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}include}}}}}[]
+\rail@nont{\isa{target}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@bar
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-modulename}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}modulename}}}}}[]
+\rail@nont{\isa{target}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{11}{\isa{}}
+\rail@term{\hyperlink{command.HOL.code-reflect}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reflect}}}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@cr{2}
+\rail@bar
+\rail@nextbar{3}
+\rail@term{\isa{\isakeyword{datatypes}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{5F}{\isacharunderscore}}}}[]
+\rail@nextbar{4}
+\rail@plus
+\rail@plus
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextplus{5}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@nextplus{6}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@endbar
+\rail@endbar
+\rail@cr{8}
+\rail@bar
+\rail@nextbar{9}
+\rail@term{\isa{\isakeyword{functions}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextplus{10}
+\rail@endplus
+\rail@endbar
+\rail@bar
+\rail@nextbar{9}
+\rail@term{\isa{\isakeyword{file}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{4}{\isa{syntax}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextbar{1}
+\rail@bar
+\rail@term{\isa{\isakeyword{infix}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{\isakeyword{infixl}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{\isakeyword{infixr}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- 'code_deps' ( constexpr + ) ?
- ;
-
- 'code_const' (const + 'and') \\
- ( ( '(' target ( syntax ? + 'and' ) ')' ) + )
- ;
-
- 'code_type' (typeconstructor + 'and') \\
- ( ( '(' target ( syntax ? + 'and' ) ')' ) + )
- ;
-
- 'code_class' (class + 'and') \\
- ( ( '(' target \\ ( string ? + 'and' ) ')' ) + )
- ;
-
- 'code_instance' (( typeconstructor '::' class ) + 'and') \\
- ( ( '(' target ( '-' ? + 'and' ) ')' ) + )
- ;
-
- 'code_reserved' target ( string + )
- ;
-
- 'code_monad' const const target
- ;
-
- 'code_include' target ( string ( string | '-') )
- ;
-
- 'code_modulename' target ( ( string string ) + )
- ;
-
- 'code_reflect' string \\
- ( 'datatypes' ( string '=' ( '_' | ( string + '|' ) + 'and' ) ) ) ? \\
- ( 'functions' ( string + ) ) ? ( 'file' string ) ?
- ;
-
- syntax: string | ( 'infix' | 'infixl' | 'infixr' ) nat string
- ;
-
- \end{rail}
\begin{description}
@@ -1438,39 +2170,115 @@
\indexdef{HOL}{attribute}{code}\hypertarget{attribute.HOL.code}{\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- ( 'code_module' | 'code_library' ) modespec ? name ? \\
- ( 'file' name ) ? ( 'imports' ( name + ) ) ? \\
- 'contains' ( ( name '=' term ) + | term + )
- ;
-
- modespec: '(' ( name * ) ')'
- ;
-
- 'consts_code' (codespec +)
- ;
-
- codespec: const template attachment ?
- ;
-
- 'types_code' (tycodespec +)
- ;
-
- tycodespec: name template attachment ?
- ;
-
- const: term
- ;
-
- template: '(' string ')'
- ;
-
- attachment: 'attach' modespec ? verblbrace text verbrbrace
- ;
-
- 'code' (name)?
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{11}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.HOL.code-module}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}module}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.HOL.code-library}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}library}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{modespec}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endbar
+\rail@cr{3}
+\rail@bar
+\rail@nextbar{4}
+\rail@term{\isa{\isakeyword{file}}}[]
+\rail@nont{\isa{name}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{4}
+\rail@term{\isa{\isakeyword{imports}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{5}
+\rail@endplus
+\rail@endbar
+\rail@cr{7}
+\rail@term{\isa{\isakeyword{contains}}}[]
+\rail@bar
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{8}
+\rail@endplus
+\rail@nextbar{9}
+\rail@plus
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{10}
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{modespec}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.consts-code}{\mbox{\isa{\isacommand{consts{\isaliteral{5F}{\isacharunderscore}}code}}}}}[]
+\rail@plus
+\rail@nont{\isa{codespec}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{codespec}}
+\rail@nont{\isa{const}}[]
+\rail@nont{\isa{template}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{attachment}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.HOL.types-code}{\mbox{\isa{\isacommand{types{\isaliteral{5F}{\isacharunderscore}}code}}}}}[]
+\rail@plus
+\rail@nont{\isa{tycodespec}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{tycodespec}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nont{\isa{template}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{attachment}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{const}}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\rail@begin{1}{\isa{template}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{attachment}}
+\rail@term{\isa{attach}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{modespec}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{7B}{\isacharbraceleft}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@term{\isa{{\isaliteral{7D}{\isacharbraceright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{name}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -1484,11 +2292,45 @@
\indexdef{HOL}{command}{ax\_specification}\hypertarget{command.HOL.ax-specification}{\hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('specification' | 'ax_specification') '(' (decl +) ')' \\ (thmdecl? prop +)
- ;
- decl: ((name ':')? term '(' 'overloaded' ')'?)
- \end{rail}
+ \begin{railoutput}
+\rail@begin{6}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\isa{decl}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@cr{3}
+\rail@plus
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{5}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{decl}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{overloaded}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
--- a/doc-src/IsarRef/Thy/document/Inner_Syntax.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/Inner_Syntax.tex Mon May 02 01:20:28 2011 +0200
@@ -44,23 +44,75 @@
These diagnostic commands assist interactive development by printing
internal logical entities in a human-readable fashion.
- \begin{rail}
- 'typ' modes? type
- ;
- 'term' modes? term
- ;
- 'prop' modes? prop
- ;
- 'thm' modes? thmrefs
- ;
- ( 'prf' | 'full_prf' ) modes? thmrefs?
- ;
- 'pr' modes? nat?
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.typ}{\mbox{\isa{\isacommand{typ}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.term}{\mbox{\isa{\isacommand{term}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.prop}{\mbox{\isa{\isacommand{prop}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.thm}{\mbox{\isa{\isacommand{thm}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.prf}{\mbox{\isa{\isacommand{prf}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.full-prf}{\mbox{\isa{\isacommand{full{\isaliteral{5F}{\isacharunderscore}}prf}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.pr}{\mbox{\isa{\isacommand{pr}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{modes}\hypertarget{syntax.modes}{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\end{railoutput}
- modes: '(' (name + ) ')'
- ;
- \end{rail}
\begin{description}
@@ -269,20 +321,69 @@
theorem statements, locale specifications etc.\ also admit mixfix
annotations.
- \indexouternonterm{infix}\indexouternonterm{mixfix}\indexouternonterm{structmixfix}
- \begin{rail}
- infix: '(' ('infix' | 'infixl' | 'infixr') string nat ')'
- ;
- mixfix: infix | '(' string prios? nat? ')' | '(' 'binder' string prios? nat ')'
- ;
- structmixfix: mixfix | '(' 'structure' ')'
- ;
+ \begin{railoutput}
+\rail@begin{3}{\indexdef{}{syntax}{infix}\hypertarget{syntax.infix}{\hyperlink{syntax.infix}{\mbox{\isa{infix}}}}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@term{\isa{\isakeyword{infix}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{infixl}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{\isakeyword{infixr}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{5}{\indexdef{}{syntax}{mixfix}\hypertarget{syntax.mixfix}{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.infix}{\mbox{\isa{infix}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@bar
+\rail@nextbar{2}
+\rail@nont{\isa{prios}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{binder}}}[]
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\isa{prios}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{structmixfix}\hypertarget{syntax.structmixfix}{\hyperlink{syntax.structmixfix}{\mbox{\isa{structmixfix}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{structure}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{prios}}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@end
+\end{railoutput}
- prios: '[' (nat + ',') ']'
- ;
- \end{rail}
- Here the \railtok{string} specifications refer to the actual mixfix
+ Here the \hyperlink{syntax.string}{\mbox{\isa{string}}} specifications refer to the actual mixfix
template, which may include literal text, spacing, blocks, and
arguments (denoted by ``\isa{{\isaliteral{5F}{\isacharunderscore}}}''); the special symbol
``\verb|\<index>|'' (printed as ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C696E6465783E}{\isasymindex}}{\isaliteral{22}{\isachardoublequote}}}'') represents an index
@@ -390,14 +491,66 @@
\indexdef{}{command}{write}\hypertarget{command.write}{\hyperlink{command.write}{\mbox{\isa{\isacommand{write}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof{\isaliteral{28}{\isacharparenleft}}state{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}state{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('type_notation' | 'no_type_notation') target? mode? \\ (nameref mixfix + 'and')
- ;
- ('notation' | 'no_notation') target? mode? \\ (nameref structmixfix + 'and')
- ;
- 'write' mode? (nameref structmixfix + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{5}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.type-notation}{\mbox{\isa{\isacommand{type{\isaliteral{5F}{\isacharunderscore}}notation}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.no-type-notation}{\mbox{\isa{\isacommand{no{\isaliteral{5F}{\isacharunderscore}}type{\isaliteral{5F}{\isacharunderscore}}notation}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mode}{\mbox{\isa{mode}}}}[]
+\rail@endbar
+\rail@cr{3}
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@nextplus{4}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{5}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.notation}{\mbox{\isa{\isacommand{notation}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.no-notation}{\mbox{\isa{\isacommand{no{\isaliteral{5F}{\isacharunderscore}}notation}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mode}{\mbox{\isa{mode}}}}[]
+\rail@endbar
+\rail@cr{3}
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nont{\hyperlink{syntax.structmixfix}{\mbox{\isa{structmixfix}}}}[]
+\rail@nextplus{4}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.write}{\mbox{\isa{\isacommand{write}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mode}{\mbox{\isa{mode}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nont{\hyperlink{syntax.structmixfix}{\mbox{\isa{structmixfix}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -749,19 +902,78 @@
\indexdef{}{command}{no\_translations}\hypertarget{command.no-translations}{\hyperlink{command.no-translations}{\mbox{\isa{\isacommand{no{\isaliteral{5F}{\isacharunderscore}}translations}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'nonterminal' (name + 'and')
- ;
- ('syntax' | 'no_syntax') mode? (constdecl +)
- ;
- ('translations' | 'no_translations') (transpat ('==' | '=>' | '<=' | rightleftharpoons | rightharpoonup | leftharpoondown) transpat +)
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.nonterminal}{\mbox{\isa{\isacommand{nonterminal}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.syntax}{\mbox{\isa{\isacommand{syntax}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.no-syntax}{\mbox{\isa{\isacommand{no{\isaliteral{5F}{\isacharunderscore}}syntax}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mode}{\mbox{\isa{mode}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.constdecl}{\mbox{\isa{constdecl}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{7}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.translations}{\mbox{\isa{\isacommand{translations}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.no-translations}{\mbox{\isa{\isacommand{no{\isaliteral{5F}{\isacharunderscore}}translations}}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\isa{transpat}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{3C}{\isacharless}}{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{5C3C72696768746C656674686172706F6F6E733E}{\isasymrightleftharpoons}}}}[]
+\rail@nextbar{4}
+\rail@term{\isa{{\isaliteral{5C3C7269676874686172706F6F6E75703E}{\isasymrightharpoonup}}}}[]
+\rail@nextbar{5}
+\rail@term{\isa{{\isaliteral{5C3C6C656674686172706F6F6E646F776E3E}{\isasymleftharpoondown}}}}[]
+\rail@endbar
+\rail@nont{\isa{transpat}}[]
+\rail@nextplus{6}
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{mode}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{output}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{\isakeyword{output}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\isa{transpat}}
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@end
+\end{railoutput}
- mode: ('(' ( name | 'output' | name 'output' ) ')')
- ;
- transpat: ('(' nameref ')')? string
- ;
- \end{rail}
\begin{description}
@@ -808,15 +1020,33 @@
\indexdef{}{command}{print\_ast\_translation}\hypertarget{command.print-ast-translation}{\hyperlink{command.print-ast-translation}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}ast{\isaliteral{5F}{\isacharunderscore}}translation}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ( 'parse_ast_translation' | 'parse_translation' | 'print_translation' |
- 'typed_print_translation' | 'print_ast_translation' ) ('(advanced)')? text
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{5}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.parse-ast-translation}{\mbox{\isa{\isacommand{parse{\isaliteral{5F}{\isacharunderscore}}ast{\isaliteral{5F}{\isacharunderscore}}translation}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.parse-translation}{\mbox{\isa{\isacommand{parse{\isaliteral{5F}{\isacharunderscore}}translation}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.print-translation}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}translation}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.typed-print-translation}{\mbox{\isa{\isacommand{typed{\isaliteral{5F}{\isacharunderscore}}print{\isaliteral{5F}{\isacharunderscore}}translation}}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{command.print-ast-translation}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}ast{\isaliteral{5F}{\isacharunderscore}}translation}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{advanced}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\end{railoutput}
+
Syntax translation functions written in ML admit almost arbitrary
manipulations of Isabelle's inner syntax. Any of the above commands
- have a single \railqtok{text} argument that refers to an ML
+ have a single \hyperlink{syntax.text}{\mbox{\isa{text}}} argument that refers to an ML
expression of appropriate type, which are as follows by default:
%FIXME proper antiquotations
--- a/doc-src/IsarRef/Thy/document/Misc.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/Misc.tex Mon May 02 01:20:28 2011 +0200
@@ -41,24 +41,109 @@
\indexdef{}{command}{print\_binds}\hypertarget{command.print-binds}{\hyperlink{command.print-binds}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}binds}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('print_theory' | 'print_theorems') ('!'?)
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.print-theory}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}theory}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.print-theorems}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}theorems}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{6}{\isa{}}
+\rail@term{\hyperlink{command.find-theorems}{\mbox{\isa{\isacommand{find{\isaliteral{5F}{\isacharunderscore}}theorems}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{2}
+\rail@term{\isa{with{\isaliteral{5F}{\isacharunderscore}}dups}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@cr{4}
+\rail@plus
+\rail@nextplus{5}
+\rail@cnont{\isa{thmcriterion}}[]
+\rail@endplus
+\rail@end
+\rail@begin{7}{\isa{thmcriterion}}
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@endbar
+\rail@bar
+\rail@term{\isa{name}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{intro}}[]
+\rail@nextbar{2}
+\rail@term{\isa{elim}}[]
+\rail@nextbar{3}
+\rail@term{\isa{dest}}[]
+\rail@nextbar{4}
+\rail@term{\isa{solves}}[]
+\rail@nextbar{5}
+\rail@term{\isa{simp}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextbar{6}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.find-consts}{\mbox{\isa{\isacommand{find{\isaliteral{5F}{\isacharunderscore}}consts}}}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\isa{constcriterion}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{constcriterion}}
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@endbar
+\rail@bar
+\rail@term{\isa{name}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{strict}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.thm-deps}{\mbox{\isa{\isacommand{thm{\isaliteral{5F}{\isacharunderscore}}deps}}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.unused-thms}{\mbox{\isa{\isacommand{unused{\isaliteral{5F}{\isacharunderscore}}thms}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@plus
+\rail@nextplus{2}
+\rail@cnont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endplus
+\rail@endbar
+\rail@end
+\end{railoutput}
- 'find_theorems' (('(' (nat)? ('with_dups')? ')')?) (thmcriterion *)
- ;
- thmcriterion: ('-'?) ('name' ':' nameref | 'intro' | 'elim' | 'dest' |
- 'solves' | 'simp' ':' term | term)
- ;
- 'find_consts' (constcriterion *)
- ;
- constcriterion: ('-'?) ('name' ':' nameref | 'strict' ':' type | type)
- ;
- 'thm_deps' thmrefs
- ;
- 'unused_thms' (('name'+) '-' ('name'*))?
- ;
- \end{rail}
These commands print certain parts of the theory and proof context.
Note that there are some further ones available, such as for the set
@@ -173,10 +258,17 @@
\indexdef{}{command}{use\_thy}\hypertarget{command.use-thy}{\hyperlink{command.use-thy}{\mbox{\isa{\isacommand{use{\isaliteral{5F}{\isacharunderscore}}thy}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}any\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('cd' | 'use_thy') name
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.cd}{\mbox{\isa{\isacommand{cd}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.use-thy}{\mbox{\isa{\isacommand{use{\isaliteral{5F}{\isacharunderscore}}thy}}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
--- a/doc-src/IsarRef/Thy/document/Outer_Syntax.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/Outer_Syntax.tex Mon May 02 01:20:28 2011 +0200
@@ -207,23 +207,38 @@
\isamarkuptrue%
%
\begin{isamarkuptext}%
-Entity \railqtok{name} usually refers to any name of types,
+Entity \hyperlink{syntax.name}{\mbox{\isa{name}}} usually refers to any name of types,
constants, theorems etc.\ that are to be \emph{declared} or
\emph{defined} (so qualified identifiers are excluded here). Quoted
strings provide an escape for non-identifier names or those ruled
out by outer syntax keywords (e.g.\ quoted \verb|"let"|).
- Already existing objects are usually referenced by
- \railqtok{nameref}.
+ Already existing objects are usually referenced by \hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}.
- \indexoutertoken{name}\indexoutertoken{parname}\indexoutertoken{nameref}
- \begin{rail}
- name: ident | symident | string | nat
- ;
- parname: '(' name ')'
- ;
- nameref: name | longident
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{4}{\indexdef{}{syntax}{name}\hypertarget{syntax.name}{\hyperlink{syntax.name}{\mbox{\isa{name}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.ident}{\mbox{\isa{ident}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.symident}{\mbox{\isa{symident}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@nextbar{3}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\indexdef{}{syntax}{parname}\hypertarget{syntax.parname}{\hyperlink{syntax.parname}{\mbox{\isa{parname}}}}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{nameref}\hypertarget{syntax.nameref}{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.longident}{\mbox{\isa{longident}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -236,15 +251,26 @@
natural numbers and floating point numbers. These are combined as
\hyperlink{syntax.int}{\mbox{\isa{int}}} and \hyperlink{syntax.real}{\mbox{\isa{real}}} as follows.
- \indexoutertoken{int}\indexoutertoken{real}
- \begin{rail}
- int: nat | '-' nat
- ;
- real: float | int
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\indexdef{}{syntax}{int}\hypertarget{syntax.int}{\hyperlink{syntax.int}{\mbox{\isa{int}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{real}\hypertarget{syntax.real}{\hyperlink{syntax.real}{\mbox{\isa{real}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.float}{\mbox{\isa{float}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.int}{\mbox{\isa{int}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- Note that there is an overlap with the category \railqtok{name},
+
+ Note that there is an overlap with the category \hyperlink{syntax.name}{\mbox{\isa{name}}},
which also includes \hyperlink{syntax.nat}{\mbox{\isa{nat}}}.%
\end{isamarkuptext}%
\isamarkuptrue%
@@ -254,20 +280,26 @@
\isamarkuptrue%
%
\begin{isamarkuptext}%
-Large chunks of plain \railqtok{text} are usually given
- \railtok{verbatim}, i.e.\ enclosed in \verb|{|\verb|*|~\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{22}{\isachardoublequote}}}~\verb|*|\verb|}|. For convenience,
- any of the smaller text units conforming to \railqtok{nameref} are
- admitted as well. A marginal \railnonterm{comment} is of the form
- \verb|--| \railqtok{text}. Any number of these may occur
+Large chunks of plain \hyperlink{syntax.text}{\mbox{\isa{text}}} are usually given
+ \hyperlink{syntax.verbatim}{\mbox{\isa{verbatim}}}, i.e.\ enclosed in \verb|{|\verb|*|~\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{22}{\isachardoublequote}}}~\verb|*|\verb|}|. For convenience,
+ any of the smaller text units conforming to \hyperlink{syntax.nameref}{\mbox{\isa{nameref}}} are
+ admitted as well. A marginal \hyperlink{syntax.comment}{\mbox{\isa{comment}}} is of the form
+ \verb|--|~\hyperlink{syntax.text}{\mbox{\isa{text}}}. Any number of these may occur
within Isabelle/Isar commands.
- \indexoutertoken{text}\indexouternonterm{comment}
- \begin{rail}
- text: verbatim | nameref
- ;
- comment: '--' text
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{2}{\indexdef{}{syntax}{text}\hypertarget{syntax.text}{\hyperlink{syntax.text}{\mbox{\isa{text}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.verbatim}{\mbox{\isa{verbatim}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\indexdef{}{syntax}{comment}\hypertarget{syntax.comment}{\hyperlink{syntax.comment}{\mbox{\isa{comment}}}}}
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -282,16 +314,40 @@
intersection of these classes. The syntax of type arities is given
directly at the outer level.
- \indexouternonterm{sort}\indexouternonterm{arity}
- \indexouternonterm{classdecl}
- \begin{rail}
- classdecl: name (('<' | subseteq) (nameref + ','))?
- ;
- sort: nameref
- ;
- arity: ('(' (sort + ',') ')')? sort
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{3}{\indexdef{}{syntax}{classdecl}\hypertarget{syntax.classdecl}{\hyperlink{syntax.classdecl}{\mbox{\isa{classdecl}}}}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@bar
+\rail@term{\isa{{\isaliteral{3C}{\isacharless}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{5C3C73756273657465713E}{\isasymsubseteq}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{1}{\indexdef{}{syntax}{sort}\hypertarget{syntax.sort}{\hyperlink{syntax.sort}{\mbox{\isa{sort}}}}}
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@end
+\rail@begin{3}{\indexdef{}{syntax}{arity}\hypertarget{syntax.arity}{\hyperlink{syntax.arity}{\mbox{\isa{arity}}}}}
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.sort}{\mbox{\isa{sort}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.sort}{\mbox{\isa{sort}}}}[]
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -312,42 +368,96 @@
by commands or other keywords already (such as \verb|=| or
\verb|+|).
- \indexoutertoken{type}\indexoutertoken{term}\indexoutertoken{prop}
- \begin{rail}
- type: nameref | typefree | typevar
- ;
- term: nameref | var
- ;
- prop: term
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\indexdef{}{syntax}{type}\hypertarget{syntax.type}{\hyperlink{syntax.type}{\mbox{\isa{type}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.typevar}{\mbox{\isa{typevar}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{term}\hypertarget{syntax.term}{\hyperlink{syntax.term}{\mbox{\isa{term}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.var}{\mbox{\isa{var}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\indexdef{}{syntax}{prop}\hypertarget{syntax.prop}{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\end{railoutput}
+
Positional instantiations are indicated by giving a sequence of
terms, or the placeholder ``\isa{{\isaliteral{5F}{\isacharunderscore}}}'' (underscore), which means to
skip a position.
- \indexoutertoken{inst}\indexoutertoken{insts}
- \begin{rail}
- inst: underscore | term
- ;
- insts: (inst *)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\indexdef{}{syntax}{inst}\hypertarget{syntax.inst}{\hyperlink{syntax.inst}{\mbox{\isa{inst}}}}}
+\rail@bar
+\rail@term{\isa{{\isaliteral{5F}{\isacharunderscore}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{insts}\hypertarget{syntax.insts}{\hyperlink{syntax.insts}{\mbox{\isa{insts}}}}}
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.inst}{\mbox{\isa{inst}}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
+
+ Type declarations and definitions usually refer to \hyperlink{syntax.typespec}{\mbox{\isa{typespec}}} on the left-hand side. This models basic type constructor
+ application at the outer syntax level. Note that only plain postfix
+ notation is available here, but no infixes.
- Type declarations and definitions usually refer to
- \railnonterm{typespec} on the left-hand side. This models basic
- type constructor application at the outer syntax level. Note that
- only plain postfix notation is available here, but no infixes.
-
- \indexouternonterm{typespec}
- \indexouternonterm{typespecsorts}
- \begin{rail}
- typespec: (() | typefree | '(' ( typefree + ',' ) ')') name
- ;
-
- typespecsorts: (() | (typefree ('::' sort)?) | '(' ( (typefree ('::' sort)?) + ',' ) ')') name
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{4}{\indexdef{}{syntax}{typespec}\hypertarget{syntax.typespec}{\hyperlink{syntax.typespec}{\mbox{\isa{typespec}}}}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}}[]
+\rail@nextplus{3}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@end
+\rail@begin{6}{\indexdef{}{syntax}{typespecsorts}\hypertarget{syntax.typespecsorts}{\hyperlink{syntax.typespecsorts}{\mbox{\isa{typespecsorts}}}}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}}[]
+\rail@bar
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.sort}{\mbox{\isa{sort}}}}[]
+\rail@endbar
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}}[]
+\rail@bar
+\rail@nextbar{4}
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.sort}{\mbox{\isa{sort}}}}[]
+\rail@endbar
+\rail@nextplus{5}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -356,40 +466,76 @@
\isamarkuptrue%
%
\begin{isamarkuptext}%
-Wherever explicit propositions (or term fragments) occur in a proof
- text, casual binding of schematic term variables may be given
- specified via patterns of the form ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C49533E}{\isasymIS}}\ p\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ p\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}''. This works both for \railqtok{term} and \railqtok{prop}.
+Wherever explicit propositions (or term fragments) occur in a
+ proof text, casual binding of schematic term variables may be given
+ specified via patterns of the form ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C49533E}{\isasymIS}}\ p\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ p\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}''.
+ This works both for \hyperlink{syntax.term}{\mbox{\isa{term}}} and \hyperlink{syntax.prop}{\mbox{\isa{prop}}}.
- \indexouternonterm{termpat}\indexouternonterm{proppat}
- \begin{rail}
- termpat: '(' ('is' term +) ')'
- ;
- proppat: '(' ('is' prop +) ')'
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\indexdef{}{syntax}{termpat}\hypertarget{syntax.termpat}{\hyperlink{syntax.termpat}{\mbox{\isa{termpat}}}}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@term{\isa{\isakeyword{is}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{proppat}\hypertarget{syntax.proppat}{\hyperlink{syntax.proppat}{\mbox{\isa{proppat}}}}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@term{\isa{\isakeyword{is}}}[]
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\end{railoutput}
+
\medskip Declarations of local variables \isa{{\isaliteral{22}{\isachardoublequote}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7461753E}{\isasymtau}}{\isaliteral{22}{\isachardoublequote}}} and
logical propositions \isa{{\isaliteral{22}{\isachardoublequote}}a\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} represent different views on
the same principle of introducing a local scope. In practice, one
- may usually omit the typing of \railnonterm{vars} (due to
+ may usually omit the typing of \hyperlink{syntax.vars}{\mbox{\isa{vars}}} (due to
type-inference), and the naming of propositions (due to implicit
references of current facts). In any case, Isar proof elements
usually admit to introduce multiple such items simultaneously.
- \indexouternonterm{vars}\indexouternonterm{props}
- \begin{rail}
- vars: (name+) ('::' type)?
- ;
- props: thmdecl? (prop proppat? +)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\indexdef{}{syntax}{vars}\hypertarget{syntax.vars}{\hyperlink{syntax.vars}{\mbox{\isa{vars}}}}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\indexdef{}{syntax}{props}\hypertarget{syntax.props}{\hyperlink{syntax.props}{\mbox{\isa{props}}}}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.proppat}{\mbox{\isa{proppat}}}}[]
+\rail@endbar
+\rail@nextplus{2}
+\rail@endplus
+\rail@end
+\end{railoutput}
+
The treatment of multiple declarations corresponds to the
- complementary focus of \railnonterm{vars} versus
- \railnonterm{props}. In ``\isa{{\isaliteral{22}{\isachardoublequote}}x\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ x\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7461753E}{\isasymtau}}{\isaliteral{22}{\isachardoublequote}}}''
- the typing refers to all variables, while in \isa{{\isaliteral{22}{\isachardoublequote}}a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{22}{\isachardoublequote}}} the naming refers to all propositions collectively.
- Isar language elements that refer to \railnonterm{vars} or
- \railnonterm{props} typically admit separate typings or namings via
+ complementary focus of \hyperlink{syntax.vars}{\mbox{\isa{vars}}} versus \hyperlink{syntax.props}{\mbox{\isa{props}}}. In
+ ``\isa{{\isaliteral{22}{\isachardoublequote}}x\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ x\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7461753E}{\isasymtau}}{\isaliteral{22}{\isachardoublequote}}}'' the typing refers to all variables, while
+ in \isa{{\isaliteral{22}{\isachardoublequote}}a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{22}{\isachardoublequote}}} the naming refers to all propositions
+ collectively. Isar language elements that refer to \hyperlink{syntax.vars}{\mbox{\isa{vars}}}
+ or \hyperlink{syntax.props}{\mbox{\isa{props}}} typically admit separate typings or namings via
another level of iteration, with explicit \indexref{}{keyword}{and}\hyperlink{keyword.and}{\mbox{\isa{\isakeyword{and}}}}
separators; e.g.\ see \hyperlink{command.fix}{\mbox{\isa{\isacommand{fix}}}} and \hyperlink{command.assume}{\mbox{\isa{\isacommand{assume}}}} in
\secref{sec:proof-context}.%
@@ -402,31 +548,71 @@
%
\begin{isamarkuptext}%
Attributes have their own ``semi-inner'' syntax, in the sense
- that input conforming to \railnonterm{args} below is parsed by the
+ that input conforming to \hyperlink{syntax.args}{\mbox{\isa{args}}} below is parsed by the
attribute a second time. The attribute argument specifications may
be any sequence of atomic entities (identifiers, strings etc.), or
- properly bracketed argument lists. Below \railqtok{atom} refers to
- any atomic entity, including any \railtok{keyword} conforming to
- \railtok{symident}.
+ properly bracketed argument lists. Below \hyperlink{syntax.atom}{\mbox{\isa{atom}}} refers to
+ any atomic entity, including any \hyperlink{syntax.keyword}{\mbox{\isa{keyword}}} conforming to
+ \hyperlink{syntax.symident}{\mbox{\isa{symident}}}.
- \indexoutertoken{atom}\indexouternonterm{args}\indexouternonterm{attributes}
- \begin{rail}
- atom: nameref | typefree | typevar | var | nat | float | keyword
- ;
- arg: atom | '(' args ')' | '[' args ']'
- ;
- args: arg *
- ;
- attributes: '[' (nameref args * ',') ']'
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{7}{\indexdef{}{syntax}{atom}\hypertarget{syntax.atom}{\hyperlink{syntax.atom}{\mbox{\isa{atom}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.typevar}{\mbox{\isa{typevar}}}}[]
+\rail@nextbar{3}
+\rail@nont{\hyperlink{syntax.var}{\mbox{\isa{var}}}}[]
+\rail@nextbar{4}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nextbar{5}
+\rail@nont{\hyperlink{syntax.float}{\mbox{\isa{float}}}}[]
+\rail@nextbar{6}
+\rail@nont{\hyperlink{syntax.keyword}{\mbox{\isa{keyword}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{arg}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.atom}{\mbox{\isa{atom}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.args}{\mbox{\isa{args}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\hyperlink{syntax.args}{\mbox{\isa{args}}}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{args}\hypertarget{syntax.args}{\hyperlink{syntax.args}{\mbox{\isa{args}}}}}
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\isa{arg}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\indexdef{}{syntax}{attributes}\hypertarget{syntax.attributes}{\hyperlink{syntax.attributes}{\mbox{\isa{attributes}}}}}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nont{\hyperlink{syntax.args}{\mbox{\isa{args}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@endbar
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@end
+\end{railoutput}
- Theorem specifications come in several flavors:
- \railnonterm{axmdecl} and \railnonterm{thmdecl} usually refer to
- axioms, assumptions or results of goal statements, while
- \railnonterm{thmdef} collects lists of existing theorems. Existing
- theorems are given by \railnonterm{thmref} and
- \railnonterm{thmrefs}, the former requires an actual singleton
+
+ Theorem specifications come in several flavors: \hyperlink{syntax.axmdecl}{\mbox{\isa{axmdecl}}}
+ and \hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}} usually refer to axioms, assumptions or
+ results of goal statements, while \hyperlink{syntax.thmdef}{\mbox{\isa{thmdef}}} collects lists of
+ existing theorems. Existing theorems are given by \hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}
+ and \hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}, the former requires an actual singleton
result.
There are three forms of theorem references:
@@ -454,26 +640,79 @@
This form of in-place declarations is particularly useful with
commands like \hyperlink{command.declare}{\mbox{\isa{\isacommand{declare}}}} and \hyperlink{command.using}{\mbox{\isa{\isacommand{using}}}}.
- \indexouternonterm{axmdecl}\indexouternonterm{thmdecl}
- \indexouternonterm{thmdef}\indexouternonterm{thmref}
- \indexouternonterm{thmrefs}\indexouternonterm{selection}
- \begin{rail}
- axmdecl: name attributes? ':'
- ;
- thmdecl: thmbind ':'
- ;
- thmdef: thmbind '='
- ;
- thmref: (nameref selection? | altstring) attributes? | '[' attributes ']'
- ;
- thmrefs: thmref +
- ;
-
- thmbind: name attributes | name | attributes
- ;
- selection: '(' ((nat | nat '-' nat?) + ',') ')'
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{2}{\indexdef{}{syntax}{axmdecl}\hypertarget{syntax.axmdecl}{\hyperlink{syntax.axmdecl}{\mbox{\isa{axmdecl}}}}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.attributes}{\mbox{\isa{attributes}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@end
+\rail@begin{1}{\indexdef{}{syntax}{thmdecl}\hypertarget{syntax.thmdecl}{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}}
+\rail@nont{\isa{thmbind}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@end
+\rail@begin{1}{\indexdef{}{syntax}{thmdef}\hypertarget{syntax.thmdef}{\hyperlink{syntax.thmdef}{\mbox{\isa{thmdef}}}}}
+\rail@nont{\isa{thmbind}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@end
+\rail@begin{4}{\indexdef{}{syntax}{thmref}\hypertarget{syntax.thmref}{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}}
+\rail@bar
+\rail@bar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{selection}}[]
+\rail@endbar
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.altstring}{\mbox{\isa{altstring}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.attributes}{\mbox{\isa{attributes}}}}[]
+\rail@endbar
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@nont{\hyperlink{syntax.attributes}{\mbox{\isa{attributes}}}}[]
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\indexdef{}{syntax}{thmrefs}\hypertarget{syntax.thmrefs}{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{thmbind}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nont{\hyperlink{syntax.attributes}{\mbox{\isa{attributes}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.attributes}{\mbox{\isa{attributes}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{4}{\isa{selection}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@bar
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@bar
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@endbar
+\rail@nextplus{3}
+\rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
--- a/doc-src/IsarRef/Thy/document/Proof.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/Proof.tex Mon May 02 01:20:28 2011 +0200
@@ -74,12 +74,16 @@
\indexdef{}{command}{notepad}\hypertarget{command.notepad}{\hyperlink{command.notepad}{\mbox{\isa{\isacommand{notepad}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}state{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'notepad' 'begin'
- ;
- 'end'
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.notepad}{\mbox{\isa{\isacommand{notepad}}}}}[]
+\rail@term{\isa{\isakeyword{begin}}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.end}{\mbox{\isa{\isacommand{end}}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -215,16 +219,55 @@
\isa{{\isaliteral{22}{\isachardoublequote}}x\ {\isaliteral{5C3C65717569763E}{\isasymequiv}}\ t{\isaliteral{22}{\isachardoublequote}}} to be eliminated by the reflexivity rule. Thus,
exporting some result \isa{{\isaliteral{22}{\isachardoublequote}}x\ {\isaliteral{5C3C65717569763E}{\isasymequiv}}\ t\ {\isaliteral{5C3C7475726E7374696C653E}{\isasymturnstile}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{5B}{\isacharbrackleft}}x{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequote}}} yields \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7475726E7374696C653E}{\isasymturnstile}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{5B}{\isacharbrackleft}}t{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequote}}}.
- \begin{rail}
- 'fix' (vars + 'and')
- ;
- ('assume' | 'presume') (props + 'and')
- ;
- 'def' (def + 'and')
- ;
- def: thmdecl? \\ name ('==' | equiv) term termpat?
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.fix}{\mbox{\isa{\isacommand{fix}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.vars}{\mbox{\isa{vars}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.assume}{\mbox{\isa{\isacommand{assume}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.presume}{\mbox{\isa{\isacommand{presume}}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.props}{\mbox{\isa{props}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.def}{\mbox{\isa{\isacommand{def}}}}}[]
+\rail@plus
+\rail@nont{\isa{def}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{5}{\isa{def}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@cr{3}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nextbar{4}
+\rail@term{\isa{{\isaliteral{5C3C65717569763E}{\isasymequiv}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\hyperlink{syntax.termpat}{\mbox{\isa{termpat}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -287,13 +330,26 @@
logic as actual equations, while abbreviations disappear during the
input process just after type checking. Also note that \hyperlink{command.def}{\mbox{\isa{\isacommand{def}}}} does not support polymorphism.
- \begin{rail}
- 'let' ((term + 'and') '=' term + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.let}{\mbox{\isa{\isacommand{let}}}}}[]
+\rail@plus
+\rail@plus
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
- The syntax of \hyperlink{keyword.is}{\mbox{\isa{\isakeyword{is}}}} patterns follows \railnonterm{termpat}
- or \railnonterm{proppat} (see \secref{sec:term-decls}).
+
+ The syntax of \hyperlink{keyword.is}{\mbox{\isa{\isakeyword{is}}}} patterns follows \hyperlink{syntax.termpat}{\mbox{\isa{termpat}}} or
+ \hyperlink{syntax.proppat}{\mbox{\isa{proppat}}} (see \secref{sec:term-decls}).
\begin{description}
@@ -346,12 +402,37 @@
to the most recently established facts, but only \emph{before}
issuing a follow-up claim.
- \begin{rail}
- 'note' (thmdef? thmrefs + 'and')
- ;
- ('from' | 'with' | 'using' | 'unfolding') (thmrefs + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.note}{\mbox{\isa{\isacommand{note}}}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdef}{\mbox{\isa{thmdef}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{4}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.from}{\mbox{\isa{\isacommand{from}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.with}{\mbox{\isa{\isacommand{with}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.using}{\mbox{\isa{\isacommand{using}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.unfolding}{\mbox{\isa{\isacommand{unfolding}}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -456,32 +537,108 @@
contexts of (essentially a big disjunction of eliminated parameters
and assumptions, cf.\ \secref{sec:obtain}).
- \begin{rail}
- ('lemma' | 'theorem' | 'corollary' |
- 'schematic_lemma' | 'schematic_theorem' | 'schematic_corollary') target? (goal | longgoal)
- ;
- ('have' | 'show' | 'hence' | 'thus') goal
- ;
- 'print_statement' modes? thmrefs
- ;
-
- goal: (props + 'and')
- ;
- longgoal: thmdecl? (contextelem *) conclusion
- ;
- conclusion: 'shows' goal | 'obtains' (parname? case + '|')
- ;
- case: (vars + 'and') 'where' (props + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{6}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.lemma}{\mbox{\isa{\isacommand{lemma}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.theorem}{\mbox{\isa{\isacommand{theorem}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.corollary}{\mbox{\isa{\isacommand{corollary}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.schematic-lemma}{\mbox{\isa{\isacommand{schematic{\isaliteral{5F}{\isacharunderscore}}lemma}}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{command.schematic-theorem}{\mbox{\isa{\isacommand{schematic{\isaliteral{5F}{\isacharunderscore}}theorem}}}}}[]
+\rail@nextbar{5}
+\rail@term{\hyperlink{command.schematic-corollary}{\mbox{\isa{\isacommand{schematic{\isaliteral{5F}{\isacharunderscore}}corollary}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nont{\isa{goal}}[]
+\rail@nextbar{1}
+\rail@nont{\isa{longgoal}}[]
+\rail@endbar
+\rail@end
+\rail@begin{4}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.have}{\mbox{\isa{\isacommand{have}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.show}{\mbox{\isa{\isacommand{show}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.hence}{\mbox{\isa{\isacommand{hence}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.thus}{\mbox{\isa{\isacommand{thus}}}}}[]
+\rail@endbar
+\rail@nont{\isa{goal}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.print-statement}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}statement}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.modes}{\mbox{\isa{modes}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{2}{\isa{goal}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.props}{\mbox{\isa{props}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{longgoal}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}}}[]
+\rail@endplus
+\rail@nont{\isa{conclusion}}[]
+\rail@end
+\rail@begin{4}{\isa{conclusion}}
+\rail@bar
+\rail@term{\isa{\isakeyword{shows}}}[]
+\rail@nont{\isa{goal}}[]
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{obtains}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.parname}{\mbox{\isa{parname}}}}[]
+\rail@endbar
+\rail@nont{\isa{case}}[]
+\rail@nextplus{3}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{case}}
+\rail@plus
+\rail@nont{\hyperlink{syntax.vars}{\mbox{\isa{vars}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.props}{\mbox{\isa{props}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
\item \hyperlink{command.lemma}{\mbox{\isa{\isacommand{lemma}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} enters proof mode with
- \isa{{\isaliteral{5C3C7068693E}{\isasymphi}}} as main goal, eventually resulting in some fact \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7475726E7374696C653E}{\isasymturnstile}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} to be put back into the target context. An additional
- \railnonterm{context} specification may build up an initial proof
- context for the subsequent claim; this includes local definitions
- and syntax as well, see the definition of \hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}} in
+ \isa{{\isaliteral{5C3C7068693E}{\isasymphi}}} as main goal, eventually resulting in some fact \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7475726E7374696C653E}{\isasymturnstile}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} to be put back into the target context. An additional \hyperlink{syntax.context}{\mbox{\isa{context}}} specification may build up an initial proof context for the
+ subsequent claim; this includes local definitions and syntax as
+ well, see the definition of \hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}} in
\secref{sec:locale}.
\item \hyperlink{command.theorem}{\mbox{\isa{\isacommand{theorem}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} and \hyperlink{command.corollary}{\mbox{\isa{\isacommand{corollary}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} are essentially the same as \hyperlink{command.lemma}{\mbox{\isa{\isacommand{lemma}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}}, but the facts are internally marked as
@@ -557,23 +714,55 @@
\isamarkuptrue%
%
\begin{isamarkuptext}%
-Proof methods are either basic ones, or expressions composed of
- methods via ``\verb|,|'' (sequential composition),
- ``\verb||\verb,|,\verb||'' (alternative choices), ``\verb|?|''
+Proof methods are either basic ones, or expressions composed
+ of methods via ``\verb|,|'' (sequential composition),
+ ``\verb||\verb,|,\verb||'' (alternative choices), ``\verb|?|''
(try), ``\verb|+|'' (repeat at least once), ``\verb|[|\isa{n}\verb|]|'' (restriction to first \isa{n}
sub-goals, with default \isa{{\isaliteral{22}{\isachardoublequote}}n\ {\isaliteral{3D}{\isacharequal}}\ {\isadigit{1}}{\isaliteral{22}{\isachardoublequote}}}). In practice, proof
- methods are usually just a comma separated list of
- \railqtok{nameref}~\railnonterm{args} specifications. Note that
- parentheses may be dropped for single method specifications (with no
- arguments).
+ methods are usually just a comma separated list of \hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}~\hyperlink{syntax.args}{\mbox{\isa{args}}} specifications. Note that parentheses may
+ be dropped for single method specifications (with no arguments).
- \indexouternonterm{method}
- \begin{rail}
- method: (nameref | '(' methods ')') (() | '?' | '+' | '[' nat? ']')
- ;
- methods: (nameref args | method) + (',' | '|')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{5}{\indexdef{}{syntax}{method}\hypertarget{syntax.method}{\hyperlink{syntax.method}{\mbox{\isa{method}}}}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{methods}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@bar
+\rail@nextbar{4}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{4}{\isa{methods}}
+\rail@plus
+\rail@bar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nont{\hyperlink{syntax.args}{\mbox{\isa{args}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.method}{\mbox{\isa{method}}}}[]
+\rail@endbar
+\rail@nextplus{2}
+\rail@bar
+\rail@term{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endbar
+\rail@endplus
+\rail@end
+\end{railoutput}
+
Proper Isar proof methods do \emph{not} admit arbitrary goal
addressing, but refer either to the first sub-goal or all sub-goals
@@ -590,11 +779,24 @@
individual tactic being involved. Here ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{21}{\isacharbang}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequote}}}'' refers to
all goals, and ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5B}{\isacharbrackleft}}n{\isaliteral{2D}{\isacharminus}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequote}}}'' to all goals starting from \isa{{\isaliteral{22}{\isachardoublequote}}n{\isaliteral{22}{\isachardoublequote}}}.
- \indexouternonterm{goalspec}
- \begin{rail}
- goalspec: '[' (nat '-' nat | nat '-' | nat | '!' ) ']'
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{4}{\indexdef{}{syntax}{goalspec}\hypertarget{syntax.goalspec}{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}}
+\rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
+\rail@bar
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -646,16 +848,40 @@
There is no separate default terminal method. Any remaining goals
are always solved by assumption in the very last step.
- \begin{rail}
- 'proof' method?
- ;
- 'qed' method?
- ;
- 'by' method method?
- ;
- ('.' | '..' | 'sorry')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.proof}{\mbox{\isa{\isacommand{proof}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{method}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.qed}{\mbox{\isa{\isacommand{qed}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{method}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.by}{\mbox{\isa{\isacommand{by}}}}}[]
+\rail@nont{\isa{method}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{method}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.dot}{\mbox{\isa{\isacommand{{\isaliteral{2E}{\isachardot}}}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.ddot}{\mbox{\isa{\isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.sorry}{\mbox{\isa{\isacommand{sorry}}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -727,24 +953,110 @@
\indexdef{}{attribute}{where}\hypertarget{attribute.where}{\hyperlink{attribute.where}{\mbox{\isa{where}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'fact' thmrefs?
- ;
- 'rule' thmrefs?
- ;
- rulemod: ('intro' | 'elim' | 'dest') ((('!' | () | '?') nat?) | 'del') ':' thmrefs
- ;
- ('intro' | 'elim' | 'dest') ('!' | () | '?') nat?
- ;
- 'rule' 'del'
- ;
- 'OF' thmrefs
- ;
- 'of' insts ('concl' ':' insts)?
- ;
- 'where' ((name | var | typefree | typevar) '=' (type | term) * 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.fact}{\mbox{\isa{fact}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.rule}{\mbox{\isa{rule}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{4}{\isa{rulemod}}
+\rail@bar
+\rail@term{\isa{intro}}[]
+\rail@nextbar{1}
+\rail@term{\isa{elim}}[]
+\rail@nextbar{2}
+\rail@term{\isa{dest}}[]
+\rail@endbar
+\rail@bar
+\rail@bar
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@nextbar{1}
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@nextbar{3}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{attribute.intro}{\mbox{\isa{intro}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{attribute.elim}{\mbox{\isa{elim}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{attribute.dest}{\mbox{\isa{dest}}}}[]
+\rail@endbar
+\rail@bar
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@nextbar{1}
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.rule}{\mbox{\isa{rule}}}}[]
+\rail@term{\isa{del}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.OF}{\mbox{\isa{OF}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.of}{\mbox{\isa{of}}}}[]
+\rail@nont{\hyperlink{syntax.insts}{\mbox{\isa{insts}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{concl}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.insts}{\mbox{\isa{insts}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{6}{\isa{}}
+\rail@term{\hyperlink{attribute.where}{\mbox{\isa{where}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.var}{\mbox{\isa{var}}}}[]
+\rail@nextbar{3}
+\rail@nont{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}}[]
+\rail@nextbar{4}
+\rail@nont{\hyperlink{syntax.typevar}{\mbox{\isa{typevar}}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@bar
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@endbar
+\rail@nextplus{5}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -847,14 +1159,28 @@
\indexdef{}{command}{back}\hypertarget{command.back}{\hyperlink{command.back}{\mbox{\isa{\isacommand{back}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ( 'apply' | 'apply_end' ) method
- ;
- 'defer' nat?
- ;
- 'prefer' nat
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.apply}{\mbox{\isa{\isacommand{apply}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.apply-end}{\mbox{\isa{\isacommand{apply{\isaliteral{5F}{\isacharunderscore}}end}}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.method}{\mbox{\isa{method}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.defer}{\mbox{\isa{\isacommand{defer}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.prefer}{\mbox{\isa{\isacommand{prefer}}}}}[]
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -907,10 +1233,16 @@
\indexdef{}{command}{method\_setup}\hypertarget{command.method-setup}{\hyperlink{command.method-setup}{\mbox{\isa{\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'method_setup' name '=' text text
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.method-setup}{\mbox{\isa{\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -976,12 +1308,35 @@
later, provided that the corresponding parameters do \emph{not}
occur in the conclusion.
- \begin{rail}
- 'obtain' parname? (vars + 'and') 'where' (props + 'and')
- ;
- 'guess' (vars + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.obtain}{\mbox{\isa{\isacommand{obtain}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.parname}{\mbox{\isa{parname}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.vars}{\mbox{\isa{vars}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.props}{\mbox{\isa{props}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.guess}{\mbox{\isa{\isacommand{guess}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.vars}{\mbox{\isa{vars}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
The derived Isar command \hyperlink{command.obtain}{\mbox{\isa{\isacommand{obtain}}}} is defined as follows
(where \isa{{\isaliteral{22}{\isachardoublequote}}b\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ b\isaliteral{5C3C5E7375623E}{}\isactrlsub k{\isaliteral{22}{\isachardoublequote}}} shall refer to (optional)
@@ -1085,12 +1440,31 @@
\hyperlink{command.ultimately}{\mbox{\isa{\isacommand{ultimately}}}} & \equiv & \hyperlink{command.moreover}{\mbox{\isa{\isacommand{moreover}}}}~\hyperlink{command.from}{\mbox{\isa{\isacommand{from}}}}~\isa{calculation} \\
\end{matharray}
- \begin{rail}
- ('also' | 'finally') ('(' thmrefs ')')?
- ;
- 'trans' (() | 'add' | 'del')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.also}{\mbox{\isa{\isacommand{also}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.finally}{\mbox{\isa{\isacommand{finally}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{attribute.trans}{\mbox{\isa{trans}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -1191,21 +1565,67 @@
derived manually become ready to use in advanced case analysis
later.
- \begin{rail}
- 'case' (caseref | '(' caseref ((name | underscore) +) ')')
- ;
- caseref: nameref attributes?
- ;
+ \begin{railoutput}
+\rail@begin{4}{\isa{}}
+\rail@term{\hyperlink{command.case}{\mbox{\isa{\isacommand{case}}}}}[]
+\rail@bar
+\rail@nont{\isa{caseref}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\isa{caseref}}[]
+\rail@plus
+\rail@bar
+\rail@term{\isa{{\isaliteral{5F}{\isacharunderscore}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endbar
+\rail@nextplus{3}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{caseref}}
+\rail@nont{\isa{nameref}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{attributes}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.case-names}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}names}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.case-conclusion}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}conclusion}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{attribute.params}{\mbox{\isa{params}}}}[]
+\rail@plus
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@endplus
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{attribute.consumes}{\mbox{\isa{consumes}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- 'case_names' (name +)
- ;
- 'case_conclusion' name (name *)
- ;
- 'params' ((name *) + 'and')
- ;
- 'consumes' nat?
- ;
- \end{rail}
\begin{description}
@@ -1279,25 +1699,132 @@
and parameters separately). This avoids cumbersome encoding of
``strengthened'' inductive statements within the object-logic.
- \begin{rail}
- 'cases' '(no_simp)'? (insts * 'and') rule?
- ;
- 'induct' '(no_simp)'? (definsts * 'and') \\ arbitrary? taking? rule?
- ;
- 'coinduct' insts taking rule?
- ;
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{method.cases}{\mbox{\isa{cases}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}simp}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\hyperlink{syntax.insts}{\mbox{\isa{insts}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{rule}}[]
+\rail@endbar
+\rail@end
+\rail@begin{6}{\isa{}}
+\rail@term{\hyperlink{method.induct}{\mbox{\isa{induct}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{no{\isaliteral{5F}{\isacharunderscore}}simp}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@plus
+\rail@nont{\isa{definsts}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@endbar
+\rail@cr{4}
+\rail@bar
+\rail@nextbar{5}
+\rail@nont{\isa{arbitrary}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{5}
+\rail@nont{\isa{taking}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{5}
+\rail@nont{\isa{rule}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.coinduct}{\mbox{\isa{coinduct}}}}[]
+\rail@nont{\isa{insts}}[]
+\rail@nont{\isa{taking}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{rule}}[]
+\rail@endbar
+\rail@end
+\rail@begin{5}{\isa{rule}}
+\rail@bar
+\rail@bar
+\rail@term{\isa{type}}[]
+\rail@nextbar{1}
+\rail@term{\isa{pred}}[]
+\rail@nextbar{2}
+\rail@term{\isa{set}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@nextbar{3}
+\rail@term{\isa{rule}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}[]
+\rail@nextplus{4}
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{4}{\isa{definst}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5C3C65717569763E}{\isasymequiv}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@nextbar{3}
+\rail@nont{\hyperlink{syntax.inst}{\mbox{\isa{inst}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{definsts}}
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\isa{definst}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{arbitrary}}
+\rail@term{\isa{arbitrary}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@plus
+\rail@plus
+\rail@nextplus{1}
+\rail@cnont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@endplus
+\rail@term{\isa{\isakeyword{and}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@end
+\rail@begin{1}{\isa{taking}}
+\rail@term{\isa{taking}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\isa{insts}}[]
+\rail@end
+\end{railoutput}
- rule: ('type' | 'pred' | 'set') ':' (nameref +) | 'rule' ':' (thmref +)
- ;
- definst: name ('==' | equiv) term | '(' term ')' | inst
- ;
- definsts: ( definst *)
- ;
- arbitrary: 'arbitrary' ':' ((term *) 'and' +)
- ;
- taking: 'taking' ':' insts
- ;
- \end{rail}
\begin{description}
@@ -1459,23 +1986,42 @@
\indexdef{}{attribute}{coinduct}\hypertarget{attribute.coinduct}{\hyperlink{attribute.coinduct}{\mbox{\isa{coinduct}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'cases' spec
- ;
- 'induct' spec
- ;
- 'coinduct' spec
- ;
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.cases}{\mbox{\isa{cases}}}}[]
+\rail@nont{\isa{spec}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.induct}{\mbox{\isa{induct}}}}[]
+\rail@nont{\isa{spec}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{attribute.coinduct}{\mbox{\isa{coinduct}}}}[]
+\rail@nont{\isa{spec}}[]
+\rail@end
+\rail@begin{4}{\isa{spec}}
+\rail@bar
+\rail@bar
+\rail@term{\isa{type}}[]
+\rail@nextbar{1}
+\rail@term{\isa{pred}}[]
+\rail@nextbar{2}
+\rail@term{\isa{set}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- spec: (('type' | 'pred' | 'set') ':' nameref) | 'del'
- ;
- \end{rail}
\begin{description}
\item \hyperlink{command.print-induct-rules}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}induct{\isaliteral{5F}{\isacharunderscore}}rules}}}} prints cases and induct rules
for predicates (or sets) and types of the current context.
-
+
\item \hyperlink{attribute.cases}{\mbox{\isa{cases}}}, \hyperlink{attribute.induct}{\mbox{\isa{induct}}}, and \hyperlink{attribute.coinduct}{\mbox{\isa{coinduct}}} (as attributes) declare rules for reasoning about
(co)inductive predicates (or sets) and types, using the
corresponding methods of the same name. Certain definitional
--- a/doc-src/IsarRef/Thy/document/Spec.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/Spec.tex Mon May 02 01:20:28 2011 +0200
@@ -68,12 +68,34 @@
although some user-interfaces might pretend that trailing input is
admissible.
- \begin{rail}
- 'theory' name 'imports' (name +) uses? 'begin'
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.theory}{\mbox{\isa{\isacommand{theory}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{\isakeyword{imports}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{uses}}[]
+\rail@endbar
+\rail@term{\isa{\isakeyword{begin}}}[]
+\rail@end
+\rail@begin{3}{\isa{uses}}
+\rail@term{\isa{\isakeyword{uses}}}[]
+\rail@plus
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.parname}{\mbox{\isa{parname}}}}[]
+\rail@endbar
+\rail@nextplus{2}
+\rail@endplus
+\rail@end
+\end{railoutput}
- uses: 'uses' ((name | parname) +);
- \end{rail}
\begin{description}
@@ -122,14 +144,20 @@
\indexdef{local}{command}{end}\hypertarget{command.local.end}{\hyperlink{command.local.end}{\mbox{\isa{\isacommand{end}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \indexouternonterm{target}
- \begin{rail}
- 'context' name 'begin'
- ;
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.context}{\mbox{\isa{\isacommand{context}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{\isakeyword{begin}}}[]
+\rail@end
+\rail@begin{1}{\indexdef{}{syntax}{target}\hypertarget{syntax.target}{\hyperlink{syntax.target}{\mbox{\isa{target}}}}}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{in}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@end
+\end{railoutput}
- target: '(' 'in' name ')'
- ;
- \end{rail}
\begin{description}
@@ -191,21 +219,102 @@
\secref{sec:axms-thms}). In particular, type-inference is commonly
available, and result names need not be given.
- \begin{rail}
- 'axiomatization' target? fixes? ('where' specs)?
- ;
- 'definition' target? (decl 'where')? thmdecl? prop
- ;
- 'abbreviation' target? mode? (decl 'where')? prop
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.axiomatization}{\mbox{\isa{\isacommand{axiomatization}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@nont{\isa{specs}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.definition}{\mbox{\isa{\isacommand{definition}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{decl}}[]
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.abbreviation}{\mbox{\isa{\isacommand{abbreviation}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mode}{\mbox{\isa{mode}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{decl}}[]
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@end
+\rail@begin{4}{\indexdef{}{syntax}{fixes}\hypertarget{syntax.fixes}{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}}
+\rail@plus
+\rail@bar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.vars}{\mbox{\isa{vars}}}}[]
+\rail@endbar
+\rail@nextplus{3}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{specs}}
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.props}{\mbox{\isa{props}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{decl}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- fixes: ((name ('::' type)? mixfix? | vars) + 'and')
- ;
- specs: (thmdecl? props + 'and')
- ;
- decl: name ('::' type)? mixfix?
- ;
- \end{rail}
\begin{description}
@@ -277,12 +386,39 @@
\indexdef{}{command}{declare}\hypertarget{command.declare}{\hyperlink{command.declare}{\mbox{\isa{\isacommand{declare}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('declaration' | 'syntax_declaration') ('(pervasive)')? target? text
- ;
- 'declare' target? (thmrefs + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.declaration}{\mbox{\isa{\isacommand{declaration}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.syntax-declaration}{\mbox{\isa{\isacommand{syntax{\isaliteral{5F}{\isacharunderscore}}declaration}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{pervasive}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.declare}{\mbox{\isa{\isacommand{declare}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -333,19 +469,69 @@
elements from equal instances are never repeated, thus avoiding
duplicate declarations.
- \indexouternonterm{localeexpr}
- \begin{rail}
- localeexpr: (instance + '+') ('for' (fixes + 'and'))?
- ;
- instance: (qualifier ':')? nameref (posinsts | namedinsts)
- ;
- qualifier: name ('?' | '!')?
- ;
- posinsts: (term | '_')*
- ;
- namedinsts: 'where' (name '=' term + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\indexdef{}{syntax}{localeexpr}\hypertarget{syntax.localeexpr}{\hyperlink{syntax.localeexpr}{\mbox{\isa{localeexpr}}}}}
+\rail@plus
+\rail@nont{\isa{instance}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
+\rail@endplus
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{for}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{instance}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{qualifier}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@bar
+\rail@nont{\isa{posinsts}}[]
+\rail@nextbar{1}
+\rail@nont{\isa{namedinsts}}[]
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{qualifier}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@bar
+\rail@term{\isa{{\isaliteral{3F}{\isacharquery}}}}[]
+\rail@nextbar{2}
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@endbar
+\rail@endbar
+\rail@end
+\rail@begin{3}{\isa{posinsts}}
+\rail@plus
+\rail@nextplus{1}
+\rail@bar
+\rail@term{\isa{{\isaliteral{5F}{\isacharunderscore}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@endbar
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{namedinsts}}
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
A locale instance consists of a reference to a locale and either
positional or named parameter instantiations. Identical
@@ -383,24 +569,102 @@
\indexdef{}{method}{unfold\_locales}\hypertarget{method.unfold-locales}{\hyperlink{method.unfold-locales}{\mbox{\isa{unfold{\isaliteral{5F}{\isacharunderscore}}locales}}}} & : & \isa{method} \\
\end{matharray}
- \indexouternonterm{contextelem}
\indexisarelem{fixes}\indexisarelem{constrains}\indexisarelem{assumes}
\indexisarelem{defines}\indexisarelem{notes}
- \begin{rail}
- 'locale' name ('=' locale)? 'begin'?
- ;
- 'print_locale' '!'? nameref
- ;
- locale: contextelem+ | localeexpr ('+' (contextelem+))?
- ;
- contextelem:
- 'fixes' (fixes + 'and')
- | 'constrains' (name '::' type + 'and')
- | 'assumes' (props + 'and')
- | 'defines' (thmdecl? prop proppat? + 'and')
- | 'notes' (thmdef? thmrefs + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.locale}{\mbox{\isa{\isacommand{locale}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.locale}{\mbox{\isa{locale}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{\isakeyword{begin}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.print-locale}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}locale}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@end
+\rail@begin{5}{\indexdef{}{syntax}{locale}\hypertarget{syntax.locale}{\hyperlink{syntax.locale}{\mbox{\isa{locale}}}}}
+\rail@bar
+\rail@plus
+\rail@nont{\hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@nextbar{2}
+\rail@nont{\hyperlink{syntax.localeexpr}{\mbox{\isa{localeexpr}}}}[]
+\rail@bar
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}}}[]
+\rail@nextplus{4}
+\rail@endplus
+\rail@endbar
+\rail@endbar
+\rail@end
+\rail@begin{12}{\indexdef{}{syntax}{contextelem}\hypertarget{syntax.contextelem}{\hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}}}}
+\rail@bar
+\rail@term{\isa{\isakeyword{fixes}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@nextbar{2}
+\rail@term{\isa{\isakeyword{constrains}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@nextplus{3}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@nextbar{4}
+\rail@term{\isa{\isakeyword{assumes}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.props}{\mbox{\isa{props}}}}[]
+\rail@nextplus{5}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@nextbar{6}
+\rail@term{\isa{\isakeyword{defines}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{7}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@bar
+\rail@nextbar{7}
+\rail@nont{\hyperlink{syntax.proppat}{\mbox{\isa{proppat}}}}[]
+\rail@endbar
+\rail@nextplus{8}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@nextbar{9}
+\rail@term{\isa{\isakeyword{notes}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{10}
+\rail@nont{\hyperlink{syntax.thmdef}{\mbox{\isa{thmdef}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextplus{11}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -522,21 +786,63 @@
\indexdef{}{command}{print\_interps}\hypertarget{command.print-interps}{\hyperlink{command.print-interps}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}interps}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \indexouternonterm{interp}
- \begin{rail}
- 'interpretation' localeexpr equations?
- ;
- 'interpret' localeexpr equations?
- ;
- 'sublocale' nameref ('<' | subseteq) localeexpr equations?
- ;
- 'print_dependencies' '!'? localeexpr
- ;
- 'print_interps' nameref
- ;
- equations: 'where' (thmdecl? prop + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.interpretation}{\mbox{\isa{\isacommand{interpretation}}}}}[]
+\rail@nont{\hyperlink{syntax.localeexpr}{\mbox{\isa{localeexpr}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{equations}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.interpret}{\mbox{\isa{\isacommand{interpret}}}}}[]
+\rail@nont{\hyperlink{syntax.localeexpr}{\mbox{\isa{localeexpr}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{equations}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.sublocale}{\mbox{\isa{\isacommand{sublocale}}}}}[]
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{3C}{\isacharless}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5C3C73756273657465713E}{\isasymsubseteq}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.localeexpr}{\mbox{\isa{localeexpr}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{equations}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.print-dependencies}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}dependencies}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{21}{\isacharbang}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.localeexpr}{\mbox{\isa{localeexpr}}}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.print-interps}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}interps}}}}}[]
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@end
+\rail@begin{3}{\isa{equations}}
+\rail@term{\isa{\isakeyword{where}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -662,28 +968,91 @@
\indexdef{}{method}{intro\_classes}\hypertarget{method.intro-classes}{\hyperlink{method.intro-classes}{\mbox{\isa{intro{\isaliteral{5F}{\isacharunderscore}}classes}}}} & : & \isa{method} \\
\end{matharray}
- \begin{rail}
- 'class' name '=' ((superclassexpr '+' (contextelem+)) | superclassexpr | (contextelem+)) \\
- 'begin'?
- ;
- 'instantiation' (nameref + 'and') '::' arity 'begin'
- ;
- 'instance'
- ;
- 'instance' (nameref + 'and') '::' arity
- ;
- 'subclass' target? nameref
- ;
- 'instance' nameref ('<' | subseteq) nameref
- ;
- 'print_classes'
- ;
- 'class_deps'
- ;
-
- superclassexpr: nameref | (nameref '+' superclassexpr)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{8}{\isa{}}
+\rail@term{\hyperlink{command.class}{\mbox{\isa{\isacommand{class}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@bar
+\rail@nont{\isa{superclassexpr}}[]
+\rail@term{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@nextbar{2}
+\rail@nont{\isa{superclassexpr}}[]
+\rail@nextbar{3}
+\rail@plus
+\rail@nont{\hyperlink{syntax.contextelem}{\mbox{\isa{contextelem}}}}[]
+\rail@nextplus{4}
+\rail@endplus
+\rail@endbar
+\rail@cr{6}
+\rail@bar
+\rail@nextbar{7}
+\rail@term{\isa{\isakeyword{begin}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.instantiation}{\mbox{\isa{\isacommand{instantiation}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.arity}{\mbox{\isa{arity}}}}[]
+\rail@term{\isa{\isakeyword{begin}}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.instance}{\mbox{\isa{\isacommand{instance}}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.instance}{\mbox{\isa{\isacommand{instance}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.arity}{\mbox{\isa{arity}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.subclass}{\mbox{\isa{\isacommand{subclass}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.instance}{\mbox{\isa{\isacommand{instance}}}}}[]
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{3C}{\isacharless}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5C3C73756273657465713E}{\isasymsubseteq}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.print-classes}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}classes}}}}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.class-deps}{\mbox{\isa{\isacommand{class{\isaliteral{5F}{\isacharunderscore}}deps}}}}}[]
+\rail@end
+\rail@begin{2}{\isa{superclassexpr}}
+\rail@bar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@term{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
+\rail@nont{\isa{superclassexpr}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+ %% FIXME check superclassexpr
\begin{description}
@@ -840,10 +1209,30 @@
\indexdef{}{command}{overloading}\hypertarget{command.overloading}{\hyperlink{command.overloading}{\mbox{\isa{\isacommand{overloading}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'overloading' \\
- ( string ( '==' | equiv ) term ( '(' 'unchecked' ')' )? + ) 'begin'
- \end{rail}
+ \begin{railoutput}
+\rail@begin{5}{\isa{}}
+\rail@term{\hyperlink{command.overloading}{\mbox{\isa{\isacommand{overloading}}}}}[]
+\rail@cr{2}
+\rail@plus
+\rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{5C3C65717569763E}{\isasymequiv}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@bar
+\rail@nextbar{3}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{unchecked}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@nextplus{4}
+\rail@endplus
+\rail@term{\isa{\isakeyword{begin}}}[]
+\rail@end
+\end{railoutput}
+ %% FIXME check string vs. name
\begin{description}
@@ -882,14 +1271,36 @@
\indexdef{}{command}{attribute\_setup}\hypertarget{command.attribute-setup}{\hyperlink{command.attribute-setup}{\mbox{\isa{\isacommand{attribute{\isaliteral{5F}{\isacharunderscore}}setup}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'use' name
- ;
- ('ML' | 'ML_prf' | 'ML_val' | 'ML_command' | 'setup' | 'local_setup') text
- ;
- 'attribute_setup' name '=' text text
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.use}{\mbox{\isa{\isacommand{use}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@end
+\rail@begin{6}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.ML}{\mbox{\isa{\isacommand{ML}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.ML-prf}{\mbox{\isa{\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}prf}}}}}[]
+\rail@nextbar{2}
+\rail@term{\hyperlink{command.ML-val}{\mbox{\isa{\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}val}}}}}[]
+\rail@nextbar{3}
+\rail@term{\hyperlink{command.ML-command}{\mbox{\isa{\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}command}}}}}[]
+\rail@nextbar{4}
+\rail@term{\hyperlink{command.setup}{\mbox{\isa{\isacommand{setup}}}}}[]
+\rail@nextbar{5}
+\rail@term{\hyperlink{command.local-setup}{\mbox{\isa{\isacommand{local{\isaliteral{5F}{\isacharunderscore}}setup}}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.attribute-setup}{\mbox{\isa{\isacommand{attribute{\isaliteral{5F}{\isacharunderscore}}setup}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -984,14 +1395,34 @@
\indexdef{}{command}{default\_sort}\hypertarget{command.default-sort}{\hyperlink{command.default-sort}{\mbox{\isa{\isacommand{default{\isaliteral{5F}{\isacharunderscore}}sort}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}}
\end{matharray}
- \begin{rail}
- 'classes' (classdecl +)
- ;
- 'classrel' (nameref ('<' | subseteq) nameref + 'and')
- ;
- 'default_sort' sort
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.classes}{\mbox{\isa{\isacommand{classes}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.classdecl}{\mbox{\isa{classdecl}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.classrel}{\mbox{\isa{\isacommand{classrel}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@bar
+\rail@term{\isa{{\isaliteral{3C}{\isacharless}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5C3C73756273657465713E}{\isasymsubseteq}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.default-sort}{\mbox{\isa{\isacommand{default{\isaliteral{5F}{\isacharunderscore}}sort}}}}}[]
+\rail@nont{\hyperlink{syntax.sort}{\mbox{\isa{sort}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -1034,14 +1465,36 @@
\indexdef{}{command}{arities}\hypertarget{command.arities}{\hyperlink{command.arities}{\mbox{\isa{\isacommand{arities}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} & (axiomatic!) \\
\end{matharray}
- \begin{rail}
- 'type_synonym' (typespec '=' type mixfix?)
- ;
- 'typedecl' typespec mixfix?
- ;
- 'arities' (nameref '::' arity +)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.type-synonym}{\mbox{\isa{\isacommand{type{\isaliteral{5F}{\isacharunderscore}}synonym}}}}}[]
+\rail@nont{\hyperlink{syntax.typespec}{\mbox{\isa{typespec}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.typedecl}{\mbox{\isa{\isacommand{typedecl}}}}}[]
+\rail@nont{\hyperlink{syntax.typespec}{\mbox{\isa{typespec}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.arities}{\mbox{\isa{\isacommand{arities}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.arity}{\mbox{\isa{arity}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -1112,12 +1565,44 @@
\indexdef{}{command}{defs}\hypertarget{command.defs}{\hyperlink{command.defs}{\mbox{\isa{\isacommand{defs}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'consts' ((name '::' type mixfix?) +)
- ;
- 'defs' ('(' 'unchecked'? 'overloaded'? ')')? \\ (axmdecl prop +)
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.consts}{\mbox{\isa{\isacommand{consts}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
+\rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
+\rail@endbar
+\rail@nextplus{2}
+\rail@endplus
+\rail@end
+\rail@begin{6}{\isa{}}
+\rail@term{\hyperlink{command.defs}{\mbox{\isa{\isacommand{defs}}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@bar
+\rail@nextbar{2}
+\rail@term{\isa{\isakeyword{unchecked}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{2}
+\rail@term{\isa{\isakeyword{overloaded}}}[]
+\rail@endbar
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@cr{4}
+\rail@plus
+\rail@nont{\hyperlink{syntax.axmdecl}{\mbox{\isa{axmdecl}}}}[]
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{5}
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -1153,12 +1638,37 @@
\indexdef{}{command}{theorems}\hypertarget{command.theorems}{\hyperlink{command.theorems}{\mbox{\isa{\isacommand{theorems}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'axioms' (axmdecl prop +)
- ;
- ('lemmas' | 'theorems') target? (thmdef? thmrefs + 'and')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{command.axioms}{\mbox{\isa{\isacommand{axioms}}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.axmdecl}{\mbox{\isa{axmdecl}}}}[]
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.lemmas}{\mbox{\isa{\isacommand{lemmas}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.theorems}{\mbox{\isa{\isacommand{theorems}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
+\rail@endbar
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdef}{\mbox{\isa{thmdef}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -1206,10 +1716,15 @@
\indexdef{}{command}{oracle}\hypertarget{command.oracle}{\hyperlink{command.oracle}{\mbox{\isa{\isacommand{oracle}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} & (axiomatic!) \\
\end{matharray}
- \begin{rail}
- 'oracle' name '=' text
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{1}{\isa{}}
+\rail@term{\hyperlink{command.oracle}{\mbox{\isa{\isacommand{oracle}}}}}[]
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -1240,10 +1755,30 @@
\indexdef{}{command}{hide\_fact}\hypertarget{command.hide-fact}{\hyperlink{command.hide-fact}{\mbox{\isa{\isacommand{hide{\isaliteral{5F}{\isacharunderscore}}fact}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ( 'hide_class' | 'hide_type' | 'hide_const' | 'hide_fact' ) ('(open)')? (nameref + )
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{4}{\isa{}}
+\rail@bar
+\rail@nont{\hyperlink{command.hide-class}{\mbox{\isa{\isacommand{hide{\isaliteral{5F}{\isacharunderscore}}class}}}}}[]
+\rail@nextbar{1}
+\rail@nont{\hyperlink{command.hide-type}{\mbox{\isa{\isacommand{hide{\isaliteral{5F}{\isacharunderscore}}type}}}}}[]
+\rail@nextbar{2}
+\rail@nont{\hyperlink{command.hide-const}{\mbox{\isa{\isacommand{hide{\isaliteral{5F}{\isacharunderscore}}const}}}}}[]
+\rail@nextbar{3}
+\rail@nont{\hyperlink{command.hide-fact}{\mbox{\isa{\isacommand{hide{\isaliteral{5F}{\isacharunderscore}}fact}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@term{\isa{\isakeyword{open}}}[]
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\end{railoutput}
+
Isabelle organizes any kind of name declarations (of types,
constants, theorems etc.) by separate hierarchically structured name
--- a/doc-src/IsarRef/Thy/document/ZF_Specific.tex Mon May 02 01:05:24 2011 +0200
+++ b/doc-src/IsarRef/Thy/document/ZF_Specific.tex Mon May 02 01:20:28 2011 +0200
@@ -39,10 +39,18 @@
\indexdef{ZF}{attribute}{TC}\hypertarget{attribute.ZF.TC}{\hyperlink{attribute.ZF.TC}{\mbox{\isa{TC}}}} & : & \isa{attribute} \\
\end{matharray}
- \begin{rail}
- 'TC' (() | 'add' | 'del')
- ;
- \end{rail}
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{attribute.ZF.TC}{\mbox{\isa{TC}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{add}}[]
+\rail@nextbar{2}
+\rail@term{\isa{del}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
+
\begin{description}
@@ -79,41 +87,145 @@
\indexdef{ZF}{command}{codatatype}\hypertarget{command.ZF.codatatype}{\hyperlink{command.ZF.codatatype}{\mbox{\isa{\isacommand{codatatype}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('inductive' | 'coinductive') domains intros hints
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.ZF.inductive}{\mbox{\isa{\isacommand{inductive}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.ZF.coinductive}{\mbox{\isa{\isacommand{coinductive}}}}}[]
+\rail@endbar
+\rail@nont{\isa{domains}}[]
+\rail@nont{\isa{intros}}[]
+\rail@nont{\isa{hints}}[]
+\rail@end
+\rail@begin{2}{\isa{domains}}
+\rail@term{\isa{\isakeyword{domains}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
+\rail@endplus
+\rail@bar
+\rail@term{\isa{{\isaliteral{3C}{\isacharless}}{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5C3C73756273657465713E}{\isasymsubseteq}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\rail@begin{3}{\isa{intros}}
+\rail@term{\isa{\isakeyword{intros}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@end
+\rail@begin{2}{\isa{hints}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.ZF.monos}{\mbox{\isa{monos}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{condefs}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.ZF.typeintros}{\mbox{\isa{typeintros}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.ZF.typeelims}{\mbox{\isa{typeelims}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{1}{\indexdef{ZF}{syntax}{monos}\hypertarget{syntax.ZF.monos}{\hyperlink{syntax.ZF.monos}{\mbox{\isa{monos}}}}}
+\rail@term{\isa{\isakeyword{monos}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{1}{\isa{condefs}}
+\rail@term{\isa{\isakeyword{con{\isaliteral{5F}{\isacharunderscore}}defs}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{1}{\indexdef{ZF}{syntax}{typeintros}\hypertarget{syntax.ZF.typeintros}{\hyperlink{syntax.ZF.typeintros}{\mbox{\isa{typeintros}}}}}
+\rail@term{\isa{\isakeyword{type{\isaliteral{5F}{\isacharunderscore}}intros}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\rail@begin{1}{\indexdef{ZF}{syntax}{typeelims}\hypertarget{syntax.ZF.typeelims}{\hyperlink{syntax.ZF.typeelims}{\mbox{\isa{typeelims}}}}}
+\rail@term{\isa{\isakeyword{type{\isaliteral{5F}{\isacharunderscore}}elims}}}[]
+\rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
+\rail@end
+\end{railoutput}
- domains: 'domains' (term + '+') ('<=' | subseteq) term
- ;
- intros: 'intros' (thmdecl? prop +)
- ;
- hints: monos? condefs? typeintros? typeelims?
- ;
- monos: ('monos' thmrefs)?
- ;
- condefs: ('con_defs' thmrefs)?
- ;
- typeintros: ('type_intros' thmrefs)?
- ;
- typeelims: ('type_elims' thmrefs)?
- ;
- \end{rail}
In the following syntax specification \isa{{\isaliteral{22}{\isachardoublequote}}monos{\isaliteral{22}{\isachardoublequote}}}, \isa{typeintros}, and \isa{typeelims} are the same as above.
- \begin{rail}
- ('datatype' | 'codatatype') domain? (dtspec + 'and') hints
- ;
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{command.ZF.datatype}{\mbox{\isa{\isacommand{datatype}}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{command.ZF.codatatype}{\mbox{\isa{\isacommand{codatatype}}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\isa{domain}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\isa{dtspec}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@nont{\isa{hints}}[]
+\rail@end
+\rail@begin{2}{\isa{domain}}
+\rail@bar
+\rail@term{\isa{{\isaliteral{3C}{\isacharless}}{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{5C3C73756273657465713E}{\isasymsubseteq}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@end
+\rail@begin{2}{\isa{dtspec}}
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
+\rail@plus
+\rail@nont{\isa{con}}[]
+\rail@nextplus{1}
+\rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{con}}
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@bar
+\rail@nextbar{1}
+\rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
+\rail@term{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
+\rail@endbar
+\rail@end
+\rail@begin{2}{\isa{hints}}
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.ZF.monos}{\mbox{\isa{monos}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.ZF.typeintros}{\mbox{\isa{typeintros}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.ZF.typeelims}{\mbox{\isa{typeelims}}}}[]
+\rail@endbar
+\rail@end
+\end{railoutput}
- domain: ('<=' | subseteq) term
- ;
- dtspec: term '=' (con + '|')
- ;
- con: name ('(' (term ',' +) ')')?
- ;
- hints: monos? typeintros? typeelims?
- ;
- \end{rail}
See \cite{isabelle-ZF} for further information on inductive
definitions in ZF, but note that this covers the old-style theory
@@ -130,10 +242,19 @@
\indexdef{ZF}{command}{primrec}\hypertarget{command.ZF.primrec}{\hyperlink{command.ZF.primrec}{\mbox{\isa{\isacommand{primrec}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- 'primrec' (thmdecl? prop +)
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.ZF.primrec}{\mbox{\isa{\isacommand{primrec}}}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{2}
+\rail@endplus
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%
@@ -152,14 +273,42 @@
\indexdef{ZF}{command}{inductive\_cases}\hypertarget{command.ZF.inductive-cases}{\hyperlink{command.ZF.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
\end{matharray}
- \begin{rail}
- ('case_tac' | 'induct_tac') goalspec? name
- ;
- indcases (prop +)
- ;
- inductivecases (thmdecl? (prop +) + 'and')
- ;
- \end{rail}%
+ \begin{railoutput}
+\rail@begin{2}{\isa{}}
+\rail@bar
+\rail@term{\hyperlink{method.ZF.case-tac}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@nextbar{1}
+\rail@term{\hyperlink{method.ZF.induct-tac}{\mbox{\isa{induct{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
+\rail@endbar
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
+\rail@endbar
+\rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
+\rail@end
+\rail@begin{2}{\isa{}}
+\rail@term{\hyperlink{method.ZF.ind-cases}{\mbox{\isa{ind{\isaliteral{5F}{\isacharunderscore}}cases}}}}[]
+\rail@plus
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@end
+\rail@begin{3}{\isa{}}
+\rail@term{\hyperlink{command.ZF.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}}}[]
+\rail@plus
+\rail@bar
+\rail@nextbar{1}
+\rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
+\rail@endbar
+\rail@plus
+\rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
+\rail@nextplus{1}
+\rail@endplus
+\rail@nextplus{2}
+\rail@cterm{\isa{\isakeyword{and}}}[]
+\rail@endplus
+\rail@end
+\end{railoutput}%
\end{isamarkuptext}%
\isamarkuptrue%
%