TimDaly wrote:
...
There has been some initial discussions between myself, Albert Rich,
and David Parnas about how to think about this problem.
My current thinking involves a tree-structuring of the rule patterns
where each node in the tree represents one or more pattern
tables and each edge is a function (e.g. division operation, etc).
Walking the input expression walks the tree to find applicable
patterns.
Because a pattern table can be reached from many different paths the
"tree" is actually a graph. Each table specifies an input pattern and
an output pattern and the output pattern points to another node.
...
Tilu would take a rule and place it several places in a tree. As an
overly-simplified example, consider
a*cos(x)+b. It appears to have a head operator of "+" and so that is
where the rule would seem to fit in a tree of rules.
However, if b=0, the head operator is "*", and so the pattern a*cos(x)
--> .. would also appear in the tree at "*".
But if a=1, then the rule would appear with head operator "cos".
As I recall, the head operators are not really in a tree but a hash table.
The entries in the hash table may themselves be hash tables, where the
presence or absence of some sub-operators is allowed, in order to narrow
down the number of possibly-appropriate rules.
Note that one may end up in Tilu with some number of matching rules --
with possibly different sets of side conditions, or maybe not. Tilu does
not exclude the possibility of any number of applicable rules giving
perhaps different versions of the answer.
RJF
_______________________________________________
Axiom-developer mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/axiom-developer