X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_omdoc%2Fcic2acic.ml;h=c2a832cbecf1f7ffec729324109ae9c3364eb459;hb=6912a028bef118d8e9d7c2847200510a9b055c6a;hp=bf686ac4e6e1781cf505d6e8330cf86dd3542cf9;hpb=4adceafdaa4cd82c427ac9de494179c242e7ad28;p=helm.git diff --git a/helm/ocaml/cic_omdoc/cic2acic.ml b/helm/ocaml/cic_omdoc/cic2acic.ml index bf686ac4e..c2a832cbe 100644 --- a/helm/ocaml/cic_omdoc/cic2acic.ml +++ b/helm/ocaml/cic_omdoc/cic2acic.ml @@ -37,7 +37,7 @@ let type_of_aux'_add_time = ref 0.0;; let xxx_type_of_aux' m c t = let t1 = Sys.time () in - let res = CicTypeChecker.type_of_aux' m c t in + let res,_ = CicTypeChecker.type_of_aux' m c t CicUniv.empty_ugraph in let t2 = Sys.time () in type_of_aux'_add_time := !type_of_aux'_add_time +. t2 -. t1 ; res @@ -81,9 +81,10 @@ let acic_of_cic_context' seed ids_to_terms ids_to_father_ids ids_to_inner_sorts let module D = DoubleTypeInference in let module C = Cic in let fresh_id' = fresh_id seed ids_to_terms ids_to_father_ids in - let time1 = Sys.time () in +(* let time1 = Sys.time () in *) let terms_to_types = let time0 = Sys.time () in +(* let prova = CicTypeChecker.type_of_aux' metasenv context t in let time1 = Sys.time () in prerr_endline ("*** Fine type_inference:" ^ (string_of_float (time1 -. time0))); @@ -91,10 +92,14 @@ let acic_of_cic_context' seed ids_to_terms ids_to_father_ids ids_to_inner_sorts let time2 = Sys.time () in prerr_endline ("*** Fine double_type_inference:" ^ (string_of_float (time2 -. time1))); res +*) + D.double_type_of metasenv context t expectedty in +(* let time2 = Sys.time () in prerr_endline ("++++++++++++ Tempi della double_type_of: "^ string_of_float (time2 -. time1)) ; +*) let rec aux computeinnertypes father context idrefs tt = let fresh_id'' = fresh_id' father tt in (*CSC: computeinnertypes era true, il che e' proprio sbagliato, no? *) @@ -108,12 +113,14 @@ let acic_of_cic_context' seed ids_to_terms ids_to_father_ids ids_to_inner_sorts match CicReduction.whd context t with C.Sort C.Prop -> "Prop" | C.Sort C.Set -> "Set" - | C.Sort C.Type -> "Type" + | C.Sort (C.Type _) -> "Type" (* TASSI OK*) | C.Sort C.CProp -> "CProp" | C.Meta _ -> -prerr_endline "Cic2acic: string_of_sort applied to a meta" ; +(* prerr_endline "Cic2acic: string_of_sort applied to a meta" ; *) "?" - | _ -> assert false + | t -> +prerr_endline ("Cic2acic: string_of_sort applied to: " ^ CicPp.ppterm t) ; + assert false in let ainnertypes,innertype,innersort,expected_available = (*CSC: Here we need the algorithm for Coscoy's double type-inference *) @@ -134,7 +141,7 @@ prerr_endline "Cic2acic: string_of_sort applied to a meta" ; {D.synthesized = (***CSC: patch per provare i tempi CicReduction.whd context (xxx_type_of_aux' metasenv context tt) ; *) -Cic.Sort Cic.Type ; +Cic.Sort (Cic.Type (CicUniv.fresh())); (* TASSI: non dovrebbe fare danni *) D.expected = None} in incr number_new_type_of_aux' ; @@ -162,7 +169,8 @@ Cic.Sort Cic.Type ; with Not_found -> (* l'inner-type non e' nella tabella ==> sort <> Prop *) (* CSC: Type or Set? I can not tell *) - None,Cic.Sort Cic.Type,"Type",false + None,Cic.Sort (Cic.Type (CicUniv.fresh())),"Type",false + (* TASSI non dovrebbe fare danni *) (* *) in let add_inner_type id = @@ -191,9 +199,7 @@ Cic.Sort Cic.Type ; in C.AVar (fresh_id'', uri,exp_named_subst') | C.Meta (n,l) -> - let (_,canonical_context,_) = - List.find (function (m,_,_) -> n = m) metasenv - in + let (_,canonical_context,_) = CicUtil.lookup_meta n metasenv in xxx_add ids_to_inner_sorts fresh_id'' innersort ; if innersort = "Prop" && expected_available then add_inner_type fresh_id'' ; @@ -328,12 +334,15 @@ Cic.Sort Cic.Type ; ) fresh_idrefs funs ) in +(* let timea = Sys.time () in let res = aux true None context idrefs t in let timeb = Sys.time () in prerr_endline ("+++++++++++++ Tempi della aux dentro alla acic_of_cic: "^ string_of_float (timeb -. timea)) ; res +*) + aux true None context idrefs t ;; let acic_of_cic_context metasenv context idrefs t = @@ -419,19 +428,19 @@ let acic_object_of_cic_object ?(eta_fix=true) obj = in let aobj = match obj with - C.Constant (id,Some bo,ty,params) -> + C.Constant (id,Some bo,ty,params,attrs) -> let bo' = eta_fix [] [] bo in let ty' = eta_fix [] [] ty in let abo = acic_term_of_cic_term' bo' (Some ty') in let aty = acic_term_of_cic_term' ty' None in C.AConstant - ("mettereaposto",Some "mettereaposto2",id,Some abo,aty,params) - | C.Constant (id,None,ty,params) -> + ("mettereaposto",Some "mettereaposto2",id,Some abo,aty,params,attrs) + | C.Constant (id,None,ty,params,attrs) -> let ty' = eta_fix [] [] ty in let aty = acic_term_of_cic_term' ty' None in C.AConstant - ("mettereaposto",None,id,None,aty,params) - | C.Variable (id,bo,ty,params) -> + ("mettereaposto",None,id,None,aty,params,attrs) + | C.Variable (id,bo,ty,params,attrs) -> let ty' = eta_fix [] [] ty in let abo = match bo with @@ -442,8 +451,8 @@ let acic_object_of_cic_object ?(eta_fix=true) obj = in let aty = acic_term_of_cic_term' ty' None in C.AVariable - ("mettereaposto",id,abo,aty, params) - | C.CurrentProof (id,conjectures,bo,ty,params) -> + ("mettereaposto",id,abo,aty,params,attrs) + | C.CurrentProof (id,conjectures,bo,ty,params,attrs) -> let conjectures' = List.map (function (i,canonical_context,term) -> @@ -517,18 +526,21 @@ let acic_object_of_cic_object ?(eta_fix=true) obj = in (cid,i,(List.rev revacanonical_context),aterm) ) conjectures' in *) - let time1 = Sys.time () in +(* let time1 = Sys.time () in *) let bo' = eta_fix conjectures' [] bo in let ty' = eta_fix conjectures' [] ty in +(* let time2 = Sys.time () in prerr_endline ("++++++++++ Tempi della eta_fix: "^ string_of_float (time2 -. time1)) ; hashtbl_add_time := 0.0 ; type_of_aux'_add_time := 0.0 ; DoubleTypeInference.syntactic_equality_add_time := 0.0 ; +*) let abo = acic_term_of_cic_term_context' conjectures' [] [] bo' (Some ty') in let aty = acic_term_of_cic_term_context' conjectures' [] [] ty' None in +(* let time3 = Sys.time () in prerr_endline ("++++++++++++ Tempi della hashtbl_add_time: " ^ string_of_float !hashtbl_add_time) ; @@ -542,9 +554,10 @@ let acic_object_of_cic_object ?(eta_fix=true) obj = ("++++++++++ Tempi della acic_of_cic: " ^ string_of_float (time3 -. time2)) ; prerr_endline ("++++++++++ Numero di iterazioni della acic_of_cic: " ^ string_of_int !seed) ; +*) C.ACurrentProof - ("mettereaposto","mettereaposto2",id,aconjectures,abo,aty,params) - | C.InductiveDefinition (tys,params,paramsno) -> + ("mettereaposto","mettereaposto2",id,aconjectures,abo,aty,params,attrs) + | C.InductiveDefinition (tys,params,paramsno,attrs) -> let context = List.map (fun (name,_,arity,_) -> Some (C.Name name, C.Decl arity)) tys in @@ -562,7 +575,7 @@ let acic_object_of_cic_object ?(eta_fix=true) obj = (id,name,inductive,acic_term_of_cic_term' ty None,acons) ) (List.rev idrefs) tys in - C.AInductiveDefinition ("mettereaposto",atys,params,paramsno) + C.AInductiveDefinition ("mettereaposto",atys,params,paramsno,attrs) in aobj,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts,ids_to_inner_types, ids_to_conjectures,ids_to_hypotheses