diff --git a/CoAlgLogicUtils.ml b/CoAlgLogicUtils.ml index a7995bbf034a1513e8b4013642f8aa17c9872f5b..a9e4604dfe0053f3d66717d1e435ea8b80bf965a 100644 --- a/CoAlgLogicUtils.ml +++ b/CoAlgLogicUtils.ml @@ -80,7 +80,8 @@ let maxDisjoints sort (a: bset) : bset list = let tmpf : bset -> int -> bset = (fun bs f -> bsetAdd bs (lfFromInt f) ; bs) in - List.map (List.fold_left tmpf (bsetMake ())) (List.map S.elements intlist) + List.map (List.fold_left tmpf (bsetMake ())) + (List.map S.elements intlist) diff --git a/CoAlgLogics.ml b/CoAlgLogics.ml index e9629ea11908ce486da2b28e5759fbdfe4eb7b16..0fb82d0fe7c06d959e1ab38ef98b6011fd98c6a3 100644 --- a/CoAlgLogics.ml +++ b/CoAlgLogics.ml @@ -201,7 +201,7 @@ let mkRule_CL sort bs sl = let boxes = bsetFilter bs (fun f -> lfGetType sort f = EnforcesF) in let diamonds = bsetFilter bs (fun f -> lfGetType sort f = AllowsF) in let disjoints = maxDisjoints sort boxes in - let nCands = bsetMake () in (* all N-diamonds *) + 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 @@ -230,7 +230,7 @@ let mkRule_CL sort bs sl = ———————————————————————————————— a_i /\ b /\ c_j *) - let children = bsetMake () in + let children = bsetMakeRealEmpty () in List.iter (bsetAdd children) (b::c_j) ; List.iter (bsetAdd children) (a_i) ; ((fun bs1 -> bs), [(s1, children)])::acc @@ -244,7 +244,7 @@ let mkRule_CL sort bs sl = ———————————— a_i *) - let a_i : bset = bsetMake () in + let a_i : bset = bsetMakeRealEmpty () in bsetIter (fun f -> bsetAdd a_i (lfGetDest1 sort f)) coalitions ; ((fun bs1 -> bs), [(s1, a_i)])::acc in diff --git a/CoAlgMisc.ml b/CoAlgMisc.ml index e6e165b2894d5ed7ee5f8da177c17a5735057dfd..d8a6720cc5a38d9ee574bac256e45e8a1af2b9ec 100644 --- a/CoAlgMisc.ml +++ b/CoAlgMisc.ml @@ -426,11 +426,15 @@ let bsetMake () = S.makeBS () let bsetAdd bs lf = S.addBSNoChk bs lf let bsetMem bs lf = S.memBS bs lf let bsetRem bs lf = S.remBS bs lf +let bsetMakeRealEmpty () = + let res = bsetMake () in + bsetRem res !S.bstrue; (* remove bstrue which is initially in an empty bset *) + res let bsetCopy bs = S.copyBS bs let bsetFold fkt bs init = S.foldBS fkt bs init let bsetIter fkt bset = S.iterBS fkt bset let bsetFilter (a: bset) (f: localFormula -> bool) : bset = - let res = bsetMake () in + let res = bsetMakeRealEmpty () in bsetIter (fun form -> if (f form) then bsetAdd res form else ()) a; res diff --git a/CoAlgMisc.mli b/CoAlgMisc.mli index de8f1c5856171a713945353e1ef986f5987d63bd..a8ecb13f5b9846d29120663db8df2aabade852db 100644 --- a/CoAlgMisc.mli +++ b/CoAlgMisc.mli @@ -245,7 +245,8 @@ val nhtFold : (nominal -> bset -> 'a -> 'a) -> nht -> 'a -> 'a (* local formulae and @-formulae *) (*****************************************************************************) -val bsetMake : unit -> bset +val bsetMake : unit -> bset (* a new bset which only contains True *) +val bsetMakeRealEmpty : unit -> bset (* a new bset without containing True *) val bsetAdd : bset -> localFormula -> unit val bsetMem : bset -> localFormula -> bool val bsetFold : (localFormula -> 'a -> 'a) -> bset -> 'a -> 'a