]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/grafite_engine/grafiteSync.ml
parameter sintax added to axiom statement
[helm.git] / helm / software / components / grafite_engine / grafiteSync.ml
index 759186c12a1189c1eaa22be9e116ba1f69a24c0f..47744f66e0332e962b2feace6b5f42cb0399a8df 100644 (file)
@@ -78,10 +78,30 @@ let add_obj ~pack_coercion_obj uri obj status =
    let term = CicUtil.term_of_uri uri in
    let ty,_ = CicTypeChecker.type_of_aux' [] [] term CicUniv.oblivion_ugraph in
    let tkeys = Universe.keys [] ty in
-   let index_cmd = 
-     List.map 
-       (fun key -> GrafiteAst.Index(HExtlib.dummy_floc,(Some key),uri))
-       tkeys
+   let universe = automation_cache.AutomationCache.univ in
+   let universe, index_cmd = 
+     List.fold_left 
+       (fun (universe,acc) key -> 
+         let cands = Universe.get_candidates universe key in
+         let tys = 
+           List.map
+              (fun t -> 
+                 let ty, _ = 
+                   CicTypeChecker.type_of_aux' [] [] t CicUniv.oblivion_ugraph
+                 in
+                   ty)
+              cands
+         in
+         if List.for_all 
+              (fun cty -> 
+                 not (fst(CicReduction.are_convertible [] ty cty
+                 CicUniv.oblivion_ugraph))) tys 
+        then
+           Universe.index universe key term,
+           GrafiteAst.Index(HExtlib.dummy_floc,(Some key),uri)::acc
+         else
+           universe, acc)
+       (universe,[]) tkeys
    in
    let is_equational = is_equational_fact ty in
    let select_cmd = 
@@ -90,8 +110,6 @@ let add_obj ~pack_coercion_obj uri obj status =
       else
        []
    in
-   let universe = automation_cache.AutomationCache.univ in
-   let universe = Universe.index_term_and_unfolded_term universe [] term ty in
    let automation_cache = 
      if is_equational then
         AutomationCache.add_term_to_active automation_cache [] [] [] term None
@@ -110,13 +128,13 @@ let add_obj ~pack_coercion_obj uri obj status =
  in
  let automation_cache,status =
    List.fold_left add_to_universe 
-     (status.GrafiteTypes.automation_cache,status) 
+     (status#automation_cache,status) 
      uris_to_index 
  in
-  {status with 
-     GrafiteTypes.objects = uri :: lemmas @ status.GrafiteTypes.objects;
-     GrafiteTypes.automation_cache = automation_cache},
-   lemmas
+  (status
+    #set_objects (uri :: lemmas @ status#objects))
+    #set_automation_cache automation_cache,
+  lemmas
 
 let add_coercion ~pack_coercion_obj ~add_composites status uri arity
  saturations baseuri
@@ -124,14 +142,17 @@ let add_coercion ~pack_coercion_obj ~add_composites status uri arity
  let lemmas = 
    LibrarySync.add_coercion ~add_composites ~pack_coercion_obj 
     uri arity saturations baseuri in
- { status with GrafiteTypes.coercions = CoercDb.dump () ; 
-   objects = lemmas @ status.GrafiteTypes.objects
-  },
-   lemmas
+ let status = 
+  (status
+    #set_coercions (CoercDb.dump ())) ; 
+    #set_objects (lemmas @ status#objects)
+ in
+ let status = NCicCoercion.index_old_db (CoercDb.dump ()) status in
+  status, lemmas
 
-let prefer_coercion s u = 
+let prefer_coercion status u = 
   CoercDb.prefer u;
-  { s with GrafiteTypes.coercions = CoercDb.dump () }
+   status#set_coercions (CoercDb.dump ())
  
   (** @return l2 \ l1 *)
 let uri_list_diff l2 l1 =
@@ -141,28 +162,22 @@ let uri_list_diff l2 l1 =
   let diff = S.diff s2 s1 in
   S.fold (fun uri uris -> uri :: uris) diff []
 
-let time_travel ~present ~past =
+let initial_status lexicon_status baseuri =
+ (new GrafiteTypes.status baseuri)#set_lstatus lexicon_status#lstatus
+;;
+
+let time_travel  ~present ?(past=initial_status present present#baseuri) () =
   let objs_to_remove =
-   uri_list_diff present.GrafiteTypes.objects past.GrafiteTypes.objects in
+   uri_list_diff present#objects past#objects in
   List.iter LibrarySync.remove_obj objs_to_remove;
-  CoercDb.restore past.GrafiteTypes.coercions;
+  CoercDb.restore past#coercions;
+  NCicLibrary.time_travel past
 ;;
 
-let initial_status lexicon_status baseuri = {
-    GrafiteTypes.moo_content_rev = [];
-    proof_status = GrafiteTypes.No_proof;
-    objects = [];
-    coercions = CoercDb.empty_coerc_db;
-    automation_cache = AutomationCache.empty ();
-    baseuri = baseuri;
-    ng_status = GrafiteTypes.CommandMode lexicon_status;
-  }
-
-
-let init baseuri =
+let init lexicon_status =
   CoercDb.restore CoercDb.empty_coerc_db;
   LibraryObjects.reset_defaults ();
-  initial_status baseuri
+  initial_status lexicon_status
   ;;
 let pop () =
   LibrarySync.pop ();