# HG changeset patch # User wenzelm # Date 1304292028 -7200 # Node ID 20a99a0e65edc06098cd94cd06da53aff61f30b0 # Parent 13c7194a896a48369b9e85a7903a0f86b5350599# Parent 6c621a9d612a028c19dffb375969d9d1e3c1bf7c merged; diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/Document_Preparation.thy --- 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 "\"}~@{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 \"} \\ \end{matharray} - \begin{rail} - ('display_drafts' | 'print_drafts') (name +) - ; - \end{rail} + @{rail " + (@@{command display_drafts} | @@{command print_drafts}) (@{syntax name} +) + + "} \begin{description} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/Generic.thy --- 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 \"} \\ \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} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/HOLCF_Specific.thy --- 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 \ 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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/HOL_Specific.thy --- 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/Inner_Syntax.thy --- 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 "\"}'' (printed as ``@{text "\"}'') represents an index @@ -367,14 +366,15 @@ @{command_def "write"} & : & @{text "proof(state) \ 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 \ 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 ('==' | '=>' | '<=' | '\' | '\' | '\') 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 \ 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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/Misc.thy --- 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 \"} \\ \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 \"} \\ \end{matharray} - \begin{rail} - ('cd' | 'use_thy') name - ; - \end{rail} + @{rail " + (@@{command cd} | @@{command use_thy}) @{syntax name} + "} \begin{description} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/Outer_Syntax.thy --- 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 "\"}~@{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} (('<' | '\') (@{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 "(\ p\<^sub>1 \ - 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 "(\ p\<^sub>1 \ 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 :: \"} and logical propositions @{text "a : \"} 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 \ x\<^sub>n :: \"}'' - the typing refers to all variables, while in @{text "a: \\<^sub>1 \ - \\<^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 \ x\<^sub>n :: \"}'' the typing refers to all variables, while + in @{text "a: \\<^sub>1 \ \\<^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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/Proof.thy --- 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 \ 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 \ t \ \[x]"} yields @{text "\ \[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} ('==' | '\') @{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: \"} enters proof mode with @{text \} as main goal, eventually resulting in some fact @{text "\ - \"} 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 + \"} 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: \"} 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 \ 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 \ 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, \, 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} ('==' | '\') @{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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/Spec.thy --- 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 \ 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 \ 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 \"} \\ \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} ('<' | '\') @{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} ('<' | '\') @{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 \ local_theory"} \\ \end{matharray} - \begin{rail} - 'overloading' \\ - ( string ( '==' | equiv ) term ( '(' 'unchecked' ')' )? + ) 'begin' - \end{rail} + @{rail " + @@{command overloading} \\ + ( @{syntax string} ( '==' | '\' ) @{syntax term} + ( '(' @'unchecked' ')' )? +) @'begin' + "} %% FIXME check string vs. name \begin{description} @@ -863,14 +861,14 @@ @{command_def "attribute_setup"} & : & @{text "theory \ 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 \ local_theory"} \end{matharray} - \begin{rail} - 'classes' (classdecl +) + @{rail " + @@{command classes} (@{syntax classdecl} +) ; - 'classrel' (nameref ('<' | subseteq) nameref + 'and') + @@{command classrel} (@{syntax nameref} ('<' | '\') @{syntax nameref} + @'and') ; - 'default_sort' sort - ; - \end{rail} + @@{command default_sort} @{syntax sort} + "} \begin{description} @@ -999,14 +996,13 @@ @{command_def "arities"} & : & @{text "theory \ 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 \ 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 \ 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 \ 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 \ 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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/ZF_Specific.thy --- 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 \ 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} + '+') ('<=' | '\') @{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: ('<=' | '\') @{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 \ 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 \ 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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/Document_Preparation.tex --- 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} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/Generic.tex --- 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} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/HOLCF_Specific.tex --- 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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/HOL_Specific.tex --- 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} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/Inner_Syntax.tex --- 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|\|'' (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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/Misc.tex --- 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} diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/Outer_Syntax.tex --- 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% % diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/Proof.tex --- 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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/Spec.tex --- 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 diff -r 13c7194a896a -r 20a99a0e65ed doc-src/IsarRef/Thy/document/ZF_Specific.tex --- 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% %