function
[] -> assert false
| [x] -> x
+ | CicNotationPt.Appl l1 :: l2 -> CicNotationPt.Appl (l1 @ l2)
| l -> CicNotationPt.Appl l
;;
-let mk_elim uri leftno [it] (outsort,suffix) =
+let mk_elim uri leftno it (outsort,suffix) =
let _,ind_name,ty,cl = it in
let srec_name = ind_name ^ "_" ^ suffix in
let rec_name = mk_id srec_name in
let mk_elims (uri,_,_,_,obj) =
match obj with
- NCic.Inductive (true,leftno,itl,_) ->
+ NCic.Inductive (true,leftno,[itl],_) ->
List.map (fun s -> mk_elim uri leftno itl (ast_of_sort s))
(NCic.Prop::
List.map (fun s -> NCic.Type s) (NCicEnvironment.get_universes ()))
@ names in
let outtype = pp rels outtype in
let outtype= CicNotationPt.Binder (`Lambda, (arg, Some arg_ty), outtype) in
- CicNotationPt.Binder
- (`Lambda, (arg,Some arg_ty),
- CicNotationPt.Case (arg,None,Some outtype,[branch]))
+ [arg, Some arg_ty], CicNotationPt.Case (arg,None,Some outtype,[branch])
| _,NCic.Prod (name,_,t) ->
let name = mk_id name in
- CicNotationPt.Binder
- (`Lambda, (name,None), aux (name::names) t (leftno - 1))
+ let params,body = aux (name::names) t (leftno - 1) in
+ (name,None)::params, body
| _,_ -> assert false
in
- let res = aux [] consty leftno in
+ let params,bo = aux [] consty leftno in
+ let pprojname = mk_id projname in
+ let res =
+ CicNotationPt.LetRec (`Inductive,
+ [params, (pprojname,None), bo, leftno], pprojname) in
(* prerr_endline
(BoxPp.render_to_string
~map_unicode_to_tex:false