Commit 1853b71b authored by Simon Prucker's avatar Simon Prucker
Browse files

Trying two modules for onestep and tableau reasoner, with shared types

parent 53cd2d0f
Pipeline #13685 waiting for manual action with stages
...@@ -682,7 +682,7 @@ let obind o f = match o with ...@@ -682,7 +682,7 @@ let obind o f = match o with
let getExpandingFunctionProducer func = oval (obind (List.assoc_opt func implementationLookup) getTableau) (fun _ -> raise (CoAlgFormula.CoAlgException ("one-step tableau based satisfiability is not implemented for " ^ string_of_functor func))) let getExpandingFunctionProducer func = oval (obind (List.assoc_opt func implementationLookup) getTableau) (fun _ -> raise (CoAlgFormula.CoAlgException ("one-step tableau based satisfiability is not implemented for " ^ string_of_functor func)))
let oneStepSatisfiability func = oval (obind (List.assoc_opt func implementationLookup) getOneStepFun) (fun _ -> raise (CoAlgFormula.CoAlgException ("one-step function based satisfiability is not implemented for " ^ string_of_functor func))) let oneStepSatisfiability func = print_endline "\nonestep\n" ;oval (obind (List.assoc_opt func implementationLookup) getOneStepFun) (fun _ -> raise (CoAlgFormula.CoAlgException ("one-step function based satisfiability is not implemented for " ^ string_of_functor func)))
end end
......
...@@ -312,6 +312,8 @@ let bsetMem bs lf = S.memBS bs lf ...@@ -312,6 +312,8 @@ let bsetMem bs lf = S.memBS bs lf
let bsetRem bs lf = S.remBS bs lf let bsetRem bs lf = S.remBS bs lf
let bsetCompare bs1 bs2 = S.compareBS bs1 bs2 let bsetCompare bs1 bs2 = S.compareBS bs1 bs2
let bsetMakeRealEmpty () = S.makeEmptyBS () let bsetMakeRealEmpty () = S.makeEmptyBS ()
let bsetSingleton lf = let bsetSingleton lf =
let res = bsetMakeRealEmpty () in let res = bsetMakeRealEmpty () in
bsetAdd res lf; bsetAdd res lf;
...@@ -373,6 +375,10 @@ let bsetIsSubset (a: bset) (b: bset) : bool = ...@@ -373,6 +375,10 @@ let bsetIsSubset (a: bset) (b: bset) : bool =
let csetCompare cs1 cs2 = S.compareBS cs1 cs2 let csetCompare cs1 cs2 = S.compareBS cs1 cs2
let csetMake () = S.makeBS () let csetMake () = S.makeBS ()
let csetAdd cs lf = S.addBSNoChk cs lf let csetAdd cs lf = S.addBSNoChk cs lf
......
...@@ -8,7 +8,7 @@ open FocusTracking ...@@ -8,7 +8,7 @@ open FocusTracking
module M = Minisat_cool module M = Minisat_cool
module CU = CoolUtils module CU = CoolUtils
module PG = Paritygame module PG = Paritygame
module C = CoAlgFormula module R_com = CoAlgReasoner_common
type sortTable = CoAlgMisc.sortTable type sortTable = CoAlgMisc.sortTable
...@@ -23,20 +23,14 @@ exception ReasonerError of string ...@@ -23,20 +23,14 @@ exception ReasonerError of string
module type S = sig module type S = sig
module G : CoolGraph.S module G : CoolGraph.S
type propagation_rate = G.propagation_rate = Once | Adaptive | Fixed of int
type game_solver = PGSolver of PG.global_solver
| PGSolverLocal of Paritygame.partial_solver
| Cool
val isSat : ?verbose:bool -> ?onestep:bool val isSat : ?verbose:bool -> CoAlgMisc.fragment_spec -> R_com.game_solver
-> CoAlgMisc.fragment_spec -> game_solver -> R_com.propagation_rate -> sortTable
-> propagation_rate -> sortTable
-> (string -> CoAlgFormula.sort option) -> -> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list -> CoAlgFormula.sortedFormula -> bool CoAlgFormula.sortedFormula list -> CoAlgFormula.sortedFormula -> bool
val initReasoner : ?onestep:bool val initReasoner : CoAlgMisc.fragment_spec -> R_com.game_solver -> R_com.propagation_rate
-> CoAlgMisc.fragment_spec -> game_solver -> propagation_rate
-> sortTable -> (string -> CoAlgFormula.sort option) -> -> sortTable -> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list CoAlgFormula.sortedFormula list
-> CoAlgFormula.sortedFormula -> unit -> CoAlgFormula.sortedFormula -> unit
...@@ -75,7 +69,7 @@ module HashSet = struct ...@@ -75,7 +69,7 @@ module HashSet = struct
Hashtbl.iter f_intern set Hashtbl.iter f_intern set
end end
let propagateSatMu ?(onestep = false) () = let propagateSatMu () =
let maxPrio = graphMaxPriority () in let maxPrio = graphMaxPriority () in
let setStates = setEmptyState () in let setStates = setEmptyState () in
...@@ -127,8 +121,7 @@ end ...@@ -127,8 +121,7 @@ end
(* All rule applications need to still be potentially won by Eloise for a (* All rule applications need to still be potentially won by Eloise for a
* State to be a valid startingpoint for this fixpoint. * State to be a valid startingpoint for this fixpoint.
*) *)
(*Copied function from the master for tableaux*) let onestepFunctionState resultStates (state : state) =
let onestepFunctionState_master resultStates (state : state) =
let ruleiter (_dependencies, corelist) : bool = let ruleiter (_dependencies, corelist) : bool =
List.exists (fun (core : core) -> coreGetStatus core == Sat || List.exists (fun (core : core) -> coreGetStatus core == Sat ||
(setMemCore (Array.get setsFPVarsCores (T.priority (stateGetFocus state)) ) core)) corelist (setMemCore (Array.get setsFPVarsCores (T.priority (stateGetFocus state)) ) core)) corelist
...@@ -136,29 +129,11 @@ end ...@@ -136,29 +129,11 @@ end
if (List.for_all ruleiter (stateGetRules state)) then begin if (List.for_all ruleiter (stateGetRules state)) then begin
setAddState resultStates state setAddState resultStates state
end end
in
let onestepFunctionState_onestep resultStates (state : state) =
let stateSort = stateGetSort state in
let stateLabel = stateGetBs state in
let statePriority = T.priority (stateGetFocus state) in
let x_i = Array.get setsFPVarsCores statePriority in
let usableCores = List.filter (fun core -> ((setMemCore x_i core) || (coreGetStatus core = Sat))) (stateGetChildren state) in
let usableCoreLabels = CU.TList.safe_map coreGetBs usableCores in
let (func, _) = !sortTable.(stateSort) in
if (Logics.oneStepSatisfiability func usableCoreLabels (stateSort, stateLabel)) then begin
setAddState resultStates state
end
in
let onestepFunctionState =
if onestep (*somehow access onestep flag from options*)
then onestepFunctionState_onestep
else onestepFunctionState_master
in
(* There needs to be a State still potentially Sat for this core (* There needs to be a State still potentially Sat for this core
* to be considered for the fixpoint. * to be considered for the fixpoint.
*) *)
in
let onestepFunctionCore resultCores (core : core) = let onestepFunctionCore resultCores (core : core) =
if (List.exists (fun (state : state) -> stateGetStatus state == Sat || if (List.exists (fun (state : state) -> stateGetStatus state == Sat ||
(setMemState (Array.get setsFPVarsStates (T.priority (coreGetFocus core))) state))) (coreGetChildren core) (setMemState (Array.get setsFPVarsStates (T.priority (coreGetFocus core))) state))) (coreGetChildren core)
...@@ -363,7 +338,7 @@ let rec propagateUnsat = function ...@@ -363,7 +338,7 @@ let rec propagateUnsat = function
in in
propagateUnsat tl1 propagateUnsat tl1
let propagateUnsatMu ?(onestep = false) () = let propagateUnsatMu () =
let maxPrio = graphMaxPriority () in let maxPrio = graphMaxPriority () in
(* Partition set of nodes according to their priorities (* Partition set of nodes according to their priorities
...@@ -409,33 +384,15 @@ let rec propagateUnsat = function ...@@ -409,33 +384,15 @@ let rec propagateUnsat = function
let setsFPVarsCores = initializeFPCores (maxPrio+1) in let setsFPVarsCores = initializeFPCores (maxPrio+1) in
let resetLevel = ref 0 in let resetLevel = ref 0 in
if (maxPrio mod 2 == 0) then resetLevel := maxPrio + 1 else resetLevel := maxPrio; if (maxPrio mod 2 == 0) then resetLevel := maxPrio + 1 else resetLevel := maxPrio;
(*Copied function from the master for tableaux*) let onestepFunctionState resultStates (state : state) =
let onestepFunctionState_master resultStates (state : state) = let ruleiter (_dependencies, corelist) : bool =
let ruleiter (_dependencies, corelist) : bool = List.for_all (fun (core : core) -> (coreGetStatus core <> Sat) && ( (coreGetStatus core == Unsat) ||
List.for_all (fun (core : core) -> (coreGetStatus core <> Sat) && ( (coreGetStatus core == Unsat) || (setMemCore (Array.get setsFPVarsCores (T.priority (stateGetFocus state)) ) core) )) corelist
(setMemCore (Array.get setsFPVarsCores (T.priority (stateGetFocus state)) ) core) )) corelist in
in if (List.exists ruleiter (stateGetRules state)) then begin
if (List.exists ruleiter (stateGetRules state)) then begin
setAddState resultStates state
end
in
let onestepFunctionState_onestep resultStates (state : state) =
let stateSort = stateGetSort state in
let stateLabel = stateGetBs state in
let statePriority = T.priority (stateGetFocus state) in
let x_i = Array.get setsFPVarsCores statePriority in
let usableCores = List.filter (fun core -> (not (setMemCore x_i core)) && (coreGetStatus core <> Unsat)) (stateGetChildren state) in
let usableCoreLabels = CU.TList.safe_map coreGetBs usableCores in
let (func, _) = !sortTable.(stateSort) in
if (not (Logics.oneStepSatisfiability func usableCoreLabels (stateSort, stateLabel))) then begin
setAddState resultStates state setAddState resultStates state
end end
in in
let onestepFunctionState =
if onestep (*access onestep flag from options*)
then onestepFunctionState_onestep
else onestepFunctionState_master
in
let onestepFunctionCore resultCores (core : core) = let onestepFunctionCore resultCores (core : core) =
if (List.for_all (fun (state : state) -> (stateGetStatus state <> Sat) && ((stateGetStatus state == Unsat) || if (List.for_all (fun (state : state) -> (stateGetStatus state <> Sat) && ((stateGetStatus state == Unsat) ||
(setMemState (Array.get setsFPVarsStates (T.priority (coreGetFocus core))) state)))) (coreGetChildren core) (setMemState (Array.get setsFPVarsStates (T.priority (coreGetFocus core))) state)))) (coreGetChildren core)
...@@ -985,7 +942,7 @@ let insertCore sort bs focus = ...@@ -985,7 +942,7 @@ let insertCore sort bs focus =
* *
* @return true if all new cores are already unsatisfiable, false otherwise * @return true if all new cores are already unsatisfiable, false otherwise
*) *)
let insertRule state dep chldrn = let insertRule state dep chldrn =
let chldrn = listFromLazylist chldrn in let chldrn = listFromLazylist chldrn in
let mkCores (sort, bs, defer) = let mkCores (sort, bs, defer) =
let bs1 = bsetAddTBox sort bs in let bs1 = bsetAddTBox sort bs in
...@@ -1039,34 +996,6 @@ let expandState state = ...@@ -1039,34 +996,6 @@ let expandState state =
| NoMoreElements -> | NoMoreElements ->
setSatOrOpen () setSatOrOpen ()
let getModalFormulaList state =
let filteredList = CoAlgMisc.bsetFilter (stateGetBs state) (fun lf -> CoAlgMisc.lfIsModality (stateGetSort state) lf) in
filteredList
let expandStateOneStep state =
let sort = stateGetSort state in
let old_focus = stateGetFocus state in
let createCore subset =
let transient_focus = T.make_transient old_focus in
let extractAndTrack formula =
let new_formula = lfGetDest1 sort formula in
T.track sort formula new_formula old_focus transient_focus;
new_formula in
let core_bset = bsetMap extractAndTrack subset in
let core = insertCore sort (bsetAddTBox sort core_bset) (T.finalize transient_focus) in
stateAddChild state core;
coreAddParent core state sort in
let formulaList = getModalFormulaList state in
let powerset = CoAlgMisc.bsetNonEmptyPowersets formulaList in (* empty cores are always sat and hence excluded *)
List.iter createCore powerset;
stateSetStatus state Open
let expandStateWrapper state =
expandStateOneStep state
let expandCnstr cset = let expandCnstr cset =
let nht = nhtInit () in let nht = nhtInit () in
let mkCores f = let mkCores f =
...@@ -1102,16 +1031,16 @@ let expandCnstr cset = ...@@ -1102,16 +1031,16 @@ let expandCnstr cset =
(* The Main Loop *) (* The Main Loop *)
(*****************************************************************************) (*****************************************************************************)
let propagateMu ?(_onestep=false) () = propagateSatMu ~onestep:_onestep (); propagateUnsatMu ~onestep:_onestep () let propagateMu () = propagateSatMu (); propagateUnsatMu ()
(* Solver to use. Will be set by initReasoner. *) (* Solver to use. Will be set by initReasoner. *)
let solver = ref (propagateMu ~_onestep: false) let solver = ref propagateMu
let expandNodesLoop (recursiveAction: unit -> unit) = let expandNodesLoop (recursiveAction: unit -> unit) =
match queueGetElement () with match queueGetElement () with
| QState state -> | QState state ->
if stateGetStatus state = Expandable then begin if stateGetStatus state = Expandable then begin
expandStateWrapper state; expandState state;
if doSatPropagation () then begin !solver () end; if doSatPropagation () then begin !solver () end;
end else (); end else ();
recursiveAction () recursiveAction ()
...@@ -1143,7 +1072,7 @@ type game_solver = PGSolver of PG.global_solver ...@@ -1143,7 +1072,7 @@ type game_solver = PGSolver of PG.global_solver
| PGSolverLocal of Paritygame.partial_solver | PGSolverLocal of Paritygame.partial_solver
| Cool | Cool
let initReasoner ?(onestep=false) fragSpec game_solver propagation_rate sorts nomTable tbox sf = let initReasoner fragSpec game_solver propagation_rate sorts nomTable tbox sf =
sortTable := Array.copy sorts; sortTable := Array.copy sorts;
let (_tbox1, _sf1, bs) = ppFormulae fragSpec nomTable tbox sf in let (_tbox1, _sf1, bs) = ppFormulae fragSpec nomTable tbox sf in
let sort = fst sf in let sort = fst sf in
...@@ -1151,7 +1080,7 @@ let initReasoner ?(onestep=false) fragSpec game_solver propagation_rate sorts no ...@@ -1151,7 +1080,7 @@ let initReasoner ?(onestep=false) fragSpec game_solver propagation_rate sorts no
let focus = T.init sort bs in let focus = T.init sort bs in
begin begin
match game_solver with match game_solver with
| Cool -> solver := propagateMu ~_onestep: onestep | Cool -> solver := propagateMu
| PGSolver algo -> solver := fun () -> solveGameWithPGsolver algo | PGSolver algo -> solver := fun () -> solveGameWithPGsolver algo
| PGSolverLocal algo -> solver := fun () -> solveGameWithPGsolverLocal algo | PGSolverLocal algo -> solver := fun () -> solveGameWithPGsolverLocal algo
end; end;
...@@ -1190,9 +1119,9 @@ type propagation_rate = G.propagation_rate = Once | Adaptive | Fixed of int ...@@ -1190,9 +1119,9 @@ type propagation_rate = G.propagation_rate = Once | Adaptive | Fixed of int
@return True if sf is satisfiable wrt tbox, false otherwise. @return True if sf is satisfiable wrt tbox, false otherwise.
*) *)
let isSat ?(verbose = false) ?(onestep = false)fragSpec game_solver propagation_rate sorts nomTable tbox sf = let isSat ?(verbose = false) fragSpec game_solver propagation_rate sorts nomTable tbox sf =
let start = if verbose then Unix.gettimeofday () else 0. in let start = if verbose then Unix.gettimeofday () else 0. in
initReasoner ~onestep: onestep fragSpec game_solver propagation_rate sorts nomTable tbox sf; initReasoner fragSpec game_solver propagation_rate sorts nomTable tbox sf;
let sat = let sat =
try try
buildGraphLoop (); buildGraphLoop ();
......
...@@ -14,28 +14,27 @@ type input = sortTable * nomTable * assumptions * CoAlgFormula.sortedFormula ...@@ -14,28 +14,27 @@ type input = sortTable * nomTable * assumptions * CoAlgFormula.sortedFormula
exception ReasonerError of string exception ReasonerError of string
module R_com = CoAlgReasoner_common
module type S = sig module type S = sig
module G : CoolGraph.S module G : CoolGraph.S
(** Specifies when cool propagates sat/unsat information. *) (** Specifies when cool propagates sat/unsat information. *)
type propagation_rate = G.propagation_rate = (*type propagation_rate = G.propagation_rate =
| Once (** Propagate only when the tableaux is fully expanded *) | Once (** Propagate only when the tableaux is fully expanded *)
| Adaptive (** Automatic mode based on the number of open states *) | Adaptive (** Automatic mode based on the number of open states *)
| Fixed of int (** Propagate after this many expansion steps *) | Fixed of int (** Propagate after this many expansion steps *)
type game_solver = PGSolver of Paritygame.global_solver type game_solver = PGSolver of Paritygame.global_solver
| PGSolverLocal of Paritygame.partial_solver | PGSolverLocal of Paritygame.partial_solver
| Cool | Cool*)
val isSat : ?verbose:bool -> ?onestep:bool val isSat : ?verbose:bool -> CoAlgMisc.fragment_spec -> R_com.game_solver
-> CoAlgMisc.fragment_spec -> game_solver -> R_com.propagation_rate -> sortTable
-> propagation_rate -> sortTable
-> (string -> CoAlgFormula.sort option) -> -> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list -> CoAlgFormula.sortedFormula -> bool CoAlgFormula.sortedFormula list -> CoAlgFormula.sortedFormula -> bool
val initReasoner : ?onestep:bool val initReasoner : CoAlgMisc.fragment_spec -> R_com.game_solver -> R_com.propagation_rate
-> CoAlgMisc.fragment_spec -> game_solver -> propagation_rate
-> sortTable -> (string -> CoAlgFormula.sort option) -> -> sortTable -> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list CoAlgFormula.sortedFormula list
-> CoAlgFormula.sortedFormula -> unit -> CoAlgFormula.sortedFormula -> unit
......
This diff is collapsed.
(** A graph-tableau-based decision procedure framework for coalgebraic logics.
@author Florian Widmann
*)
open FocusTracking
type sortTable = (CoAlgMisc.functors * int list) array
type nomTable = string -> CoAlgFormula.sort option
type assumptions = CoAlgFormula.sortedFormula list
type input = sortTable * nomTable * assumptions * CoAlgFormula.sortedFormula
exception ReasonerError of string
module type S = sig
module G : CoolGraph.S
(** Specifies when cool propagates sat/unsat information. *)
type propagation_rate = G.propagation_rate =
| Once (** Propagate only when the tableaux is fully expanded *)
| Adaptive (** Automatic mode based on the number of open states *)
| Fixed of int (** Propagate after this many expansion steps *)
type game_solver = PGSolver of Paritygame.global_solver
| PGSolverLocal of Paritygame.partial_solver
| Cool
val isSat : ?verbose:bool -> ?onestep:bool
-> CoAlgMisc.fragment_spec -> game_solver
-> propagation_rate -> sortTable
-> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list -> CoAlgFormula.sortedFormula -> bool
val initReasoner : ?onestep:bool
-> CoAlgMisc.fragment_spec -> game_solver -> propagation_rate
-> sortTable -> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list
-> CoAlgFormula.sortedFormula -> unit
(** Run a single step of the reasoner. That is: Expand one node and perform sat
propagation.
This is used in the debugger.
*)
val runReasonerStep : unit -> unit
val reasonerFinished : unit -> bool
val isRootSat : unit -> bool option
end
module Make (T : FocusTracker) : S
(* vim: set et sw=2 sts=2 ts=8 : *)
module PG = Paritygame
(*module type S = sig
module G : CoolGraph.S*)
type game_solver = PGSolver of PG.global_solver
| PGSolverLocal of Paritygame.partial_solver
| Cool
(*Hier noch G.propagation_rate einfügen, siehe git*)
type propagation_rate (*= G.propagation_rate*) = Once | Adaptive | Fixed of int
This diff is collapsed.
(** A graph-tableau-based decision procedure framework for coalgebraic logics.
@author Florian Widmann
*)
open FocusTracking
type sortTable = (CoAlgMisc.functors * int list) array
type nomTable = string -> CoAlgFormula.sort option
type assumptions = CoAlgFormula.sortedFormula list
type input = sortTable * nomTable * assumptions * CoAlgFormula.sortedFormula
exception ReasonerError of string
module R_com = CoAlgReasoner_common
module type S = sig
module G : CoolGraph.S
(** Specifies when cool propagates sat/unsat information. *)
(* type propagation_rate = G.propagation_rate =
| Once (** Propagate only when the tableaux is fully expanded *)
| Adaptive (** Automatic mode based on the number of open states *)
| Fixed of int (** Propagate after this many expansion steps *)
type game_solver = PGSolver of Paritygame.global_solver
| PGSolverLocal of Paritygame.partial_solver
| Cool
*)
val isSat : ?verbose:bool -> CoAlgMisc.fragment_spec -> R_com.game_solver
-> R_com.propagation_rate -> sortTable
-> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list -> CoAlgFormula.sortedFormula -> bool
val initReasoner : CoAlgMisc.fragment_spec -> R_com.game_solver -> R_com.propagation_rate
-> sortTable -> (string -> CoAlgFormula.sort option) ->
CoAlgFormula.sortedFormula list
-> CoAlgFormula.sortedFormula -> unit
(** Run a single step of the reasoner. That is: Expand one node and perform sat
propagation.
This is used in the debugger.
*)
val runReasonerStep : unit -> unit
val reasonerFinished : unit -> bool
val isRootSat : unit -> bool option
end
module Make (T : FocusTracker) : S
(* vim: set et sw=2 sts=2 ts=8 : *)
...@@ -129,14 +129,14 @@ let ctl_fast_testcases = ...@@ -129,14 +129,14 @@ let ctl_fast_testcases =
use_functor "KD" nop CTL.fastTests use_functor "KD" nop CTL.fastTests
let testcases = let testcases =
[ "DL98" >::: dl98_testcases [ (*"DL98" >::: dl98_testcases;*)
; "CTL" >::: ctl_fast_testcases "CTL" >::: ctl_fast_testcases
; "K" >::: k_testcases ; "K" >::: k_testcases
; "KD" >::: kd_testcases ; "KD" >::: kd_testcases
; "K*K" >::: kAndK_testcases ; "K*K" >::: kAndK_testcases
; "K*KD" >::: kAndKd_testcases ; "K*KD" >::: kAndKd_testcases
; "K+KD" >::: kOrKd_testcases ; "K+KD" >::: kOrKd_testcases
; "Nominals" >::: nominal_testcases (*;"Nominals" >::: nominal_testcases*)
; "CL" >::: cl_testcases ; "CL" >::: cl_testcases
; "CL" >::: cl_testcases_2agents ; "CL" >::: cl_testcases_2agents
; "PML" >::: pml_testcases (* PML is currently disabled. See CoAlgLogics.ml *) ; "PML" >::: pml_testcases (* PML is currently disabled. See CoAlgLogics.ml *)
......
...@@ -10,6 +10,8 @@ module CM = CoAlgMisc ...@@ -10,6 +10,8 @@ module CM = CoAlgMisc
module CF = CoAlgFormula module CF = CoAlgFormula
module EA = EAFormula module EA = EAFormula
module Reasoner = CoAlgReasoner.Make(FocusTracking.PartialPermutationTracker) module Reasoner = CoAlgReasoner.Make(FocusTracking.PartialPermutationTracker)
module O_Reasoner = CoAlgReasoner_onestep.Make(FocusTracking.PartialPermutationTracker)
module R_com = CoAlgReasoner_common
module NF = Nom2fix module NF = Nom2fix
module FE = FunctorParsing module FE = FunctorParsing
...@@ -30,16 +32,16 @@ let _ = Gc.set { (Gc.get()) with Gc.minor_heap_size = 4194304; major_heap_increm ...@@ -30,16 +32,16 @@ let _ = Gc.set { (Gc.get()) with Gc.minor_heap_size = 4194304; major_heap_increm
type options = type options =
{ verbose : bool { verbose : bool
; fragment : CM.fragment_spec ; fragment : CM.fragment_spec
; prop_rate : Reasoner.propagation_rate ; prop_rate : R_com.propagation_rate
; game_solver : Reasoner.game_solver ; game_solver : R_com.game_solver
; onestep : bool ; onestep : bool
} }
let defaultOpts = let defaultOpts =
{ verbose = false { verbose = false
; fragment = CM.Auto ; fragment = CM.Auto
; prop_rate = Reasoner.Adaptive ; prop_rate = R_com.Adaptive
; game_solver = Reasoner.Cool ; game_solver = R_com.Cool
; onestep = false ; onestep = false
} }
...@@ -90,9 +92,9 @@ let options = ...@@ -90,9 +92,9 @@ let options =
^ " INTEGER: Propagate after this many expansion steps" ^ " INTEGER: Propagate after this many expansion steps"
; Args.argument = ; Args.argument =
let parse_prop_rate s = match s with let parse_prop_rate s = match s with
| "once" -> Reasoner.Once | "once" -> R_com.Once