aboutsummaryrefslogtreecommitdiff
path: root/kernel/indtypes.ml
diff options
context:
space:
mode:
authorherbelin2000-09-15 16:44:52 +0000
committerherbelin2000-09-15 16:44:52 +0000
commitf7da904e8702bd144f25fa3a80307a994a39f1d6 (patch)
tree57dffffc91f349ebc974b745d277c70d4830b83f /kernel/indtypes.ml
parentccc5d85d36898c283a41230d0269b6ce701930cd (diff)
On laisse les LetIn dans les types des constructeurs et des éliminations
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@612 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'kernel/indtypes.ml')
-rw-r--r--kernel/indtypes.ml12
1 files changed, 7 insertions, 5 deletions
diff --git a/kernel/indtypes.ml b/kernel/indtypes.ml
index ee58603117..c29d4385d5 100644
--- a/kernel/indtypes.ml
+++ b/kernel/indtypes.ml
@@ -272,9 +272,10 @@ let listrec_mconstr env ntypes nparams i indlc =
| IsLetIn (na,b,t,d) ->
assert (largs = []);
if not (noccur_between n ntypes b & noccur_between n ntypes t) then
- raise (IllFormedInd (LocalNonPos n));
- let recarg = check_pos n b in
- check_constr_rec lrec (n+1) d
+ check_constr_rec lrec n (subst1 b d)
+ else
+ let recarg = check_pos n b in
+ check_constr_rec lrec (n+1) d
| hd ->
if check_head then
@@ -320,8 +321,9 @@ let cci_inductive env env_ar kind nparams finite inds cst =
Some (body_of_type ar) in
let kelim = allowed_sorts issmall isunit ar_sort in
let lc_bodies = Array.map body_of_type lc in
- let splayed_lc = Array.map (splay_prod env Evd.empty) lc_bodies in
- let nf_lc = Array.map (fun (d,b) -> prod_it b d) splayed_lc in
+ let splayed_lc = Array.map (splay_prod_assum env Evd.empty) lc_bodies in
+ let nf_lc = Array.map
+ (fun (d,b) -> it_mkProd_or_LetIn b d) splayed_lc in
let nf_typed_lc,user_lc =
if nf_lc = lc_bodies then lc,None
else