From edfbcc2b0cd836fc387efc158750842a72fe4d86 Mon Sep 17 00:00:00 2001
From: Christoph Egger <Christoph.Egger@fau.de>
Date: Sat, 14 May 2016 23:48:25 +0200
Subject: [PATCH] Fix deferral tracking for new CoalitionLogic code

---
 src/lib/CoAlgLogics.ml | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/lib/CoAlgLogics.ml b/src/lib/CoAlgLogics.ml
index 71d9318..fd46280 100644
--- a/src/lib/CoAlgLogics.ml
+++ b/src/lib/CoAlgLogics.ml
@@ -410,8 +410,10 @@ let mkRule_CL sort bs defer sl : stateExpander =
         (* create rule 2 once for all the diamonds with a full agent set *)
         let maxdisj = maxDisjoints sort boxes in
         let createSingleRule acc coalitions =
-            let a_i : localFormula list =
-                bsetFold (fun f a -> (lfGetDest1 sort f)::a) coalitions []
+            let a_i : (localFormula * bool) list =
+              bsetFold (fun f a -> let nextf = lfGetDest1 sort f in
+                                   (nextf, (deferral_tracking f nextf))::a)
+                coalitions []
             in
             (* now do rule 2:
                 coalitions  /\ nCands
@@ -419,9 +421,16 @@ let mkRule_CL sort bs defer sl : stateExpander =
                   a_i       /\ c_j
             *)
             let children = bsetMakeRealEmpty () in
-            List.iter (bsetAdd children) (c_j) ;
-            List.iter (bsetAdd children) (a_i) ;
-            ((fun bs1 -> bs), lazylistFromList [(s1, children)])::acc
+            let defer1 = bsetMakeRealEmpty () in
+            List.iter (fun (f, isdefer) ->
+              bsetAdd children f;
+              if isdefer then bsetAdd defer1 f)
+              c_j ;
+            List.iter (fun (f, isdefer) ->
+              bsetAdd children f;
+              if isdefer then bsetAdd defer1 f)
+              a_i ;
+            ((fun bs1 -> bs), lazylistFromList [(s1, children, defer1)])::acc
         in
         List.fold_left createSingleRule acc maxdisj
     end else acc
-- 
GitLab