let monster = 100;;
module Paramod (B : Terms.Blob) = struct
- exception Failure of string * B.t Terms.bag * int * int
+ type szsontology =
+ | Unsatisfiable of (B.t Terms.bag * int * int list) list
+ | GaveUp
+ | Error of string
+ | Timeout of int * B.t Terms.bag
+ exception Stop of szsontology
type bag = B.t Terms.bag * int
module Pp = Pp.Pp (B)
module FU = FoUnif.Founif(B)
(* TODO : global age over facts and goals (without comparing weights) *)
let select ~use_age passives g_passives =
if is_passive_set_empty passives then begin
- assert (not (is_passive_set_empty g_passives));
- let g_cl = pick_min_passive ~use_age:use_age g_passives in
+ if (is_passive_set_empty g_passives) then
+ raise (Stop GaveUp) (* we say we are incomplete *)
+ else
+ let g_cl = pick_min_passive ~use_age:use_age g_passives in
(true,g_cl,passives,remove_passive_clause g_passives g_cl)
end
else let cl = pick_min_passive ~use_age:use_age passives in
actives passives g_actives g_passives
=
let iterno = iterno + 1 in
- if iterno = max_steps then
- raise (Failure ("No iterations left !",bag,maxvar,iterno));
+ if iterno = max_steps then raise (Stop (Timeout (maxvar,bag)));
(* timeout check: gettimeofday called only if timeout set *)
if timeout <> None &&
(match timeout with
();
x::acc,i+1)
([],0) g_actives);
- raise (Failure (("Last chance: failed over " ^
- string_of_int maxgoals^ " goal " ^
- string_of_float (Unix.gettimeofday())),bag,maxvar,0));
+ raise (Stop (Timeout (maxvar,bag)))
end
else if false then (* activates last chance strategy *)
begin
given_clause ~noinfer:true bag maxvar iterno max_steps
(Some (Unix.gettimeofday () +. 20.))
actives passives g_actives g_passives;
- raise (Failure ("Timeout !",bag,maxvar,iterno))
+ raise (Stop (Timeout (maxvar,bag)));
end
- else raise (Failure ("Timeout !",bag,maxvar,iterno));
+ else raise (Stop (Timeout (maxvar,bag)));
let use_age = iterno mod 5 = 0 in
List.iter (fun x ->
prerr_endline (Pp.pp_unit_clause (fst(Terms.M.find x bag)))) l;
*)
- [ bag, i, l ]
- | Failure (msg,_bag,_maxvar,iterno) ->
- prerr_endline msg;
- prerr_endline (Printf.sprintf "FAILURE in %d iterations" iterno);
- []
+ Unsatisfiable [ bag, i, l ]
+ | Stop (Unsatisfiable _) -> Error "stop bug solution found!"
+ | Stop o -> o
;;
end
module Paramod ( B : Terms.Blob ) :
sig
+ type szsontology =
+ | Unsatisfiable of (B.t Terms.bag * int * int list) list
+ | GaveUp
+ | Error of string
+ | Timeout of int * B.t Terms.bag
type bag = B.t Terms.bag * int
val mk_passive : bag -> B.input * B.input -> bag * B.t Terms.unit_clause
val mk_goal : bag -> B.input * B.input -> bag * B.t Terms.unit_clause
?timeout:float ->
bag ->
g_passives:B.t Terms.unit_clause list ->
- passives:B.t Terms.unit_clause list ->
- (B.t Terms.bag * int * int list) list
+ passives:B.t Terms.unit_clause list -> szsontology
end