aboutsummaryrefslogtreecommitdiff
path: root/toplevel/command.ml
diff options
context:
space:
mode:
authorbarras2004-03-05 21:35:15 +0000
committerbarras2004-03-05 21:35:15 +0000
commitb2cf3bc56ebd4511070ccfedd0f0895a695a6b23 (patch)
treef47ecbfc4e8c8c976773e529a6ecafeb07175175 /toplevel/command.ml
parent5361cc1ac8baec7b519288dae36e9503d82d7709 (diff)
modif des fixpoints pour que si on donne une notation au produit, les pts fixes s'affichent correctement
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@5435 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'toplevel/command.ml')
-rw-r--r--toplevel/command.ml17
1 files changed, 11 insertions, 6 deletions
diff --git a/toplevel/command.ml b/toplevel/command.ml
index 46de560b46..30548d74d2 100644
--- a/toplevel/command.ml
+++ b/toplevel/command.ml
@@ -456,7 +456,8 @@ let build_recursive (lnameargsardef:(fixpoint_expr *decl_notation) list) =
(* Declare the notations for the recursive types pushed in local context*)
let (rec_sign,arityl) =
List.fold_left
- (fun (env,arl) ((recname,_,_,arityc,_),_) ->
+ (fun (env,arl) ((recname,_,bl,arityc,_),_) ->
+ let arityc = prod_rawconstr arityc bl in
let arity = interp_type sigma env0 arityc in
(Environ.push_named (recname,None,arity) env, (arity::arl)))
(env0,[]) lnameargsardef in
@@ -479,7 +480,8 @@ let build_recursive (lnameargsardef:(fixpoint_expr *decl_notation) list) =
(Lib.cwd(),SectionLocalAssum arity, IsAssumption Definitional) in
()) lrecnames arityl;
List.map2
- (fun ((_,_,_,_,def),_) arity ->
+ (fun ((_,_,bl,_,def),_) arity ->
+ let def = abstract_rawconstr def bl in
interp_casted_constr sigma rec_sign def arity)
lnameargsardef arityl
with e ->
@@ -521,14 +523,15 @@ let build_recursive (lnameargsardef:(fixpoint_expr *decl_notation) list) =
Metasyntax.add_notation_interpretation df [] c scope) notations
let build_corecursive lnameardef =
- let lrecnames = List.map (fun (f,_,_) -> f) lnameardef
+ let lrecnames = List.map (fun (f,_,_,_) -> f) lnameardef
and sigma = Evd.empty
and env0 = Global.env() in
let fs = States.freeze() in
let (rec_sign,arityl) =
try
List.fold_left
- (fun (env,arl) (recname,arityc,_) ->
+ (fun (env,arl) (recname,bl,arityc,_) ->
+ let arityc = prod_rawconstr arityc bl in
let arj = type_judgment_of_rawconstr Evd.empty env0 arityc in
let arity = arj.utj_val in
let _ = declare_variable recname
@@ -540,8 +543,10 @@ let build_corecursive lnameardef =
let arityl = List.rev arityl in
let recdef =
try
- List.map (fun (_,arityc,def) ->
- let arity = interp_constr sigma rec_sign arityc in
+ List.map (fun (_,bl,arityc,def) ->
+ let arityc = prod_rawconstr arityc bl in
+ let def = abstract_rawconstr def bl in
+ let arity = interp_constr sigma rec_sign arityc in
interp_casted_constr sigma rec_sign def arity)
lnameardef
with e ->