aboutsummaryrefslogtreecommitdiff
path: root/kernel/declareops.ml
diff options
context:
space:
mode:
authorMatthieu Sozeau2014-08-28 19:49:16 +0200
committerMatthieu Sozeau2014-08-28 19:55:01 +0200
commit32c83676c96ae4a218de0bec75d2f3353381dfb3 (patch)
tree0fef7e62e0e7271406da9733fd14c33cb711eb70 /kernel/declareops.ml
parent469c5bfc849e06d5a32d7aaabdf9b2fa3f451f4a (diff)
Change the way primitive projections are declared to the kernel.
Now kernel/indtypes builds the corresponding terms (has to be trusted) while translate_constant just binds a constant name to the already entered projection body, avoiding the dubious "check" of user given terms. "case" Pattern-matching on primitive records is now disallowed, and the default scheme is implemented using projections and eta (all elimination tactics now use projections as well). Elaborate "let (x, y) := p in t" using let bindings for the projections of p too.
Diffstat (limited to 'kernel/declareops.ml')
-rw-r--r--kernel/declareops.ml8
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/declareops.ml b/kernel/declareops.ml
index f583bff64d..5b937207fd 100644
--- a/kernel/declareops.ml
+++ b/kernel/declareops.ml
@@ -237,11 +237,11 @@ let subst_mind_packet sub mbp =
mind_nb_args = mbp.mind_nb_args;
mind_reloc_tbl = mbp.mind_reloc_tbl }
-let subst_mind_record sub (c, ps as r) =
- let c' = subst_mps sub c in
+let subst_mind_record sub (ps, pb as r) =
let ps' = Array.smartmap (subst_constant sub) ps in
- if c' == c && ps' == ps then r
- else (c', ps')
+ let pb' = Array.smartmap (subst_const_proj sub) pb in
+ if ps' == ps && pb' == pb then r
+ else (ps', pb')
let subst_mind_body sub mib =
{ mind_record = Option.smartmap (subst_mind_record sub) mib.mind_record ;