1 let convert_term uri n_fl t =
2 let rec convert_term k = function (* pass k along *)
3 | NCic.Rel i -> Cic.Rel i
4 | NCic.Meta _ -> assert false
5 | NCic.Appl l -> Cic.Appl (List.map (convert_term k) l)
7 Cic.Prod (Cic.Name n,convert_term k s, convert_term (k+1) t)
8 | NCic.Lambda (n,s,t) ->
9 Cic.Lambda(Cic.Name n,convert_term k s, convert_term (k+1) t)
10 | NCic.LetIn (n,_,s,t) ->
11 Cic.LetIn (Cic.Name n,convert_term k s, convert_term (k+1) t)
12 | NCic.Sort NCic.Prop -> Cic.Sort Cic.Prop
13 | NCic.Sort NCic.CProp -> Cic.Sort Cic.CProp
14 | NCic.Sort NCic.Set -> Cic.Sort Cic.Set
15 | NCic.Sort (NCic.Type _) -> Cic.Sort (Cic.Type (CicUniv.fresh ()))
16 | NCic.Implicit _ -> assert false
17 | NCic.Const (NReference.Ref (_,u,NReference.Ind i)) ->
18 Cic.MutInd (NUri.ouri_of_nuri u,i,[])
19 | NCic.Const (NReference.Ref (_,u,NReference.Con (i,j))) ->
20 Cic.MutConstruct (NUri.ouri_of_nuri u,i,j,[])
21 | NCic.Const (NReference.Ref (_,u,NReference.Def))
22 | NCic.Const (NReference.Ref (_,u,NReference.Decl)) ->
23 Cic.Const (NUri.ouri_of_nuri u,[])
24 | NCic.Match (NReference.Ref (_,u,NReference.Ind i),oty,t,pl) ->
25 Cic.MutCase (NUri.ouri_of_nuri u,i, convert_term k oty, convert_term k t,
26 List.map (convert_term k) pl)
27 | NCic.Const (NReference.Ref (_,u,NReference.Fix (i,_)))
28 | NCic.Const (NReference.Ref (_,u,NReference.CoFix i)) ->
30 Cic.Rel (n_fl - i + k)
32 Cic.Const (NUri.ouri_of_nuri u,[])
38 let convert_fix is_fix uri k fl =
39 let n_fl = List.length fl in
43 (fun (_, name,recno,ty,bo) ->
44 name, recno, convert_term uri n_fl ty, convert_term uri n_fl bo)
51 (fun (_, name,_,ty,bo) ->
52 name, convert_term uri n_fl ty, convert_term uri n_fl bo)
58 let convert_nobj = function
59 | u,_,_,_,NCic.Constant (_, name, Some bo, ty, _) ->
60 Cic.Constant (name, Some (convert_term u 0 bo), convert_term u 0 ty, [],[])
61 | u,_,_,_,NCic.Constant (_, name, None, ty, _) ->
62 Cic.Constant (name, None, convert_term u 0 ty, [],[])
63 | u,_,_,_,NCic.Fixpoint (is_fix, fl, _) ->
64 Cic.Constant (UriManager.name_of_uri (NUri.ouri_of_nuri u),
65 Some (convert_fix is_fix u 0 fl),
66 convert_term u 0 (let _,_,_,ty,_ = List.hd fl in ty), [], [])
67 | _,_,_,_,NCic.Inductive _ -> assert false