# HG changeset patch # User wenzelm # Date 1455110083 -3600 # Node ID c04e97be39d39efa207b0d9150d350efb848e5fa # Parent c9b1897d4173ba1dda16fb683ac498cd6af2288b misc tuning and updates; diff -r c9b1897d4173 -r c04e97be39d3 src/Doc/Isar_Ref/Framework.thy --- a/src/Doc/Isar_Ref/Framework.thy Wed Feb 10 11:22:57 2016 +0100 +++ b/src/Doc/Isar_Ref/Framework.thy Wed Feb 10 14:14:43 2016 +0100 @@ -484,97 +484,77 @@ Structured proofs are presented as high-level expressions for composing entities of Pure (propositions, facts, and goals). The Isar proof language allows to organize reasoning within the underlying rule calculus of Pure, - but Isar is not another logical calculus! + but Isar is not another logical calculus. Isar merely imposes certain + structure and policies on Pure inferences. + + Isar is intended as an exercise in minimalism. Approximately half of the + language is introduced as primitive, the rest defined as derived concepts. + The grammar in \appref{ap:main-grammar} describes the core language + (category \proof\), which is embedded into the main outer theory syntax via + elements that require a proof (e.g.\ \<^theory_text>\theorem\, \<^theory_text>\lemma\, \<^theory_text>\function\, + \<^theory_text>\termination\). - Isar is an exercise in sound minimalism. Approximately half of the language - is introduced as primitive, the rest defined as derived concepts. The - following grammar describes the core language (category \proof\), which is - embedded into theory specification elements such as \<^theory_text>\theorem\; see also - \secref{sec:framework-stmt} for the separate category \statement\. + The syntax for terms and propositions is inherited from Pure (and the + object-logic). A \pattern\ is a \term\ with schematic variables, to be bound + by higher-order matching. Simultaneous propositions or facts may be + separated by the \<^theory_text>\and\ keyword. + + \<^medskip> + Facts may be referenced by name or proposition. For example, the result of + ``\<^theory_text>\have a: A \\'' becomes accessible both via the name \a\ and the + literal proposition \\A\\. Moreover, fact expressions may involve attributes + that modify either the theorem or the background context. For example, the + expression ``\a [OF b]\'' refers to the composition of two facts according + to the @{inference resolution} inference of + \secref{sec:framework-resolution}, while ``\a [intro]\'' declares a fact as + introduction rule in the context. + + The special fact called ``@{fact this}'' always refers to the last result, + as produced by \<^theory_text>\note\, \<^theory_text>\assume\, \<^theory_text>\have\, or \<^theory_text>\show\. Since \<^theory_text>\note\ occurs + frequently together with \<^theory_text>\then\, there are some abbreviations: \<^medskip> \begin{tabular}{rcl} - \theory\stmt\ & = & @{command "theorem"}~\statement proof |\~~@{command "definition"}~\\ | \\ \\[1ex] - - \proof\ & = & \prfx\<^sup>*\~@{command "proof"}~\method\<^sup>? stmt\<^sup>*\~@{command "qed"}~\method\<^sup>?\ \\[1ex] - - \prfx\ & = & @{command "using"}~\facts\ \\ - & \|\ & @{command "unfolding"}~\facts\ \\ - - \stmt\ & = & @{command "{"}~\stmt\<^sup>*\~@{command "}"} \\ - & \|\ & @{command "next"} \\ - & \|\ & @{command "note"}~\name = facts\ \\ - & \|\ & @{command "let"}~\term = term\ \\ - & \|\ & @{command "fix"}~\var\<^sup>+\ \\ - & \|\ & @{command assume}~\\inference\ name: props\ \\ - & \|\ & @{command "then"}\\<^sup>?\~\goal\ \\ - \goal\ & = & @{command "have"}~\name: props proof\ \\ - & \|\ & @{command "show"}~\name: props proof\ \\ - \end{tabular} - - \<^medskip> - Simultaneous propositions or facts may be separated by the @{keyword "and"} - keyword. - - \<^medskip> - The syntax for terms and propositions is inherited from Pure (and the - object-logic). A \pattern\ is a \term\ with schematic variables, to be bound - by higher-order matching. - - \<^medskip> - Facts may be referenced by name or proposition. For example, the result of - ``\<^theory_text>\have a: A \\'' becomes available both as \a\ and - \isacharbackquoteopen\A\\isacharbackquoteclose. Moreover, fact expressions - may involve attributes that modify either the theorem or the background - context. For example, the expression ``\a [OF b]\'' refers to the - composition of two facts according to the @{inference resolution} inference - of \secref{sec:framework-resolution}, while ``\a [intro]\'' declares a fact - as introduction rule in the context. - - The special fact called ``@{fact this}'' always refers to the last result, - as produced by @{command note}, @{command assume}, @{command have}, or - @{command show}. Since @{command note} occurs frequently together with - @{command then} we provide some abbreviations: - - \<^medskip> - \begin{tabular}{rcl} - @{command from}~\a\ & \\\ & @{command note}~\a\~@{command then} \\ - @{command with}~\a\ & \\\ & @{command from}~\a \ this\ \\ + \<^theory_text>\from a\ & \\\ & \<^theory_text>\note a then\ \\ + \<^theory_text>\with a\ & \\\ & \<^theory_text>\from a and this\ \\ \end{tabular} \<^medskip> - The \method\ category is essentially a parameter and may be populated later. - Methods use the facts indicated by @{command "then"} or @{command using}, - and then operate on the goal state. Some basic methods are predefined: - ``@{method "-"}'' leaves the goal unchanged, ``@{method this}'' applies the - facts as rules to the goal, ``@{method (Pure) "rule"}'' applies the facts to - another rule and the result to the goal (both ``@{method this}'' and - ``@{method (Pure) rule}'' refer to @{inference resolution} of + The \method\ category is essentially a parameter of the Isar language and + may be populated later. The command \<^theory_text>\method_setup\ allows to define proof + methods semantically in Isabelle/ML. The Eisbach language allows to define + proof methods symbolically, as recursive expressions over existing methods + @{cite "Matichuk-et-al:2014"}; see also @{file "~~/src/HOL/Eisbach"}. + + Methods use the facts indicated by \<^theory_text>\then\ or \<^theory_text>\using\, and then operate on + the goal state. Some basic methods are predefined in Pure: ``@{method "-"}'' + leaves the goal unchanged, ``@{method this}'' applies the facts as rules to + the goal, ``@{method (Pure) "rule"}'' applies the facts to another rule and + the result to the goal (both ``@{method this}'' and ``@{method (Pure) + rule}'' refer to @{inference resolution} of \secref{sec:framework-resolution}). The secondary arguments to ``@{method (Pure) rule}'' may be specified explicitly as in ``\(rule a)\'', or picked from the context. In the latter case, the system first tries rules declared as @{attribute (Pure) elim} or @{attribute (Pure) dest}, followed by those declared as @{attribute (Pure) intro}. - The default method for @{command proof} is ``@{method standard}'' (arguments - picked from the context), for @{command qed} it is ``@{method "succeed"}''. - Further abbreviations for terminal proof steps are ``@{command - "by"}~\method\<^sub>1 method\<^sub>2\'' for ``@{command proof}~\method\<^sub>1\~@{command - qed}~\method\<^sub>2\'', and ``@{command ".."}'' for ``@{command "by"}~@{method - standard}, and ``@{command "."}'' for ``@{command "by"}~@{method this}''. - The @{command unfolding} element operates directly on the current facts and - goal by applying equalities. + The default method for \<^theory_text>\proof\ is ``@{method standard}'' (which subsumes + @{method rule} with arguments picked from the context), for \<^theory_text>\qed\ it is + ``@{method "succeed"}''. Further abbreviations for terminal proof steps are + ``\<^theory_text>\by method\<^sub>1 method\<^sub>2\'' for ``\<^theory_text>\proof method\<^sub>1 qed method\<^sub>2\'', and + ``\<^theory_text>\..\'' for ``\<^theory_text>\by standard\, and ``\<^theory_text>\.\'' for ``\<^theory_text>\by this\''. The command + ``\<^theory_text>\unfolding facts\'' operates directly on the goal by applying equalities. \<^medskip> - Block structure can be indicated explicitly by ``@{command - "{"}~\\\~@{command "}"}'', although the body of a subproof already involves - implicit nesting. In any case, @{command next} jumps into the next section - of a block, i.e.\ it acts like closing an implicit block scope and opening - another one; there is no direct correspondence to subgoals here. + Block structure can be indicated explicitly by ``\<^theory_text>\{ \ }\'', although the + body of a subproof ``\<^theory_text>\proof \ qed\'' already provides implicit nesting. In + both situations, \<^theory_text>\next\ jumps into the next section of a block, i.e.\ it + acts like closing an implicit block scope and opening another one. There is + no direct connection to subgoals here! - The remaining elements @{command fix} and @{command assume} build up a local - context (see \secref{sec:framework-context}), while @{command show} refines - a pending subgoal by the rule resulting from a nested subproof (see + The commands \<^theory_text>\fix\ and \<^theory_text>\assume\ build up a local context (see + \secref{sec:framework-context}), while \<^theory_text>\show\ refines a pending subgoal by + the rule resulting from a nested subproof (see \secref{sec:framework-subproof}). Further derived concepts will support calculational reasoning (see \secref{sec:framework-calc}). \ @@ -584,64 +564,46 @@ text \ In judgments \\ \ \\ of the primitive framework, \\\ essentially acts like a - proof context. Isar elaborates this idea towards a higher-level notion, with - additional information for type-inference, term abbreviations, local facts, - hypotheses etc. + proof context. Isar elaborates this idea towards a more advanced concept, + with additional information for type-inference, term abbreviations, local + facts, hypotheses etc. - The element @{command fix}~\x :: \\ declares a local parameter, i.e.\ an + The element \<^theory_text>\fix x :: \\ declares a local parameter, i.e.\ an arbitrary-but-fixed entity of a given type; in results exported from the - context, \x\ may become anything. The @{command assume}~\\inference\\ - element provides a general interface to hypotheses: ``@{command - assume}~\\inference\ A\'' produces \A \ A\ locally, while the included - inference tells how to discharge \A\ from results \A \ B\ later on. There is - no user-syntax for \\inference\\, i.e.\ it may only occur internally when - derived commands are defined in ML. + context, \x\ may become anything. The \<^theory_text>\assume \inference\\ element provides + a general interface to hypotheses: \<^theory_text>\assume \inference\ A\ produces \A \ A\ + locally, while the included inference tells how to discharge \A\ from + results \A \ B\ later on. There is no surface syntax for \\inference\\, + i.e.\ it may only occur internally when derived commands are defined in ML. - At the user-level, the default inference for @{command assume} is - @{inference discharge} as given below. The additional variants @{command - presume} and @{command def} are defined as follows: - - \<^medskip> - \begin{tabular}{rcl} - @{command presume}~\A\ & \\\ & @{command assume}~\\weak\discharge\ A\ \\ - @{command def}~\x \ a\ & \\\ & @{command fix}~\x\~@{command assume}~\\expansion\ x \ a\ \\ - \end{tabular} - \<^medskip> + The default inference for \<^theory_text>\assume\ is @{inference export} as given below. + The derived element \<^theory_text>\def x \ a\ is defined as \<^theory_text>\fix x assume \expand\ x \ + a\, with the subsequent inference @{inference expand}. \[ - \infer[(@{inference_def discharge})]{\\\ - A \ #A \ B\}{\\\ \ B\} - \] - \[ - \infer[(@{inference_def "weak\discharge"})]{\\\ - A \ A \ B\}{\\\ \ B\} - \] - \[ - \infer[(@{inference_def expansion})]{\\\ - (x \ a) \ B a\}{\\\ \ B x\} + \infer[(@{inference_def export})]{\\\ - A \ A \ B\}{\\\ \ B\} + \qquad + \infer[(@{inference_def expand})]{\\\ - (x \ a) \ B a\}{\\\ \ B x\} \] \<^medskip> - Note that @{inference discharge} and @{inference "weak\discharge"} differ in - the marker for \A\, which is relevant when the result of a @{command - fix}-@{command assume}-@{command show} outline is composed with a pending - goal, cf.\ \secref{sec:framework-subproof}. - - The most interesting derived context element in Isar is @{command obtain} - @{cite \\S5.3\ "Wenzel-PhD"}, which supports generalized elimination steps - in a purely forward manner. The @{command obtain} command takes a - specification of parameters \\<^vec>x\ and assumptions \\<^vec>A\ to be - added to the context, together with a proof of a case rule stating that this - extension is conservative (i.e.\ may be removed from closed results later - on): + The most interesting derived context element in Isar is \<^theory_text>\obtain\ @{cite + \\S5.3\ "Wenzel-PhD"}, which supports generalized elimination steps in a + purely forward manner. The \<^theory_text>\obtain\ command takes a specification of + parameters \\<^vec>x\ and assumptions \\<^vec>A\ to be added to the context, + together with a proof of a case rule stating that this extension is + conservative (i.e.\ may be removed from closed results later on): \<^medskip> \begin{tabular}{l} - \\facts\\~~@{command obtain}~\\<^vec>x \ \<^vec>A \<^vec>x \ \\ \\[0.5ex] - \quad @{command have}~\case: \thesis. (\\<^vec>x. \<^vec>A \<^vec>x \ thesis) \ thesis\\ \\ - \quad @{command proof}~@{method "-"} \\ - \qquad @{command fix}~\thesis\ \\ - \qquad @{command assume}~\[intro]: \\<^vec>x. \<^vec>A \<^vec>x \ thesis\ \\ - \qquad @{command show}~\thesis\~@{command using}~\\facts\ \\ \\ - \quad @{command qed} \\ - \quad @{command fix}~\\<^vec>x\~@{command assume}~\\elimination case\ \<^vec>A \<^vec>x\ \\ + \<^theory_text>\\facts\ obtain "\<^vec>x" where "\<^vec>A" "\<^vec>x" \ \\ \\[0.5ex] + \quad \<^theory_text>\have "case": "\thesis. (\\<^vec>x. \<^vec>A \<^vec>x \ thesis) \ thesis"\ \\ + \quad \<^theory_text>\proof -\ \\ + \qquad \<^theory_text>\fix thesis\ \\ + \qquad \<^theory_text>\assume [intro]: "\\<^vec>x. \<^vec>A \<^vec>x \ thesis"\ \\ + \qquad \<^theory_text>\show thesis using \facts\ \\ \\ + \quad \<^theory_text>\qed\ \\ + \quad \<^theory_text>\fix "\<^vec>x" assume \elimination "case"\ "\<^vec>A \<^vec>x"\ \\ \end{tabular} \<^medskip> @@ -658,16 +620,15 @@ Here the name ``\thesis\'' is a specific convention for an arbitrary-but-fixed proposition; in the primitive natural deduction rules shown before we have occasionally used \C\. The whole statement of - ``@{command obtain}~\x\~@{keyword "where"}~\A x\'' may be read as a claim - that \A x\ may be assumed for some arbitrary-but-fixed \x\. Also note that - ``@{command obtain}~\A \ B\'' without parameters is similar to - ``@{command have}~\A \ B\'', but the latter involves multiple - subgoals. + ``\<^theory_text>\obtain x where A x\'' can be read as a claim that \A x\ may be assumed + for some arbitrary-but-fixed \x\. Also note that ``\<^theory_text>\obtain A and B\'' + without parameters is similar to ``\<^theory_text>\have A and B\'', but the latter + involves multiple subgoals that need to be proven separately. \<^medskip> The subsequent Isar proof texts explain all context elements introduced above using the formal proof language itself. After finishing a local proof - within a block, we indicate the exported result via @{command note}. + within a block, the exported result is indicated via \<^theory_text>\note\. \ (*<*) @@ -705,90 +666,87 @@ text \ \<^bigskip> - This illustrates the meaning of Isar context elements without goals getting - in between. + This explains the meaning of Isar context elements without, without goal + states getting in the way. \ subsection \Structured statements \label{sec:framework-stmt}\ text \ - The category \statement\ of top-level theorem specifications - is defined as follows: + The syntax of top-level theorem statements is defined as follows: \<^medskip> \begin{tabular}{rcl} - \statement\ & \\\ & \name: props \ \\ \\ + \statement\ & \\\ & \<^theory_text>\name: props and \\ \\ & \|\ & \context\<^sup>* conclusion\ \\[0.5ex] - \context\ & \\\ & \\ vars \ \\ \\ - & \|\ & \\ name: props \ \\ \\ + \context\ & \\\ & \<^theory_text>\fixes vars and \\ \\ + & \|\ & \<^theory_text>\assumes name: props and \\ \\ - \conclusion\ & \\\ & \\ name: props \ \\ \\ - & \|\ & \\ vars \ \ \ name: props \ \\ \\ + \conclusion\ & \\\ & \<^theory_text>\shows name: props and \\ \\ + & \|\ & \<^theory_text>\obtains vars and \ where name: props and \\ \\ & & \quad \\ \\ \\ \end{tabular} \<^medskip> - A simple \statement\ consists of named propositions. The full form admits - local context elements followed by the actual conclusions, such as - ``@{keyword "fixes"}~\x\~@{keyword "assumes"}~\A x\~@{keyword "shows"}~\B - x\''. The final result emerges as a Pure rule after discharging the context: - @{prop "\x. A x \ B x"}. + A simple statement consists of named propositions. The full form admits + local context elements followed by the actual conclusions, such as ``\<^theory_text>\fixes + x assumes A x shows B x\''. The final result emerges as a Pure rule after + discharging the context: @{prop "\x. A x \ B x"}. - The @{keyword "obtains"} variant is another abbreviation defined below; - unlike @{command obtain} (cf.\ \secref{sec:framework-context}) there may be - several ``cases'' separated by ``\\\'', each consisting of several - parameters (\vars\) and several premises (\props\). This specifies - multi-branch elimination rules. + The \<^theory_text>\obtains\ variant is another abbreviation defined below; unlike + \<^theory_text>\obtain\ (cf.\ \secref{sec:framework-context}) there may be several + ``cases'' separated by ``\\\'', each consisting of several parameters + (\vars\) and several premises (\props\). This specifies multi-branch + elimination rules. \<^medskip> \begin{tabular}{l} - \\ \<^vec>x \ \<^vec>A \<^vec>x \ \ \\ \\[0.5ex] - \quad \\ thesis\ \\ - \quad \\ [intro]: \\<^vec>x. \<^vec>A \<^vec>x \ thesis \ \\ \\ - \quad \\ thesis\ \\ + \<^theory_text>\obtains "\<^vec>x" where "\<^vec>A" "\<^vec>x" "\" \ \\ \\[0.5ex] + \quad \<^theory_text>\fixes thesis\ \\ + \quad \<^theory_text>\assumes [intro]: "\\<^vec>x. \<^vec>A \<^vec>x \ thesis" and \\ \\ + \quad \<^theory_text>\shows thesis\ \\ \end{tabular} \<^medskip> Presenting structured statements in such an ``open'' format usually simplifies the subsequent proof, because the outer structure of the problem is already laid out directly. E.g.\ consider the following canonical - patterns for \\\ and \\\, respectively: + patterns for \<^theory_text>\shows\ and \<^theory_text>\obtains\, respectively: \ text_raw \\begin{minipage}{0.5\textwidth}\ -theorem - fixes x and y - assumes "A x" and "B y" - shows "C x y" -proof - - from \A x\ and \B y\ - show "C x y" \ -qed + theorem + fixes x and y + assumes "A x" and "B y" + shows "C x y" + proof - + from \A x\ and \B y\ + show "C x y" \ + qed text_raw \\end{minipage}\begin{minipage}{0.5\textwidth}\ -theorem - obtains x and y - where "A x" and "B y" -proof - - have "A a" and "B b" \ - then show thesis .. -qed + theorem + obtains x and y + where "A x" and "B y" + proof - + have "A a" and "B b" \ + then show thesis .. + qed text_raw \\end{minipage}\ text \ \<^medskip> - Here local facts \isacharbackquoteopen\A x\\isacharbackquoteclose\ and - \isacharbackquoteopen\B y\\isacharbackquoteclose\ are referenced - immediately; there is no need to decompose the logical rule structure again. - In the second proof the final ``@{command then}~@{command - show}~\thesis\~@{command ".."}'' involves the local rule case \\x y. A x \ B + Here local facts \\A x\\ and \\B y\\ are referenced immediately; there is no + need to decompose the logical rule structure again. In the second proof the + final ``\<^theory_text>\then show thesis ..\'' involves the local rule case \\x y. A x \ B y \ thesis\ for the particular instance of terms \a\ and \b\ produced in the - body. \ + body. +\ subsection \Structured proof refinement \label{sec:framework-subproof}\ @@ -821,14 +779,13 @@ \end{figure} For example, in \state\ mode Isar acts like a mathematical scratch-pad, - accepting declarations like @{command fix}, @{command assume}, and claims - like @{command have}, @{command show}. A goal statement changes the mode to - \prove\, which means that we may now refine the problem via @{command - unfolding} or @{command proof}. Then we are again in \state\ mode of a proof - body, which may issue @{command show} statements to solve pending subgoals. - A concluding @{command qed} will return to the original \state\ mode one - level upwards. The subsequent Isar/VM trace indicates block structure, - linguistic mode, goal state, and inferences: + accepting declarations like \<^theory_text>\fix\, \<^theory_text>\assume\, and claims like \<^theory_text>\have\, + \<^theory_text>\show\. A goal statement changes the mode to \prove\, which means that we + may now refine the problem via \<^theory_text>\unfolding\ or \<^theory_text>\proof\. Then we are again + in \state\ mode of a proof body, which may issue \<^theory_text>\show\ statements to solve + pending subgoals. A concluding \<^theory_text>\qed\ will return to the original \state\ + mode one level upwards. The subsequent Isar/VM trace indicates block + structure, linguistic mode, goal state, and inferences: \ text_raw \\begingroup\footnotesize\ @@ -942,10 +899,9 @@ text \ \<^medskip> - Such ``peephole optimizations'' of Isar texts are practically important to - improve readability, by rearranging contexts elements according to the - natural flow of reasoning in the body, while still observing the overall - scoping rules. + Such fine-tuning of Isar text is practically important to improve + readability. Contexts elements are rearranged according to the natural flow + of reasoning in the body, while still observing the overall scoping rules. \<^medskip> This illustrates the basic idea of structured proof processing in Isar. The @@ -982,25 +938,25 @@ \trans\ represents to a suitable rule from the context: \begin{matharray}{rcl} - @{command "also"}\\<^sub>0\ & \equiv & @{command "note"}~\calculation = this\ \\ - @{command "also"}\\<^sub>n\<^sub>+\<^sub>1\ & \equiv & @{command "note"}~\calculation = trans [OF calculation this]\ \\[0.5ex] - @{command "finally"} & \equiv & @{command "also"}~@{command "from"}~\calculation\ \\ + \<^theory_text>\also"\<^sub>0"\ & \equiv & \<^theory_text>\note calculation = this\ \\ + \<^theory_text>\also"\<^sub>n\<^sub>+\<^sub>1"\ & \equiv & \<^theory_text>\note calculation = trans [OF calculation this]\ \\[0.5ex] + \<^theory_text>\finally\ & \equiv & \<^theory_text>\also from calculation\ \\ \end{matharray} The start of a calculation is determined implicitly in the text: here - @{command also} sets @{fact calculation} to the current result; any - subsequent occurrence will update @{fact calculation} by combination with - the next result and a transitivity rule. The calculational sequence is - concluded via @{command finally}, where the final result is exposed for use - in a concluding claim. + \<^theory_text>\also\ sets @{fact calculation} to the current result; any subsequent + occurrence will update @{fact calculation} by combination with the next + result and a transitivity rule. The calculational sequence is concluded via + \<^theory_text>\finally\, where the final result is exposed for use in a concluding claim. - Here is a canonical proof pattern, using @{command have} to establish the + Here is a canonical proof pattern, using \<^theory_text>\have\ to establish the intermediate results: \ (*<*) notepad begin + fix a b c d :: 'a (*>*) have "a = b" \ also have "\ = c" \ @@ -1011,8 +967,8 @@ (*>*) text \ - The term ``\\\'' above is a special abbreviation provided by the - Isabelle/Isar syntax layer: it statically refers to the right-hand side + The term ``\\\'' (literal ellipsis) is a special abbreviation provided by + the Isabelle/Isar term syntax: it statically refers to the right-hand side argument of the previous statement given in the text. Thus it happens to coincide with relevant sub-expressions in the calculational chain, but the exact correspondence is dependent on the transitivity rules being involved. @@ -1021,8 +977,8 @@ Symmetry rules such as @{prop "x = y \ y = x"} are like transitivities with only one premise. Isar maintains a separate rule collection declared via the @{attribute sym} attribute, to be used in fact expressions ``\a - [symmetric]\'', or single-step proofs ``@{command assume}~\x = y\~@{command - then}~@{command have}~\y = x\~@{command ".."}''. + [symmetric]\'', or single-step proofs ``\<^theory_text>\assume "x = y" then have "y = x" + ..\''. \ end \ No newline at end of file diff -r c9b1897d4173 -r c04e97be39d3 src/Doc/Isar_Ref/Quick_Reference.thy --- a/src/Doc/Isar_Ref/Quick_Reference.thy Wed Feb 10 11:22:57 2016 +0100 +++ b/src/Doc/Isar_Ref/Quick_Reference.thy Wed Feb 10 14:14:43 2016 +0100 @@ -8,7 +8,7 @@ section \Proof commands\ -subsection \Main grammar\ +subsection \Main grammar \label{ap:main-grammar}\ text \ \begin{tabular}{rcl} diff -r c9b1897d4173 -r c04e97be39d3 src/Doc/manual.bib --- a/src/Doc/manual.bib Wed Feb 10 11:22:57 2016 +0100 +++ b/src/Doc/manual.bib Wed Feb 10 14:14:43 2016 +0100 @@ -1121,6 +1121,22 @@ year = 1984, publisher = {Bibliopolis}} +@inproceedings{Matichuk-et-al:2014, + author = {Daniel Matichuk and Makarius Wenzel and Toby C. Murray}, + title = {An {Isabelle} Proof Method Language}, + editor = {Gerwin Klein and Ruben Gamboa}, + booktitle = {Interactive Theorem Proving - 5th International Conference, {ITP} + 2014, Held as Part of the Vienna Summer of Logic, {VSL} 2014, Vienna, + Austria}, + year = {2014}, + url = {http://dx.doi.org/10.1007/978-3-319-08970-6_25}, + doi = {10.1007/978-3-319-08970-6_25}, + series = LNCS, + volume = {8558}, + publisher = {Springer}, + year = {2014}, +} + @incollection{melham89, author = {Thomas F. Melham}, title = {Automating Recursive Type Definitions in Higher Order