From b36e57bcf10aed57d5ec8dfcc3069895e4c74ceb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorsten=20Wi=C3=9Fmann?= <uni@thorsten-wissmann.de>
Date: Tue, 15 Jul 2014 21:33:59 +0200
Subject: [PATCH] Remove Disjunctive ruleEnumerations

Propagation of satisfiability and unsatisfiability does not cover
disjunctions and I don't get how propagation works, so I won't touch it
yet. So this reverts the only partially implemented Disjunctive
ruleEnumerations,
---
 src/lib/CoAlgLogics.ml   | 23 +++++++++++------------
 src/lib/CoAlgMisc.ml     |  2 +-
 src/lib/CoAlgMisc.mli    |  4 ++--
 src/lib/CoAlgReasoner.ml | 29 ++++++++++-------------------
 4 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/src/lib/CoAlgLogics.ml b/src/lib/CoAlgLogics.ml
index 1b89a2b..d1e3785 100644
--- a/src/lib/CoAlgLogics.ml
+++ b/src/lib/CoAlgLogics.ml
@@ -63,11 +63,11 @@ let mkRule_MultiModalK sort bs sl : stateExpander =
   let rules = mkRuleList_MultiModalK sort bs sl in
   let res = ref (Some rules) in
   fun () ->
-    Conjunctive (match !res with
+    match !res with
     | None -> NoMoreRules
     | Some rules ->
         res := None;
-        AllInOne rules)
+        AllInOne rules
 
 (* TODO: test it with:
      make && ./coalg sat <<< $'<R> False \n [R] False \n [R] True'
@@ -131,12 +131,11 @@ let mkRule_MultiModalKD sort bs sl : stateExpander =
   (* TODO: replace cannonical wrapper by helper function *)
   let res = ref (Some rules) in
   fun () ->
-    Conjunctive (match !res with
+    match !res with
     | None -> NoMoreRules
     | Some rules ->
         res := None;
         AllInOne rules
-    )
 
 
 (* CoalitionLogic: helper functions *)
@@ -264,11 +263,11 @@ let mkRule_CL sort bs sl : stateExpander =
   (* standard return procedure *)
   let res = ref (Some rules) in
   fun () ->
-    Conjunctive (match !res with
+    match !res with
     | None -> NoMoreRules
     | Some rules ->
         res := None;
-        AllInOne rules)
+        AllInOne rules
 
 let mkRule_GML sort bs sl : stateExpander =
   assert (List.length sl = 1);
@@ -317,11 +316,11 @@ let mkRule_GML sort bs sl : stateExpander =
   (* standard return procedure *)
   let res = ref (Some rules) in
   fun () ->
-    Conjunctive (match !res with
+    match !res with
     | None -> NoMoreRules
     | Some rules ->
         res := None;
-        AllInOne rules)
+        AllInOne rules
 
 let mkRule_Choice sort bs sl : stateExpander =
   assert (List.length sl = 2);
@@ -352,11 +351,11 @@ let mkRule_Choice sort bs sl : stateExpander =
   let s2 = List.nth sl 1 in
   let res = ref (Some [(dep, [(s1, bs1); (s2, bs2)])]) in
   fun () ->
-    Conjunctive (match !res with
+    match !res with
     | None -> NoMoreRules
     | Some rules ->
         res := None;
-        AllInOne rules)
+        AllInOne rules
 
 
 let mkRule_Fusion sort bs sl : stateExpander =
@@ -387,11 +386,11 @@ let mkRule_Fusion sort bs sl : stateExpander =
   let s2 = List.nth sl 1 in
   let res = ref (Some [(dep 0, [(s1, bs1)]); (dep 1, [(s2, bs2)])]) in
   fun () ->
-    Conjunctive (match !res with
+    match !res with
     | None -> NoMoreRules
     | Some rules ->
         res := None;
-        AllInOne rules)
+        AllInOne rules
 
 
 (* Maps a logic represented by the type "functors" to the corresponding
diff --git a/src/lib/CoAlgMisc.ml b/src/lib/CoAlgMisc.ml
index 995698d..4cb56c6 100644
--- a/src/lib/CoAlgMisc.ml
+++ b/src/lib/CoAlgMisc.ml
@@ -124,7 +124,7 @@ and setCnstr = unit GHt.t
 and 'a junction = | Disjunctive of 'a (*specifies that any of the 'a needs to be satifsfied *)
                   | Conjunctive of 'a (*specifies that all of the 'a need  to be satifsfied *)
 
-and stateExpander = unit -> ruleEnumeration junction
+and stateExpander = unit -> ruleEnumeration
 
 and sort = C.sort
 
diff --git a/src/lib/CoAlgMisc.mli b/src/lib/CoAlgMisc.mli
index 15fdb34..c21a8a1 100644
--- a/src/lib/CoAlgMisc.mli
+++ b/src/lib/CoAlgMisc.mli
@@ -62,7 +62,7 @@ type setCnstr
 and 'a junction = | Disjunctive of 'a (*specifies that any of the 'a needs to be satifsfied *)
                   | Conjunctive of 'a (*specifies that all of the 'a need  to be satifsfied *)
 
-and stateExpander = unit -> ruleEnumeration junction
+and stateExpander = unit -> ruleEnumeration
 
 and sort = CoAlgFormula.sort
 
@@ -192,7 +192,7 @@ val stateGetRules : state -> (dependencies * core list) list
 val stateAddRule : state -> dependencies -> core list -> int
 val stateGetConstraints : state -> csetSet
 val stateSetConstraints : state -> csetSet -> unit
-val stateNextRule : state -> ruleEnumeration junction
+val stateNextRule : state -> ruleEnumeration
 
 
 (*****************************************************************************)
diff --git a/src/lib/CoAlgReasoner.ml b/src/lib/CoAlgReasoner.ml
index fb11c4f..ffc28c2 100644
--- a/src/lib/CoAlgReasoner.ml
+++ b/src/lib/CoAlgReasoner.ml
@@ -582,8 +582,7 @@ let insertCore sort bs =
         Some false -> surely unsat
         None -> Not known yet
     *)
-let insertRule state dep (chldrn: (sort * bset) list junction) : bool option =
-  let (chldrn, junc) = junctionExtract chldrn in
+let insertRule state dep (chldrn: (sort * bset) list) : bool option =
   let insert (sort, bs) = (* checks if the given child node has some sat-state *)
     let bs1 = bsetAddTBox sort bs in
     insertCore sort bs1
@@ -598,7 +597,7 @@ let insertRule state dep (chldrn: (sort * bset) list junction) : bool option =
                               | Expandable  -> None (* unknown state *)
                               | Open        -> None (* unknown state *)
     in
-    junctionEvalBoolOption (junc (List.map child2satState children))
+    junctionEvalBoolOption (Conjunctive (List.map child2satState children))
   in
   (* find out satisfiability *)
   let idx = stateAddRule state dep (List.rev children) in
@@ -617,30 +616,22 @@ let insertRule state dep (chldrn: (sort * bset) list junction) : bool option =
         Some false -> surely unsat
         None -> Not known yet
     *)
-let rec insertAllRules state : rule list junction -> bool option = function
-  | Conjunctive [] -> Some true
-  | Disjunctive [] -> Some false
-  | Conjunctive ((dep, chldrn)::tl) ->
-      let satState = insertRule state dep (Conjunctive chldrn) in
+let rec insertAllRules state : rule list -> bool option = function
+  | [] -> Some true
+  | ((dep, chldrn)::tl) ->
+      let satState = insertRule state dep chldrn in
       if satState <> Some false (* if notUnsat*)
-        then insertAllRules state (Conjunctive tl)
+        then insertAllRules state tl
         else Some false
-  | Disjunctive ((dep, chldrn)::tl) ->
-      let satState = insertRule state dep (Disjunctive chldrn) in
-      if satState <> Some true (* if not Sat *)
-        then insertAllRules state (Disjunctive tl)
-        else Some true
 
 let expandState state =
-  let (rules, _) = junctionExtract (stateNextRule state) in
+  let rules = stateNextRule state in
   match rules with
   | AllInOne rules ->
-      let (_, junction) = junctionExtract (stateNextRule state) in
-      let satState = insertAllRules state (junction rules) in
+      let satState = insertAllRules state rules in
       if satState <> Some false (* i.e. if not Unsat *) then stateSetStatus state Open
   | NextRule (dep, chldrn) ->
-      let (_, junction) = junctionExtract (stateNextRule state) in
-      let satState = insertRule state dep (junction chldrn) in
+      let satState = insertRule state dep chldrn in
       if satState <> Some false (* if notUnsat *) then queueInsertState state else ()
   | NoMoreRules -> stateSetStatus state Open
 
-- 
GitLab