Agree with Christian. However, we would need a very good heuristic to 
calculate how 'far' a formula is from CNF or DNF. Frankly, if the number of 
variables is small, I don't think any method would be that bad - like for 
even 6-7 variables, the number of models would be at max  64-128 - a decent 
number to iterate over directly.
But as Aaron suggests, maybe we don't want to add too much of complexity? 
In that direction, I do think we should deprecate dpll1. dpll2, with clause 
learning involved, is certainly better.

On Friday, January 31, 2014 12:37:09 PM UTC+5:30, Christian Muise wrote:
>
>   If the formulae are small, then the approach there is just fine. If the 
> formulae is huge but the number of variables small, then just enumerating 
> the models should be done. If neither of those cases hold, then the best 
> you could hope for is to try and detect "how far" the input is from either 
> CNF or DNF (note -- a way to predict one could be used to predict the 
> other). With that in hand, you can do the following:
> - if easy to convert to DNF, do so (at least partially) until at least one 
> term is produced
> - else if easy to convert to CNF, do so and run the SAT procedure
> - else convert to CNF with tseitin and run the SAT procedure
>
>   Cheers,
>    Christian*
>
> *: Can be considered a pseudo-expert on the subject, as I've done graduate 
> work in the area and had a hand in implementing the current DPLL solver in 
> sympy.
>
>
> On Fri, Jan 31, 2014 at 12:04 PM, Aaron Meurer <asme...@gmail.com<javascript:>
> > wrote:
>
>> I would time the various ways. Unless someone really understands the
>> theory of DPLL well to know what will and won't be fast, I think this
>> is the only way we can know what tricks to use when.
>>
>> In general, though, if something is only faster for very small inputs,
>> it's not really worth doing, because it's already not slow the way it
>> is. It only serves to add unnecessary complexity.
>>
>> By the way, a good GSoC idea for someone would be to set up a good
>> benchmarking system for us. We are good at avoiding behavioral
>> regressions with testing and Travis, but performance regressions are
>> tougher to guard against, because we don't check it very often.
>>
>> Aaron Meurer
>>
>> On Thu, Jan 30, 2014 at 7:29 AM, Sachin Joglekar
>> <srjogl...@gmail.com <javascript:>> wrote:
>> > This may seem like an ad-hoc way of doing things, but can we think of 
>> using
>> > DNF for satisfiability of formulae with small number of atoms? Since DNF
>> > generally causes an extremely dangerous explosion in the size of an
>> > expression, its use to check satisfiability is usually frowned upon by 
>> the
>> > logic community. However, checking the SAT of a DNF is trivial. 
>> Therefore,
>> > since _we_ can check for the number of atoms used in a given 
>> expression, can
>> > we just use the DNF method when the number of atoms falls below a 
>> certain
>> > threshold (say 5 or 6)?
>> > @asmeurer, what do you think?
>> >
>> >
>> > On Wed, Jan 29, 2014 at 4:41 PM, Soumya Biswas 
>> > <sdb...@gmail.com<javascript:>> 
>> wrote:
>> >>
>> >> It seems somehow I had missed this conversation (on the issues page). 
>> It
>> >> is definitely true that this transformation adds many auxiliary 
>> variables
>> >> (as many as the number of non-atomic clauses). However what I am 
>> working on
>> >> is to optimize this encoding to such an extent that the encoding plus
>> >> satisfiability time is reduced overall. Firstly (as observed on the 
>> issues
>> >> thread) handling duplicate subexpressions optimizes the process to some
>> >> extent. Additionally, I worked out a way (I don't know if it is an 
>> obvious
>> >> generalization or something new) such that And(a, b, c, ...) can be 
>> treated
>> >> as only one operator (though the number of clauses this encoding will
>> >> produce will still increase linearly with the number of arguments). 
>> This is
>> >> what makes the method much faster for cases where the average number of
>> >> arguments to And/Or is around 3 (or more). I find the point made in the
>> >> issues page to be quite interesting that many of the encodings are 
>> quite
>> >> redundant. Will look into optimization from this approach. There is yet
>> >> another polarity based optimization, that I am yet to look into. I 
>> think we
>> >> will have to look at encoding plus solving as the unit of comparison 
>> i.e. is
>> >> the entire process faster or slower.
>> >>
>> >> --
>> >> You received this message because you are subscribed to a topic in the
>> >> Google Groups "sympy" group.
>> >> To unsubscribe from this topic, visit
>> >> https://groups.google.com/d/topic/sympy/wknFPGmTw0w/unsubscribe.
>> >> To unsubscribe from this group and all its topics, send an email to
>> >> sympy+un...@googlegroups.com <javascript:>.
>> >>
>> >> To post to this group, send email to sy...@googlegroups.com<javascript:>
>> .
>> >> Visit this group at http://groups.google.com/group/sympy.
>> >> For more options, visit https://groups.google.com/groups/opt_out.
>> >
>> >
>> > --
>> > You received this message because you are subscribed to the Google 
>> Groups
>> > "sympy" group.
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> an
>> > email to sympy+un...@googlegroups.com <javascript:>.
>> > To post to this group, send email to sy...@googlegroups.com<javascript:>
>> .
>> > Visit this group at http://groups.google.com/group/sympy.
>> > For more options, visit https://groups.google.com/groups/opt_out.
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "sympy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sympy+un...@googlegroups.com <javascript:>.
>> To post to this group, send email to sy...@googlegroups.com <javascript:>
>> .
>> Visit this group at http://groups.google.com/group/sympy.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to