I am actually interested in the internal representations and manipulation required to do this sort of thing. I.e. how would one duplicate the internal workings of maxima in python.
Josh On Apr 29, 10:21 pm, Michel <[EMAIL PROTECTED]> wrote: > The way maxima works that from the view point > of the user there are very few automatic simplifications. > There are however a lot of "expression manipulation commands" like > "expand", > "ratsimp", "factor", "trigexpand" etc... > > Some automatic simplifications are 12+14=26, x+x=2*x. > > Internally of course such manipulations are done a lot. Maxima > uses a trick that if a subexpression has been simplified then > a flag is added to that expression so that it is not resimplified > again. > > Also noteworthy is that maxima makes a distinction between > evaluation and simplification. Evaluation replaces > variables by their values. Simplification replaces > an expression by an equivalent one, independently of > variable bindings. > > Somewhat strangely evaluation is not recursive which > sometimes leads to counterintuitive behaviour. > > Michel > > On Apr 30, 6:22 am, Joshua Kantor <[EMAIL PROTECTED]> wrote: > > > Disclaimer: I think this may have more or less been covered in the > > earlier mega-discussion on symbolic computation. Also the whole reason > > we use maxima is to avoid dealing with the problems I'm describing but > > I still > > would like to think about it a bit and am curious if anyone has any > > insight. > > > I have been thinking a lot about symbolic algebra. I was thinking > > about what would be required to do symbolic manipulations without > > using maxima. If we represent symbolic expressions as trees of > > operations and operands > > then it seems what is needed is some sort of ability to define rules > > to transform trees. > > > I will represent trees as lists in lisp notation so [+ a b] is the > > tree > > > a > > / > > / > > + > > \ > > \ > > b > > > Consider a + b +a, this will be stored as [+ a [+ b a]] (or maybe [+ > > [+a b] a] ) > > > Obviously this should become 2*a + b > > > If we could define rules that > > > [+ a b] = [+ b a] > > [+ [+ a b] c] = [+ a [+ b c]] > > [* 1 a] = a > > [+ a [* c a ]] = [* (c+1) c] > > > then we could make this simplification, however even in this simple > > case, I don't really know how one would automatically do this > > simplification. > > > Perhaps one could make a rule that multiplication is simpler than > > addition, squaring is simpler than multiplication, etc and rank the > > expressions by their complexity under this ranking and search for > > simpler expressions, > > i.e. since we would find a way to replace an addition by a > > multiplication, 2*a+b is a simpler expression. > > > We would also need pattern matching capabilities to deal with sub- > > expressions. > > > i.e. we should be able to infer that > > > [+ a [+ b c] ] = [+ [+ b c] a] > > > and matching [+ a [+ b c] ] to an abstract expresion of the form of > > the first rule above. > > > Does anybody know how this works in general. > > > Josh --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/ -~----------~----~----~----~------~----~------~--~---