I should correct my previous e-mail and say that the popularity of *this
kind of rich pattern matching* has been dead since the 90s.


On Thu, Jul 17, 2014 at 7:07 PM, Matthew Rocklin <mrock...@gmail.com> wrote:

> The benefit of pattern matching is that 10000 complex if-then-else
> constructions are hard to write well.  Richard the popularity of pattern
> matching has been pretty much dead since the 90s.  That being said it isn't
> a poor crutch, languages like Maude, Elan, and more recently Stratego/XT
> demonstrate proof of concept pretty well (IMO.)  I would suggest reviewing
> these projects and their associated literature before deprecating it
> further.
>
> Ondrej my understanding is that if you don't care about
> associativity/commutativity then you can do many-patterns-to-one-expression
> matching with a Trie <http://en.wikipedia.org/wiki/Trie>.  If you do care
> about associative/commutative operators (which you probably do) then this
> is harder.  The data structure I've heard tossed around is the
> discrimination net.  I have a paper lying around on the topic that I can
> dig it up if someone is interested (thank you Mendeley.)
>
> Generally speaking this is a doable but difficult computer science
> problem.  Known solutions exist but they're in papers, not in textbooks.  I
> think that this work would be appropriate for a GSoC student over a summer
> or for a clever computer science student over a week or two.  I don't
> personally expect any of the core-devs-with-other-jobs to get around to it
> for a while though of course I'd be thrilled if that were the case.  (Prove
> me wrong Ondrej!)
>
> This is also the sort of thing that would benefit from a performant core.
>  We would write patterns in SymPy and then match them using some C++
> matching system.  This is likely a purely structural operation and so
> shouldn't require any of the Python logic code.  The patterns would
> probably translate well between SymPy and CSymPy.
>
>
> On Thu, Jul 17, 2014 at 6:38 PM, Ondřej Čertík <ondrej.cer...@gmail.com>
> wrote:
>
>> On Thu, Jul 17, 2014 at 7:27 PM, Richard Fateman <fate...@gmail.com>
>> wrote:
>> > Rubi is apparently structured so that at any time at most one rule will
>> be
>> > applicable,
>> > and it should be easy to figure out how to exclude everything else.  I
>> think
>> > that
>> > Albert Rich even expressed the notion that Rubi did not actually need
>> to be
>> > structured as rules..
>> > --- just If/then/else
>>
>> That's a good point --- it is my understanding as well, that the rules
>> are mutually exclusive.
>> So perhaps one doesn't need a general pattern matching for that, just
>> a specialized version,
>> essentially if/then/else, as you said.
>>
>> Ondrej
>>
>> >
>> > The point of the matching/ rule stuff in Macsyma (Maxima) is that
>> > if you are using a pattern to find A and B in
>> > z = A*x+B    with A,B, free of x,  then maybe you should compile the
>> match
>> > into a call to
>> > compute  the simplified polynomial form  of  z as a linear polynomial
>> in x.
>> > Pick off the
>> > coefficients A and B.   test them with whatever you need to do.   e.g.
>> A is
>> > non-zero and
>> > of course free of x by construction.  B is of course free of x as well.
>> > And there is no
>> > higher power of x.    Instead of groveling around looking for terms to
>> > collect under the
>> > name A and B, rearranging stuff and discovering later that you have to
>> > rearrange again
>> > to satisfy predicates attached later...
>> >
>> > If pattern matching is a crutch, and a poor one at that, maybe its use
>> > should be
>> > limited, and its popularity toned down.
>> >
>> > RJF
>> >
>> >
>> > On Thursday, July 17, 2014 5:52:48 PM UTC-7, Ondřej Čertík wrote:
>> >>
>> >> On Thu, Sep 26, 2013 at 6:37 PM, Aaron Meurer <asme...@gmail.com>
>> wrote:
>> >> > My idea was to put assumptions on Wild expressions. I guess using the
>> >> > new assumptions system, the assumptions do not need to be, nor should
>> >> > they be, actually tied to the symbols. This will also make it easy to
>> >> > add assumptions about general expressions, not just Wilds (and make
>> it
>> >> > easier to do the sorts of things Angus was talking about). So
>> >> > something like
>> >> >
>> >> > expr = x + 2
>> >> > a = Wild('a', exclude=[x])
>> >> > expr.match(x + a, assumptions=Q.positive(a))
>> >> >
>> >> > would work, but for
>> >> >
>> >> > expr = x - 2
>> >> >
>> >> > it would not match.
>> >> >
>> >> > One could then specify arbitrary assumptions, and match would refuse
>> >> > to return any result where the assumptions are False. Or you could
>> add
>> >> > a flag to make it even stronger: don't return a result unless the
>> >> > assumptions are True (as opposed to None).
>> >> >
>> >> > This may be far reaching and could be a bad idea, but I think we
>> could
>> >> > then extend the assumptions system to allow "assumptions" like
>> >> > Q.free_of(a, x) to mean that a does not depend on x, or
>> >> > Q.isinstance(a, Mul) to mean that a is a Mul.
>> >> >
>> >> > The new assumptions system is still relatively weak and needs to be
>> >> > integrated into SymPy better, so this would be a lofty goal. But
>> >> > assuming we can unify the system, and get something like
>> >> > https://code.google.com/p/sympy/issues/detail?id=3929, I think this
>> >> > would be a nice way to specify things, much better (and more
>> powerful)
>> >> > than throwing a bunch of lambdas around.
>> >>
>> >>
>> >> So we definitely need to implement Rubi, I created an issue for it
>> >> with motivation + steps to do:
>> >>
>> >> https://github.com/sympy/sympy/issues/7749
>> >>
>> >> a prerequisite and a separate issue is fast pattern matching, that can
>> >> handle ~10,000 rules quickly, which needs to be based
>> >> on a decision tree:
>> >>
>> >> https://github.com/sympy/sympy/issues/7748
>> >>
>> >> I have explained in details how it could work there. So it will
>> >> require to rewrite the pattern matching, but I think most of the
>> >> things from the current one can be reused, essentially one just
>> >> traverses the expression tree just like now, but for all the rules at
>> >> once using a decision tree.
>> >>
>> >> The #7748 is independent of #7749, but I think both issues should be
>> >> solved concurently, as #7749 provides an application for #7748, that
>> >> needs to work well and fast.
>> >>
>> >> Ondrej
>> >
>> > --
>> > 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/7461f206-3ce2-49bb-bb43-a676ccec2091%40googlegroups.com
>> .
>> > For more options, visit https://groups.google.com/d/optout.
>>
>> --
>> 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/CADDwiVB7MshHjeB%3D7O1mYwUZbOORntq-H2LmNRQwXkzDqTiDHQ%40mail.gmail.com
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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/CAJ8oX-FetK73aQ%3D6JWXsj7kpoxW4dgNPsrifE%3DCLZsOt9VhOKw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to