diff options
author | letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2013-03-21 19:50:03 +0000 |
---|---|---|
committer | letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2013-03-21 19:50:03 +0000 |
commit | 4da7ddb8c3c2f1dafd5d9187741659a9332b75c2 (patch) | |
tree | 7677e09e6e7f86b42a2accb668c27859defecd50 /tactics | |
parent | d223f85d0fd57ce74dcdcc8690a36f1ef87b408d (diff) |
Firstorder: record with defined field aren't conjonctions (fix #2629)
The let-in in the type of constructor was perturbating the
Hipattern.dependent check, leading firstorder to consider too much
inductives as dependent-free conjonctions, ending with lift errors
(UNBOUND_REL_-2, ouch).
This patch is probably overly cautious : if the variable of the
let-in is used, we consider the constructor to be dependent.
If someday somebody feels it necessary, he/she could try to reduce
the let-in's instead...
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16339 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'tactics')
-rw-r--r-- | tactics/hipattern.ml4 | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/tactics/hipattern.ml4 b/tactics/hipattern.ml4 index 286aa9492..ede813cdb 100644 --- a/tactics/hipattern.ml4 +++ b/tactics/hipattern.ml4 @@ -58,9 +58,12 @@ let is_non_recursive_type t = op2bool (match_with_non_recursive_type t) (* Test dependencies *) +(* NB: we consider also the let-in case in the following function, + since they may appear in types of inductive constructors (see #2629) *) + let rec has_nodep_prod_after n c = match kind_of_term c with - | Prod (_,_,b) -> + | Prod (_,_,b) | LetIn (_,_,_,b) -> ( n>0 || not (dependent (mkRel 1) b)) && (has_nodep_prod_after (n-1) b) | _ -> true |