aboutsummaryrefslogtreecommitdiffhomepage
path: root/ltac
Commit message (Collapse)AuthorAge
* Merge branch 'v8.6'Gravatar Pierre-Marie Pédrot2016-08-21
|\
| * Moving Taccoerce to ltac/ folder.Gravatar Pierre-Marie Pédrot2016-08-19
| | | | | | | | | | This was an overlook. There was no reason to let it in the tactics/ folder, as is was semantically part of the Ltac implementation.
| * Merge remote-tracking branch 'github/bug4188' into v8.6Gravatar Matthieu Sozeau2016-08-18
| |\
| * | Fix bug #4939: LtacProf prints tactic notations weirdly.Gravatar Pierre-Marie Pédrot2016-08-18
| | |
| | * Fix setoid_rewrite to raise proper errorsGravatar Matthieu Sozeau2016-08-17
| |/ | | | | | | | | when the rewrite lemma doesn't typecheck or does not correspond to a relation.
* | Merge branch 'v8.6'Gravatar Pierre-Marie Pédrot2016-08-17
|\|
| * Merge branch 'v8.5' into v8.6Gravatar Pierre-Marie Pédrot2016-08-16
| |
| * Merge remote-tracking branch 'gforge/v8.5' into v8.6Gravatar Matthieu Sozeau2016-07-29
| |
* | Merge branch 'v8.6' into trunkGravatar Pierre Letouzey2016-07-26
|\|
| * Fix bug #4679, weakened setoid_rewrite unificationGravatar Matthieu Sozeau2016-07-21
| | | | | | | | | | It should use evar instantiations eagerly during unification of the lhs of the lemma, as in 8.4.
* | Renouncing for uniformity to the few instances of pf_interp_* in Tacinterp.Gravatar Hugo Herbelin2016-07-12
|/
* Revert "Revert "Improve the interpretation scope of arguments of an ltac ↵Gravatar Maxime Dénès2016-07-04
| | | | | | | | match."" We apply this patch to trunk so that it is integrated in 8.6. This reverts commit 0eb08b70f0c576e58912c1fc3ef74f387ad465be.
* Merge branch 'v8.5' into trunkGravatar Maxime Dénès2016-07-04
|
* rename toplevel/cerror.ml into explainErr.ml (too close to the new ↵Gravatar Pierre Letouzey2016-07-03
| | | | lib/cErrors.ml)
* closure.ml renamed into cClosure.ml (avoid clash with a compiler-libs module)Gravatar Pierre Letouzey2016-07-03
| | | | For the moment, there is a Closure module in compiler-libs/ocamloptcomp.cm(x)a
* errors.ml renamed into cErrors.ml (avoid clash with an OCaml compiler-lib ↵Gravatar Pierre Letouzey2016-07-03
| | | | | | module) For the moment, there is an Error module in compilers-lib/ocamlbytecomp.cm(x)a
* Separate flags for fix/cofix/match reduction and clean reduction function names.Gravatar Maxime Dénès2016-07-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a reimplementation of Hugo's PR#117. We are trying to address the problem that the name of some reduction functions was not saying what they were doing (e.g. whd_betadeltaiota was doing let-in reduction). Like PR#117, we are careful that no function changed semantics without changing the names. Porting existing ML code should be a matter of renamings a few function calls. Also, we introduce more precise reduction flags fMATCH, fFIX, fCOFIX collectively denominated iota. We renamed the following functions: Closure.betadeltaiota -> Closure.all Closure.betadeltaiotanolet -> Closure.allnolet Reductionops.beta -> Closure.beta Reductionops.zeta -> Closure.zeta Reductionops.betaiota -> Closure.betaiota Reductionops.betaiotazeta -> Closure.betaiotazeta Reductionops.delta -> Closure.delta Reductionops.betalet -> Closure.betazeta Reductionops.betadelta -> Closure.betadeltazeta Reductionops.betadeltaiota -> Closure.all Reductionops.betadeltaiotanolet -> Closure.allnolet Closure.no_red -> Closure.nored Reductionops.nored -> Closure.nored Reductionops.nf_betadeltaiota -> Reductionops.nf_all Reductionops.whd_betadelta -> Reductionops.whd_betadeltazeta Reductionops.whd_betadeltaiota -> Reductionops.whd_all Reductionops.whd_betadeltaiota_nolet -> Reductionops.whd_allnolet Reductionops.whd_betadelta_stack -> Reductionops.whd_betadeltazeta_stack Reductionops.whd_betadeltaiota_stack -> Reductionops.whd_all_stack Reductionops.whd_betadeltaiota_nolet_stack -> Reductionops.whd_allnolet_stack Reductionops.whd_betadelta_state -> Reductionops.whd_betadeltazeta_state Reductionops.whd_betadeltaiota_state -> Reductionops.whd_all_state Reductionops.whd_betadeltaiota_nolet_state -> Reductionops.whd_allnolet_state Reductionops.whd_eta -> Reductionops.shrink_eta Tacmach.pf_whd_betadeltaiota -> Tacmach.pf_whd_all Tacmach.New.pf_whd_betadeltaiota -> Tacmach.New.pf_whd_all And removed the following ones: Reductionops.whd_betaetalet Reductionops.whd_betaetalet_stack Reductionops.whd_betaetalet_state Reductionops.whd_betadeltaeta_stack Reductionops.whd_betadeltaeta_state Reductionops.whd_betadeltaeta Reductionops.whd_betadeltaiotaeta_stack Reductionops.whd_betadeltaiotaeta_state Reductionops.whd_betadeltaiotaeta They were unused and having some reduction functions perform eta is confusing as whd_all and nf_all don't do it.
* A new infrastructure for warnings.Gravatar Maxime Dénès2016-06-29
| | | | | | | | | | | | | | | | | | | | | | | | | | On the user side, coqtop and coqc take a list of warning names or categories after -w. No prefix means activate the warning, a "-" prefix means deactivate it, and "+" means turn the warning into an error. Special categories include "all", and "default" which contains the warnings enabled by default. We also provide a vernacular Set Warnings which takes the same flags as argument. Note that coqc now prints warnings. The name and category of a warning are printed with the warning itself. On the developer side, Feedback.msg_warning is still accessible, but the recommended way to print a warning is in two steps: 1) create it by: let warn_my_warning = CWarnings.create ~name:"my-warning" ~category:"my-category" (fun args -> Pp.strbrk ...) 2) print it by: warn_my_warning args
* LtacProf reports structured results (pr/209)Gravatar CJ Bell2016-06-20
| | | | using a custom feedback message in response to "Show Ltac Profile."
* Do not evar-normalize goals when interpreting some hardwired genargs.Gravatar Pierre-Marie Pédrot2016-06-20
|
* Backporting c064fb933 from 8.5 (another regression with Ltac trace report).Gravatar Hugo Herbelin2016-06-18
| | | | Doing it explicitly because it is in another file.
* Adding an "as" clause to specialize.Gravatar Hugo Herbelin2016-06-18
| | | | | | | | | | | | | | | | | | | | | | | | Comments -------- - The tactic specialize conveys a somehow intuitive reasoning concept and I would support continuing maintaining it even if the design comes in my opinion with some oddities. (Note that the experience of MathComp and SSReflect also suggests that specialize is an interesting concept in itself). There are two variants to specialize: - specialize (H args) with H an hypothesis looks natural: we specialize H with extra arguments and the "as pattern" clause comes naturally as an extension of it, destructuring the result using the pattern. - specialize term with bindings makes the choice of fully applying the term filling missing expressions with bindings and to then behave as generalize. Wouldn't we like a more fine-grained approach and the result to remain in the context? In this second case, the "as" clause works as if the term were posed in the context with "pose proof".
* Giving a more natural semantics to injection by default.Gravatar Hugo Herbelin2016-06-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There were three versions of injection: 1. "injection term" without "as" clause: was leaving hypotheses on the goal in reverse order 2. "injection term as ipat", first version: was introduction hypotheses using ipat in reverse order without checking that the number of ipat was the size of the injection (activated with "Unset Injection L2R Pattern Order") 3. "injection term as ipat", second version: was introduction hypotheses using ipat in left-to-right order checking that the number of ipat was the size of the injection and clearing the injecting term by default if an hypothesis (activated with "Set Injection L2R Pattern Order", default one from 8.5) There is now: 4. "injection term" without "as" clause, new version: introducing the components of the injection in the context in left-to-right order using default intro-patterns "?" and clearing the injecting term by default if an hypothesis (activated with "Set Structural Injection") The new versions 3. and 4. are the "expected" ones in the sense that they have the following good properties: - introduction in the context is in the natural left-to-right order - "injection" behaves the same with and without "as", always introducing the hypotheses in the goal what corresponds to the natural expectation as the changes I made in the proof scripts for adaptation confirm - clear the "injection" hypothesis when an hypothesis which is the natural expectation as the changes I made in the proof scripts for adaptation confirm The compatibility can be preserved by "Unset Structural Injection" or by calling "simple injection". The flag is currently off.
* Exporting a generic argument induction_arg. As a consequence,Gravatar Hugo Herbelin2016-06-18
| | | | | simplifying and generalizing the grammar entries for injection, discriminate and simplify_eq.
* Adding eintros to respect the e- prefix policy.Gravatar Hugo Herbelin2016-06-18
| | | | | | | | | | | | | | | | | | | | | In pat%constr, creating new evars is now allowed only if "eintros" is given, i.e. "intros" checks that no evars are created, and similarly e.g. for "injection ... as ... pat%constr". The form "eintros [...]" or "eintros ->" with the case analysis or rewrite creating evars is now also supported. This is not a commitment to say that it is good to have an e- modifier to tactics. It is just to be consistent with the existing convention. It seems to me that the "no e-" variants are good for beginners. However, expert might prefer to use the e-variants by default. Opinions from teachers and users would be useful. To be possibly done: do that [= ...] work on hypotheses with side conditions or parameters based on the idea that they apply the full injection and not only the restriction of it to goals which are exactly an equality, as it is today.
* par: like all: but in parallelGravatar Enrico Tassi2016-06-17
| | | | | | | | | | | | | This commit documents par:, fixes its semantics so that is behaves like all:, supports (toplevel) abstract and optimizes toplevel solve. `par: solve [tac]` is equivalent to `Ltac tac1 := solve[tac]...par: tac1` but is optimized for failures: if one goal fails all are aborted immediately. `par: abstract tac` runs abstract on the generated proof terms. Nested abstract calls are not supported.
* Revise syntax of Hint CutGravatar Matthieu Sozeau2016-06-16
| | | | | As noticed by C. Cohen it was confusingly different from standard notation.
* Purely refactoring and code/API cleanup.Gravatar Matthieu Sozeau2016-06-16
| | | | Fix test-suite files
* bteauto: a Proofview.tactic for multiple goalsGravatar Matthieu Sozeau2016-06-16
| | | | | | | Add an option to force backtracking at toplevel, which is used by default when calling typeclasses eauto on a set of goals. They might be depended on by other subgoals, so the tactic should be backtracking by default, a once can make it not backtrack.
* Implement limited proof search and iterative deepening.Gravatar Matthieu Sozeau2016-06-16
| | | | Fix typo in proofview
* Typeclasses eauto based on new proof engine,Gravatar Matthieu Sozeau2016-06-16
| | | | with full backtracking across multiple goals.
* Typo in comment.Gravatar Hugo Herbelin2016-06-16
|
* Fixing space in an error message.Gravatar Hugo Herbelin2016-06-16
|
* Fixing printing of Register retroknowledge.Gravatar Hugo Herbelin2016-06-16
|
* Fixing Add Parametric Relation by adding printer for binders.Gravatar Hugo Herbelin2016-06-16
|
* Fixing missing substitution / printing cases of TacSelect.Gravatar Pierre-Marie Pédrot2016-06-16
|
* Fixing parsing of constr argument of ltac functions at level 8 in theGravatar Hugo Herbelin2016-06-16
| | | | presence of entries starting with a non-terminal such as "b ^2".
* A stronger invariant on the syntax of TacAssert, what allows for aGravatar Hugo Herbelin2016-06-16
| | | | | | simpler re-printing of assert. Also fixing the precedence for printing "by" clause.
* Merge PR #195: Complete is_* family of term-examining tactics.Gravatar Pierre-Marie Pédrot2016-06-16
|\
* \ Merge 'pr/191' into trunkGravatar Enrico Tassi2016-06-16
|\ \
* \ \ Merge PR #211: Fix a printing typo in LtacProf.Gravatar Pierre-Marie Pédrot2016-06-16
|\ \ \
* \ \ \ Merge PR #100: fresh now accepts more things than just identifiers.Gravatar Pierre-Marie Pédrot2016-06-16
|\ \ \ \
| | | | * Add is_constGravatar Jason Gross2016-06-16
| | | | |
| | * | | Fix another missing newlineGravatar Jason Gross2016-06-16
| | | | |
| | * | | Fix a printing typoGravatar Jason Gross2016-06-16
| |/ / / |/| | | | | | | Introduced by b21fefc0ec0aab2560d0b654f1a1f4203898388b
* | | | Merge remote-tracking branch 'origin/pr/173' into trunkGravatar Enrico Tassi2016-06-14
|\ \ \ \ | | | | | | | | | | | | | | | This is the "error resiliency" mode for STM
| | | * | Ident selectors cannot be used inside an Ltac expression.Gravatar Cyprien Mangin2016-06-14
| | | | | | | | | | | | | | | | | | | | They can still be used at the toplevel.
| | | * | Goal selectors are now tacticals and can be used as such.Gravatar Cyprien Mangin2016-06-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows to write things like this: split; 2: intro _; exact I or like this: eexists ?[x]; ?[x]: exact 0; trivial This has the side-effect on making the '?' before '[x]' mandatory.
| | | * | Remove the need for brackets in goal selectors.Gravatar Cyprien Mangin2016-06-14
| | | | |
| | | * | Fix usage of Pervasives in goal selectors.Gravatar Cyprien Mangin2016-06-14
| | | | |