In there SSReflect variants, these tactic operate on the first variable or constant of the goal and they do not use or change the proof context. In the third column we use s. If a pattern is prefixed by – , the test is reversed; contained in the given list of modules, except the ones in the modules prefixed by a -. If move is used as tactic, the hint is declared for assumption interpretation tactics, apply declares hints for goal interpretations. However, Coq provides two features to suppress redundant parameters:
|Date Added:||23 December 2014|
|File Size:||61.45 Mb|
|Operating Systems:||Windows NT/2000/XP/2003/2003/7/8/10 MacOS 10/X|
|Price:||Free* [*Free Regsitration Required]|
The SSReflect proof language — Coq documentation
While generalizing the goal is normally not explicitly needed in Chapter Tacticsit is an explicit operation performed by: This covers the case of both local and ssrreflect definitions, as illustrated in the following example. We therefore provide a more robust alternative in which the function is supplied:.
SSReflect only generates names that cannot appear later in the user script . Head symbols match under the following conditions:.
For a more detailed example the reader should refer to section Structure. This means the repetition of a rewrite tactic specified by a multiplier will perform matching each time an elementary rewrite operation is performed. Multiple holes in term are treated as independent placeholders. A term whose type has the form: It is closely associated with the declarative style of proof, since an extensive use of these highlighted statements make the script closer to a very detailed textbook proof.
Lemma test a b: Implicit arguments are indeed not inferred at all points of use, but only at points of call, leading to expressions such as. Note that standard eliminators have the shape …forall x, P … xthus en is the pattern identifying the eliminated term, as expected. Furthermore it is very ssgeflect to immediately decompose or rewrite with an assumption instead of adding it to the context, as the goal can often be simplified and even proved after this.
The interaction of the pose tactic with the interpretation of implicit arguments results in a powerful and concise syntax for local definitions involving dependent types. SSReflect provides a convenient, unified syntax to combine these interpretation operations with the proof stack operations.
Inductive and A B: The command checks that each ci is the name of a functional constant, whose implicit arguments are prenex, i.
Example The following script illustrates a toy example of this feature. The annotations are there for technical reasons only.
In its simplest form ssreflrct generally have: Here is an example showing the beginning of the proof that quotient and reminder of natural number euclidean division are unique. Then we define an inductive predicate for case analysis on lists according to their last element:.
The possibility to include wildcards in the body of the definitions offers a smooth way of defining local abstractions. This can be achieved by a combination of move: A linear development of Coq scripts gives little information on the structure of the proof. These terms are not actually generalized, but rather selected for substitution.
T is declared Variable null: SSReflect also offers an extension of this facility, by supplying tactics to permute the subgoals generated by a tactic. This clamping is accomplished by using the occurrence switches see section: To further structure scripts, SSReflect supplies terminating tacticals to explicitly close off tactics.
Instead of elim n note, no colonthis has the advantage of removing n from the context. Warning The nosimpl trick only works if no reduction is apparent in ssreflsct ; in particular, the declaration: As such, all these functionalities are provided by the rewrite tactic. We have seen so ssreflwct that the possibility of selecting a redex using a term with holes is already a powerful means of redex selection.
Variant tactic ; first last More generally, the tactic: Unfortunately, even after a call to the Set Printing All command, some occurrences are still not displayed to the user, essentially the ones possibly hidden in the predicate of a dependent match structure.