diff options
author | herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2001-09-20 15:46:14 +0000 |
---|---|---|
committer | herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2001-09-20 15:46:14 +0000 |
commit | 710bbc7ca76faa77dbdebc9e14cf98ba8361111a (patch) | |
tree | 08ca0b2f6cfed0344691c472686f66634f9f03be /pretyping/cases.ml | |
parent | 24c0e99bbe0ad4249df41f784ff4051599dd44cd (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
Diffstat (limited to 'pretyping/cases.ml')
-rw-r--r-- | pretyping/cases.ml | 7 |
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 |