I am developing a model checker that relies on the incremental sat solving. Clauses need to pushed and popped frequently. Minisat supports assumptions using unit clauses. Is there a way to allow general clauses to be used as a part of an assumption?
When an assumption consists of unit clauses, is there a way to extract an unsat core to identify which unit clauses in the assumptions are included in the unsat core? From a model checking paper in FMCAD 2011, the authors suggested they modified the minisat for that purpose. Can anyone shed some light on how to do it?
Thanks,
Hao
I am not sure if my two questions have been answered before, but any pointers would be highly appreciated.I am developing a model checker that relies on the incremental sat solving. Clauses need to pushed and popped frequently. Minisat supports assumptions using unit clauses. Is there a way to allow general clauses to be used as a part of an assumption?
When an assumption consists of unit clauses, is there a way to extract an unsat core to identify which unit clauses in the assumptions are included in the unsat core?
Thanks a lot for the reply. For the method using activation variables, I am curious if the dead clauses in the sat solver due to the activation variables would affect the performance of solving?
Thanks,
H
On Wed, Mar 6, 2013 at 11:58 AM, Mate Soos <soos...@gmail.com> wrote:
On 03/06/2013 12:54 AM, Hao Zheng wrote:
> Thanks a lot for the reply. For the method using activation variables, I am curious if the dead clauses in the sat solver due to the activation variables would affect the performance of solving?In short: yes, very much. So try to use as few activation variables as
possible: remember that one activation variable can activate more than
one clause, so you can activate groups of clauses. If it's slow you may
try to run more than one instance, and set (not assume) the variables.
It sounds like doing the same job multiple times but after a while the
overhead is so large that it's actually faster.I believe there was a
presentation last year at SAT'12 about too many assumptions slowing down
the solver too much. Flexibility costs.
Sorry for contradicting you Mate, but if the question is whether dead clauses hurt performance I'd say no. They are garbage collected periodically and shouldn't be too much in the way.
Hi all,
On 03/06/2013 03:15 PM, Niklas Sörensson wrote:
On Wed, Mar 6, 2013 at 11:58 AM, Mate Soos <soos...@gmail.com> wrote:
On 03/06/2013 12:54 AM, Hao Zheng wrote:
> Thanks a lot for the reply. For the method using activation variables, I am curious if the dead clauses in the sat solver due to the activation variables would affect the performance of solving?In short: yes, very much. So try to use as few activation variables as
possible: remember that one activation variable can activate more than
one clause, so you can activate groups of clauses. If it's slow you may
try to run more than one instance, and set (not assume) the variables.
It sounds like doing the same job multiple times but after a while the
overhead is so large that it's actually faster.I believe there was a
presentation last year at SAT'12 about too many assumptions slowing down
the solver too much. Flexibility costs.
Sorry for contradicting you Mate, but if the question is whether dead clauses hurt performance I'd say no. They are garbage collected periodically and shouldn't be too much in the way.
I am a bit confused, I guess it's a misunderstanding of the question. As I understood it, it was about adding clauses such as:
x1000 V (actual clause)
x1001 V (actual clause)
....
where "actual clause"-s never contain variables >x999 and x1000, x1001.. are activation variables, used to activate or deactivate a clause by giving them as assumptions. If used extensively, as far as I can see, this would hit performance: e.g. no binary irredundant (="non-learnt") clauses in DB. So probably I am misunderstanding something, and I am curious what :) Can you please clarify?
Thanks in advance,
Mate
PS: As for using up index-space, that can be alleviated by renumbering variables. It's not that painful to do and gives significant speedup -- it's one of the few "hip" things I implemented that I don't regret :)
PS: As for using up index-space, that can be alleviated by renumbering variables. It's not that painful to do and gives significant speedup -- it's one of the few "hip" things I implemented that I don't regret :)
Yes, that's rather nice for reusing eliminated/assigned indices that occurs during preprocessing, but it doesn't really solve the index space issue entirely unless you also add something to the API to let the user "free" a variable. I mean, with renumbering you essentially have user-level indices, and internal indices. The internal indices can be kept compact, but the user-level indices still can be dominated by dead variables. That's what my simple change was designed to address. Renumbering is something I might add too. You're saying that it gives a noticeable speed-up?
Thanks very much for the discussions. They clarified my confusions a lot. Just to confirm, if temporary clauses are permanently disabled by activation variables, the solving performance will be impacted marginally. On the other hand, if clauses exist in the entire life span of a solving process, but are activated from time to time, then a large number of these clauses could hurt the solving performance. Please correct me if my understanding is not right.
Thanks,
H
Thanks,
H
--
---
You received this message because you are subscribed to the Google Groups "MiniSat" group.
To unsubscribe from this group and stop receiving emails from it, send an email to minisat+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.