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.
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.
--
Adding a 'deep' parameter to pl_true seems a better idea. We wouldn't want to break backwards compatibility for users who may have written code assuming the former input/output combos of pl_true. But yes, the modification you suggest to pl_true does seem a good idea to me.
About the idea of using a Semantic Tableau, we should probably stick to using a traditional SAT solver for the logic module (Since users looking to use a SAT solver usually need it to return a model, or atleast expect it to). However, what we _can_ do is use the tableau method for the Assumptions system (maybe) - or anywhere else in the core, where a model is not essential.
@asmeurer, do you think we should implement that?
@Soumya, you could probably run a few tests and check out the timing results. But before that, you may want to get your current pipeline-PRs merged. I guess there are 2-3 of them?
--
--
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.
Also, satisfiable is called twice in the assumptions system, once to see if the expression can be true and once to see if it can be false.