]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_proof_checking/cicEnvironment.ml
ocaml 3.09 transition
[helm.git] / helm / ocaml / cic_proof_checking / cicEnvironment.ml
index 62e7335227d83cb8f62a05c20d5b5945fc961f2b..2849bc38a7f09c33d2c4b3c6789aba69a73b8c66 100644 (file)
@@ -44,7 +44,7 @@ let cleanup_tmp = true;;
 let trust = ref  (fun _ -> true);;
 let set_trust f = trust := f
 let trust_obj uri = !trust uri
-
+let debug_print = fun x -> prerr_endline (Lazy.force x)
 
 (* ************************************************************************** *
                                    TYPES 
@@ -56,16 +56,20 @@ type type_checked_obj =
 ;;
 
 exception AlreadyCooked of string;;
-exception CircularDependency of string;;
+exception CircularDependency of string Lazy.t;;
 exception CouldNotFreeze of string;;
 exception CouldNotUnfreeze of string;;
-exception Term_not_found of UriManager.uri;;
+exception Object_not_found of UriManager.uri;;
 
 
 (* ************************************************************************** *
                          HERE STARTS THE CACHE MODULE 
  * ************************************************************************** *)
 
+(* I think this should be the right place to implement mecanisms and 
+ * invasriants 
+ *)
+
 (* Cache that uses == instead of = for testing equality *)
 (* Invariant: an object is always in at most one of the *)
 (* following states: unchecked, frozen and cooked.      *)
@@ -74,8 +78,9 @@ module Cache :
    val find_or_add_to_unchecked :
      UriManager.uri -> 
      get_object_to_add:
-       (UriManager.uri -> Cic.obj * CicUniv.universe_graph option) -> 
-     Cic.obj * CicUniv.universe_graph
+       (UriManager.uri -> 
+         Cic.obj * (CicUniv.universe_graph * CicUniv.universe list) option) -> 
+     Cic.obj * CicUniv.universe_graph * CicUniv.universe list
    val can_be_cooked:
      UriManager.uri -> bool
    val unchecked_to_frozen : 
@@ -83,11 +88,13 @@ module Cache :
    val frozen_to_cooked :
      uri:UriManager.uri -> unit
    val hack_univ:
-     UriManager.uri -> CicUniv.universe_graph -> unit
+     UriManager.uri -> CicUniv.universe_graph * CicUniv.universe list -> unit
    val find_cooked : 
-     key:UriManager.uri -> Cic.obj * CicUniv.universe_graph
+     key:UriManager.uri -> 
+       Cic.obj * CicUniv.universe_graph * CicUniv.universe list
    val add_cooked : 
-     key:UriManager.uri -> (Cic.obj * CicUniv.universe_graph) -> unit
+     key:UriManager.uri -> 
+     (Cic.obj * CicUniv.universe_graph * CicUniv.universe list) -> unit
    val remove: UriManager.uri -> unit
    val dump_to_channel : ?callback:(string -> unit) -> out_channel -> unit
    val restore_from_channel : ?callback:(string -> unit) -> in_channel -> unit
@@ -95,6 +102,7 @@ module Cache :
    val is_in_frozen: UriManager.uri -> bool
    val is_in_unchecked: UriManager.uri -> bool
    val is_in_cooked: UriManager.uri -> bool
+   val list_all_cooked_uris: unit -> UriManager.uri list
   end 
 =
   struct
@@ -142,7 +150,7 @@ module Cache :
       in
       let rec restore_in_term =
         function
-           (C.Rel _) as t -> t
+         | (C.Rel _) as t -> t
          | C.Var (uri,exp_named_subst) ->
             let uri' = recons uri in
             let exp_named_subst' =
@@ -160,6 +168,9 @@ module Cache :
               ) l
             in
              C.Meta(i,l')
+         | C.Sort (C.Type u) -> 
+             CicUniv.assert_univ u;
+             C.Sort (C.Type (CicUniv.recons_univ u))
          | C.Sort _ as t -> t
          | C.Implicit _ as t -> t
          | C.Cast (te,ty) -> C.Cast (restore_in_term te, restore_in_term ty)
@@ -209,8 +220,8 @@ module Cache :
             in
              C.CoFix (i, liftedfl)
       in
-      function
-         C.Constant (name,bo,ty,params) ->
+      function 
+         C.Constant (name,bo,ty,params,attrs) ->
            let bo' =
              match bo with
                None -> None
@@ -218,8 +229,8 @@ module Cache :
            in
            let ty' = restore_in_term ty in
            let params' = List.map recons params in
-           C.Constant (name, bo', ty', params')
-       | C.CurrentProof (name,conjs,bo,ty,params) ->
+           C.Constant (name, bo', ty', params',attrs)
+       | C.CurrentProof (name,conjs,bo,ty,params,attrs) ->
            let conjs' =
              List.map
                (function (i,hyps,ty) ->
@@ -241,8 +252,8 @@ module Cache :
            let bo' = restore_in_term bo in
            let ty' = restore_in_term ty in
            let params' = List.map recons params in
-           C.CurrentProof (name, conjs', bo', ty', params')
-       | C.Variable (name,bo,ty,params) ->
+           C.CurrentProof (name, conjs', bo', ty', params',attrs)
+       | C.Variable (name,bo,ty,params,attrs) ->
            let bo' =
              match bo with
                None -> None
@@ -250,8 +261,8 @@ module Cache :
            in
            let ty' = restore_in_term ty in
            let params' = List.map recons params in
-           C.Variable (name, bo', ty', params')
-       | C.InductiveDefinition (tl,params,paramsno) ->
+           C.Variable (name, bo', ty', params',attrs)
+       | C.InductiveDefinition (tl,params,paramsno,attrs) ->
            let params' = List.map recons params in
            let tl' =
              List.map (function (name, inductive, ty, constructors) ->
@@ -263,7 +274,7 @@ module Cache :
                  constructors))
                tl
            in
-           C.InductiveDefinition (tl', params', paramsno)
+           C.InductiveDefinition (tl', params', paramsno, attrs)
     ;;
 
     let empty () = 
@@ -287,14 +298,14 @@ module Cache :
        *)
       empty (); 
       HT.iter
-       (fun k v ->
+       (fun k (v,u,l) ->
          callback (UriManager.string_of_uri k);
+         let reconsed_entry = 
+           restore_uris v,CicUniv.recons_graph u,List.map CicUniv.recons_univ l
+         in
          HT.add cacheOfCookedObjects 
-           (UriManager.uri_of_string (UriManager.string_of_uri k))
-            (***********************************************
-               TSSI: FIXME add channel stuff for universes
-            ************************************************)
-           ((restore_uris v),CicUniv.empty_ugraph))
+           (UriManager.uri_of_string (UriManager.string_of_uri k)) 
+           reconsed_entry)
        restored
     ;;
 
@@ -315,15 +326,15 @@ module Cache :
     (*******************************************************************
       TASSI: invariant
       we need, in the universe generation phase, to traverse objects
-      that are not jet committed, so we search them in the frozen list.
+      that are not yet committed, so we search them in the frozen list.
       Only uncommitted objects without a universe file (see the assertion) 
       can be searched with method
     *******************************************************************)
 
     let find_or_add_to_unchecked uri ~get_object_to_add =
      try
-       let o,g = List.assq uri !unchecked_list in
-         match g with
+       let o,g_and_l = List.assq uri !unchecked_list in
+         match g_and_l with
              (* FIXME: we accept both cases, as at the end of this function 
                * maybe the None universe outside the cache module should be
                * avoided elsewhere.
@@ -331,8 +342,8 @@ module Cache :
                * another thing that should be removed if univ generation phase
                * and lib exportation are unified.
                *)
-             None -> o,CicUniv.empty_ugraph
-           | Some g' -> o,g'
+           | None -> o,CicUniv.empty_ugraph,[]
+           | Some (g,l) -> o,g,l
      with
          Not_found ->
            if List.mem_assq uri !frozen_list then
@@ -345,7 +356,7 @@ module Cache :
                    let univ = if o = None then "NO_UNIV" else "" in
                    print_endline (su^" "^univ)) 
                  !frozen_list;
-               raise (CircularDependency (UriManager.string_of_uri uri))
+               raise (CircularDependency (lazy (UriManager.string_of_uri uri)))
              end
            else
              if HT.mem cacheOfCookedObjects uri then
@@ -353,22 +364,23 @@ module Cache :
                raise (AlreadyCooked (UriManager.string_of_uri uri))
              else
                (* OK, it is not already frozen nor cooked *)
-               let obj,ugraph = get_object_to_add uri in
-               let ugraph_real = 
-                 match ugraph with
+               let obj,ugraph_and_univlist = get_object_to_add uri in
+               let ugraph_real, univlist_real = 
+                 match ugraph_and_univlist with
                      (* FIXME: not sure it is OK*)
-                     None -> CicUniv.empty_ugraph
-                   | Some g -> g
+                     None -> CicUniv.empty_ugraph, []
+                   | Some ((g,l) as g_and_l) -> g_and_l
                in
-                 unchecked_list := (uri,(obj,ugraph))::!unchecked_list ;
-                 obj,ugraph_real
+               unchecked_list := 
+                 (uri,(obj,ugraph_and_univlist))::!unchecked_list ;
+               obj, ugraph_real, univlist_real
     ;;
 
     let unchecked_to_frozen uri =
       try
-        let obj,ugraph = List.assq uri !unchecked_list in
+        let obj,ugraph_and_univlist = List.assq uri !unchecked_list in
         unchecked_list := List.remove_assq uri !unchecked_list ;
-        frozen_list := (uri,(obj,ugraph))::!frozen_list
+        frozen_list := (uri,(obj,ugraph_and_univlist))::!frozen_list
       with
         Not_found -> raise (CouldNotFreeze (UriManager.string_of_uri uri))
     ;;
@@ -383,28 +395,28 @@ module Cache :
    *************************************************************)
    let frozen_to_cooked ~uri =
     try
-      let obj,ugraph = List.assq uri !frozen_list in
-       match ugraph with
-           None -> 
-             assert false (* only NON dummy universes can be committed *)
-         | Some g ->
-             frozen_list := List.remove_assq uri !frozen_list ;
-             HT.add cacheOfCookedObjects uri (obj,g
+      let obj,ugraph_and_univlist = List.assq uri !frozen_list in
+        match ugraph_and_univlist with
+        | None -> assert false (* only NON dummy universes can be committed *)
+        | Some (g,l) ->
+           CicUniv.assert_univs_have_uri g l;
+           frozen_list := List.remove_assq uri !frozen_list ;
+           HT.add cacheOfCookedObjects uri (obj,g,l
     with
-       Not_found -> raise (CouldNotUnfreeze (UriManager.string_of_uri uri))
+        Not_found -> raise (CouldNotUnfreeze (UriManager.string_of_uri uri))
    ;;
 
    let can_be_cooked uri =
      try
-       let obj,ugraph = List.assq uri !frozen_list in
+       let obj,ugraph_and_univlist = List.assq uri !frozen_list in
          (* FIXME: another thing to remove if univ generation phase and lib
           * exportation are unified.
           *)
-        match ugraph with
-            None -> false
-          | Some _ -> true
+         match ugraph_and_univlist with
+             None -> false
+           | Some _ -> true
      with
-        Not_found -> false
+         Not_found -> false
    ;;
    
    (* this function injects a real universe graph in a (uri, (obj, None))
@@ -413,33 +425,34 @@ module Cache :
     * FIXME: another thing to remove if univ generation phase and lib
     * exportation are unified.
     *)
-   let hack_univ uri real_ugraph =
+   let hack_univ uri (real_ugraph, real_univlist)  =
      try
-       let o,g = List.assq uri !frozen_list in
-        match g with
-            None -> 
-              frozen_list := List.remove_assoc uri !frozen_list;
-              frozen_list := (uri,(o,Some real_ugraph))::!frozen_list;
-          | Some g -> 
-              prerr_endline (
-                "You are probably hacking an object already hacked or an"^
-                " object that has the universe file but is not"^
-                " yet committed.");
-              assert false
+       let o,ugraph_and_univlist = List.assq uri !frozen_list in
+         match ugraph_and_univlist with
+             None -> 
+               frozen_list := List.remove_assoc uri !frozen_list;
+               frozen_list := 
+                 (uri,(o,Some (real_ugraph, real_univlist)))::!frozen_list;
+           | Some g -> 
+               debug_print (lazy (
+                 "You are probably hacking an object already hacked or an"^
+                 " object that has the universe file but is not"^
+                 " yet committed."));
+               assert false
      with
-        Not_found -> 
-          prerr_endline (
-            "You are hacking an object that is not in the"^
-            " frozen_list, this means you are probably generating an"^
-            " universe file for an object that already"^
-             " as an universe file");
-          assert false
+         Not_found -> 
+           debug_print (lazy (
+             "You are hacking an object that is not in the"^
+             " frozen_list, this means you are probably generating an"^
+             " universe file for an object that already"^
+             " as an universe file"));
+           assert false
    ;;
 
    let find_cooked ~key:uri = HT.find cacheOfCookedObjects uri ;;
  
-   let add_cooked ~key:uri (obj,ugraph) = 
-     HT.add cacheOfCookedObjects uri (obj,ugraph) 
+   let add_cooked ~key:uri (obj,ugraph,univlist) = 
+     HT.add cacheOfCookedObjects uri (obj,ugraph,univlist
    ;;
 
    (* invariant
@@ -448,10 +461,18 @@ module Cache :
     * something. this means check and frozen must be empty.
     *)
    let remove uri =
-     if (!unchecked_list <> []) || (!frozen_list <> []) then
+     if !frozen_list <> [] then
        failwith "CicEnvironment.remove while type checking"
      else
-       HT.remove cacheOfCookedObjects uri 
+      begin
+       HT.remove cacheOfCookedObjects uri;
+       unchecked_list :=
+        List.filter (fun (uri',_) -> not (UriManager.eq uri uri')) !unchecked_list
+      end
+   ;;
+   
+   let  list_all_cooked_uris () =
+     HT.fold (fun u _ l -> u::l) cacheOfCookedObjects []
    ;;
    
   end
@@ -466,69 +487,51 @@ let dump_to_channel = Cache.dump_to_channel;;
 let restore_from_channel = Cache.restore_from_channel;;
 let empty = Cache.empty;;
 
+let total_parsing_time = ref 0.0
+
 let get_object_to_add uri =
- let filename = Http_getter.getxml' uri in
- let bodyfilename =
-   match UriManager.bodyuri_of_uri uri with
-      None -> None
-   |  Some bodyuri ->
-       try
-        ignore (Http_getter.resolve' bodyuri) ;
-        (* The body exists ==> it is not an axiom *)
-        Some (Http_getter.getxml' bodyuri)
-       with
-        Http_getter_types.Key_not_found _ ->
-         (* The body does not exist ==> we consider it an axiom *)
-         None
- in
- let cleanup () =
-   Unix.unlink filename ;
-   (*
-     begin
-       match filename_univ with
-         Some f -> Unix.unlink f
-       | None -> ()
-     end;
-   *)
-   begin
-     match bodyfilename with
-         Some f -> Unix.unlink f
-       | None -> ()
-   end 
- in
- (* this brakes something : 
-  *   let _ = CicUniv.restart_numbering () in 
-  *)
- let obj = 
-   try 
-     CicParser.obj_of_xml filename bodyfilename 
-   with exn -> 
-     cleanup ();
-     raise exn
- in
- let ugraph,filename_univ = 
-   (* FIXME: decomment this when the universes will be part of the library
-   try 
-     let filename_univ = 
-       Http_getter.getxml' (
-         UriManager.uri_of_string (
-           (UriManager.string_of_uri uri) ^ ".univ")) 
-     in
-       (Some (CicUniv.ugraph_of_xml filename_univ),Some filename_univ)
-   with Failure s ->
-     
-     prerr_endline (
-       "WE HAVE NO UNIVERSE FILE FOR " ^ (UriManager.string_of_uri uri));
-       Inix.unlink
-     None,None
-     *)
-     (**********************************************
-       TASSI: should fail when universes will be ON
-     ***********************************************)
-     (Some CicUniv.empty_ugraph,None)
- in
-   cleanup();
-   obj,ugraph
+ try
+  let filename = Http_getter.getxml' uri in
+  let bodyfilename =
+    match UriManager.bodyuri_of_uri uri with
+       None -> None
+    |  Some bodyuri ->
+        if Http_getter.exists' bodyuri then
+          Some (Http_getter.getxml' bodyuri)
+        else
+          None
+  in
+  let obj = 
+    try 
+      let time = Unix.gettimeofday() in
+      let rc = CicParser.obj_of_xml uri filename bodyfilename in
+      total_parsing_time := 
+        !total_parsing_time +. ((Unix.gettimeofday()) -. time );
+      rc
+    with exn -> 
+      (match exn with
+      | CicParser.Getter_failure ("key_not_found", uri) ->
+          raise (Object_not_found (UriManager.uri_of_string uri))
+      | _ -> raise exn)
+  in
+  let ugraph_and_univlist,filename_univ = 
+    try 
+      let filename_univ = 
+        let univ_uri = UriManager.univgraphuri_of_uri uri in
+        Http_getter.getxml' univ_uri
+      in
+        Some (CicUniv.ugraph_and_univlist_of_xml filename_univ),
+        Some filename_univ
+    with 
+    | Http_getter_types.Key_not_found _ 
+    | Http_getter_types.Unresolvable_URI _ ->
+      debug_print (lazy (
+        "WE HAVE NO UNIVERSE FILE FOR " ^ (UriManager.string_of_uri uri)));
+      (* WE SHOULD FAIL (or return None, None *)
+      Some (CicUniv.empty_ugraph, []), None
+  in
+  obj, ugraph_and_univlist
+ with Http_getter_types.Key_not_found _ -> raise (Object_not_found uri)
 ;;
  
 (* this is the function to fetch the object in the unchecked list and 
@@ -543,31 +546,37 @@ let find_or_add_to_unchecked uri =
 (*                                                              *)
 (* the replacement ugraph must be the one returned by the       *)
 (* typechecker, restricted with the CicUnivUtils.clean_and_fill *)
-let set_type_checking_info ?(replace_ugraph=None) uri =
-  if Cache.can_be_cooked uri && replace_ugraph <> None then
-    invalid_arg (
+let set_type_checking_info ?(replace_ugraph_and_univlist=None) uri =
+(*
+  if not (Cache.can_be_cooked uri) && replace_ugraph <> None then begin
+    debug_print (lazy (
       "?replace_ugraph must be None if you are not committing an "^
       "object that has a universe graph associated "^
-      "(can happen only in the fase of universes graphs generation).");
-  if not (Cache.can_be_cooked uri) && replace_ugraph = None then
-    invalid_arg (
-      "?replace_ugraph must be (Some ugraph) when committing an object that "^
-      "has no associated universe graph. If this is in make_univ phase you "^
-      "should drop this exception and let univ_make commit thi object with "^
-      "proper arguments");
-  begin
-    match replace_ugraph with 
-       None -> ()
-      | Some g -> Cache.hack_univ uri g
-  end;
-  Cache.frozen_to_cooked uri
+      "(can happen only in the fase of universes graphs generation)."));
+    assert false
+  else
+*)
+  match Cache.can_be_cooked uri, replace_ugraph_and_univlist with
+  | true, Some _
+  | false, None ->
+      debug_print (lazy (
+        "?replace_ugraph must be (Some ugraph) when committing an object that "^
+        "has no associated universe graph. If this is in make_univ phase you "^
+        "should drop this exception and let univ_make commit thi object with "^
+        "proper arguments"));
+      assert false
+  | _ ->
+      (match replace_ugraph_and_univlist with 
+      | None -> ()
+      | Some g_and_l -> Cache.hack_univ uri g_and_l);
+      Cache.frozen_to_cooked uri
 ;;
 
 (* fetch, unfreeze and commit an uri to the cacheOfCookedObjects and
  * return the object,ugraph
  *)
 let add_trusted_uri_to_cache uri = 
-  let o,u = find_or_add_to_unchecked uri in
+  let o,u,_ = find_or_add_to_unchecked uri in
   Cache.unchecked_to_frozen uri;
   set_type_checking_info uri;
   try
@@ -576,23 +585,27 @@ let add_trusted_uri_to_cache uri =
 ;;
 
 (* get the uri, if we trust it will be added to the cacheOfCookedObjects *)
-let get_cooked_obj ?(trust=true) base_univ uri =
+let get_cooked_obj_with_univlist ?(trust=true) base_univ uri =
   try
     (* the object should be in the cacheOfCookedObjects *)
-    let o,u = Cache.find_cooked uri in
-      o,(CicUniv.merge_ugraphs base_univ u)
+    let o,u,l = Cache.find_cooked uri in
+      o,(CicUniv.merge_ugraphs base_univ u),l
   with Not_found ->
     (* this should be an error case, but if we trust the uri... *)
     if trust && trust_obj uri then
       (* trusting means that we will fetch cook it on the fly *)
-      let o,u = add_trusted_uri_to_cache uri in
-        o,(CicUniv.merge_ugraphs base_univ u)
+      let o,u,l = add_trusted_uri_to_cache uri in
+        o,(CicUniv.merge_ugraphs base_univ u),l
     else
       (* we don't trust the uri, so we fail *)
       begin
-        prerr_endline ("CACHE MISS: " ^ (UriManager.string_of_uri uri));
+        debug_print (lazy ("CACHE MISS: " ^ (UriManager.string_of_uri uri)));
         raise Not_found
       end
+
+let get_cooked_obj ?trust base_univ uri = 
+  let o,g,_ = get_cooked_obj_with_univlist ?trust base_univ uri in
+  o,g
       
 (* This has not the old semantic :( but is what the name suggests
  * 
@@ -610,16 +623,17 @@ let get_cooked_obj ?(trust=true) base_univ uri =
  *)
 let is_type_checked ?(trust=true) base_univ uri =
   try 
-    let o,u = Cache.find_cooked uri in
+    let o,u,_ = Cache.find_cooked uri in
       CheckedObj (o,(CicUniv.merge_ugraphs base_univ u))
   with Not_found ->
     (* this should return UncheckedObj *)
     if trust && trust_obj uri then
       (* trusting means that we will fetch cook it on the fly *)
-      let o,u = add_trusted_uri_to_cache uri in
+      let o,u,_ = add_trusted_uri_to_cache uri in
         CheckedObj ( o, CicUniv.merge_ugraphs u base_univ )
     else
-      let o,u = find_or_add_to_unchecked uri in
+      let o,u,_ = find_or_add_to_unchecked uri in
+      Cache.unchecked_to_frozen uri;
         UncheckedObj o
 ;;
 
@@ -629,46 +643,36 @@ let is_type_checked ?(trust=true) base_univ uri =
 let get_obj base_univ uri =
   try
     (* the object should be in the cacheOfCookedObjects *)
-    let o,u = Cache.find_cooked uri in
+    let o,u,_ = Cache.find_cooked uri in
       o,(CicUniv.merge_ugraphs base_univ u)
   with Not_found ->
     (* this should be an error case, but if we trust the uri... *)
-    if trust_obj uri then
-      (* trusting we add it to the unchecked list *)
-      let o,u = find_or_add_to_unchecked uri in
+      let o,u,_ = find_or_add_to_unchecked uri in
         o,(CicUniv.merge_ugraphs base_univ u)
-    else
-      raise Not_found
 ;; 
 
-exception OnlyPutOfInductiveDefinitionsIsAllowed
+let in_cache uri =
+  Cache.is_in_cooked uri || Cache.is_in_frozen uri || Cache.is_in_unchecked uri
 
-let put_inductive_definition uri (obj,ugraph) =
- match obj with
-    Cic.InductiveDefinition _ -> Cache.add_cooked uri (obj,ugraph)
-  | _ -> raise OnlyPutOfInductiveDefinitionsIsAllowed
-;;
+let add_type_checked_obj uri (obj,ugraph,univlist) =
+ Cache.add_cooked ~key:uri (obj,ugraph,univlist)
 
-let in_cache uri = 
- if Cache.is_in_cooked uri then
-   (prerr_endline "TROVATO NELLA CHECKED";true)
- else  
-   if Cache.is_in_frozen uri then
-     (prerr_endline "TROVATO NELLA FROZEN";true)
-   else
-     if Cache.is_in_unchecked uri then
-       (prerr_endline "TROVATO NELLA UNCHECKED";true)
-     else
-       (prerr_endline ("NON TROVATO:" ^ (UriManager.string_of_uri uri) );false)
-;;
+let in_library uri = in_cache uri || Http_getter.exists' uri
 
-let add_type_checked_term uri (obj,ugraph) =
-  match obj with 
-      Cic.Constant (s,(Some bo),ty,ul) ->
-       Cache.add_cooked ~key:uri (obj,ugraph)
-    | _ -> 
-       assert false 
+let remove_obj = Cache.remove
+  
+let list_uri () = 
+  Cache.list_all_cooked_uris ()
 ;;
 
-let remove_term = Cache.remove
-
+let list_obj () =
+  try 
+    List.map (fun u -> 
+      let o,ug = get_obj CicUniv.empty_ugraph u in
+        (u,o,ug)) 
+    (list_uri ())
+  with
+    Not_found -> 
+      debug_print (lazy "Who has removed the uri in the meanwhile?");
+      raise Not_found
+;;