]> matita.cs.unibo.it Git - helm.git/blob - helm/software/components/ng_kernel/nCic2OCic.ml
many fixed in translation functions
[helm.git] / helm / software / components / ng_kernel / nCic2OCic.ml
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)
6  | NCic.Prod (n,s,t) -> 
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)) ->
29     if NUri.eq u uri then             
30       Cic.Rel (n_fl - i + k)
31     else
32       Cic.Const (NUri.ouri_of_nuri u,[])
33  | _ -> assert false
34  in
35   convert_term 0 t
36 ;;
37
38 let convert_fix is_fix uri k fl = 
39   let n_fl = List.length fl in
40   if is_fix then 
41     let fl = 
42       List.map
43       (fun (_, name,recno,ty,bo) -> 
44         name, recno, convert_term uri n_fl ty, convert_term uri n_fl bo)
45       fl
46     in 
47      Cic.Fix (k, fl) 
48   else 
49     let fl = 
50       List.map
51       (fun (_, name,_,ty,bo) -> 
52         name, convert_term uri n_fl ty, convert_term uri n_fl bo)
53       fl
54     in 
55      Cic.CoFix (k, fl) 
56 ;;
57
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
68 ;;