aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar jforest <jforest@85f007b7-540e-0410-9357-904b9bb8a0f7>2006-12-22 11:12:13 +0000
committerGravatar jforest <jforest@85f007b7-540e-0410-9357-904b9bb8a0f7>2006-12-22 11:12:13 +0000
commit0e6bbf791548739793c304e16893e0951e4ac587 (patch)
tree0168a89317965482934804ec13e32d2aac4bce13
parent85dbabf5a63bffce3254dbe639c2cff62790b43e (diff)
remplacement d'un test d'egalite par un test de convertibilite dans injection/discriminate/inversion pour corriger des bugs en presence de modules.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9459 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--tactics/equality.ml2
-rw-r--r--test-suite/modules/injection_discriminate_inversion.v34
2 files changed, 35 insertions, 1 deletions
diff --git a/tactics/equality.ml b/tactics/equality.ml
index b1f0360c4..b7a428e2a 100644
--- a/tactics/equality.ml
+++ b/tactics/equality.ml
@@ -282,7 +282,7 @@ let find_positions env sigma t1 t2 =
let sorts = list_intersect sorts (allowed_sorts env (fst sp1)) in
(* both sides are fully applied constructors, so either we descend,
or we can discriminate here. *)
- if sp1 = sp2 then
+ if is_conv env sigma hd1 hd2 then
let nrealargs = constructor_nrealargs env sp1 in
let rargs1 = list_lastn nrealargs args1 in
let rargs2 = list_lastn nrealargs args2 in
diff --git a/test-suite/modules/injection_discriminate_inversion.v b/test-suite/modules/injection_discriminate_inversion.v
new file mode 100644
index 000000000..88c19cb1a
--- /dev/null
+++ b/test-suite/modules/injection_discriminate_inversion.v
@@ -0,0 +1,34 @@
+Module M.
+ Inductive I : Set := C : nat -> I.
+End M.
+
+Module M1 := M.
+
+
+Goal forall x, M.C x = M1.C 0 -> x = 0 .
+ intros x H.
+ (*
+ injection sur deux constructeurs egaux mais appeles
+ par des modules differents
+ *)
+ injection H.
+ tauto.
+Qed.
+
+Goal M.C 0 <> M1.C 1.
+ (*
+ Discriminate sur deux constructeurs egaux mais appeles
+ par des modules differents
+ *)
+ intro H;discriminate H.
+Qed.
+
+
+Goal forall x, M.C x = M1.C 0 -> x = 0.
+ intros x H.
+ (*
+ inversion sur deux constructeurs egaux mais appeles
+ par des modules differents
+ *)
+ inversion H. reflexivity.
+Qed. \ No newline at end of file