X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_kernel%2FnCic2OCic.ml;h=1006d03c684e110e2ded288cd5915ff034436618;hb=ec07ff398325533d848da92e9dc69852d24b78a5;hp=3348d31cd4b9fd8deee3586357e6d6992393be4a;hpb=e48acbc0d00717ce8f12412673ece4e4ee0e9642;p=helm.git diff --git a/helm/software/components/ng_kernel/nCic2OCic.ml b/helm/software/components/ng_kernel/nCic2OCic.ml index 3348d31cd..1006d03c6 100644 --- a/helm/software/components/ng_kernel/nCic2OCic.ml +++ b/helm/software/components/ng_kernel/nCic2OCic.ml @@ -11,6 +11,12 @@ (* $Id$ *) +let ouri_of_nuri u = UriManager.uri_of_string (NUri.string_of_uri u);; + +let ouri_of_reference (NReference.Ref (u,_)) = ouri_of_nuri u;; + +let cprop = [`CProp, NUri.uri_of_string ("cic:/matita/pts/Type.univ")];; + let nn_2_on = function | "_" -> Cic.Anonymous | s -> Cic.Name s @@ -28,25 +34,28 @@ let convert_term uri n_fl t = | NCic.LetIn (n,ty_s,s,t) -> Cic.LetIn (nn_2_on n,convert_term k s,convert_term k ty_s, convert_term (k+1) t) | NCic.Sort NCic.Prop -> Cic.Sort Cic.Prop - | NCic.Sort NCic.CProp -> Cic.Sort Cic.CProp + | NCic.Sort (NCic.Type u) when + (* BUG HERE: I should use NCicEnvironment.universe_eq, but I do not + want to add this recursion between the modules *) + (*NCicEnvironment.universe_eq*) u=cprop -> Cic.Sort (Cic.CProp (CicUniv.fresh ())) | NCic.Sort (NCic.Type _) -> Cic.Sort (Cic.Type (CicUniv.fresh ())) | NCic.Implicit _ -> assert false - | NCic.Const (NReference.Ref (_,u,NReference.Ind (_,i))) -> - Cic.MutInd (NUri.ouri_of_nuri u,i,[]) - | NCic.Const (NReference.Ref (_,u,NReference.Con (i,j))) -> - Cic.MutConstruct (NUri.ouri_of_nuri u,i,j,[]) - | NCic.Const (NReference.Ref (_,u,NReference.Def)) - | NCic.Const (NReference.Ref (_,u,NReference.Decl)) -> - Cic.Const (NUri.ouri_of_nuri u,[]) - | NCic.Match (NReference.Ref (_,u,NReference.Ind (_,i)),oty,t,pl) -> - Cic.MutCase (NUri.ouri_of_nuri u,i, convert_term k oty, convert_term k t, + | NCic.Const (NReference.Ref (u,NReference.Ind (_,i,_))) -> + Cic.MutInd (ouri_of_nuri u,i,[]) + | NCic.Const (NReference.Ref (u,NReference.Con (i,j,_))) -> + Cic.MutConstruct (ouri_of_nuri u,i,j,[]) + | NCic.Const (NReference.Ref (u,NReference.Def _)) + | NCic.Const (NReference.Ref (u,NReference.Decl)) -> + Cic.Const (ouri_of_nuri u,[]) + | NCic.Match (NReference.Ref (u,NReference.Ind (_,i,_)),oty,t,pl) -> + Cic.MutCase (ouri_of_nuri u,i, convert_term k oty, convert_term k t, List.map (convert_term k) pl) - | NCic.Const (NReference.Ref (_,u,NReference.Fix (i,_))) - | NCic.Const (NReference.Ref (_,u,NReference.CoFix i)) -> + | NCic.Const (NReference.Ref (u,NReference.Fix (i,_,_))) + | NCic.Const (NReference.Ref (u,NReference.CoFix i)) -> if NUri.eq u uri then Cic.Rel (n_fl - i + k) else - let ouri = NUri.ouri_of_nuri u in + let ouri = ouri_of_nuri u in let ouri = UriManager.uri_of_string (UriManager.buri_of_uri ouri ^ "/" ^ @@ -79,16 +88,16 @@ let convert_fix is_fix uri k fl = let convert_nobj = function | u,_,_,_,NCic.Constant (_, name, Some bo, ty, _) -> - [NUri.ouri_of_nuri u,Cic.Constant + [ouri_of_nuri u,Cic.Constant (name, Some (convert_term u 0 bo), convert_term u 0 ty, [],[])] | u,_,_,_,NCic.Constant (_, name, None, ty, _) -> - [NUri.ouri_of_nuri u,Cic.Constant (name, None, convert_term u 0 ty, [],[])] + [ouri_of_nuri u,Cic.Constant (name, None, convert_term u 0 ty, [],[])] | u,_,_,_,NCic.Fixpoint (is_fix, fl, _) -> List.map (fun nth -> let name = - UriManager.name_of_uri (NUri.ouri_of_nuri u) ^ string_of_int nth in - let buri = UriManager.buri_of_uri (NUri.ouri_of_nuri u) in + UriManager.name_of_uri (ouri_of_nuri u) ^ string_of_int nth in + let buri = UriManager.buri_of_uri (ouri_of_nuri u) in let uri = UriManager.uri_of_string (buri ^"/"^name^".con") in uri, Cic.Constant (name, @@ -96,5 +105,13 @@ let convert_nobj = function convert_term u 0 (let _,_,_,ty,_ = List.hd fl in ty), [], [])) (let rec seq = function 0 -> [0]|n -> n::seq (n-1) in seq (List.length fl-1)) - | _,_,_,_,NCic.Inductive _ -> assert false + | u,_,_,_,NCic.Inductive (inductive,leftno,itl,_) -> + let itl = + List.map + (function (_,name,ty,cl) -> + let cl=List.map (function (_,name,ty) -> name,convert_term u 0 ty) cl in + name,inductive,convert_term u 0 ty,cl + ) itl + in + [ouri_of_nuri u, Cic.InductiveDefinition (itl,[],leftno,[])] ;;