aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping
diff options
context:
space:
mode:
authorGravatar Maxime Dénès <mail@maximedenes.fr>2014-10-22 15:13:06 +0200
committerGravatar Maxime Dénès <mail@maximedenes.fr>2014-10-22 15:17:24 +0200
commit21a9cec02cc389a33cf1fc0dc6d0229939abc51d (patch)
tree9e8ce18782c1289bf003fe7c96eb9df555b1f62e /pretyping
parent8afac4f87d9d7e3add1c19485f475bd2207bfde7 (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.ml6
-rw-r--r--pretyping/vnorm.ml4
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