Recently we implemented a ConditionSet [1] object which abstractly represents a set of elements satisfying a particular condition taken from another set S:
{x|Cond(x) is True for x in S} ConditionSet gives us the ability to represent unevaluated equations and inequalities in forms like `{x|f(x)=0; x in S}` and `{x|f(x)>0; x in S}` but a more powerful thing about ConditionSet is that it allows us to write the intermediate steps as set to set transformation. Some of the transformations are: Composition: `{x|f(g(x))=0;x in S} => {x|g(x)=y; x in S,y in {z|f(z)=0; z in S}}` Polynomial Solver: `{x|P(x)=0;x in S} => {x_1,x_2, ... ,x_n}.intersection(S)` where `x_i` are roots of P(x) Invert solver: `{x|f(x)=0;x in S} => {g(0)| all g such that f(g(x)) = x}` logcombine: `{x| log(f(x)) + log(g(x));x in S}` => `{x| log(f(x)*g(x)); x in S}` if f(x) > 0 and g(x) > 0 => `{x| log(f(x)) + log(g(x));x in S}` otherwise product solve: {x|f(x)*g(x)=0; x in S} => `{x|f(x)=0; x in S} U {x|g(x)=0; x in S}` given f(x) and g(x) are bounded => {x|f(x)*g(x)=0; x in S} Since the output type is same as input type any composition of these transformations is also a valid transformation. And our aim is to find the right sequence of compositions (given the atoms) which transforms the given condition set to a set which is not a condition set i.e., FiniteSet, Interval, Set of Integers and their Union, Intersection, Complement or ImageSet [2]. We can assign a cost function to each set, such that, more desirable that form of set is to us, the less the value of cost function. This way our problem is now reduced to finding the path from the initial ConditionSet to of the lowest valued set on a graph where the atomic transformations forms the edges. I'm hoping this is a well-studied problem and someone on this mailing list can redirect us to existing literature. Another good thing about this method is that we will be able to log and output the intermediate steps required to reach the final solution. These step-by-step solutions should be helpful in teaching and also to verify the final solution is correct or not. Please lets us know what do think about this new proposed method. [1]: https://github.com/sympy/sympy/pull/9696 [2]: ImageSet is abstract class in SymPy to represent sets like {f(x)| x in S} -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CADN8iupEK7g1HwwOGR6-M9uwPduJjLWc7N5uYuj-ubbQorTv%2Bg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.