Skip to content
Snippets Groups Projects
Commit 07a36b24 authored by Christoph's avatar Christoph
Browse files

Reorganize code, start from Sat nodes as well

Not only finishing cycles but also plain sat nodes may cause a node to
be satisfiable
parent 67b07e54
No related branches found
No related tags found
No related merge requests found
...@@ -118,12 +118,15 @@ let propagateSatMu () = ...@@ -118,12 +118,15 @@ let propagateSatMu () =
let setFinishingCores = setEmptyCore () in let setFinishingCores = setEmptyCore () in
let setStates = setEmptyState () in let setStates = setEmptyState () in
let setCores = setEmptyCore () in let setCores = setEmptyCore () in
let setSatStates = setEmptyState () in
let setSatCores = setEmptyCore () in
let emptySet = bsetMakeRealEmpty () in let emptySet = bsetMakeRealEmpty () in
let stateCollector state = let stateCollector state =
match stateGetStatus state with match stateGetStatus state with
| Unsat | Unsat -> ()
| Sat -> () | Sat ->
setAddState setSatStates state
| Expandable | Expandable
| Open -> | Open ->
setAddState setStates state; setAddState setStates state;
...@@ -136,8 +139,9 @@ let propagateSatMu () = ...@@ -136,8 +139,9 @@ let propagateSatMu () =
in in
let coreCollector core = let coreCollector core =
match coreGetStatus core with match coreGetStatus core with
| Unsat | Unsat -> ()
| Sat -> () | Sat ->
setAddCore setSatCores core
| Expandable | Expandable
| Open -> | Open ->
setAddCore setCores core; setAddCore setCores core;
...@@ -166,27 +170,6 @@ let propagateSatMu () = ...@@ -166,27 +170,6 @@ let propagateSatMu () =
let rec fixpointstep setStates setCores = let rec fixpointstep setStates setCores =
let allowedStates = setEmptyState () in let allowedStates = setEmptyState () in
let allowedCores = setEmptyCore () in let allowedCores = setEmptyCore () in
let initialStates = setEmptyState () in
let initialCores = setEmptyCore () in
let checkFinishingState (state : state) =
let ruleiter (dependencies, corelist) : bool =
List.for_all (fun (core : core) -> coreGetStatus core == Unsat || coreGetStatus core == Expandable) corelist
in
if not (List.exists ruleiter (stateGetRules state)) then begin
setAddState allowedStates state;
setAddState initialStates state
end
in
let checkFinishingCore (core : core) =
if not (List.for_all (fun (state : state) -> stateGetStatus state == Unsat || stateGetStatus state == Expandable)
(coreGetChildren core)) then begin
setAddCore allowedCores core;
setAddCore initialCores core
end
in
setIterState checkFinishingState setFinishingStates;
setIterCore checkFinishingCore setFinishingCores;
let rec visitParentStates (core : core) : unit = let rec visitParentStates (core : core) : unit =
if not (setMemCore setCores core) then () if not (setMemCore setCores core) then ()
...@@ -222,8 +205,34 @@ let propagateSatMu () = ...@@ -222,8 +205,34 @@ let propagateSatMu () =
end end
in in
setIterState visitParentCores initialStates; (* All rule applications need to still be potentially Sat for a
setIterCore visitParentStates initialCores; * finishing State to be a valid startingpoint for this fixpoint.
*)
let checkFinishingState (state : state) =
let ruleiter (dependencies, corelist) : bool =
List.for_all (fun (core : core) -> coreGetStatus core == Unsat || coreGetStatus core == Expandable) corelist
in
if not (List.exists ruleiter (stateGetRules state)) then begin
setAddState allowedStates state;
visitParentCores state
end
(* There needs to be a State still potentially Sat for this core
* to be considered for the fixpoint
*)
and checkFinishingCore (core : core) =
if not (List.for_all (fun (state : state) -> stateGetStatus state == Unsat || stateGetStatus state == Expandable)
(coreGetChildren core))
then begin
setAddCore allowedCores core;
visitParentStates core
end
in
setIterState checkFinishingState setFinishingStates;
setIterCore checkFinishingCore setFinishingCores;
setIterState visitParentCores setSatStates;
setIterCore visitParentStates setSatCores;
if (setLengthState setStates) = (setLengthState allowedStates) && if (setLengthState setStates) = (setLengthState allowedStates) &&
(setLengthCore setCores) = (setLengthCore allowedCores) (setLengthCore setCores) = (setLengthCore allowedCores)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment