From e0dfeeba32d84d57157da699e9e622992e7ed258 Mon Sep 17 00:00:00 2001 From: herbelin Date: Thu, 17 Nov 2011 22:19:25 +0000 Subject: Fixing new bug introduced in r14665 when fixing bug #1834. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@14674 85f007b7-540e-0410-9357-904b9bb8a0f7 --- pretyping/cases.ml | 1 + test-suite/success/CasesDep.v | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/pretyping/cases.ml b/pretyping/cases.ml index 12a0ecac78..0454d4dcb9 100644 --- a/pretyping/cases.ml +++ b/pretyping/cases.ml @@ -898,6 +898,7 @@ let rec extract_predicate ccl = function let pred = extract_predicate ccl tms in if dep<>Anonymous then subst1 cur pred else pred | Pushed ((cur,IsInd (_,IndType(_,realargs),_)),_,(dep,_))::tms -> + let realargs = List.rev realargs in let k = if dep<>Anonymous then 1 else 0 in let tms = lift_tomatch_stack (List.length realargs + k) tms in let pred = extract_predicate ccl tms in diff --git a/test-suite/success/CasesDep.v b/test-suite/success/CasesDep.v index af6e2cd336..8fde93c1ba 100644 --- a/test-suite/success/CasesDep.v +++ b/test-suite/success/CasesDep.v @@ -513,3 +513,16 @@ Definition test (s:step E E) := Inductive K : nat -> Type := KC : forall (p q:nat), K p. Definition get : K O -> nat := fun x => match x with KC p q => q end. + +(* Checking correct order of substitution of realargs *) +(* (was broken from revision 14664 to 14669) *) +(* Example extracted from contrib CoLoR *) + +Inductive EQ : nat -> nat -> Prop := R x y : EQ x y. + +Check fun e t (d1 d2:EQ e t) => + match d1 in EQ e1 t1, d2 in EQ e2 t2 return + (e1,t1) = (e2,t2) -> (e1,t1) = (e,t) -> 0=0 + with + | R _ _, R _ _ => fun _ _ => eq_refl + end. -- cgit v1.2.3