[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Axiom-mail] Failure to simplify trig functions of simple rational m
From: |
Martin Rubey |
Subject: |
Re: [Axiom-mail] Failure to simplify trig functions of simple rational multiples of %pi |
Date: |
Tue, 15 Sep 2009 16:22:49 +0200 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.3 (gnu/linux) |
Dan Hatton <address@hidden> writes:
> knownvaluec2l(someexpression) == subst(someexpression,cos(2*l*%pi) = 1)
> knownvaluec2m(someexpression) == subst(someexpression,cos(2*m*%pi) = 1)
> knownvaluec2n(someexpression) == subst(someexpression,cos(2*n*%pi) = 1)
> knownvalues2l(someexpression) == subst(someexpression,sin(2*l*%pi) = 0)
> knownvalues2m(someexpression) == subst(someexpression,sin(2*m*%pi) = 0)
> knownvalues2n(someexpression) == subst(someexpression,sin(2*n*%pi) = 0)
> knownvaluec1l(someexpression) == subst(someexpression,cos(l*%pi) = (-1)^l)
> knownvaluec1m(someexpression) == subst(someexpression,cos(m*%pi) = (-1)^m)
> knownvaluec1n(someexpression) == subst(someexpression,cos(n*%pi) = (-1)^n)
> knownvalues1l(someexpression) == subst(someexpression,sin(l*%pi) = 0)
> knownvalues1m(someexpression) == subst(someexpression,sin(m*%pi) = 0)
> knownvalues1n(someexpression) == subst(someexpression,sin(n*%pi) = 0)
> knownvals(anexpression) ==
> knownvalues1n(knownvalues1m(knownvalues1l(knownvaluec1n(knownvaluec1m(knownvaluec1l(knownvalues2n(knownvalues2m(knownvalues2l(knownvaluec2n(knownvaluec2m(knownvaluec2l(anexpression))))))))))))
Axiom (FriCAS, OpenAxiom) has quite a powerful pattern matcher. I think
you'll find it in the book or hyperdoc under "rules and pattern
matching".
important note: functions you use in a suchthat clause in a rule (below:
x | assumedInteger? x) must be declared from EXPR INT to Boolean (or
something similar).
(1) -> l: List EXPR INT := [a,b,c]
(1) [a,b,c]
Type: List(Expression(Integer))
(2) -> assumedInteger?(x: EXPR INT): Boolean == member?(x::Symbol, l)
Function declaration assumedInteger? : Expression(Integer) ->
Boolean has been added to workspace.
Type: Void
(3) -> r := rule sin(%pi*(x | assumedInteger? x)) == 0
Compiling function assumedInteger? with type Expression(Integer) ->
Boolean
(3) sin(%pi x) == 0
Type: RewriteRule(Integer,Integer,Expression(Integer))
(4) -> r sin a
(4) sin(a)
Type: Expression(Integer)
(5) -> r sin(%pi*a)
(5) 0
Type:
Expression(Integer)
Martin