aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2014-08-07Hypotheses in [Proofview.Goal.enter] were not normalised.Arnaud Spiwack
Fixes PTSF (though I have no idea what caused this bug to show up just yesterday).
2014-08-07In Hipattern: some functions not working modulo evar instantiation.Arnaud Spiwack
In theory [Proofview.Goal.env] should be, itself, marked as requiring a normalised goals (as it includes [hyps] which does). However, it is impractical as it is very common to pass a goal environment to a function reasoning modulo evars. So I guess we are bound to mark the appropriate functions by hand.
2014-08-07Removing simple induction / destruct from the AST.Pierre-Marie Pédrot
2014-08-07Instead of relying on a trick to make the constructor tactic parse, putPierre-Marie Pédrot
all the tactics using the constructor keyword in one entry. This has the side-effect to also remove the other variant of constructor from the AST. I also needed to hack around the "tauto" tactic to make it work, by calling directly the ML tactic through a TacExtend node. This may be generalized to get rid of the intermingled dependencies between this tactic and the infamous Ltac quotation mechanism.
2014-08-07Removing the "constructor" tactic from the AST.Pierre-Marie Pédrot
2014-08-06Port last changes of the guard condition to checker.Maxime Dénès
2014-08-06Relax a bit the guard condition.Maxime Dénès
My previous optimization of guard checking (f1280889) made it slightly stricter, in the presence of dependent pattern matching and nested inductive types whose toplevel types are mutually recursive. The following (cooked-up) example illustrates this: Inductive list (A B : Type) := nil : list A B | cons : A -> list A B -> list A B. Inductive tree := Node : list tree tree -> tree. Lemma foo : tree = tree. exact eq_refl. Qed. Fixpoint id (t : tree) := match t with | Node l => let l := match foo in (_ = T) return list tree T with eq_refl => l end in match l with | nil => Node (nil _ _) | cons x tl => Node (cons _ _ (id x) tl) end end. is accepted, but changing tree to: Inductive tree := Node : list tree tree -> tree. with tree2 := . made id be rejected after the optimization. The same problem occurred in Paco, and is now fixed. Note that in the example above, list cannot be mutually recursive because of the current strict positivity condition for tree.
2014-08-06Revert the change in Constrintern introduced by "Add a type of untyped term ↵Arnaud Spiwack
to Ltac's value." It was commit 52247f50fa9aed83cc4a9a714b6b8f779479fd9b. The closure in uconstr renders these changes (pertaining to substitution of ltac variables during internalisation) obsolete.
2014-08-06[uconstr]: use a closure instead of eager substitution.Arnaud Spiwack
This avoids relying on detyping. As Matthieu Sozeau pointed out to me, [understand∘detyping] has no reason to be the identity. This may create surprising behaviour some times (when a detyped term loses its relations to the current context, in particular in terms of universes), and downright incompatibilities in the case of refine. As a bonus this should be a faster implementation of [uconstr] with a leaner memory profile.
2014-08-06Removing "intros untils" from the AST.Pierre-Marie Pédrot
2014-08-05Adding a [make] primitive to the NonLogical monad.Pierre-Marie Pédrot
2014-08-05Small code simplification.Pierre-Marie Pédrot
2014-08-05CoqIDE: fixing parsing of bullets and brackets even at end of file.Hugo Herbelin
2014-08-05Uncountably many bullets (+,-,*,++,--,**,+++,...).Hugo Herbelin
2014-08-05Improving printing of "[]" (nil) in spite of the risk of collisionHugo Herbelin
with possible further use of token "[]" + slight restructuration.
2014-08-05Preliminary re-installation of notation interpretation in beautifying mode.Hugo Herbelin
2014-08-05Testing beautifying on an example.Hugo Herbelin
2014-08-05Fixing a few beautifying bugs.Hugo Herbelin
2014-08-05Experimentally adding an option for automatically erasing anHugo Herbelin
hypothesis when using it in apply or rewrite (prefix ">", undocumented), and a modifier to explicitly keep it in induction or destruct (prefix "!", reminiscent of non-linerarity). Also added undocumented option "Set Default Clearing Used Hypotheses" which makes apply and rewrite default to erasing the hypothesis they use (if ever their argument is indeed an hypothesis of the context).
2014-08-05Testing a replacement of "cut" by "enough" on a couple of test files.Hugo Herbelin
2014-08-05Adding a syntax "enough" for the variant of "assert" with the order ofHugo Herbelin
subgoals and the role of the "by tac" clause swapped.
2014-08-05A new step in the new "standard" naming policy for propositional hypothesesHugo Herbelin
obtained from case analysis or induction. Made it under experimental status. This replaces commit bf7d2a3ad2535e7d57db79c17c81aaf67d956965 which was acting at the level of logic.ml. Now acting in tactics.ml. Parts of things to be done about naming (not related to Propositions): induction on H:nat+bool produces hypotheses n and b but destruct on H produces a and b. This is because induction takes the dependent scheme whose names are statically inferred to be a and b while destruct dynamically builds a new scheme.
2014-08-05More proofs independent of the names generated by induction/elim overHugo Herbelin
a dependent elimination principle for Prop arguments.
2014-08-05Making references to Proof General and CoqIDE uniform in Reference Manual.Hugo Herbelin
2014-08-05Chapter 4 of reference manual: Fixing asymmetric patterns error +Hugo Herbelin
no spacing in English before ":".
2014-08-05Coqide: check_connection now also checks correct loading of coqide plugin +Hugo Herbelin
reports errors also from stderr.
2014-08-05STM: new "par:" goal selector, like "all:" but in parallelEnrico Tassi
par: distributes the goals among a number of workers given by -async-proofs-tac-j (defaults to 2).
2014-08-05STM: code restructured to reuse task queue for tacticsEnrico Tassi
2014-08-05Goal: API to get the solution of a goalEnrico Tassi
2014-08-05make a few lines fit the screenEnrico Tassi
2014-08-05STM: Classify Let as non asynchronous (Closes: #3486)Enrico Tassi
2014-08-05Coqide: annoying popups with GTK errors only in debug modeEnrico Tassi
2014-08-05Ring: prevent an error message to show in case of success.Arnaud Spiwack
Since [idtac] can, now, be used even if no goal is left, this error message which assumed that the goal was still open would run at every call of the [ring] tactic. Which lead to comically many nonsensical messages on the console during Coq's compilation.
2014-08-05Documentation: a simple example for [numgoals].Arnaud Spiwack
Now that [idtac] can print a single message for several goals, printing the number of goals is readable.
2014-08-05Ltac's [idtac] is now interpreted outside of a goal if possible.Arnaud Spiwack
It avoids printing several times the same things when no constr are involved in the message. It also allows to print messages even after all goals have been solved.
2014-08-05Ltac's idtac is now implemented using the new API.Arnaud Spiwack
2014-08-05Tacinterp: [interp_message] and associate now only require an environment ↵Arnaud Spiwack
rather than an entire goal.
2014-08-05Tactics: [tclENV] is now sensitive to [Proofview.Goal.enter].Arnaud Spiwack
When "entering" in a goal, the environment observed by [tclENV] is changed (in the scope of the goal) to be that of the goal. I'm not entirely sure it is the right semantics. But it allows to write tactics which are agnostic of whether they are run in a goal or not.
2014-08-05Documentation of [uconstr]: typesetting.Arnaud Spiwack
2014-08-05Documentation: refine accept uconstr arguments.Arnaud Spiwack
2014-08-05Doc: uconstr now has a tactic notation entry.Arnaud Spiwack
2014-08-05Fix interpretation bug in [uconstr].Arnaud Spiwack
Substitution of the Ltac variables would only occur if the internalised [uconstr] was of the form [glob, Some expr], which is the case only in tactics defined inside a proof, but not in tactics defined in [Ltac].
2014-08-05The [refine] tactic now accepts [uconstr].Arnaud Spiwack
Arguments of refine can hence be built by tactics instead of given in their entirety in one go.
2014-08-05Small refactoring: use [uconstr] instead of [constr] when relevant in ↵Arnaud Spiwack
grammar rules.
2014-08-05Properly declare uconstr as an argument for TACTIC EXTEND.Arnaud Spiwack
2014-08-05Fix [uconstr] name for argextend.Arnaud Spiwack
2014-08-05Better fix of e5c025Pierre Boutillier
2014-08-04One more optimization for guard checking of cofixpoints.Maxime Dénès
In check_one_cofix, we now avoid calling dest_subterms each time we meet a constructor by storing both the current tree (needed for the new criterion) and a precomputed array of trees for subterms.
2014-08-04More optimization in guard checking.Maxime Dénès
When dynamically computing the recarg tree, we now prune it according to the inferred tree. Compilation of CompCert is now ok.
2014-08-04Fix an exponential behavior in guard checker for cofixpoints.Maxime Dénès
I had introduced it by mistake due to my OCaml dyslexia :) Thanks to Enrico and Arnaud for saving my day!