X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_omdoc%2Fcic2acic.ml;h=bf686ac4e6e1781cf505d6e8330cf86dd3542cf9;hb=4adceafdaa4cd82c427ac9de494179c242e7ad28;hp=d8a4421734e24c0b6d0410f6245d6feb6091b751;hpb=2e062d07e358eb95f0dcbec8fcdfbc2a4fb9ae1f;p=helm.git diff --git a/helm/ocaml/cic_omdoc/cic2acic.ml b/helm/ocaml/cic_omdoc/cic2acic.ml index d8a442173..bf686ac4e 100644 --- a/helm/ocaml/cic_omdoc/cic2acic.ml +++ b/helm/ocaml/cic_omdoc/cic2acic.ml @@ -64,7 +64,6 @@ let fresh_id seed ids_to_terms ids_to_father_ids = let source_id_of_id id = "#source#" ^ id;; exception NotEnoughElements;; -exception NameExpected;; (*CSC: cut&paste da cicPp.ml *) (* get_nth l n returns the nth element of the list l if it exists or *) @@ -110,7 +109,10 @@ let acic_of_cic_context' seed ids_to_terms ids_to_father_ids ids_to_inner_sorts C.Sort C.Prop -> "Prop" | C.Sort C.Set -> "Set" | C.Sort C.Type -> "Type" - | C.Sort C.CProp -> "CProp" + | C.Sort C.CProp -> "CProp" + | C.Meta _ -> +prerr_endline "Cic2acic: string_of_sort applied to a meta" ; + "?" | _ -> assert false in let ainnertypes,innertype,innersort,expected_available = @@ -173,7 +175,7 @@ Cic.Sort Cic.Type ; let id = match get_nth context n with (Some (C.Name s,_)) -> s - | _ -> raise NameExpected + | _ -> "__" ^ string_of_int n in xxx_add ids_to_inner_sorts fresh_id'' innersort ; if innersort = "Prop" && expected_available then @@ -204,7 +206,7 @@ Cic.Sort Cic.Type ; | Some _, None -> assert false (* due to typing rules *)) canonical_context l)) | C.Sort s -> C.ASort (fresh_id'', s) - | C.Implicit -> C.AImplicit (fresh_id'') + | C.Implicit annotation -> C.AImplicit (fresh_id'', annotation) | C.Cast (v,t) -> xxx_add ids_to_inner_sorts fresh_id'' innersort ; if innersort = "Prop" then @@ -393,7 +395,7 @@ let asequent_of_sequent (metasenv:Cic.metasenv) (sequent:Cic.conjecture) = ids_to_terms,ids_to_father_ids,ids_to_inner_sorts,ids_to_hypotheses ;; -let acic_object_of_cic_object obj = +let acic_object_of_cic_object ?(eta_fix=true) obj = let module C = Cic in let module E = Eta_fixing in let ids_to_terms = Hashtbl.create 503 in @@ -412,27 +414,30 @@ let acic_object_of_cic_object obj = let aconjecture_of_conjecture' = aconjecture_of_conjecture seed ids_to_terms ids_to_father_ids ids_to_inner_sorts ids_to_inner_types ids_to_hypotheses hypotheses_seed in + let eta_fix metasenv context t = + if eta_fix then E.eta_fix metasenv context t else t + in let aobj = match obj with C.Constant (id,Some bo,ty,params) -> - let bo' = E.eta_fix [] bo in - let ty' = E.eta_fix [] ty in + 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) -> - let ty' = E.eta_fix [] ty in + 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) -> - let ty' = E.eta_fix [] ty in + let ty' = eta_fix [] [] ty in let abo = match bo with None -> None | Some bo -> - let bo' = E.eta_fix [] bo in + let bo' = eta_fix [] [] bo in Some (acic_term_of_cic_term' bo' (Some ty')) in let aty = acic_term_of_cic_term' ty' None in @@ -443,16 +448,22 @@ let acic_object_of_cic_object obj = List.map (function (i,canonical_context,term) -> let canonical_context' = - List.map - (function - None -> None - | Some (n, C.Decl t)-> Some (n, C.Decl (E.eta_fix conjectures t)) - | Some (n, C.Def (t,None)) -> - Some (n, C.Def ((E.eta_fix conjectures t),None)) - | Some (_,C.Def (_,Some _)) -> assert false - ) canonical_context + List.fold_right + (fun d canonical_context' -> + let d' = + match d with + None -> None + | Some (n, C.Decl t)-> + Some (n, C.Decl (eta_fix conjectures canonical_context' t)) + | Some (n, C.Def (t,None)) -> + Some (n, + C.Def ((eta_fix conjectures canonical_context' t),None)) + | Some (_,C.Def (_,Some _)) -> assert false + in + d::canonical_context' + ) [] canonical_context in - let term' = E.eta_fix conjectures term in + let term' = eta_fix conjectures canonical_context' term in (i,canonical_context',term') ) conjectures in @@ -507,8 +518,8 @@ let acic_object_of_cic_object obj = (cid,i,(List.rev revacanonical_context),aterm) ) conjectures' in *) let time1 = Sys.time () in - let bo' = E.eta_fix conjectures' bo in - let ty' = E.eta_fix conjectures' ty 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)) ;