aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7>2008-09-14 10:59:54 +0000
committerGravatar msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7>2008-09-14 10:59:54 +0000
commit483515414c44131d50e48020b8aa18fdda9c5aaf (patch)
tree4292e79d240415055ea4f65bc0504dce1f549e6a
parent77f1445b7f7d5499becbfa4c7ecfc9c0772f7971 (diff)
Fix bug #1931 by searching for a sort after doing beta,iota,delta-
normalization. Add test-suite file. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@11406 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--contrib/cc/cctac.ml8
-rw-r--r--test-suite/bugs/closed/shouldsucceed/1931.v29
2 files changed, 33 insertions, 4 deletions
diff --git a/contrib/cc/cctac.ml b/contrib/cc/cctac.ml
index dc29e101a..2509dffd5 100644
--- a/contrib/cc/cctac.ml
+++ b/contrib/cc/cctac.ml
@@ -48,10 +48,6 @@ let _eq = constant ["Init";"Logic"] "eq"
let _False = constant ["Init";"Logic"] "False"
-(* decompose member of equality in an applicative format *)
-
-let sf_of env sigma c = family_of_sort (destSort (type_of env sigma c))
-
let whd env=
let infos=Closure.create_clos_infos Closure.betaiotazeta env in
(fun t -> Closure.whd_val infos (Closure.inject t))
@@ -60,6 +56,10 @@ let whd_delta env=
let infos=Closure.create_clos_infos Closure.betadeltaiota env in
(fun t -> Closure.whd_val infos (Closure.inject t))
+(* decompose member of equality in an applicative format *)
+
+let sf_of env sigma c = family_of_sort (destSort (whd_delta env (type_of env sigma c)))
+
let rec decompose_term env sigma t=
match kind_of_term (whd env t) with
App (f,args)->
diff --git a/test-suite/bugs/closed/shouldsucceed/1931.v b/test-suite/bugs/closed/shouldsucceed/1931.v
new file mode 100644
index 000000000..bc8be78fe
--- /dev/null
+++ b/test-suite/bugs/closed/shouldsucceed/1931.v
@@ -0,0 +1,29 @@
+
+
+Set Implicit Arguments.
+
+Inductive T (A:Set) : Set :=
+ app : T A -> T A -> T A.
+
+Fixpoint map (A B:Set)(f:A->B)(t:T A) : T B :=
+ match t with
+ app t1 t2 => app (map f t1)(map f t2)
+ end.
+
+Fixpoint subst (A B:Set)(f:A -> T B)(t:T A) :T B :=
+ match t with
+ app t1 t2 => app (subst f t1)(subst f t2)
+ end.
+
+(* This is the culprit: *)
+Definition k0:=Set.
+
+(** interaction of subst with map *)
+Lemma substLaw1 (A:k0)(B C:Set)(f: A -> B)(g:B -> T C)(t: T A):
+ subst g (map f t) = subst (fun x => g (f x)) t.
+Proof.
+ intros.
+ generalize B C f g; clear B C f g.
+ induction t; intros; simpl.
+ f_equal.
+Admitted.