On Apr 13, 2013, at 2:57 AM, Tom Bachmann <e_mc...@web.de> wrote:

Hi,

I spent the last two days studying in a bit more detail the new assumptions
system. Are we *sure* that it can replace the old one?

I'm asking in particular because the new system does not do any automated
backwards chaining. The new system basically works like this. To compute
ask(is_foo(x), facts), we first call FooHandler.<type(x)>(facts). This can
do specialised reasoning, like x+y>0 provided x>0 and y>0. This specialised
code is also allowed to call ask recursively (e.g. on subexpressions).

If this fails, we forget about the specialised handlers completely, and try
to deduce foo (or not foo) from the facts alone, via a set of logical
inference rules.

That is, in order to have backwards chaining, the handlers have to
implement it by hand! For example, we have the implication
(positive=>nonzero). Cosider the query ask(Q.nonzero(expr)). Suppose there
is a specialised positive handler for expr, but not a nonzero handler. Then
the result will be None.

Note that the problem goes away if we require a full set of handlers to be
implemented for each type. Is this desired? Or should I implement backwards
chaining?



Also, a question about code organisation. In the new assumptions system,
knowledge is expressed in "handlers", distinct from the actual objects.
Instead, the knowledge is grouped by property. E.g. there is an AskPositive
handler, which contains all the knowledge about when objects are positive
(although there can be several such handlers). Does that make sense in
general. For example, in the special functions library, it seems much more
sensible to group knowledge by function instead of property.


There was some discussion of this at
https://github.com/sympy/sympy/pull/1907. I think we should go with a
multiple approach. Some facts work well in the current handler system
(better if we had backwards chaining). We also want to let the user extend
the system with facts on his own objects. And some facts work in neither
way, like the kind discussed in that pull request.

Aaron Meurer


Thanks,
Tom

-- 
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?hl=en-US.
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?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to