- (fun t (name,ty) -> Cic.Prod (Cic.Name name,ty,t))
- concl fields' in
- let con' = add_params con in
- let tyl = [name,true,ty',["mk_" ^ name,con']] in
- let field_names = List.map (fun (x,_,y,z) -> x,y,z) fields in
- Cic.InductiveDefinition
- (tyl,[],List.length params,[`Class (`Record field_names)])
-*)
+ (fun (i,res) (name,_,_,_) ->
+ let nref =
+ NReference.reference_of_spec uri (NReference.Ind (inductive,i,leftno))
+ in
+ i+1,(name,nref)::res)
+ (0,[]) tyl) in
+ let tyl =
+ List.map
+ (fun (name,_,ty,cl) ->
+ let ty' =
+ add_params
+ (interpretate_term ~obj_context:[] ~context ~env ~uri:None
+ ~is_path:false ty) in
+ let cl' =
+ List.map
+ (fun (name,ty) ->
+ let ty' =
+ add_params
+ (interpretate_term ~obj_context ~context ~env ~uri:None
+ ~is_path:false ty) in
+ let relevance = [] in
+ relevance,name,ty'
+ ) cl in
+ let relevance = [] in
+ relevance,name,ty',cl'
+ ) tyl
+ in
+ let height = (* XXX calculate *) 0 in
+ let attrs = `Provided, `Regular in
+ uri, height, [], [],
+ NCic.Inductive (inductive,leftno,tyl,attrs)
+ | CicNotationPt.Record (params,name,ty,fields) ->
+ let context,params =
+ let context,res =
+ List.fold_left
+ (fun (context,res) (name,t) ->
+ let t =
+ match t with
+ None -> CicNotationPt.Implicit `JustOne
+ | Some t -> t in
+ let name = cic_name_of_name name in
+ let t =
+ interpretate_term ~obj_context:[] ~context ~env ~uri:None
+ ~is_path:false t
+ in
+ (name,NCic.Decl t)::context,(name,t)::res
+ ) ([],[]) params
+ in
+ context,List.rev res in
+ let add_params =
+ List.fold_right (fun (name,ty) t -> NCic.Prod (name,ty,t)) params in
+ let leftno = List.length params in
+ let ty' =
+ add_params
+ (interpretate_term ~obj_context:[] ~context ~env ~uri:None
+ ~is_path:false ty) in
+ let nref =
+ NReference.reference_of_spec uri (NReference.Ind (true,0,leftno)) in
+ let obj_context = [name,nref] in
+ let fields' =
+ snd (
+ List.fold_left
+ (fun (context,res) (name,ty,_coercion,_arity) ->
+ let ty =
+ interpretate_term ~obj_context ~context ~env ~uri:None
+ ~is_path:false ty in
+ let context' = (name,NCic.Decl ty)::context in
+ context',(name,ty)::res
+ ) (context,[]) fields) in
+ let concl =
+ let mutind = NCic.Const nref in
+ if params = [] then mutind
+ else
+ NCic.Appl
+ (mutind::mk_rels (List.length params) (List.length fields)) in
+ let con =
+ List.fold_left (fun t (name,ty) -> NCic.Prod (name,ty,t)) concl fields' in
+ let con' = add_params con in
+ let relevance = [] in
+ let tyl = [relevance,name,ty',[relevance,"mk_" ^ name,con']] in
+ let field_names = List.map (fun (x,_,y,z) -> x,y,z) fields in
+ let height = (* XXX calculate *) 0 in
+ let attrs = `Provided, `Record field_names in
+ uri, height, [], [],
+ NCic.Inductive (true,leftno,tyl,attrs)