(*CSC: cut&paste from nCicReduction.split_prods, but does not check that
the return type is a sort *)
-let rec my_split_prods ~subst context n te =
- match (n, NCicReduction.whd ~subst context te) with
+let rec my_split_prods status ~subst context n te =
+ match (n, NCicReduction.whd status ~subst context te) with
| (0, _) -> context,te
| (n, NCic.Prod (name,so,ta)) ->
- my_split_prods ~subst ((name,(NCic.Decl so))::context) (n - 1) ta
+ my_split_prods status ~subst ((name,(NCic.Decl so))::context) (n - 1) ta
| (n, _) when n <= 0 -> context,te
| (_, _) -> raise (Failure "my_split_prods")
;;
| l -> NotationPt.Appl l
;;
-let mk_elim uri leftno it (outsort,suffix) pragma =
+let mk_elim status uri leftno it (outsort,suffix) pragma =
let _,ind_name,ty,cl = it in
let srec_name = ind_name ^ "_" ^ suffix in
let rec_name = mk_id srec_name in
let name_of_k id = mk_id ("H_" ^ id) in
let p_name = mk_id "Q_" in
- let params,ty = NCicReduction.split_prods ~subst:[] [] leftno ty in
+ let params,ty = NCicReduction.split_prods status ~subst:[] [] leftno ty in
let params = List.rev_map (function name,_ -> mk_id name) params in
- let args,sort = NCicReduction.split_prods ~subst:[] [] (-1) ty in
+ let args,sort = NCicReduction.split_prods status ~subst:[] [] (-1) ty in
let args = List.rev_map (function name,_ -> mk_id name) args in
let rec_arg = mk_id (fresh_name ()) in
let p_ty =
let branches =
List.map
(function (_,name,ty) ->
- let _,ty = NCicReduction.split_prods ~subst:[] [] leftno ty in
- let cargs,ty= my_split_prods ~subst:[] [] (-1) ty in
+ let _,ty = NCicReduction.split_prods status ~subst:[] [] leftno ty in
+ let cargs,ty= my_split_prods status ~subst:[] [] (-1) ty in
let cargs_and_recursive_args =
List.rev_map
(function
_,NCic.Def _ -> assert false
| name,NCic.Decl ty ->
- let context,ty = my_split_prods ~subst:[] [] (-1) ty in
+ let context,ty = my_split_prods status ~subst:[] [] (-1) ty in
match ty with
| NCic.Const nref
| NCic.Appl (NCic.Const nref::_)
| _ -> assert false
;;
-let mk_elims (uri,_,_,_,obj) =
+let mk_elims status (uri,_,_,_,obj) =
match obj with
NCic.Inductive (true,leftno,[itl],_) ->
- List.map (fun s -> mk_elim uri leftno itl (ast_of_sort s) (`Elim s))
+ List.map (fun s-> mk_elim status uri leftno itl (ast_of_sort s) (`Elim s))
(NCic.Prop::
List.map (fun s -> NCic.Type s) (NCicEnvironment.get_universes ()))
| _ -> []
(* this code should be unified with NTermCicContent.nast_of_cic0,
but the two contexts have different types *)
-let rec pp rels =
- function
+let pp (status: #NCic.status) =
+ let rec pp rels =
+ function
NCic.Rel i -> List.nth rels (i - 1)
| NCic.Const _ as t ->
NotationPt.Ident
- (NCicPp.ppterm ~metasenv:[] ~subst:[] ~context:[] t,None)
+ (status#ppterm ~metasenv:[] ~subst:[] ~context:[] t,None)
| NCic.Sort s -> NotationPt.Sort (fst (ast_of_sort s))
| NCic.Meta _
| NCic.Implicit _ -> assert false
let name = NUri.name_of_uri uri in
let case_indty = Some (name, None) in
let constructors, leftno =
- let _,leftno,tys,_,n = NCicEnvironment.get_checked_indtys r in
+ let _,leftno,tys,_,n = NCicEnvironment.get_checked_indtys status r in
let _,_,_,cl = List.nth tys n in
cl,leftno
in
with Invalid_argument _ -> assert false
in
NotationPt.Case (pp rels te, case_indty, Some (pp rels outty), patterns)
+ in
+ pp
;;
-let mk_projection leftno tyname consname consty (projname,_,_) i =
+let mk_projection status leftno tyname consname consty (projname,_,_) i =
let argsno = count_prods consty - leftno in
let rec aux names ty leftno =
match leftno,ty with
List.map
(fun name -> mk_appl (mk_id name :: List.rev names @ [arg])) projs
@ names in
- let outtype = pp rels outtype in
+ let outtype = pp status rels outtype in
let outtype= NotationPt.Binder (`Lambda, (arg, Some arg_ty), outtype) in
[arg, Some arg_ty], NotationPt.Case (arg,None,Some outtype,[branch])
| _,NCic.Prod (name,_,t) ->
(`Definition,projname,NotationPt.Implicit `JustOne,Some res,`Projection)
;;
-let mk_projections (_,_,_,_,obj) =
+let mk_projections status (_,_,_,_,obj) =
match obj with
NCic.Inductive
(true,leftno,[_,tyname,_,[_,consname,consty]],(_,`Record fields))
->
- HExtlib.list_mapi (mk_projection leftno tyname consname consty) fields
+ HExtlib.list_mapi (mk_projection status leftno tyname consname consty) fields
| _ -> []
;;