mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-09 20:55:39 -05:00
fix: allow conflicts below decision level in Make_cdcl_t
This commit is contained in:
parent
88550716d8
commit
407a7e83f7
1 changed files with 8 additions and 1 deletions
|
|
@ -8,6 +8,10 @@ module type PLUGIN = sig
|
||||||
val mcsat : bool
|
val mcsat : bool
|
||||||
(** Is this a mcsat plugin? *)
|
(** Is this a mcsat plugin? *)
|
||||||
|
|
||||||
|
val has_theory : bool
|
||||||
|
(** Is this a CDCL(T) plugin or mcsat plugin?
|
||||||
|
i.e does it have theories *)
|
||||||
|
|
||||||
include Solver_intf.PLUGIN_MCSAT
|
include Solver_intf.PLUGIN_MCSAT
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1366,7 +1370,7 @@ module Make(Plugin : PLUGIN)
|
||||||
assert (decision_level st > 0);
|
assert (decision_level st > 0);
|
||||||
Vec.clear to_unmark;
|
Vec.clear to_unmark;
|
||||||
let conflict_level =
|
let conflict_level =
|
||||||
if Plugin.mcsat
|
if Plugin.mcsat || Plugin.has_theory
|
||||||
then Array.fold_left (fun acc p -> max acc p.var.v_level) 0 c_clause.atoms
|
then Array.fold_left (fun acc p -> max acc p.var.v_level) 0 c_clause.atoms
|
||||||
else decision_level st
|
else decision_level st
|
||||||
in
|
in
|
||||||
|
|
@ -2194,6 +2198,7 @@ module Make_cdcl_t(Plugin : Solver_intf.PLUGIN_CDCL_T) =
|
||||||
let eval _ _ = Solver_intf.Unknown
|
let eval _ _ = Solver_intf.Unknown
|
||||||
let assign _ t = t
|
let assign _ t = t
|
||||||
let mcsat = false
|
let mcsat = false
|
||||||
|
let has_theory = true
|
||||||
let iter_assignable _ _ _ = ()
|
let iter_assignable _ _ _ = ()
|
||||||
end)
|
end)
|
||||||
[@@inline][@@specialise]
|
[@@inline][@@specialise]
|
||||||
|
|
@ -2202,6 +2207,7 @@ module Make_mcsat(Plugin : Solver_intf.PLUGIN_MCSAT) =
|
||||||
Make(struct
|
Make(struct
|
||||||
include Plugin
|
include Plugin
|
||||||
let mcsat = true
|
let mcsat = true
|
||||||
|
let has_theory = false
|
||||||
end)
|
end)
|
||||||
[@@inline][@@specialise]
|
[@@inline][@@specialise]
|
||||||
|
|
||||||
|
|
@ -2219,6 +2225,7 @@ module Make_pure_sat(Plugin : Solver_intf.PLUGIN_SAT) =
|
||||||
let eval () _ = Solver_intf.Unknown
|
let eval () _ = Solver_intf.Unknown
|
||||||
let assign () t = t
|
let assign () t = t
|
||||||
let mcsat = false
|
let mcsat = false
|
||||||
|
let has_theory = false
|
||||||
let iter_assignable () _ _ = ()
|
let iter_assignable () _ _ = ()
|
||||||
let mcsat = false
|
let mcsat = false
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue