aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2001-09-20 15:46:14 +0000
committerGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2001-09-20 15:46:14 +0000
commit710bbc7ca76faa77dbdebc9e14cf98ba8361111a (patch)
tree08ca0b2f6cfed0344691c472686f66634f9f03be
parent24c0e99bbe0ad4249df41f784ff4051599dd44cd (diff)
Le prédicat du vieux Case ne doit pas contenir d'univers algébrique même quand il est synthétisé à partir du type des branches
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@2025 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/cases.ml7
1 files changed, 6 insertions, 1 deletions
diff --git a/pretyping/cases.ml b/pretyping/cases.ml
index 89c4c8406..6f051b6e3 100644
--- a/pretyping/cases.ml
+++ b/pretyping/cases.ml
@@ -129,6 +129,11 @@ let build_notdep_pred env sigma indf pred =
exception NotInferable of ml_case_error
+let rec refresh_types t = match kind_of_term t with
+ | IsSort (Type _) -> new_Type ()
+ | IsProd (na,u,v) -> mkProd (na,u,refresh_types v)
+ | _ -> t
+
let pred_case_ml_fail env sigma isrec (IndType (indf,realargs)) (i,ft) =
let pred =
let mispec,_ = dest_ind_family indf in
@@ -138,7 +143,7 @@ let pred_case_ml_fail env sigma isrec (IndType (indf,realargs)) (i,ft) =
let j = mis_index mispec in
let nbrec = if isrec then count_rec_arg j recargi else 0 in
let nb_arg = List.length (recargs.(i)) + nbrec in
- let pred = concl_n env sigma nb_arg ft in
+ let pred = refresh_types (concl_n env sigma nb_arg ft) in
if noccur_between 1 nb_arg pred then
lift (-nb_arg) pred
else