aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 b1f0360c43..b7a428e2aa 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 0000000000..88c19cb1a6
--- /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