diff options
author | 2014-10-22 15:13:06 +0200 | |
---|---|---|
committer | 2014-10-22 15:17:24 +0200 | |
commit | 21a9cec02cc389a33cf1fc0dc6d0229939abc51d (patch) | |
tree | 9e8ce18782c1289bf003fe7c96eb9df555b1f62e /pretyping | |
parent | 8afac4f87d9d7e3add1c19485f475bd2207bfde7 (diff) |
Fix missing lift in VM and native compiler (second part of #2729).
Was occurring in the parameters of constructors when reifying a dependent
pattern matching return predicate. Note: this does not affect the kernel,
only the pretyper.
Diffstat (limited to 'pretyping')
-rw-r--r-- | pretyping/nativenorm.ml | 6 | ||||
-rw-r--r-- | pretyping/vnorm.ml | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/pretyping/nativenorm.ml b/pretyping/nativenorm.ml index 9f1a19da1..024af30ae 100644 --- a/pretyping/nativenorm.ml +++ b/pretyping/nativenorm.ml @@ -107,11 +107,13 @@ let build_branches_type env (mind,_ as _ind) mib mip params dep p = let nparams = Array.length params in let carity = snd (rtbl.(i)) in let crealargs = Array.sub cargs nparams (Array.length cargs - nparams) in - let codom = - let papp = mkApp(lift (List.length decl) p,crealargs) in + let codom = + let ndecl = List.length decl in + let papp = mkApp(lift ndecl p,crealargs) in if dep then let cstr = ith_constructor_of_inductive (fst ind) (i+1) in let relargs = Array.init carity (fun i -> mkRel (carity-i)) in + let params = Array.map (lift ndecl) params in let dep_cstr = mkApp(mkApp(mkConstructU (cstr,snd ind),params),relargs) in mkApp(papp,[|dep_cstr|]) else papp diff --git a/pretyping/vnorm.ml b/pretyping/vnorm.ml index 37b86d1ba..652b5aa50 100644 --- a/pretyping/vnorm.ml +++ b/pretyping/vnorm.ml @@ -123,10 +123,12 @@ let build_branches_type env (mind,_ as _ind) mib mip u params dep p = let carity = snd (rtbl.(i)) in let crealargs = Array.sub cargs nparams (Array.length cargs - nparams) in let codom = - let papp = mkApp(lift (List.length decl) p,crealargs) in + let ndecl = List.length decl in + let papp = mkApp(lift ndecl p,crealargs) in if dep then let cstr = ith_constructor_of_inductive ind (i+1) in let relargs = Array.init carity (fun i -> mkRel (carity-i)) in + let params = Array.map (lift ndecl) params in let dep_cstr = mkApp(mkApp(mkConstructU (cstr,u),params),relargs) in mkApp(papp,[|dep_cstr|]) else papp |