X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=components%2Flibrary%2FlibrarySync.ml;h=c36d84c90dd88de02938fdef9507906a55659edb;hb=b0a6c05decc9f0e731f70cfc5ae5350ae4046b79;hp=5189547d33135903df0731105a50fa99041b2f91;hpb=83c41ad650a2736acf27ccae820923157283c6db;p=helm.git diff --git a/components/library/librarySync.ml b/components/library/librarySync.ml index 5189547d3..c36d84c90 100644 --- a/components/library/librarySync.ml +++ b/components/library/librarySync.ml @@ -25,6 +25,10 @@ (* $Id$ *) +let object_declaration_hook = ref (fun _ _ -> ());; +let set_object_declaration_hook f = + object_declaration_hook := f + exception AlreadyDefined of UriManager.uri let auxiliary_lemmas_hashtbl = UriManager.UriHashtbl.create 29 @@ -70,24 +74,27 @@ let save_object_to_disk uri obj ugraph univlist = HExtlib.mkdir dir in (* generate annobj, ids_to_inner_sorts and ids_to_inner_types *) - let annobj, innertypes = - if Helm_registry.get_bool "matita.system" then - let annobj, _, _, ids_to_inner_sorts, ids_to_inner_types, _, _ = + let annobj, innertypes, ids_to_inner_sorts, generate_attributes = + if Helm_registry.get_bool "matita.system" && + not (Helm_registry.get_bool "matita.noinnertypes") + then + let annobj, _, _, ids_to_inner_sorts, ids_to_inner_types, _, _ = Cic2acic.acic_object_of_cic_object obj in let innertypesxml = Cic2Xml.print_inner_types uri ~ids_to_inner_sorts ~ids_to_inner_types ~ask_dtd_to_the_getter:false in - annobj, Some innertypesxml + annobj, Some innertypesxml, Some ids_to_inner_sorts, false else let annobj = Cic2acic.plain_acic_object_of_cic_object obj in - annobj, None + annobj, None, None, true in (* prepare XML *) let xml, bodyxml = Cic2Xml.print_object - uri ?ids_to_inner_sorts:None ~ask_dtd_to_the_getter:false annobj + uri ?ids_to_inner_sorts ~ask_dtd_to_the_getter:false + ~generate_attributes annobj in let xmlpath, xmlbodypath, innertypespath, bodyuri, innertypesuri, xmlunivgraphpath, univgraphuri = @@ -159,6 +166,10 @@ let add_single_obj uri obj refinement_toolkit = try (*3*) let new_stuff = save_object_to_disk uri obj ugraph univlist in + (* EXPERIMENTAL: pretty print the object in natural language *) + (try !object_declaration_hook uri obj + with exc -> + prerr_endline "Error: object_declaration_hook failed"); try HLog.message (Printf.sprintf "%s defined" (UriManager.string_of_uri uri)) @@ -307,7 +318,9 @@ let add_coercion ~add_composites refinement_toolkit uri arity saturations (CoercDb.to_list ()) in if not add_composites then - (CoercDb.add_coercion (src_carr, tgt_carr, uri, saturations);[]) + (CoercDb.add_coercion (src_carr, tgt_carr, uri, saturations); + UriManager.UriHashtbl.add coercion_hashtbl uri ([],[]); + []) else let new_coercions = CicCoercion.close_coercion_graph src_carr tgt_carr uri saturations @@ -326,14 +339,11 @@ let add_coercion ~add_composites refinement_toolkit uri arity saturations CoercDb.add_coercion (src_carr, tgt_carr, uri, saturations); (* add the composites obj and they eventual lemmas *) let lemmas = - if add_composites then List.fold_left (fun acc (_,tgt,uri,saturations,obj,arity) -> add_single_obj uri obj refinement_toolkit; (uri,arity,saturations)::acc) [] new_coercions - else - [] in (* store that composite_uris are related to uri. the first component is * the stuff in the DB while the second is stuff for remove_obj *) @@ -343,8 +353,8 @@ let add_coercion ~add_composites refinement_toolkit uri arity saturations List.iter (fun u -> prerr_endline (UriManager.string_of_uri u)) composite_uris; *) - UriManager.UriHashtbl.add coercion_hashtbl uri - (composite_uris,if add_composites then composite_uris else []); + UriManager.UriHashtbl.add + coercion_hashtbl uri (composite_uris,composite_uris); (* prerr_endline ("lemmas:"); List.iter (fun u -> prerr_endline (UriManager.string_of_uri u)) @@ -362,7 +372,8 @@ let remove_coercion uri = List.iter (fun u -> prerr_endline (UriManager.string_of_uri u)) composites_in_db;*) UriManager.UriHashtbl.remove coercion_hashtbl uri; - CoercDb.remove_coercion (fun (_,_,u,_) -> UriManager.eq uri u); + CoercDb.remove_coercion + (fun (_,_,u,_) -> UriManager.eq uri u); (* remove from the DB *) List.iter (fun u -> CoercDb.remove_coercion (fun (_,_,u1,_) -> UriManager.eq u u1)) @@ -370,7 +381,7 @@ let remove_coercion uri = (* remove composites from the lib *) List.iter remove_single_obj composites_in_lib with - Not_found -> () (* mhh..... *) + Not_found -> HLog.warn "Coercion removal raise Not_found" (* mhh..... *) let generate_projections refinement_toolkit uri fields =