Printf.sprintf "%d: %s" d (String.concat "; " gl')) goals))
 ;;
               
+let pp_goal_set msg goals names = 
+  let active_goals, passive_goals = goals in
+  prerr_endline ("////" ^ msg);
+  prerr_endline ("ACTIVE G: " ^
+    (String.concat "\n " (List.map (fun (_,_,g) -> CicPp.pp g names)
+    active_goals)));
+  prerr_endline ("PASSIVE G: " ^
+    (String.concat "\n " (List.map (fun (_,_,g) -> CicPp.pp g names)
+    passive_goals)))
+;;
+
 let check_if_goal_is_subsumed ((_,ctx,_) as env) table (goalproof,menv,ty) =
 (*
   let names = names_of_context ctx in
       | (Some p) as ok  -> ok
 ;;
   
-let simplify_goal_set env goals passive active = 
+let simplify_goal_set env goals ?passive active = 
   let active_goals, passive_goals = goals in 
   let find (_,_,g) where =
     List.exists (fun (_,_,g1) -> Equality.meta_convertibility g g1) where
   let simplified =
     List.fold_left
       (fun acc goal -> 
-        match simplify_goal env goal ~passive active with 
+        match simplify_goal env goal ?passive active with 
         | changed, g -> 
             if changed then prerr_endline "???????????????cambiato ancora";
             if find g acc then acc else g::acc)
 let infer_goal_set env active goals = 
   let active_goals, passive_goals = goals in
   let rec aux = function
-    | [] -> goals
+    | [] -> active_goals, []
     | hd::tl ->
         let changed,selected = simplify_goal env hd active in
         if changed then
           prerr_endline ("--------------- goal semplificato");
         let (_,_,t1) = selected in
-        if (List.exists 
-             (fun (_,_,t) -> 
-                Equality.meta_convertibility t t1) 
-              active_goals) then aux tl
-        else
-        let passive_goals = tl in
-        let new_passive_goals =
-          if Utils.metas_of_term t1 = [] then passive_goals
-          else 
-            let new' = 
-               Indexing.superposition_left env (snd active) selected in
-            passive_goals @ new'
+        let already_in = 
+          List.exists (fun (_,_,t) -> Equality.meta_convertibility t t1) 
+              active_goals
         in
-        selected::active_goals, new_passive_goals
+        if already_in then 
+             aux tl
+          else
+            let passive_goals = tl in
+            let new_passive_goals =
+              if Utils.metas_of_term t1 = [] then passive_goals
+              else 
+                let new' = 
+                   Indexing.superposition_left env (snd active) selected in
+                passive_goals @ new'
+            in
+            selected::active_goals, new_passive_goals
   in 
   aux passive_goals
 ;;
 
 let infer_goal_set_with_current env current goals = 
   let active_goals, passive_goals = goals in
-  let _,table,_ = build_table [current] in
-  active_goals,
+  let l,table,_  = build_table [current] in
+  let active_goals, _ = 
+    simplify_goal_set env goals (l,table)
+  in
+  active_goals, 
   List.fold_left 
     (fun acc g ->
       let new' = Indexing.superposition_left env table g in
                    prerr_endline (Printf.sprintf  "Current goal = %s\n"
                     (CicPp.pp g names))) 
                  (fst goals);
+                List.iter                 
+                 (fun _,_,g -> 
+                   prerr_endline (Printf.sprintf  "Passive goal = %s\n"
+                    (CicPp.pp g names))) 
+                 (snd goals);
                 prerr_endline (Printf.sprintf  "Selected = %s\n"
                   (Equality.string_of_equality ~env current))
               in
                   let goals = 
                     let a,b,_ = build_table new' in
                     let _ = <:start<simplify_goal_set new>> in
-                    let rc = simplify_goal_set env goals passive (a,b) in
+                    let rc = simplify_goal_set env goals ~passive (a,b) in
                     let _ = <:stop<simplify_goal_set new>> in
                     rc
                   in
             let al, tbl = active in
             al @ [current], Indexing.index tbl current
         in
+        (* alla fine new' contiene anche le attive semplificate!
+         * quindi le aggiungo alle passive insieme alle new *)
         let rec simplify new' active passive =
           let new' = forward_simplify_new eq_uri env new' ~passive active in
           let active, passive, newa, retained, pruned =
 ;;
 
 let saturate 
+    caso_strano 
     dbd ?(full=false) ?(depth=default_depth) ?(width=default_width) status = 
   let module C = Cic in
   reset_refs ();
   let res, time =
     let t1 = Unix.gettimeofday () in
     let lib_eq_uris, library_equalities, maxm =
-      find_library_equalities dbd context (proof, goalno) (maxm+2)
+      find_library_equalities caso_strano dbd context (proof, goalno) (maxm+2)
     in
     let library_equalities = List.map snd library_equalities in
     let t2 = Unix.gettimeofday () in
   let env = (metasenv, context, ugraph) in
   let t1 = Unix.gettimeofday () in
   let lib_eq_uris, library_equalities, maxm =
-    find_library_equalities dbd context (proof, goal') (maxm+2) in
+    find_library_equalities false dbd context (proof, goal') (maxm+2) in
   let t2 = Unix.gettimeofday () in
   maxmeta := maxm+2;
   let equalities = (* equalities @ *) library_equalities in
   let eq_uri = eq_of_goal goal in 
   let eq_indexes, equalities, maxm = find_equalities context proof in
   let lib_eq_uris, library_equalities, maxm =
-    find_library_equalities dbd context (proof, goal') (maxm+2)
+    find_library_equalities false dbd context (proof, goal') (maxm+2)
   in
   let library_equalities = List.map snd library_equalities in
   maxmeta := maxm+2; (* TODO ugly!! *)
     Inference.find_equalities context proof 
   in
   let lib_eq_uris, library_equalities, maxm =
-    Inference.find_library_equalities dbd context (proof, goal) (maxm+2) in
+    Inference.find_library_equalities false dbd context (proof, goal) (maxm+2) in
   if library_equalities = [] then prerr_endline "VUOTA!!!";
   let irl = CicMkImplicit.identity_relocation_list_for_metavariable context in
   let library_equalities = List.map snd library_equalities in