]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/matita/matitaSync.ml
The disambiguation now returns the aliases diff. It used to return the
[helm.git] / helm / matita / matitaSync.ml
index 5dc3e2d248743311a92a2a7a584b6110833b11ba..3d9d74dccb76ce526869a13404e786b2fa53ea33 100644 (file)
@@ -34,30 +34,35 @@ let alias_diff ~from status =
       try
        let description2,_ = Map.find domain_item from.aliases in
         if description1 <> description2 then
-          Map.add domain_item codomain_item acc
+         (domain_item,codomain_item)::acc
         else
           acc
       with
        Not_found ->
-         Map.add domain_item codomain_item acc)
-    status.aliases Map.empty
+         (domain_item,codomain_item)::acc)
+    status.aliases []
 
 let alias_diff =
  let profiler = CicUtil.profile "alias_diff (conteggiato anche in include)" in
  fun ~from status -> profiler.CicUtil.profile (alias_diff ~from) status
 
-let set_proof_aliases status aliases =
- let new_status = { status with aliases = aliases } in
- let diff = alias_diff ~from:status new_status in
+let set_proof_aliases status new_aliases =
+ let aliases =
+  List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.add d c acc)
+   status.aliases new_aliases in
  let multi_aliases =
-  DisambiguateTypes.Environment.fold DisambiguateTypes.Environment.cons
-   diff status.multi_aliases in
- let new_status = { new_status with multi_aliases = multi_aliases } in
- if DisambiguateTypes.Environment.is_empty diff then
+  List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.cons d c acc)
+   status.multi_aliases new_aliases in
+ let new_status =
+   { status with multi_aliases = multi_aliases ; aliases = aliases}
+ in
+ if new_aliases = [] then
    new_status
  else
-   add_moo_content (DisambiguatePp.commands_of_environment diff) new_status
-  
+   add_moo_content
+    (DisambiguatePp.commands_of_domain_and_codomain_items_list new_aliases)
+    new_status
+
 (** given a uri and a type list (the contructors types) builds a list of pairs
  *  (name,uri) that is used to generate authomatic aliases **)
 let extract_alias types uri = 
@@ -72,19 +77,21 @@ let extract_alias types uri =
         ) (acc,1) cl)),i+1
   ) ([],0) types)
 
-let env_of_list l env =
- let l' = List.map (fun (name,suri) -> name,suri,CicUtil.term_of_uri (UriManager.uri_of_string suri)) l in
-  DisambiguateTypes.env_of_list l' env
+let build_aliases =
+ List.map
+  (fun (name,suri) ->
+    DisambiguateTypes.Id name,
+     (suri, fun _ _ _ -> CicUtil.term_of_uri (UriManager.uri_of_string suri)))
 
 let add_aliases_for_inductive_def status types suri = 
   let uri = UriManager.uri_of_string suri in
-  let aliases = env_of_list (extract_alias types uri) status.aliases in
-  set_proof_aliases status aliases
+  let aliases = build_aliases (extract_alias types uri) in
+   set_proof_aliases status aliases
 
 let add_alias_for_constant status suri =
  let uri = UriManager.uri_of_string suri in
  let name = UriManager.name_of_uri uri in
- let new_env = env_of_list [(name,suri)] status.aliases in
+ let new_env = build_aliases [(name,suri)] in
  set_proof_aliases status new_env
 
 let add_aliases_for_object status suri =
@@ -110,28 +117,17 @@ let paths_and_uris_of_obj uri status =
   let xmlbodypath = basedir ^ "/" ^  xmlbodyfilename in
   xmlpath, xmlbodypath, innertypespath, bodyuri, innertypesuri
 
-let acic_object_of_cic_object =
- let profiler = CicUtil.profile "add_obj.save_object_to_disk.acic_object_of_cic_object" in
-  fun ~eta_fix obj ->
-   profiler.CicUtil.profile (Cic2acic.acic_object_of_cic_object ~eta_fix) obj
-
 let save_object_to_disk status uri obj =
   let ensure_path_exists path =
     let dir = Filename.dirname path in
     MatitaMisc.mkdir dir
   in
   (* generate annobj, ids_to_inner_sorts and ids_to_inner_types *)
-  let annobj,_,_,ids_to_inner_sorts,ids_to_inner_types,_,_ =
-    acic_object_of_cic_object ~eta_fix:false obj
-  in 
+  let annobj = Cic2acic.plain_acic_object_of_cic_object obj in 
   (* prepare XML *)
   let xml, bodyxml =
-   Cic2Xml.print_object uri ~ids_to_inner_sorts ~ask_dtd_to_the_getter:false
-    annobj 
-  in
-  let xmlinnertypes =
-   Cic2Xml.print_inner_types uri ~ids_to_inner_sorts ~ids_to_inner_types
-    ~ask_dtd_to_the_getter:false
+   Cic2Xml.print_object
+    uri ?ids_to_inner_sorts:None ~ask_dtd_to_the_getter:false annobj 
   in
   let xmlpath, xmlbodypath, innertypespath, bodyuri, innertypesuri = 
     paths_and_uris_of_obj uri status 
@@ -140,12 +136,10 @@ let save_object_to_disk status uri obj =
   List.iter MatitaMisc.mkdir
     (List.map Filename.dirname [innertypespath; xmlpath]);
   (* now write to disk *)
-  ensure_path_exists innertypespath;
-  Xml.pp ~gzip:true xmlinnertypes (Some innertypespath);
   ensure_path_exists xmlpath;
   Xml.pp ~gzip:true xml (Some xmlpath) ;
   (* we return a list of uri,path we registered/created *)
-  (uri,xmlpath) :: (innertypesuri,innertypespath) ::
+  (uri,xmlpath) ::
     (* now the optional body, both write and register *)
     (match bodyxml,bodyuri with
        None,None -> []