diff --git a/CoAlgFormula.ml b/CoAlgFormula.ml index 890e3d92f4bf310d9b0e93613049ed6c3b25f313..4097ef91917eb8e29a125dd1719028d6778d5f7e 100644 --- a/CoAlgFormula.ml +++ b/CoAlgFormula.ml @@ -361,8 +361,11 @@ and parse_rest ts = (n, s) in let rec agentlist es = + let allAgents = CoolUtils.cl_get_agents () in match Stream.next ts with - | A.Int n -> n::(agentlist es) + | A.Int n -> if CoolUtils.TArray.elem n allAgents + then n::(agentlist es) + else A.printError mk_exn ~ts ("agent name \"" ^ (string_of_int n) ^ "\" unknonwn, see --agents: ") | A.Kwd c when c = es -> [] | _ -> A.printError mk_exn ~ts ("agent name or " ^ es ^ "\" expected: ") in diff --git a/CoAlgLogicUtils.ml b/CoAlgLogicUtils.ml index 32c35cd395f77298bbe845b3c6868146bba0235f..8438f63fa934d6a057d19184e9ff6021b33c2f5d 100644 --- a/CoAlgLogicUtils.ml +++ b/CoAlgLogicUtils.ml @@ -3,20 +3,7 @@ open Graph open CoAlgMisc - -module TArray = struct - let any f arr = - let rec g idx = - if idx >= Array.length arr then false - else if f arr.(idx) then true - else g (idx + 1) - in g 0 - let all f arr = not (any (fun x -> not (f x)) arr) - let elem (x: 'a) (arr: 'a array) = - any (fun y -> x == y) arr - let included sub sup = all (fun x -> elem x sup) sub - let to_string ts arr = "[| " ^ (Array.fold_right (fun i str -> (ts i) ^" "^ str) arr "|]") -end +open CoolUtils let disjointAgents sort a b = assert (lfGetType sort a = EnforcesF || lfGetType sort a = AllowsF); diff --git a/CoAlgLogicUtils.mli b/CoAlgLogicUtils.mli index 867064d4529565267ff08a93dd831b111ca0da3c..5fc525bbac2e3903f81bfda6c0b027b0a0c4d535 100644 --- a/CoAlgLogicUtils.mli +++ b/CoAlgLogicUtils.mli @@ -5,14 +5,7 @@ *) open CoAlgMisc - -module TArray : sig - val all : ('a -> bool) -> 'a array -> bool - val any : ('a -> bool) -> 'a array -> bool - val elem : 'a -> 'a array -> bool - val included : 'a array -> 'a array -> bool - val to_string : ('a -> string) -> 'a array -> string -end +open CoolUtils val disjointAgents : sort -> localFormula -> localFormula -> bool diff --git a/CoAlgLogics.ml b/CoAlgLogics.ml index b599064c19ea586ade630f898c1e9b73abde6a2f..029747ae27ab716c267cb25181f0aea1b5f18d4f 100644 --- a/CoAlgLogics.ml +++ b/CoAlgLogics.ml @@ -4,6 +4,7 @@ open CoAlgMisc +open CoolUtils open CoAlgLogicUtils (* open Gmlmip *) @@ -194,10 +195,6 @@ let compatible sort (a: bset) formula1 = /\ n /\ m all C_i ⊆ D / \i=1 a_i /\ b / \j=1 c_j *) -let agents = ref ([|1;2;3;4;5;6;7;8;9;10|]) - -let cl_get_agents () = !agents -let cl_set_agents arr = ignore (agents := arr) let mkRule_CL sort bs sl = assert (List.length sl = 1); (* TODO: Why? *) @@ -208,7 +205,7 @@ let mkRule_CL sort bs sl = let nCands = bsetMakeRealEmpty () in (* all N-diamonds *) let hasFullAgentList formula = let aglist = lfGetDestAg sort formula in - let value = TArray.all (fun x -> TArray.elem x aglist) !agents in + let value = TArray.all (fun x -> TArray.elem x aglist) (cl_get_agents ()) in if (value) then bsetAdd nCands formula else () ; value in diff --git a/CoAlgLogics.mli b/CoAlgLogics.mli index 5cc4b28d1e32cd9bc33811527418484ed8d5c473..48d0958b68bceec89898bf9788866dea0e7084bc 100644 --- a/CoAlgLogics.mli +++ b/CoAlgLogics.mli @@ -6,7 +6,4 @@ open CoAlgMisc -val cl_get_agents : unit -> int array -val cl_set_agents : int array -> unit - val getExpandingFunctionProducer : functors -> sort -> bset -> sort list -> stateExpander diff --git a/CoolUtils.ml b/CoolUtils.ml new file mode 100644 index 0000000000000000000000000000000000000000..bcd50436c7fa9dbb42074062312a87441a0d69b1 --- /dev/null +++ b/CoolUtils.ml @@ -0,0 +1,20 @@ + +module TArray = struct + let any f arr = + let rec g idx = + if idx >= Array.length arr then false + else if f arr.(idx) then true + else g (idx + 1) + in g 0 + let all f arr = not (any (fun x -> not (f x)) arr) + let elem (x: 'a) (arr: 'a array) = + any (fun y -> x == y) arr + let included sub sup = all (fun x -> elem x sup) sub + let to_string ts arr = "[| " ^ (Array.fold_right (fun i str -> (ts i) ^" "^ str) arr "|]") +end + +let agents = ref ([|1;2;3;4;5;6;7;8;9;10|]) + +let cl_get_agents () = !agents +let cl_set_agents arr = ignore (agents := arr) + diff --git a/CoolUtils.mli b/CoolUtils.mli new file mode 100644 index 0000000000000000000000000000000000000000..bc2dfe9c234d09b44c13d24b4b2cd2edd34bac3e --- /dev/null +++ b/CoolUtils.mli @@ -0,0 +1,14 @@ + +(* Some basic utilities as they are known from haskell prelude and so on... *) + +module TArray : sig + val all : ('a -> bool) -> 'a array -> bool + val any : ('a -> bool) -> 'a array -> bool + val elem : 'a -> 'a array -> bool + val included : 'a array -> 'a array -> bool + val to_string : ('a -> string) -> 'a array -> string +end + +val cl_get_agents : unit -> int array +val cl_set_agents : int array -> unit + diff --git a/Makefile b/Makefile index e3b3c6373098f4765a1c29e827491c769ace43f8..cc064a32bd632e1fca5e8d986af5c612c05d6540 100644 --- a/Makefile +++ b/Makefile @@ -101,6 +101,7 @@ gmlmip.cmxa: gmlmip.cmx gmlmip_stub.o $(GMLOBJS) # Object files... sorted topologically by their dependency... COALG_OBJS := minisat$(SUFFIXLIB) \ + CoolUtils$(SUFFIX) \ genAndComp$(SUFFIX) MiscSolver$(SUFFIX) altGenlex$(SUFFIX) HashConsing$(SUFFIX) \ ALCFormula$(SUFFIX) ALCMisc$(SUFFIX) ALCGraph$(SUFFIX) \ CoAlgFormula$(SUFFIX) \ diff --git a/coalg.ml b/coalg.ml index 93933ed80c59198647ff5724adcf28a0ba991a85..c36f0e32bade7df02028679552211a380ff3bae7 100644 --- a/coalg.ml +++ b/coalg.ml @@ -117,7 +117,7 @@ let rec parseFlags arr offs : unit = | "--agents" -> let strAglist = getParam () in let aglist = List.map int_of_string (Str.split (Str.regexp ",") strAglist) in - CoAlgLogics.cl_set_agents (Array.of_list aglist) + CoolUtils.cl_set_agents (Array.of_list aglist) | _ -> raise (CoAlgFormula.CoAlgException ("Unknown flag »" ^ (arr.(!offs)) ^ "«")) ) ; parseFlags arr (!offs + 1)