From 260965dcf60d793ba01110ace8945cf51ef6531f Mon Sep 17 00:00:00 2001 From: aspiwack Date: Sat, 2 Nov 2013 15:34:01 +0000 Subject: Makes the new Proofview.tactic the basic type of Ltac. On the compilation of Coq, we can see an increase of ~20% compile time on my completely non-scientific tests. Hopefully this can be fixed. There are a lot of low hanging fruits, but this is an iso-functionality commit. With a few exceptions which were not necessary for the compilation of the theories: - The declarative mode is not yet ported - The timeout tactical is currently deactivated because it needs some subtle I/O. The framework is ready to handle it, but I haven't done it yet. - For much the same reason, the ltac debugger is unplugged. It will be more difficult, but will eventually be back. A few comments: I occasionnally used a coercion from [unit Proofview.tactic] to the old [Prooftype.tactic]. It should work smoothely, but loses any backtracking information: the coerced tactics has at most one success. - It is used in autorewrite (it shouldn't be a problem there). Autorewrite's code is fairly old and tricky - It is used in eauto, mostly for "Hint Extern". It may be an issue as time goes as we might want to have various success in a "Hint Extern". But it would require a heavy port of eauto.ml4 - It is used in typeclass eauto, but with a little help from Matthieu, it should be easy to port the whole thing to the new tactic engine, actually simplifying the code. - It is used in fourier. I believe it to be inocuous. - It is used in firstorder and congruence. I think it's ok. Their code is somewhat intricate and I'm not sure they would be easy to actually port. - It is used heavily in Function. And honestly, I have no idea whether it can do harm or not. Updates: (11 June 2013) Pierre-Marie Pédrot contributed the rebase over his new stream based architecture for Ltac matching (r16533), which avoid painfully and expensively working around the exception-throwing control flow of the previous API. (11 October 2013) Rebasing over recent commits (somewhere in r16721-r16730) rendered a major bug in my implementation of Tacticals.New.tclREPEAT_MAIN apparent. It caused Field_theory.v to loop. The bug made rewrite !lemma, rewrite ?lemma and autorewrite incorrect (tclREPEAT_MAIN was essentially tclREPEAT, causing rewrites to be tried in the side-conditions of conditional rewrites as well). The new implementation makes Coq faster, but it is pretty much impossible to tell if it is significant at all. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16967 85f007b7-540e-0410-9357-904b9bb8a0f7 --- plugins/fourier/fourierR.ml | 18 +++++++++--------- plugins/fourier/g_fourier.ml4 | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'plugins/fourier') diff --git a/plugins/fourier/fourierR.ml b/plugins/fourier/fourierR.ml index 3dd384ee87..d49f225e67 100644 --- a/plugins/fourier/fourierR.ml +++ b/plugins/fourier/fourierR.ml @@ -478,22 +478,22 @@ let rec fourier gl= "Rlt" -> (tclTHEN (tclTHEN (apply (get coq_Rfourier_not_ge_lt)) - (intro_using fhyp)) + (Proofview.V82.of_tactic (intro_using fhyp))) fourier) |"Rle" -> (tclTHEN (tclTHEN (apply (get coq_Rfourier_not_gt_le)) - (intro_using fhyp)) + (Proofview.V82.of_tactic (intro_using fhyp))) fourier) |"Rgt" -> (tclTHEN (tclTHEN (apply (get coq_Rfourier_not_le_gt)) - (intro_using fhyp)) + (Proofview.V82.of_tactic (intro_using fhyp))) fourier) |"Rge" -> (tclTHEN (tclTHEN (apply (get coq_Rfourier_not_lt_ge)) - (intro_using fhyp)) + (Proofview.V82.of_tactic (intro_using fhyp))) fourier) |_-> raise GoalDone) |_-> raise GoalDone @@ -595,16 +595,16 @@ let rec fourier gl= )) (tclTHEN (apply (if sres then get coq_Rnot_lt_lt else get coq_Rnot_le_le)) - (tclTHENS (Equality.replace + (tclTHENS (Proofview.V82.of_tactic (Equality.replace (mkAppL [|get coq_Rminus;!t2;!t1|] ) - tc) + tc)) [tac2; (tclTHENS - (Equality.replace + (Proofview.V82.of_tactic (Equality.replace (mkApp (get coq_Rinv, [|get coq_R1|])) - (get coq_R1)) + (get coq_R1))) (* en attendant Field, ça peut aider Ring de remplacer 1/1 par 1 ... *) [tclORELSE @@ -617,7 +617,7 @@ let rec fourier gl= ])); !tac1]); tac:=(tclTHENS (cut (get coq_False)) - [tclTHEN intro (contradiction None); + [tclTHEN (Proofview.V82.of_tactic intro) (Proofview.V82.of_tactic (contradiction None)); !tac]) |_-> assert false) |_-> assert false ); diff --git a/plugins/fourier/g_fourier.ml4 b/plugins/fourier/g_fourier.ml4 index 01166d1db0..1635cecc08 100644 --- a/plugins/fourier/g_fourier.ml4 +++ b/plugins/fourier/g_fourier.ml4 @@ -11,5 +11,5 @@ open FourierR TACTIC EXTEND fourier - [ "fourierz" ] -> [ fourier ] + [ "fourierz" ] -> [ Proofview.V82.tactic fourier ] END -- cgit v1.2.3