aboutsummaryrefslogtreecommitdiff
path: root/tactics/elim.ml
diff options
context:
space:
mode:
authorherbelin2007-05-20 17:44:23 +0000
committerherbelin2007-05-20 17:44:23 +0000
commit9accb5a66da5d68fa01c4c3b8e7b74985e84f6fa (patch)
tree59ccd22002952d3557ee0cb8f0299c232813f2a7 /tactics/elim.ml
parent08f7d8d83fd0a5f18ae764a21a21b5336a0ce7f5 (diff)
- Propagation des evars non résolues vers les with_bindings; permet par exemple
de résoudre des buts comme celui-ci : Record nat_retract : Type := {f1 : nat -> nat; f2 : nat -> nat; f1_o_f2 : forall x, f1 (f2 x) = x}. Goal nat_retract. exists (fun x => x) (fun x => x). - Nouvelle tentative d'utilisation des types des metas/evars pour inférer de nouvelles instances de metas/evars; permet par exemple d'utiliser f_equal sans option with, mais aussi, avec la modif précédente, de résoudre des buts tels que Goal exists f:bool->Prop, f true = True. exists (fun x => True). [Les expériences passées avaient montré qu'en prenant en compte les types dans l'unification, on peut unifier trop tôt une evars à une mauvaise sorte; à défaut de mécanisme de prise en compte des problème d'unification avec sous-typage, on s'est interdit ici d'unifier des types qui sont des arités.] - Tout les constr de tactic_expr deviennent des open_constr (même si seul with_bindings les accepte au final... c'est pas l'idéal). - Renommage env -> evd et templenv -> env dans clausenv. - Renommage closed_generic_argument -> typed_generic_argument. - Renommage closed_abstract_argument_type -> typed_abstract_argument_type. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9842 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'tactics/elim.ml')
-rw-r--r--tactics/elim.ml8
1 files changed, 5 insertions, 3 deletions
diff --git a/tactics/elim.ml b/tactics/elim.ml
index 90b3c66b2e..43ea91f5ac 100644
--- a/tactics/elim.ml
+++ b/tactics/elim.ml
@@ -136,14 +136,16 @@ let decompose_or c gls =
(fun (_,t) -> is_disjunction t)
c gls
+let inj_open c = (Evd.empty,c)
+
let h_decompose l c =
- Refiner.abstract_tactic (TacDecompose (l,c)) (decompose_these c l)
+ Refiner.abstract_tactic (TacDecompose (l,inj_open c)) (decompose_these c l)
let h_decompose_or c =
- Refiner.abstract_tactic (TacDecomposeOr c) (decompose_or c)
+ Refiner.abstract_tactic (TacDecomposeOr (inj_open c)) (decompose_or c)
let h_decompose_and c =
- Refiner.abstract_tactic (TacDecomposeAnd c) (decompose_and c)
+ Refiner.abstract_tactic (TacDecomposeAnd (inj_open c)) (decompose_and c)
(* The tactic Double performs a double induction *)