Sindbad~EG File Manager
/* M. Beeson, for Mathpert
last modified 1.23.98 before version 1.624
last modified 6.17.04
*/
/* Note, optable.rh is prepared from this file by makerh.exe.
There must be no multi-line comments in the definition of
optable: if there are, put comment symbols on each line.
Otherwise, makerh can't cope. It ignores the part of the file
before and after optable, however.
*/
/*___________________________________________________________________*/
/* optable is the table that gives the names of the (actual code for the)
operators on the menus. It must match the array menutext in mtext.c.
It is referred to in model.c too so don't change its declaration, but
it's ok to add more items */
#define AUTOMODE_DLL
#include <stdlib.h>
#include "globals.h"
#include "mtext.h" /* for MAXMENUS */
#include "ops.h" /* prototypes of MATHPERT operators */
#include "trig.h"
#include "calc.h"
#include "series.h"
#include "operator.h" /* automode_only */
actualop testop = arithmetic; //DEBUG
/* According to Jeff Richter, this should have a different value than
testop2 a few lines below which has automatic rather than static
storage class. But, it gets the same value, the large one,
while 'arithmetic' in its home dll, algebra.dll, gets a small value.
*/
actualop optable[MAXMENUS][16] =
{
{ /* numerical_calculation */
arithmetic, /* arithmetic */
devalop, /* decimal calculation */
computeroot, /* calculate decimal � or �� */
computepower, /* decimal value of x� */
computefunction, /* decimal value of function */
factorinteger, /* factor integer */
evalatpoint, /* evaluate numerically at a point */
evalpi, /* decimal value of pi */
evaleulere, /* decimal value of e */
evalfunction, /* compute function value */
factornumerically /* factor polynomial numerically */
},
{ /* numerical_calculation2 */
decimaltofraction, /* convert decimal to fraction */
writenumberassquare, /* express as square */
writenumberascube, /* express as cube */
writenumberaspower, /* express as ?-th power */
writenumberaspowerof,/* express as power of ? */
writeintegeraspower, /* write integer as a^n */
writeassum /* x = ? + (x-?) */
},
{ /* complex_arithmetic */
defnofi, /* i� = -1 */
powersofi0, /* i^(4n) = 1 */
powersofi1, /* i^(4n+1) = i; */
powersofi2, /* i^(4n+2) = -1 */
powersofi3, /* i^(4n+3) = -i; */
weakcomplexarithmetic, /* complex arithmetic, not powers */
complexpowers, /* power of complex number */
complexarithmetic, /* complex arithmetic and powers */
cevalop, /* complex decimal arithmetic */
factorinteger, /* integer factors of integer */
complexfactorsofinteger, /* complex factors of integer */
factorcomplexinteger, /* factor n+mi (n not zero) */
computeroot, /* calculate decimal � or �� */
computepower, /* decimal value of x� */
computefunction, /* decimal value of function */
evalatpoint /* evaluate numerically at a point */
},
{ /* simplify_sums */
doubleminus, /* cancel double minus -(-a)=a */
pushminusin, /* push minus in -(a+b) = -a-b */
pullminusout, /* -a-b = -(a+b) */
arithmetic, /* arithmetic */
regroupterms, /* regroup terms */
orderterms, /* put terms in order */
dropzero, /* drop zero terms x+0 = x */
additivecancel, /* cancel � terms */
collectterms, /* collect � terms (once) */
collectall, /* collect all � terms in a sum */
additivecommute, /* a+b = b+a */
pullminusout2, /* a(b-c) = -a(c-b) */
minusintoproduct1, /*-ab = a(-b) */
minusintoproduct2, /* -abc = ab(-c) */
minusintoproduct3 /* a(-b)c = ab(-c) */
},
{ /* simplify_products */
multbyzero, /* x�0 = 0 */
multbyone, /* x�1 = x */
bringminusout, /* a(-b) = -ab */
bringminusout2, /* a(-b-c) = -a(b+c) */
bringminusout3, /* (-a-b)c = -(a+b)c */
regroupfactors, /* regroup factors */
collectnumbers, /* collect numbers */
orderfactors, /* order factors */
collectpowers, /* collect powers */
distriblaw, /* a(b+c)=ab+ac */
difofsquares, /* (a-b)(a+b) = a�-b� */
squareofsum, /* (a + b)� = a� + 2ab + b� */
squareofdif, /* (a - b)� = a� - 2ab + b� */
makedifofcubes, /* (a-b)(a�+ab+b�)=a^3-b^3 */
makesumofcubes, /* (a+b)(a�-ab+b�)=a^3+b^3 */
multcommute /* ab = ba */
},
{ /* expand_menu */
multiplyout, /* multiply out product of sums */
expandnumerator, /* multiply out numerator */
expanddenominator, /* multiply out denominator */
multdef /* na = (a+...+a) */
},
{ /* fractions */
zeronum, /* 0/a = 0 */
unitdenom, /* a/1 = a */
recip, /* a(1/a) = 1 */
multiplyfractions, /* (a/b)(c/d) = ac/(bd); don't multiply out (3/5) x if (ringflag & RATRING) */
multiplyfractions2, /* a(b/c) = ab/c ; do also multiply out (3/5) x; used only in menu mode */
cancelop, /* ab/ac = b/c */
addfractions, /* a/c � b/c=(a�b)/c */
apart, /* (a � b)/c = a/c � b/c */
apartandcancel, /* (ac+b)/c = a+b/c */
polydivop,
cancelbypolydiv,
pulloutrational, /* au/bv=(a/b)(u/v) (integers a,b) */
pulloutdenom, /* a/b = (1/b) a */
pulloutreal, /* au/b = (a/b) u (real numbers a,b) */
breakfraction, /* ab/cd = (a/c)(b/d) */
breakfraction2 /* ab/c = (a/c)b */
},
{ /* signed_fractions */
cancelminusinquotient, /* (-a)/(-b) = a/b */
minusintonum, /* -(a/b) = (-a)/b */
minusintodenom, /* -(a/b) = a/(-b) */
minusoutfromnum, /* (-a)/b = -a/b */
minusoutfromdenom, /* a/(-b) = -a/b */
minusoutfromnum2, /* (-a-b)/c = -(a+b)/c */
minusoutfromdenom2, /* a/(-b-c) = -a/(b+c) */
minusoutfromdenom3, /* a/(b-c) = -a/(c-b) */
minusoutfromdenom22, /* -a/(-b-c) = a/(b+c) */
minusoutfromdenom33, /* -a/(b-c) = a/(c-b) */
minusoutfromnum22, /* -(-a-b)/c = (a+b)/c */
negatenumdenom, /* (a-b)/(c-d) = (b-a)/(d-c) */
breakfraction1 /* ab/c = a(b/c) */
},
{ /* compound_fractions */
compoundfractions1, /* (a/c)/(b/c) = a/b */
invertandmultiply, /* a/(b/c)=ac/b */
invertandmultiply2, /* 1/(a/b) = b/a */
compoundfractions2, /* (a/b)/c = a/(bc) */
compoundfractions3, /* a/b = a(1/b) ; only for menu mode */
compoundfractions4, /* (a/b)c/d = ac/bd */
factordenominator,
commondenominfraction /* commondenom in num or denom */
},
{ /* common_denominators */
factordenominator,
findcommondenom,
findcommondenom2,
multiplyfractions,
multiplyfractions,
orderfactors,
addfractions,
commondenom,
commondenom2,
commondenomandsimp,
commondenomandsimp2,
multnumanddenom
},
{ /* exponents */
zeroexponent, /* a^0 = 1 (a not zero) */
unitexponent, /* a^1 = a */
zerobase, /* 0^b = 0 if b > 0 */
unitbase, /* 1^b = 1 */
intpowerofminusone, /* (-1)� = �1 (n even or odd) */
powertopower, /* (a^b)^c = a^(bc) if a>0 or c�Z */
minustopower, /* (-a)� = (-1)�a� */
quotienttopower, /* (a/b)� = a�/b� */
producttopower, /* (ab)� = a�b� */
squareofsum, /* (a+b)� = a�+2ab+b� */
plainbinomialtheorem, /* expand by binomial theorem */
collectpowers, /* a^(b+c) =(a^b)(a^c) */
reversecollectpowers, /* a^(b+c) = a^b a^c */
poweroutoffraction, /* a�/b� = (a/b)� */
powerstonum, /* a^n/a^m = a^(n-m) */
powerstodenom /* ab^n/b^m = a/b^(m-n) */
},
{ /* expand_powers */
expandsquare, /* a^2 = aa */
expandcube, /* a^3 = aaa */
expandpower, /* a^n = aaa...(n times) */
breakpower, /* a^n = a^?a^(n-?) */
squareofsum, /* (a � b)� = a� � 2ab + b� */
cubeofsum, /* (a + b)^3 = a^3 + 3a^2b + 3ab^2 + b^3 */
cubeofdif, /* (a - b)^3 = a^3 - 3a^2b + 3ab^2 - b^3 */
reversepowertopower1, /* a^(bc) = (a^b)^c if a>0 or c�Z */
reversepowertopower2, /* a^(bc) = (a^c)^b if a>0 or c�Z */
reversepowertopower3, /* a^(b?) = (a^b)^? (available with products of 3 or more terms in the exponent) */
poweroutofrecip /* 1/a^n = (1/a)^n */
},
{ /* negative_exponents */
eliminateconstnegexp, /* a^(-n) = 1/a� (n constant) */
eliminateconstnegexpnum, /* a^(-n)/b = 1/(a�b) (n constant) */
eliminatenegexp1, /* a^-1 = 1/a */
eliminatenegexp, /* a^(-n) = 1/a� */
eliminatenegexpnum, /* a^(-n)/b = 1/(a�b) */
eliminatenegexpdenom, /* a/b^(-n) = ab� */
introducenegexp, /* a/b� = ab^(-n) */
introducenegexp1, /* a/b = ab^(-1) */
negexpofquotient, /* "(a/b)^(-n) = (b/a)�" */
powerstonum, /* a^n/a^m = a^(n-m) */
powerstodenom, /* ab^n/b^m = a/b^(m-n) */
reversecollectpowers2 /* a^(b-c) = a^b/a^c */
},
{ /* square_roots */
productofsqrts, /* �x�y = �(xy) */
sqrtofproduct, /* �(xy) = �x�y */
sqrtsimp, /* �(x�y) = x�y */
sqrtofsquare, /* �(x�)=x if x�0 */
sqrttoabs, /* �(x�)= |x| or �(x��)=|x|� */
factorundersqrt, /* factor integer x in �x */
sqrtofquotient, /* �(x/y) = �x/�y */
sqrtofquotient2, /* �(x/y) = �|x|/�|y| */
quotientofsqrts, /* �x/�y = �(x/y) */
cancelsqrt, /* x/�x = �x */
cancelsqrt2, /* �x/x = 1/�x */
powerofsqrt, /* (�x)�� = x� if x�0 */
powerofsqrt2, /* (�x)^(2n+1) = x��x */
evaltorational,
computesqrt,
weakarithmetic
},
{ /* advanced_square_roots */
cancelsqrtgcd, /* show common factor in �u/�v */
factorpolyundersqrt, /* factor polynomial under � */
rationalizedenom, /* rationalize denominator */
rationalizenum, /* rationalize numerator */
sqrttoabs, /* �(x�)= |x| or �(x��)=|x|� */
cancelsqrt3, /* cancel �: �(xy)/�y = �x */
multiplyoutundersqrt, /* multiply out under � */
lauringson, /* a�-b = (a-�b)(a+�b) */
roottosqrt, /* root(2,x) = sqrt(x) */
sqrttoroot, /* sqrt(x) = root(2n,x^n) */
sqrttoroot2, /* sqrt(x) = root(2n,x)^n */
sqrtofpower, /* �(x��) = x� */
sqrtofpower2, /* �(x^(2n+1)) = x��x */
pushundersqrt, /* a�b = �(a�b) if a�0 */
ratdenomandsimp /* rationalize denom and simplify */
},
{ /* fractional_exponents */
exponenttosqrt, /* a ^ � = �a */
exponenttosqrt, /* a^(n/2) = �(a�) */
exponenttoroot, /* a^(b/n) = ��(a^b) */
sqrtexp, /* �a = a ^ � */
rootexp, /* ��a = a^(1/n) */
rootpowerexp, /* ��(a^m) = a^(m/n) */
powerrootexp, /* (��a)^m = a^(m/n) */
powersqrtexp, /* (�a)^m = a^(m/2) */
sqrtexpdenom, /* 1/�a = a^(-�) */
rootexpdenom, /* 1/��a = a^(-1/n) */
powerofminusone, /* evaluate (-1)^(p/q) */
factorbase, /* factor integer a in a^(p/q) */
fractexpdenom, /* a/b^(p/q) = (a^q/b^p)^(1/q) */
fractexpnum, /* a^(p/q)/b = (a^p/b^q)^1/q) */
arithmetic
},
{ /*nth_roots */
productofroots, /* ��x��y = ��(xy) */
rootofproduct, /* ��(xy) = ��x ��y" */
rootofpower5, /* ��x^m = (��x)^m" */
rootsimp, /* ��(x�y) = x ��y or |x|��y */
rootofpower, /* ��(x�) = x if x�0 or n odd */
rootofpower3, /* ��(x^(nm)) = x^m if x�0 or n odd */
rootofpower2, /* ���(x�) = �x */
rootofpower4, /* root(mn,a�) = root(m,a) */
powerofroot, /* (��x)� = x */
powerofroot2, /* (��a)^m = ��(a^m)) */
powerofroot3, /* (��a)^(qn+r) = a^q ��(a^r) */
factorunderroot, /* factor x in ��x */
rootofminus, /* ��(-a) = -��a, n odd */
evaltorational, /* evaluate to rational */
factorpolyunderroot, /* factor polynomial under �� */
multiplyoutunderroot /* multiply out under �� */
},
{ /* roots_of_roots */
sqrtofsqrt, /* sqrt(sqrt(x)) = root(4,x) */
sqrtofroot, /* sqrt(root(n,x)) = root(2n,x) */
rootofsqrt,
rootofroot
},
{ /* roots_and_fractions */
rootofquotient, /* ��(x/y) = ��x/��y */
quotientofroots, /* ��x/��y = ��(x/y) */
cancelroot, /* x/��x = (��x)^(n-1) */
cancelroot2, /* ��x/x = 1/(��x)^(n-1) */
cancelroot3, /* cancel under ��: ��(ab)/��(bc)=��a/��b */
cancelroot3, /* cancel ��: ��(xy)/��y = ��x */
cancelrootgcd, /* show common factor in ��u/��v */
pushunderoddroot, /* a(��b) = ��(a�b) if n odd */
pushunderevenroot, /* a(��b) = ��(a�b) if a�0 */
pushminusunderroot, /* -��a = ��(-a) if n odd */
rootdenom, /* a/��b = ��(a�/b) (n odd or a�0) */
rootnum, /* ��a/b = ��(a/b�) (n odd or b>0) */
sqrtnum, /* �a/b = �(a/b�) if b>0 */
sqrtdenom, /* a/�b = �(a�/b) if a�0 */
powerofroot4, /* root(mn,a)� = root(m,a) */
powerofroot5 /* root(2n,a)� = sqrt a */
},
{ /* complex_numbers */
recipofi, /* 1/i = -i */
recipofi2, /* a/i = -ai */
recipofi3, /* a/bi = -ai/b */
sqrtofminus1, /* �(-1) = i */
sqrtofneg, /* �(-a) = i�a if a�0 */
cleardenomofi, /* clear denominator of i */
multiplycomplexconjugates, /* (a-bi)(a+bi) = a^2+b^2 */
sumofsquares, /* a^2+b^2 = (a-bi)(a+bi) */
squareofabs, /* |u + vi|� = u� + v� */
complexabs, /* |u + vi| = �(u� + v�) */
complexapart, /* (u+vi)/w = u/w + (v/w)i */
complexform, /* write in form x+yi */
sqrtofi, /* sqrt(bi) = (sqrt(b/2) + sqrt(b/2) i) if b >= 0 */
sqrtofminusi, /* sqrt(-bi) = sqrt(b/2) - sqrt(b/2) i) if b >= 0 */
sqrtofaplusbi, /* sqrt(a+bi) = (sqrt((c+a)/2) + sqrt((c-a)/2) i) if b >= 0, where c^2 = a^2+b^2 */
sqrtofaminusbi /* sqrt(a-bi) = (sqrt((c+a)/2) - sqrt((c-a)/2) i) if b >= 0, where c^2 = a^2+b^2 */
},
{ /* factoring */
factoroutnumber, /* factor out number */
cleardenoms, /* clear numerical denominators */
contentfactor, /* ab + ac = a(b+c) */
contentfactor, /* factor out highest power */
factorsquareofsum, /* a�+2ab+b� = (a+b)� */
factorsquareofdif, /* a�-2ab+b� = (a-b)�" */
differenceofsquares, /* a�-b� = (a-b)(a+b) */
factorquadratic, /* factor quadratic trinomial */
quadraticformula, /* use quadratic formula */
writeassquare, /* a�� = (a�)� */
prodofpowers, /* a�b� = (ab)� */
factorcoefficients, /* factor integer coefficients */
factorinteger, /* factor integer */
makesubstitution,
unwinddefinition,
regardvarasconst,
},
{ /* advanced_factoring */
invisiblesub, /* write it as a function of ? */
makesubstitution2, /* write it as a function of ? and ? */
writeascube, /* a^(3n) = (a^n)^3 */
writeaspower, /* a^(?n) = (a^n)^? */
differenceofcubes, /* a^3 - b^3 = (a-b)(a�+ab+b�) */
sumofcubes, /* a^3 + b^3 = (a+b)(a�-ab+b�) */
differenceofnthpowers, /* a�-b� = (a-b)(a^(n-1)+...+b^(n-1)) */
differenceofnth2, /* a�-b� = (a+b)(a^(n-1)-...-b^(n-1)) (n even) */
sumofnthpowers, /* a�+b� = (a+b)(a^(n-1)-...+b^(n-1)) (n odd) */
sumoffourthpowers, /* x^4+a^4=(x�-�2ax+a�)(x�+�2ax+a�) */
factorquartic, /* x^4+(2p-q�)x�+p�=(x�-qx+p)(x�+qx+p) */
autosubstitution, /* computer makes substitution */
guessfactor, /* guess a factor */
factorbypolydiv, /* search for linear factor */
factorbygrouping, /* factor by grouping */
writeaspoly /* write it as a polynomial in ? */
},
{ /* solve_equations */
switchsides, /* switch sides */
changesigns, /* change signs of both sides */
addeqn, /* add to both sides */
subeqn, /* subtract from both sides */
transfer1, /* transfer term left to right */
transfer2, /* transfer term right to left */
muleqn, /* multiply both sides */
diveqn, /* divide both sides */
squareeqn, /* square both sides */
cancelterm, /* cancel � term from both sides */
cancelfactor, /* cancel common factor of sides */
alltoleft, /* subtract to put in form u=0 */
trueeqn, /* equation is identically true */
pseudosquare, /* a=-b becomes a�=-b� if a,b�0 */
pseudosquare2, /* a=-b becomes a=0 if a,b�0 */
pseudosquare3 /* a=-b becomes b=0 if a,b�0 */
},
{ /* quadratic_equations */
spliteqn, /* if ab = 0 then a=0 or b=0 */
quadraticformula,
quadraticformula, /* no mistake, it's there twice */
completethesquare,
sqrteqn,
crossmultiply,
negativediscriminant,
introduceabs, /* [u�=a, u�=-a] iff u� = |a| */
arithmetic
},
{ /* numerical_equations*/
evalatpoint,
solvenumerically
},
{ /* advanced_equations*/
crossmultiply, /* cross multiply (a/b=c/d=>ad=bc) */
powereqn, /* if u=v then u�=v� */
sqrteqn, /* take � of both sides */
rooteqn, /* take �� of both sides */
functioneqn, /* apply function to both sides */
commondenom, /* common denominator */
spliteqn, /* if ab=0 then a=0 or b=0 */
spliteqn2, /* if ab=ac then a=0 or b=c */
selecteqn, /* select one equation */
showalleqns,
collectmultiplesolns,
makesubstitution,
unwinddefinition,
rejecteqn, /* reject unsolvable equation */
checkroot, /* check root(s) in original eqn */
solvelinear /* solve linear equation at once */
},
{ /* cubic_equations */
eliminatequadraticterm,
computediscriminant,
showcallingcubic, /* if number changes adjust autosimp.c */
viete,
realcardan,
cardan2,
cardan,
reversesub,
unwinddefinition,
translatevar,
arithmetic,
devalop,
polyvalop
},
{ /* logarithmic_equations */
powereqn2, /* if u=v then a^u = a^v */
powereqn3, /* if ln u = v then u = e^v */
powereqn4, /* if log u = v then u = 10^v */
powereqn5, /* if log(b,u) = v then u = b^v */
logbeqn, /* if a^u = a^v then u=v */
logeqn, /* take log of both sides */
lneqn, /* take ln of both sides */
rejecteqn /* reject eqn--impossible log or ln */
},
{ /* cramers_rule */
cramersrule,
evaluatedeterminant
},
{ /* several_linear_equations */
varsleft,
eqnscollectall,
lineupvars, /* if this is changed, change in_loop in top.c */
addtwoeqns,
subtwoeqns,
muleqns,
diveqns,
addmuleqns,
submuleqns,
swapeqns,
ordereqns,
dropeqn, /* drop identity */
regardvarasconst, /* regard variable as constant */
impossibleeqns
},
{ /* selection_mode_only */
multabs, /* a|b| = |ab| if 0 � a */
divabs, /* |b|/c = |b/c| if 0 < c */
divabs2, /* a|b|/c = |ab/c| if 0 < a/ c */
solvelinearfor
},
{ /* linear_equations_by_selection */
/* if these change you must change */
/* execute in execute.c as well as */
/* needs_two_args in needsarg.c */
addselectedeqn,
subselectedeqn,
mulselectedeqn,
divselectedeqn,
addmulselectedeqn,
submulselectedeqn,
swapselectedeqn,
solveselectedeqn,
addselectedrow,
subselectedrow,
mulselectedrow,
divselectedrow,
addmulselectedrow,
submulselectedrow,
swapselectedrow,
multbymatrixidentity
},
{ /* linear_equations_by_substitution */
eqnscollectall, /* collect like terms */
solveone, /* solve equation ? for ? */
polyvalop, /* simplify equations */
eqnscancelterm, /* cancel term from both sides */
eqnsaddterm, /* add ? to both sides of equation ? */
eqnssubterm, /* subtract ? from both sides of equation ? */
diveqns, /* divide equation ? by ? */
substforvar, /* substitute for variable in all equations */
impossibleeqns
},
{ /* matrix_methods */
matrixform,
multbyidentity,
swaprows,
addrows,
subrows,
mulrows,
divrows,
addmulrows,
submulrows,
multiplymatrices,
dropzerocolumn,
dropzerorow,
dropduplicaterow,
impossibleeqns,
convertmatrixeqn
},
{ /* advanced matrix methods */
multiplymatrices,
dividebymatrix,
twobytwoinverse,
exactmatrixinverse,
decimalmatrixinverse
},
{ /* absolute_value */
/* change needs_index_arg if these change */
abspos, /* |u| = u if u�0 */
absposandassume, /* Assume u�0 and set |u| = u */
absneg, /* |u| = -u if u�0 */
abslinear, /* |cu| = c|u| if c�0 */
abslinearquo, /* |u/c| = |u|/c if c>0 */
multiplyabsval, /* |u||v| = |uv| */
absofproduct, /* |uv| = |u||v| */
absoffraction, /* |u/v| = |u| / |v| */
fractionofabs, /* |u| / |v| = |u/v| */
absevenpower, /* |u|��=u�� if u is real */
abspower, /* |u�|=|u|� if n is real */
abssqrt, /* |�u| = �|u| */
absroot, /* |��u| = ��|u| */
cancelabs3, /* |ab|/|ac| = |b|/|c| */
cancelabs3, /* |ab|/|a| = |b| */
cancelabsgcd /* show common factor in |u|/|v| */
},
{ /* absolute_value_ineq1 */
abseqn, /* |u|=c iff u=c or u = -c */
abseqn2, /* |u|/u=c iff c=�1 */
abslessthan, /* |u|<v iff -v < u < v */
absle, /* |u|�v iff -v � u � v */
lessthanabs, /* u<|v| iff u<-v or u<v */
leabs, /* u�|v| iff u�-v or u�v */
abseqntoineq1, /* |u| = u iff 0 � u */
abseqntoineq2, /* |u| = -u iff u � 0 */
absineqtrue, /* 0 � |u| is true */
absineqtrue2, /* -c � |u| is true (c�0) */
absineqtrue3, /* -c < |u| is true (c>0) */
absineqfalse, /* |u| < 0 is false */
abslessthanneg, /* |u| < -c is false (c�0) */
absleneg, /* |u| � -c is false (c>0) */
absleneg2, /* |u| � -c iff u=0 assuming c=0 */
abseqnneg /* |u| = -c iff u=0 assuming c=0 */
},
{ /* absolute_value_ineq2 */
absgreaterthan, /* v > |u| iff -v < u < v */
absge, /* v �|u| iff -v � u � v */
greaterthanabs, /* |v|> u iff v < -u or v > u */
geabs, /* |v|�u iff v � -u or v�u */
absineqtrueg, /* |u| � 0 is true */
absineqfalseg, /* 0 > |u| is false */
absgreaterthanneg, /* -c > |u| is false (c�0) */
absgeneg, /* -c � |u| is false (c>0) */
absgeneg2, /* -c � |u| iff u=0 assuming c=0 */
absineqtrue3g, /* |u| > -c is true (c>0) */
absineqtrue2g, /* |u| � -c is true (c�0) */
intervaltoabs1, /* -a <= u <= a iff |u| <= a */
intervaltoabs2, /* -a < u < a iff |u < a */
absevenpowerrev, /* u^(2n) = |u|^(2n) if u is real */
abspowerrev /*|u|^n = |u^n| if n is real */
},
{ /* less_than */
reverselessthan, /* change u < v to v > u */
addeqn1, /* add ? to both sides */
subeqn1, /* subtract ? from both sides */
changesigns1, /* change -u < -v to v < u */
changesignsandsense1, /* change -u < -v to u > v */
mulineq, /* multiply both sides by ? */
mulineqsq, /* multiply both sides by ?� */
divineq, /* divide both sides by ? */
numericalineq, /* evaluate numerical inequality */
evenpowerineq1, /* a < x^2n true if a < 0 */
evenpowerineq3, /* x^2n < a false if a <= 0 */
squareineq1, /* square both sides */
squareineq3, /* u < v iff u� < v� or u � 0 provided v > 0 */
lessthantole, /* u < v or u = v becomes u � v */
combineintervals, /* combine intervals */
explicitdomain /* use assumptions */
},
{ /* greater_than */
reversegreaterthan, /* change x > y to y < x */
changesignsandsense3, /* change -u > -v to u < v */
changesigns1g, /* change -u > -v to v > u */
evenpowerineq1, /* x^2n > a is true if a < 0 */
evenpowerineq3g, /* a > x^2n is false if a <= 0 */
squareineq3g, /* v > u iff v� > u� or u < 0 provided 0 � v */
greaterthantoge /* u > v or u = v iff u � v */
},
{ /* less_than_or_equal */
reversele, /* change x � y to y � x */
addeqn2, /* add ? to both sides */
subeqn2, /* subtract ? from both sides */
changesigns2, /* change u � -v to v � u */
changesignsandsense2, /* change -u � -v to u � v */
mulineq, /* multiply both sides by ? */
mulineqsq, /* multiply both sides by ?� */
divineq, /* divide both sides by ? */
numericalineq, /* evaluate numerical inequality */
evenpowerineq2, /* a <= x^2n true if a <= 0 */
evenpowerineq4, /* x^2n <= a false if a < 0 */
squareineq2, /* square both sides */
squareineq4, /* u � v => u� � v� or u � 0 */
combineintervals, /* combine intervals */
explicitdomain /* use assumptions */
},
{ /* greater_than_or_equal */
reversege, /* change x � y to y � x */
changesignsandsense4, /* change -u � -v to u � v */
changesigns2g, /* change -u � -v to v � u */
evenpowerineq2g, /* x�� � a is true if a � 0 */
evenpowerineq4g, /* a � x�� is false if a < 0 */
squareineq4g /* v � u iff v� � u� or u � 0 provided 0 � v */
},
{ /* square_ineq1 */
sqrtineq11, /* u� < a iff |u| < �a */
sqrtineq14, /* u� < a iff -�a < u < �a */
sqrtineq12, /* 0 � a < v� iff �a < |v| */
sqrtineq15, /* a < u� iff u < -�a or �a < u */
sqrtinterval1,/* a<u�<b iff -�b<u<-�a or �a<u<�b */
sqrtinterval3,/* -a<u�<b iff u� < b provided 0<a */
sqrtinterval5,/* -a<u��b iff u� � b provided 0<a */
powerineq11, /* �u < v iff u < v� */
squareineq1, /* 0 � a�u < v iff 0 � a�u < v� */
powerineq12, /* a < �v iff a� < v provided 0�a */
sqrtineq13, /* 0 � u < v iff �u < �v */
squaretrue1, /* a < x^2 is true if a < 0 */
squarefalse1, /* x^2 < a is false if a <= 0 */
sqsqrtineq1 /* -a < �u iff 0 � u provided a>0 */
},
{ /* square_ineq2 */
sqrtineq21, /* u� � a iff |u| � �a */
sqrtineq24, /* u� � a iff -�a � u � �a */
sqrtineq22, /* a � v� iff �a � |v| provided 0�a*/
sqrtineq25, /* a � u� iff u � -�a or �a � u */
sqrtinterval2,/* a�u��b iff -�b�u�-�a or �a�u�b */
sqrtinterval4,/* -a�u��b iff u� � b provided 0�a */
sqrtinterval6,/* -a�u�<b iff u� < b provided 0�a */
powerineq21, /* �u � v iff 0 � u � v� */
squareineq2, /* 0 � a�u � v iff 0 � a�u � v� */
powerineq22, /* a � �v iff a� � v provided 0�a */
sqrtineq23, /* 0 � u � v iff �u � �v", */
squaretrue2, /* a <= x^2 is true if a < 0 */
squarefalse2, /* x^2 <= a is false if a <= 0 */
sqsqrtineq2 /* -a � �u iff 0 � u provided a�0 */
},
{ /* recip_ineq1 */
recipineq11, /* 1/x < a iff x<0 or 1/a < x provided a > 0 */
recipineq21, /* a < 1/x iff 0 < x < 1/a provided a > 0 */
recipineq31, /* 1/x < -a iff -1/a < x < 0 provided a > 0 */
recipineq41, /* -a < 1/x iff x < -1/a or 0 < x provided a > 0 */
recipinterval11, /* a < 1/x < b iff 1/b < x < 1/a provided a,b > 0 */
recipinterval21, /* a < 1/x � b iff 1/b � x < 1/a provided a,b > 0 */
recipinterval31, /* -a < 1/x < -b iff -1/b < x < -1/a provided a,b > 0 */
recipinterval41, /* -a < 1/x � -b iff -1/b � x < -1/a provided a,b > 0 */
recipinterval51, /* -a < 1/x < b iff x < - 1/a or 1/b < x (a,b > 0) */
recipinterval61 /* -a < 1/x � b iff x < -1/a or 1/b � x (a,b > 0) */
},
{ /* recip_ineq2 */
recipineq12, /* 1/x � a iff x<0 or 1/a � x provided a > 0 */
recipineq22, /* a � 1/x iff 0 < x � 1/a provided a > 0 */
recipineq32, /* 1/x � -a iff -1/a � x < 0 provided a > 0 */
recipineq42, /* -a � 1/x iff x � -1/a or 0 < x provided a > 0 */
recipinterval12, /* a � 1/x < b iff 1/b < x � 1/a provided a,b > 0 */
recipinterval22, /* a � 1/x � b iff 1/b � x < 1/a provided a,b > 0 */
recipinterval32, /* -a � 1/x < -b iff -1/b < x � -1/a provided a,b > 0 */
recipinterval42, /* -a � 1/x � -b iff -1/b � x � -1/a provided a,b > 0 */
recipinterval52, /* -a � 1/x < b iff x � - 1/a or 1/b < x (a,b > 0) */
recipinterval62 /* -a � 1/x � b iff x � -1/a or 1/b � x (a,b > 0) */
},
{ /* root_ineq1 */
oddrootineq, /* u < v iff ��u < ��v (n odd) */
rootineq11, /* u�� < a iff |u| < ���a */
rootineq13, /* u�� < a iff -���a < u < ���a */
rootineq12, /* 0 � a < v�� iff ���a < |v| */
rootineq15, /* a < u�� iff u < -���a or ���a < u */
rootinterval1,/* a<u��<b iff -���b<u<-���a or ���a<u<���b */
powerineq14even, /* ���u < v iff 0 � u < v�� */
powerineq14odd, /* ��u < v iff u < v� (n odd or u�0) */
powerineq13, /* a(��u) < v iff a�u < v� provided 0 � a(��u) */
powerineq15, /* u < ��v iff u� < v provided 0 � u */
powerineq16, /* u < v iff u� < v� (n odd, n>0) */
powerineq17, /* u < v iff u� < v� (n > 0 and 0 � u) */
powerrootineq1 /* a < ���u iff 0 � u provided a < 0 */
},
{ /* root_ineq2 */
oddrootineq2, /* u � v iff ��u � ��v (n odd) */
rootineq21, /* u�� � a iff |u| � ���a */
rootineq23, /* u�� � a iff -���a � u � ���a */
rootineq22, /* a � v�� iff ���a � |v| provided a�0 */
rootineq25, /* a � u�� iff u iff -���a or ���a � u */
rootinterval2,/* a�u���b iff -���b�u�-���a or ���a�u�b */
powerineq24even,/* ���u � v iff 0 � u � v�� */
powerineq24odd, /* ��u � v iff u � v� (n odd or u�0) */
powerineq23, /* a(��u) � v iff a�u � v� provided 0 � a(��u) */
powerineq25, /* u � ��v iff u� � v provided 0 � u */
powerineq26, /* u � v iff u� � v� (n odd, n � 0) */
powerineq27, /* u � v iff u� � v� (n > 0 and 0 � u) */
powerrootineq2 /* a � ���u iff 0 � u provided a � 0 */
},
{ /* zero_ineq1 */
droppositive1, /* drop positive factors */
posnum1, /* 0 < a/v iff 0 < v provided a > 0 */
mulineqsqrt1, /* 0 < u/�v => 0 < uv */
mulineqbysquare1, /* 0 < u/v iff 0 < uv */
mulineqsqrt2, /* u/�v < 0 => uv < 0 */
mulineqbysquare2, /* u/v < 0 iff uv < 0 */
normalizelinear1, /* ax � b < 0 iff a(x�b/a) < 0 */
reverselessthan, /* change u < v to v > u */
intervalsneg1, /* (x-a)(x-b)... < 0 iff a<x<b...(where a<b) */
intervalspos1 /* 0 < (x-a)(x-b)... iff x<a or b<x...(where a<b) */
},
{ /* zero_ineq2 */
droppositive2, /* drop positive factors */
posnum2, /* 0 � u/v => 0 � v if u � 0 */
mulineqsqrt3, /* 0 � u/�v => 0 � uv */
mulineqbysquare3, /* 0 � u/v => 0 < uv or u = 0 */
mulineqsqrt4, /* u/�v � 0 => uv � 0 */
mulineqbysquare4, /* u/v � 0 iff uv < 0 or u=0 */
normalizelinear2, /* ax � b � 0 iff a(x�b/a) � 0 */
reversele, /* change u � v to v � u */
intervalsneg2, /* (x-a)(x-b)...� 0 => a�x�b...(where a�b) */
intervalspos2 /* 0�(x-a)(x-b)...iff x�a or b�x...(where a�b) */
},
{ /* square_ineq3 */
sqrtineq11g, /* a > u� iff �a > |u| */
sqrtineq14g, /* a > u� iff -�a < u < �a */
sqrtineq12g, /* v� > a iff |v| > �a provided a�0 */
sqrtineq15g, /* u� > a iff u < -�a or u > �a */
powerineq11g, /* v > �u iff 0 � u < v� */
squareineq1g, /* v>a�u iff 0�a�u<v� provided 0�a */
powerineq12g, /* �v > a iff v > a� provided 0�a */
sqrtineq13g, /* v > u iff �v > �u provided u�0 */
squaretrue1g, /* x^2 > a is true if a < 0 */
squarefalse1g, /* a > x^2 is false if a <= 0 */
sqsqrtineq1rev /* �u > -a iff u � 0 provided a>0 */
},
{ /* square_ineq4 */
sqrtineq21g, /* a � u� iff �a � |u| */
sqrtineq24g, /* a � u� iff -�a � u � �a */
sqrtineq22g, /* v� � a iff |v| � �a provided 0�a */
sqrtineq25g, /* u� � a iff u � -�a or �a � u */
powerineq21g, /* v � �u iff 0 � u � v� */
squareineq2g, /* v � a�u iff 0�a�u�v� provided 0�a */
powerineq22g, /* �v � a iff v � a� provided 0�a */
sqrtineq23g, /* v � u iff �v � �u provided u�0 */
squaretrue2g, /* x^2 � a is true if a � 0 */
squarefalse2g, /* a � x^2 is false if a < 0 */
sqsqrtineq2rev /* �u � -a iff u � 0 provided a�0 */
},
{ /* recip_ineq3 */
recipineq11g, /* a > 1/x iff x<0 or x > 1/a provided a > 0 */
recipineq21g, /* 1/x > a iff 0 < x < 1/a provided a > 0 */
recipineq31g, /* -a > 1/x iff -1/a < x < 0 provided a > 0 */
recipineq41g /* 1/x > -a iff x < -1/a or x > 0 provided a > 0 */
},
{ /* recip_ineq4 */
recipineq12g, /* a � 1/x iff x<0 or x � 1/a provided a > 0 */
recipineq22g, /* 1/x � a iff 0 < x � 1/a provided a > 0 */
recipineq32g, /* -a � 1/x iff -1/a � x < 0 provided a > 0 */
recipineq42g /* 1/x � -a iff x � -1/a or x > 0 provided a > 0 */
},
{ /* root_ineq3 */
oddrootineqg, /* u > v iff ��u > ��v (n odd) */
rootineq11g, /* a > u�� iff ���a > |u| */
rootineq13g, /* a > u�� iff -���a < u < ���a */
rootineq12g, /* u�� > a iff |u| > ���a provided a�0 */
rootineq15g, /* u�� > a iff u < -���a or u > ���a */
powerineq14eveng, /* v > ���u iff 0 � u < v�� */
powerineq14oddg, /* v > ��u iff v�> u (n odd or u�0) */
powerineq13g, /* v > a(��u) iff v� > a�u provided 0 � a(��u) */
powerineq15g, /* ��v > a iff v > a� provided a�0 */
powerineq16g, /* u > v iff u� > v� (n odd, n>0) */
powerineq17g, /* u > v iff u� > v� (n > 0 and 0 � u) */
powerrootineq1rev /* ���u > a iff u � 0 provided a < 0 */
},
{ /* root_ineq4 */
oddrootineq2g, /* u � v iff ��u � ��v (n odd) */
rootineq21g, /* a � u�� iff ���a � |u| */
rootineq23g, /* a � u�� iff -���a � u � ���a */
rootineq22g, /* u�� > a iff |u| > ���a provided a�0 */
rootineq25g, /* u�� � a iff u � -���a or u � ���a */
powerineq24eveng, /* v � ���u iff 0 � u � v�� */
powerineq24oddg, /* v � ��u iff v� � u (n odd or u�0) */
powerineq23g, /* v � a(��u) iff v� � a�u provided 0 � a(��u) */
powerineq25g, /* ��v � a iff a� � v provided a � 0 */
powerineq26g, /* u � v iff u� � v� (n odd, n � 0) */
powerineq27g, /* u � v iff u� � v� (n > 0 and 0 � u) */
powerrootineq2rev /* ���u � a iff u � 0 provided a � 0 */
},
{ /* zero_ineq3 */
posnum1g, /* u/v > 0 iff v > 0 provided u > 0 */
mulineqsqrt1g, /* change u/�v > 0 to uv > 0 */
mulineqbysquare1g, /* u/v > 0 iff uv > 0 */
mulineqsqrt2g, /* change 0 > u/�v to 0 > uv */
mulineqbysquare2g, /* 0 > u/v iff 0 > uv */
normalizelinear1g, /* 0 > ax � b iff 0 > a(x�b/a) */
intervalsneg1g, /* 0 > (x-a)(x-b) iff a<x<b (where a<b) */
intervalspos1g /* (x-a)(x-b) > 0 iff x<a or x>b (where a<b) */
},
{ /* zero_ineq4 */
posnum2g, /* u/v � 0 iff v � 0 provided u � 0 */
mulineqsqrt3g, /* u/�v � 0 iff uv � 0 */
mulineqbysquare3g, /* u/v � 0 iff uv > 0 or u = 0 */
mulineqsqrt4g, /* 0 � u/�v iff 0 � uv */
mulineqbysquare4g, /* 0 � u/v iff 0 > uv or u = 0 */
normalizelinear2g, /* 0 � ax � b iff 0 � a(x�b/a) */
intervalsneg2g, /* 0 � (x-a)(x-b) iff a�x�b (where a�b) */
intervalspos2g /* (x-a)(x-b)�0 iff x�a or b�x (where a�b) */
},
{ /* binomial_theorem */
plainbinomialtheorem, /* expand by binomial theorem */
binomialtheorem,
binomialcoeftofactorials, /* (n k) = n!/((n-k)!k!) */
defnoffactorial, /* n! = n(n-1)(n-2)...1 */
evaluatefactorial,
arithmetic,
evaluatebinomialcoef,
sigmatosum, /* expand � notation */
evaluatesigmatorational,
factorialrecursion, /* n! = n (n-1)! */
cancelfactorial1, /* n!/n = (n-1)! */
cancelfactorial2, /* n!/(n-1)! = n */
cancelfactorial3, /* n!/k! = n(n-1)...(n-k+1) */
cancelfactorial1b, /* n/n! = 1/(n-1)! */
cancelfactorial2b, /* (n-1)!/n! = 1/n */
cancelfactorial3b /* k!/n! =1/(n(n-1)...(n-k+1)) */
},
{ /* factor_expansion */
factorcubeofsum,
factorcubeofdif,
factor4thofsum,
factor4thofdif,
factornthofsum, /* a^n+na^(n-1)b+...b^n = (a+b)^n */
factornthofdif
},
{ /* sigma_notation */
sigmaconstant, /* � 1=number of terms */
minusoutofsigma, /* � -u = -� u */
constantoutofsigma, /* � cu = c� u (c const) */
sigmasum, /* �(u+v) = �u + �v */
sigmasum, /* �(u-v) = �u - �v */
sigmatosum, /* expand � using + */
sumofi, /* 1+2+..+n = n(n+1)/2 */
sumofisquared, /* 1�+..+n� = (2n+1)(n+1)n/6 */
sumofallpowers, /* 1+x+..+x�=(1-x^(n+1))/(1-x) */
showfirstterms, /* show first few terms */
evaluatesigmatorational,/* evaluate sum for specified value of free var */
evaluatesigmatodecimal, /* evaluate sum for specified value of free var */
evalpuresigmatorational,/* evaluate sum with no free variables */
evalpuresigmatodecimal, /* evaluate sum with no free variables */
sigmapoly, /* express summand as polynomial */
telescopingsum
},
{ /* advanced_sigma_notation */
shiftindex,
renameindexvariable,
productofsigmas, /* (�u)(�v) = � � uv */
splitofflastterm,
sumoficubed,
sumofitothefourth,
difsigma, /* d/dx �u = � du/dx */
reversedifsigma, /* � du/dx = d/dx �u */
intsigma, /* � �u dx = � �u dx */
reverseintsigma, /* � �u dx = � �u dx */
constantintosigma, /*c� u = � cu(c const) */
sumtodifofsums0, /* sigma(t,i,a,b)=sigma(t,i,0,b)-sigma(t,i,0,a-1)$$ */
sumtodifofsums, /* sigma(t,i,a,b)=sigma(t,i,c,b)-sigma(t,i,c,a-1)$$ */
},
{ /* prove by induction */
selectinductionvariable,
basiscase,
inductionstep,
useinductionhyp,
thereforeasdesired
},
{ /* trig_ineq */
abssinineq, /* |sin u| � 1 */
abscosineq, /* |cos u| � 1 */
sinineq, /* sin u � u if u�0 */
coslowerbound, /* 1 - u�/2 � cos u */
absarctanineq, /* |arctan u| � �/2 */
arctanineq, /* arctan u � u if u�0 */
tanineq /* tan u � u if u�0 */
},
{ /* log_ineq1 */
lnineq1, /* u < v iff ln u < ln v provided u>0 */
logineq1, /* u < v iff log u < log v provided u>0 */
lnrightineq1, /* u < ln v iff e^u < v */
lnleftineq1, /* ln u < v iff u < e^v */
logrightineq1,/* u < log v iff 10^u < v */
logleftineq1, /* log u < v iff u < 10^v */
expineq1 /* u < v iff a^u < a^v if a > 0, takes arg in menu mode */
},
{ /* log_ineq2 */
lnineq2, /* u � v => ln u � ln v provided u>0 */
logineq2, /* u � v => log u � log v provided u>0 */
lnrightineq2, /* u � ln v iff e^u � v */
lnleftineq2, /* ln u � v iff u � e^v */
logrightineq2,/* u � log v iff 10^u � v */
logleftineq2, /* log u � v iff u � 10^v */
expineq2 /* u � v iff a^u � a^v if a > 0, takes arg in menu mode */
},
{ /* log_ineq3 */
lnineq1g, /* u > v iff ln u > ln v provided v>0 */
logineq1g, /* u > v iff log u > log v provided v>0 */
lnrightineq1g, /* ln u > v iff u > e^v */
lnleftineq1g, /* u > ln v iff e^u > v */
logrightineq1g,/* log u > v iff u > 10^v */
logleftineq1g, /* u > log v iff 10^u > v */
expineq1g /* u > v iff a^u > a^v if a > 0, takes arg in menu mode */
},
{ /* log_ineq4 */
lnineq2g, /* u � v iff ln u � ln v provided u>0 */
logineq2g, /* u � v => log u � log v provided u>0 */
lnrightineq2g, /* ln u � v iff u � e^v */
lnleftineq2g, /* u � ln v iff e^u � v */
logrightineq2g,/* log u � v iff u � 10^v */
logleftineq2g, /* u � log v iff 10^u � v */
expineq2g /* u � v iff a^u � a^v if a > 0, takes arg in menu mode */
},
{ /*logarithms_base10 */
loginexponent, /* 10^log a = a */
logofpowerof10, /* log 10� = n */
logofone, /* log 1 = 0 */
logoften, /* log 10 = 1 */
logtoln, /* log a = (ln a) / log e */
introduceloginexponent, /* u^v = 10^(v log u) */
factornumberinlog,
factoroutbase10, /* factor out powers of 10 */
loginexponent2, /* 10^(n log a) = a^n */
logrecip, /* log(a/b) = -log(b/a) */
logbrecip /* log(b,a/c) = -log(b,c/a) */
},
{ /* logarithms */
logofpower, /* log a� = n log a */
logofproduct, /* log(ab) = log a + log b */
logofreciprocal, /* log(1/a) = - log a */
logofquotient, /* log(a/b) = log a - log b */
collectlogs, /* log a + log b = log ab */
collectlogs2, /* log a - log b = log a/b */
collectlogs2, /* log a + log b - log c =log ab/c */
attractlogs, /* n log a = log a� */
logsqrt, /* log �a = � log a */
logroot, /* log ��a = (1/n) log a */
logofone, /* log 1 = 0 */
factornumberinlog,
factoroutbase,
logofpowerreverse, /* log u = (1/a) log u^a */
computelog, /* evaluate logs numerically */
logtoln
},
{ /* logarithms_base_e */
lninexponent, /* e^ln a = a */
lnofe, /* ln e = 1 */
lnofone, /* ln 1 = 0 */
lnofpowerofe, /* ln e� = n */
introducelninexponent, /* u^v = e^(v ln u) */
lninexponent2 /* e^((ln c) a) = c^a */
},
{ /* natural_logarithms */ /* menu 70 */
lnofpower, /* ln a� = n ln a */
lnofproduct, /* ln ab = ln a + ln b */
lnofreciprocal, /* ln 1/a = -ln a */
lnofquotient, /* ln a/b = ln a - ln b */
lnofone, /* ln 1 = 0 */
factornumberinlog, /* factor number completely */
collectlns, /* ln a + ln b = ln ab */
collectlns2, /* ln a - ln b = ln a/b */
collectlns2, /* ln a + ln b - ln c = ln (ab/c) */
attractlns, /* n ln a = ln a� */
lnsqrt, /* ln �a = � ln a */
lnroot, /* ln ��a = (1/n) ln a */
lnofpowerreverse, /* ln u = (1/a) ln u^a */
computeln, /* evaluate numerically */
lnrecip /* ln(a/b) = -ln(b/a) */
},
{ /* reverse_trig */
sinsumrev, /* sin u cos v + cos u sin v = sin(u+v) */
sindifrev, /* sin u cos v - cos u sin v = sin(u-v) */
cossumrev, /* cos u cos v - sin u sin v = cos(u+v) */
cosdifrev, /* cos u cos v + sin u sin v = cos(u-v) */
tanhalf1rev, /* (sin �)/(1+cos �) = tan(�/2) */
tanhalf2rev, /* (1-cos �)/sin � = tan(�/2) */
cothalf1rev, /* (1+cos �)/(sin �) = cot(�/2) */
cothalf2rev, /* sin �/(1-cos �) = cot(�/2) */
tansumrev, /* (tan u+tan v)/(1-tan u tan v) = tan(u+v) */
tandifrev, /* (tan u-tan v)/(1+tan u tan v) = tan(u-v) */
cotsumrev, /* (cot u cot v-1)/(cot u+cot v) = cot(u+v) */
cotdifrev, /* (1+cot u cot v)/(cot v-cot u) = cot(u-v) */
reversesinsq /* (1-cos �) = 2 sin� �/2 */
},
{ /* complex_polar_form */
rectangulartopolar, /* x + iy = r exp(i�) */
polartorectangular, /* r e^(i�) = r (cos � + i sin �) */
absofpolar, /* |e^(i�)| = 1 */
absofpolar, /* |Re^(i�)|=R if R�0 */
absofpolar, /* |Re^(i�)| = |R| */
minustopolar, /* -a = ae^(i pi) */
complexrootminus, /* ��(-a) = e^(� i/n) ��a if a�0 */
complexexptonum, /* a/(be^(ci)) = ae^(-ci)/b */
demoivre, /* de Moivre's theorem */
explicitparams /* substitute specific integers */
},
{ /* logs_to_any_base */
logbinexponent, /* b^(log(b,a)) = a */
logbinexponent2, /* b^(n log(b,a)) = a^n */
logbofb, /* log(b,b) = 1 */
logbofpowerofb, /* logb b� = n */
logbofproduct, /* log xy = log x + log y */
logbofreciprocal, /* log (1/x) = -log x */
logbofquotient, /* log x/y = log x-log y */
logbofone, /* log(b,1) = 0 */
factorlogbase, /* factor base: log(4,x)=log(2�,x) */
logpowerofbofb, /* logb(b�,x) = 1/n log(b,x)*/
logbofpower, /* logb a� = n logb a */
factoroutbase, /* factor out powers of base */
collectlogb, /* log a + log b = log ab */
collectlogb2, /* log a - log b = log a/b */
collectlogb2, /* log x + log y - log z =log xy/z */
attractlogb2 /* n log(b,x) = log(b,a�) */
},
{ /* change_base */
logbtolns, /* log(b,x) = ln x / ln b */
logbtologs, /* log(b,x) = log x/log b */
changebase, /* log(b,x) = log(a,x) / log(a,b) (takes a as arg) */
logpowerofbofb, /* log(b�,x) = (1/n) log (b,x) */
logbtolog, /* log(10,x) = log x*/
logbtoln, /* log(e,x) = ln x */
logtoln, /* log x = ln x / ln 10 */
lntolog, /* ln x = log x / log e */
introducelogbinexponent /* u^v = b^(v log(b,u)) */
},
{ /* evaluate_trig_function */
sin0, /* sin 0 = 0 */
cos0, /* cos 0 = 1 */
tan0, /* tan 0 = 0 */
zeroesofsin, /* sin k� = 0 */
onesofcos, /* cos 2k� = 1 */
zeroesoftan, /* tan k� = 0 */
mod360, /* find coterminal angle < 360� */
mod2pi, /* find coterminal angle < 2� */
sin90, /* angle is multiple of 90� */
sin30, /* use 1-2-�3 triangle */
sin45, /* use 1-1-�2 triangle */
radtodeg, /* change radians to degrees */
degtorad, /* change degrees to radians */
combine3045, /* angle = a 30� + b 45� etc. */
computefunction /* evaluate numerically */
},
{ /* basic_trig */
tanrule, /* tan u = sin u / cos u */
cottotan, /* cot u = 1 / tan u */
cottosincos, /* cot u = cos u / sin u */
secrule, /* sec u = 1 / cos u */
cscrule, /* csc u = 1 / sin u */
tanrule2, /* sin u / cos u = tan u */
cotrule2 /* cos u / sin u = cot u */
},
{ /* trig_reciprocals */
cscrule2, /* 1 / sin u = csc u */
secrule2, /* 1 / cos u = sec u */
tanrecip, /* 1 / tan u = cot u */
tanrecip2, /* 1 / tan u = cos u / sin u */
cotrecip, /* 1 / cot u = tan u */
cotrecip2, /* 1 / cot u = sin u / cos u */
secrecip, /* 1 / sec u = cos u */
cscrecip, /* 1 / csc u = sin u */
sintocsc, /* sin u = 1 / csc u */
costosec, /* cos u = 1 / sec u */
tantodenom, /* tan u = 1 / cot u */
},
{ /* trig_squares */
sinsquare1, /* sin� u + cos� u = 1 */
sinsquare2, /* 1 - sin� u = cos� u */
sinsquare3, /* 1 - cos� u = sin� u */
sinsqtocossq, /* sin� u = 1 - cos� u */
cossqtosinsq, /* cos� u = 1 - sin� u */
secsqminustansq, /* sec� u - tan� u = 1 */
tansquare1, /* tan� u + 1 = sec� u */
tansquare2, /* sec� u - 1 = tan� u */
secsqtotansq, /* sec� u = tan� u + 1 */
tansqtosecsq, /* tan� u = sec� u - 1 */
sinoddpower, /* sin^(2n+1) u = sin u (1-cos� u)� */
cosoddpower, /* cos^(2n+1) u = cos u (1-sin� u)� */
tanoddpower, /* tan^(2n+1) u = tan u (sec^2 u-1)^n */
secoddpower, /* sec^(2n+1) u = sec u (tan^2 u+1)^n */
makesinpower, /* (1-cos t)^n(1+cos t)^n = sin^(2n) t */
makecospower, /* (1-sin t)^n(1+sin t)^n = cos^(2n) t */
},
{ /* csc_and_cot_identities */
cscsqminuscotsq, /* csc� u - cot� u = 1 */
cotsquare1, /* cot� u + 1 = csc� u */
cotsquare2, /* csc� u - 1 = cot� u */
cscsqtocotsq, /* csc� u = cot� u + 1 */
cotsqtocscsq, /* cot� u = csc� u - 1 */
csccomplement, /* csc(�/2-�) = sec � */
cotcomplement, /* cot(�/2-�) = tan � */
cotoddpower, /* cot^(2n+1) u = cot u (csc^2 u-1)^n */
cscoddpower /* csc^(2n+1) u = csc u (cot^2 u+1)^n */
},
{ /* trig_sum */
sinsum, /* sin(u+v)= sin u cos v + cos u sin v */
sindif, /* sin(u-v)= sin u cos v - cos u sin v */
cossum, /* cos(u+v)= cos u cos v - sin u sin v */
cosdif, /* cos(u-v)= cos u cos v + sin u sin v */
tansum, /* tan(u+v)=(tan u+tan v)/(1-tan u tan v) */
tandif, /* tan(u-v)=(tan u-tan v)/(1+tan u tan v) */
cotsum, /* cot(u+v)=(cot u cot v-1)/(cot u+cot v) */
cotdif /* cot(u-v)=(1+cot u cot v)/(cot v-cot u) */
},
{ /* double_angle */
doublesin, /* sin(2�) = 2 sin � cos � */
doublecos1, /* cos(2�) = cos� � - sin� � */
doublecos2, /* cos(2�) = 1 - 2 sin� � */
doublecos3, /* cos(2�) = 2 cos� � - 1 */
doublecos5, /* cos 2� + 1 = 2cos� � */
doublecos6, /* cos 2� - 1 = - 2 sin� � */
doubletan, /* tan(2�) = 2 tan �/(1 - tan� �) */
doublecot, /* cot(2�) = (cot� � -1) / (2 cot �) */
reversedoublesin, /* sin � cos � = � sin 2� */
reversedoublesin2, /* 2 sin� cos � = sin 2� */
reversedoublecos1, /* cos� � - sin� � = cos(2�) */
reversedoublecos2, /* 1 - 2 sin� � = cos(2�) */
reversedoublecos3 /* 2 cos� � - 1 = cos(2�) */
},
{ /* multiple_angles */
decrementtrigarg, /* n� = (n-1)� + � */
querytrigarg, /* n� = ?�+(n-?)� */
triplesin, /* sin 3� = 3 sin � - 4 sin^3 � */
triplecos, /* cos 3� = -3 cos � + 4 cos^3 � */
expandsin, /* expand sin n� in sin �, cos � */
expandcos /* expand cos n� in sin �, cos � */
},
{ /* verify_identities */
crossmultiply,
switchsides,
transfer1,
transfer2,
addeqn,
subeqn,
muleqn,
cancelterm,
powereqn,
sqrteqn,
rooteqn,
functioneqn,
arithmetic,
checknumerically,
makesubstitution
},
{ /* solve_by_30_60_90 */
solvesin30, /* sin(u)=1/2 iff u=�/6 or 5�/6+2n� */
solvesin330, /* sin(u)=-1/2 iff u=-�/6 or -5�/6+2n� */
solvesin60, /* sin(u)=�3/2 iff u=�/3 or 2�/3+2n� */
solvesin300, /* sin(u)=-�3/2 iff u=-�/3 or -2�/3+2n� */
solvecos30, /* cos(u)=�3/2 iff u=��/6 + 2n� */
solvecos150, /* cos(u)=-�3/2 iff u=�5�/6 + 2n� */
solvecos60, /* cos(u)=1/2 iff u=��/3+2n� */
solvecos120, /* cos(u)=-1/2 iff u=� 2�/3+2n� */
solvetan30, /* tan(u)=1/�3 iff u = �/6 + n� */
solvetan330, /* tan(u)=-1/�3 iff u = -�/6 + n� */
solvetan60, /* tan(u)=�3 iff u = �/3 + n� */
solvetan120 /* tan(u)=-�3 iff u = 2�/3 + n� */
},
{ /* solve_by_45_45_90 */
solvesin45, /* sin u = 1/�2 if u=�/4 or 3�/4 + 2n� */
solvesin315, /* sin u=-1/�2 if u=5�/4 or 7�/4 + 2n� */
solvecos45, /* cos u = 1/�2 if u=�/4 or 7�/4 + 2n� */
solvecos135, /* cos u=-1/�2 if u=3�/4 or 5�/4 + 2n� */
solvetan45, /* tan u = 1 if u= �/4 or 5�/4 + 2n� */
solvetan135 /* tan u = -1 if u=3�/4 or 7�/4 + 2n� */
},
{ /* zeroes_of_trig_functions */
solvesin0, /* sin u = 0 iff u = n� */
solvesin90, /* sin u = 1 iff u = �/2+2n� */
solvesin270, /* sin u = -1 iff u = 3�/2+2n� */
solvecos90, /* cos u = 0 iff u = (2n+1)�/2 */
solvecos0, /* cos u = 1 iff u = 2n� */
solvecos180, /* cos u = -1 iff u = (2n+1)� */
solvetan0, /* tan u = 0 iff sin u = 0 */
solvecot90 /* cot u = 0 iff cos u = 0 */
},
{ /* inverse_trig_functions */
solvesin, /* sin u=c iff u= (-1)�arcsin c+n� */
solvesin2, /* sin u=c iff u=arcsin(c)+2n� or -arcsin(c)+(2n+1)�" /* 1656 */
solvecos, /* cos u=c iff u=�arccos c+2n� */
solvetan, /* tan u=c iff u=arctan c+n� (c not � i) */
evalarcsin, /* evaluate arcsin exactly */
evalarccos, /* evaluate arccos exactly */
evalarctan, /* evaluate arctan exactly */
evalarccot, /* arccot x = arctan (1/x) */
evalarcsec, /* arcsec x = arccos (1/x) */
evalarccsc, /* arccsc x = arcsin (1/x) */
arcsinodd, /* arcsin(-x) = -arcsin x */
arccosodd, /* arccos(-x) = �-arccos x */
arctanodd, /* arctan(-x) = -arctan x */
periodicform, /* Put solutions in periodic form */
rejectimpossiblesin, /* reject sin u = c if |c|>1 */
rejectimpossiblecos /* reject cos u = c if |c|>1 */
},
{ /* invsimp */
tanasin, /* tan(arcsin x) = x/�(1-x�) */
tanacos, /* tan(arccos x) = �(1-x�)/x */
tanatan, /* tan(arctan x) = x */
sinasin, /* sin(arcsin x) = x */
sinacos, /* sin(arccos x) = �(1-x�) */
sinatan, /* sin(arctan x) = x/�(x�+1) */
cosasin, /* cos(arcsin x) = �(1-x�) */
cosacos, /* cos(arccos x) = x */
cosatan, /* cos(arctan x) = 1/�(x�+1) */
secasin, /* sec(arcsin x) = 1/�(1-x�) */
secacos, /* sec(arccos x) = 1/x */
secatan, /* sec(arctan x) = �(x�+1) */
atantan, /* arctan(tan �) = � if -�/2����/2 */
asinsin, /* arcsin(sin �) = � if -�/2����/2 */
acoscos, /* arccos(cos �) = � if 0���� */
atantan2 /* arctan(tan x) = x + c1 */
},
{ /* adding_arctrig_functions */
sumofarcsin, /* arcsin x + arccos x = �/2 */
sumofarctan /* arctan x + arctan 1/x = �x/2|x| */
},
{ /* complementary_trig */
sintocos, /* sin(�/2-�) = cos � */
costosin, /* cos(�/2-�) = sin � */
tantocot, /* tan(�/2-�) = cot � */
cotcomplement, /* cot(�/2-�) = tan � */
seccomplement, /* sec(�/2-�) = csc � */
csccomplement, /* csc(�/2-�) = sec � */
sintocos2, /* sin � = cos(�/2-�) */
costosin2, /* cos � = sin(�/2-�) */
tantocot2, /* tan � = cot(�/2-�) */
cottotan2, /* cot � = tan(�/2-�) */
sectocsc2, /* sec � = csc(�/2-�) */
csctosec2 /* csc � = sec(�/2-�) */
},
{ /* complementary_degrees */
sintocosdeg, /* sin(90�-�) = cos � */
costosindeg, /* cos(90�-�) = sin � */
tantocotdeg, /* tan(90�-�) = cot � */
cotcomplementdeg, /* cot(90�-�) = tan � */
seccomplementdeg, /* sec(90�-�) = csc � */
csccomplementdeg, /* csc(90�-�) = sec � */
sintocos2deg, /* sin � = cos(90�-�) */
costosin2deg, /* cos � = sin(90�-�) */
tantocot2deg, /* tan � = cot(90�-�) */
cottotan2deg, /* cot � = tan(90�-�) */
sectocsc2deg, /* sec � = csc(90�-�) */
csctosec2deg, /* csc � = sec(90�-�) */
adddegrees, /* a� + b� = (a+b)� */
multdegrees, /* ca� = (ca)� */
divdegrees /* a�/c = (a/c)� */
},
{ /* trig_odd_and_even */
sinodd, /* sin(-u) = - sin u */
coseven, /* cos(-u) = cos u */
tanodd, /* tan(-u) = - tan u */
cotodd, /* cot(-u) = - cot u */
seceven, /* sec(-u) = sec u */
cscodd, /* csc(-u) = - csc u */
sinsqeven, /* sin�(-u) = sin� u */
cossqeven, /* cos�(-u) = cos� u */
tansqeven, /* tan�(-u) = tan� u */
cotsqeven, /* cot�(-u) = cot� u */
secsqeven, /* sec�(-u) = sec� u */
cscsqeven /* csc�(-u) = csc� u */
},
{ /* trig_periodic */
sinperiodic, /* sin(u+2�) = sin u */
cosperiodic, /* cos(u+2�) = cos u */
tanperiodic, /* tan(u+�) = tan u */
secperiodic, /* sec(u+2�) = sec u */
cscperiodic, /* csc(u+2�) = csc u */
cotperiodic, /* cot(u+�) = cot u */
sinsqperiodic, /* sin�(u+�) = sin� u */
cossqperiodic, /* cos�(u+�) = cos� u */
secsqperiodic, /* sec�(u+�) = sec� u */
cscsqperiodic, /* csc�(u+�) = csc� u */
sinhalfperiod1, /* sin u = -sin(u-�) */
sinhalfperiod2, /* sin u = sin(�-u) */
coshalfperiod1, /* cos u = -cos(u-�) */
coshalfperiod2 /* cos u = -cos(�-u) */
},
{ /* half_angle_identities */
sinsqhalf, /* sin�(�/2) = (1-cos �)/2 */
cossqhalf, /* cos�(�/2) = (1+cos �)/2 */
sinsqhalf2, /* sin�(�) = (1-cos 2�)/2 */
cossqhalf2, /* cos�(�) = (1+cos 2�)/2 */
sincossame, /* sin � cos � = � sin 2� */
tanhalf1, /* tan(�/2) = (sin �)/(1+cos �) */
tanhalf2, /* tan(�/2) = (1-cos �)/sin � */
cothalf1, /* cot(�/2) = (1+cos �)/(sin �) */
cothalf2, /* cot(�/2) = sin �/(1-cos �) */
sinhalf1, /* sin(�/2) = �((1-cos �)/2) */
sinhalf2, /* sin(�/2) = -�((1-cos �)/2) */
coshalf1, /* cos(�/2) = �((1+cos �)/2) */
coshalf2, /* cos(�/2) = -�((1+cos �)/2) */
twicehalf /* � = 2(�/2) */
},
{ /* product_and_factor_identities */
reversedoublesin, /* sin x cos x = �sin 2x */
sincos, /* sin x cos y = �[sin(x+y)+sin(x-y)] */
cossin, /* cos x sin y = �[sin(x+y)-sin(x-y)] */
sinsin, /* sin x sin y = �[cos(x-y)-cos(x+y)] */
coscos, /* cos x cos y = �[cos(x+y)+cos(x-y)] */
sumofsin, /* sin x + sin y = 2 sin �(x+y) cos �(x-y) */
difofsin, /* sin x - sin y = 2 sin �(x-y) cos �(x+y) */
sumofcos, /* cos x + cos y = 2 cos �(x+y) cos �(x-y) */
difofcos, /* cos x - cos y = -2 sin �(x+y) sin �(x-y) */
trigdoublesub /* substitute u,v for expressions in trig functions */
},
{ /* limits */
testlimit, /* experiment numerically */
limsum, /* lim u+v = lim u + lim v */
limdif, /* lim u-v = lim u - lim v */
limconst, /* lim(t\32a,c) = c (c constant) */
limident, /* lim(t\32a,t) = a */
limlinear, /* lim cu=c lim u (c const) */
limminus, /* lim -u = -lim u */
limprod,
limpower, /* lim u� = (lim u)� */
limexponent2, /* lim c^v=c^(lim v) (c constant > 0) */
limexponent, /* lim u^v=(lim u)^(lim v) */
limsqrt, /* lim �u=�(lim u) if lim u>0 */
limoddroot, /* lim ��u = ��(lim u) if n is odd */
limevenroot, /* lim ��u = ��(lim u) if lim u > 0 */
limpoly,
limabs /* lim |u| = |lim u| */
},
{ /* limits_of_quotients */
limlinear, /* lim cu/v = c lim u/v (c const) */
limrecip, /* lim c/v = c/lim v (c const) */
limquotient, /* lim u/v = lim u/lim v */
factorunderlimit, /* factor out (x-a)� in limit as x\32a */
limrationalfunction, /* limit of rational function */
quotientofpowers, /* a�/b� = (a/b)� */
rationalizefraction,
pulloutnonzerolimit,
factoroutconstant,
multnumdenom, /* mult num and denom by something */
divnumdenom2, /* divide num and denom by something */
divnumdenom, /* lim u/v = lim (u/w) / lim (v/w) */
limapartandfactor /* (ab+ac+d)/q = a(b+c)/q + d/q */
/* example : (sin x cos h + cos x sin h - sin x)/h */
},
{ /* quotients_of_roots */
limsqrt1, /* �a/b = �(a/b�) if b>0 */
limsqrt2, /* �a/b = -�(a/b�) if b<0 */
limroot1, /* ��a/b = ��(a/b�) (b>0 or n odd) */
limroot2, /* ��a/b = -��(a/b�) (b<0, n even) */
limsqrtdenom1, /* a/�b = �(a�/b) if a�0 */
limsqrtdenom2, /* a/�b = -�(a�/b) if a�0 */
limrootdenom1, /* a/��b = ��(a�/b) (a�0 or n odd) */
limrootdenom2 /* a/��b = -��(a�/b) (a�0, n even) */
},
{ /* lhopitalmenu */
lhopital,
derivop,
isolateln,
isolatelnpower,
negexptodenom,
exptodenom,
trigtodenom,
createcompoundfraction,
commondenomandsimp
},
{ /* special_limits */ /* menu 100 */
limsin1, /* (sin t)/t */
limtan1, /* (tan t)/t */
limcos1, /* (1-cos t)/t */
limcos2, /* (1-cos t)/t� */
defnofe, /* (1+t)^(1/t) */
limln1, /* lim(x->0, ln(1�x)/x) = �1 */
limexp1, /* lim(x->0, (e^x-1)/x = 1 */
limexp2, /* lim(x->0, (e^(-x)-1)/x = -1 */
limpowertimeslnabs, /* lim(t->0,t�ln |t|)=0 (n > 0) */
limosccos, /* lim(x->0, cos(1/x) = undefined */
limoscsin, /* lim(x->0, sin(1/x) = undefined */
limosctan, /* lim(x->0, tan(1/x) = undefined */
liminfcos, /* lim(x->�, cos(x) = undefined */
liminfsin, /* lim(x->�, sin(x) = undefined */
liminftan /* lim(x->�, tan(x) = undefined */
},
{ /* hyper_limits */
limsinh1, /* (sinh t)/t */
limtanh1, /* (tanh t)/t */
limcosh1, /* (1-cosh t)/t */
limcosh2, /* (1-cosh t)/t� */
},
{ /* advanced_limits */
limlogisloglim, /* lim ln u=ln lim u (if lim u > 0) */
limcontinuous, /* lim f(u)=f(lim u), f continuous */
changelimitvariable, /* lim(t\32a,f(g(t)))=lim(u\32g(a),f(u)) */
limvalop, /* evaluate limit in one step */
limexptolog, /* lim u^v = lim e^(v ln u) */
createcompoundfraction, /* lim uv = lim v/(1/u) */
limundefined, /* limit undefined due to domain */
limlog, /* lim u = e^(lim ln u) */
squeezetheorem, /* squeeze theorem */
rationalizesum, /* lim �u-v=lim (�u-v)(�u+v)/�u+v) */
limleadingterms, /* lim u/v = limit of leading terms */
limleadingterm, /* leading term: lim(u+a)=lim(u) if a->0 */
sumleadingterm, /* replace sum by leading term */
undefinedpart, /* f(undefined) = undefined */
limthruexp, /* lim(e^u) = e^(lim u) */
limthrulog /* lim(ln u) = ln(lim u) */
},
{ /* logarithmic_limits */
limtlnt, /* lim(t\32 0,t ln t) = 0 */
limtpowerlnt, /* lim(t\32 0,t^n ln t) = 0$ if n�1 */
limtlntpower, /* lim(t\32 0,t (ln t)^n = 0$ if n�1 */
limtpowerlntpower, /* lim(t\32 0,t^k (ln t)^n = 0$ if k,n�1 */
limlntovert, /* lim(t\32�,ln(t)/t = 0 */
limlntpowerovert, /* lim(t\32�,ln(t)^n/t = 0 if n�1 */
limlntovertpower, /* lim(t\32�,ln(t)/t^n = 0 if n�1 */
limlntpowerovertpower, /* lim(t\32�,ln(t)^k/t^n = 0 if k,n�1 */
limtoverlnt, /* lim(t\32�,t/ln(t) = � */
limtoverlntpower, /* lim(t\32�,t/ln(t)^n = � if n�1 */
limtpoweroverlnt, /* lim(t\32�,t^n/ln(t) = � if n�1 */
limtpoweroverlntpower /* lim(t\32�,t^n/ln(t)^k = � if k,n�1 */
},
{ /* limits_at_infinity */
inflimpower1, /* 1/t^n */
inflimpower2, /* t^n */
limexpinf, /* e^t */
limexpinf2, /* e^t at minus infinity */
limlnright, /* ln */
limsqrtinf,
limrootinf,
limarctaninf, /* arctan */
limarccotinf, /* arccot at infinity */
limarccotinf2, /* arccot at minus infinity */
limtanhinf, /* tanh */
rationalizesum,
limthrusin, /* lim sin u = sin(lim u) */
limthrucos, /* lim cos u = cos(lim u) */
invertlim,
limleadingterms
},
{liminverseevenpower, /* infinite_limits */
liminverseoddpower,
lim1inverseright,
lim1inverseleft,
limquoinfinite,
limlnsing,
limtansing,
limcotsing,
limsecsing,
limcscsing,
limprod2left, /* lim(uv) = lim(u/?) lim(?v) */
limprod2right /* lim(uv) = lim(?u) lim(v/?) */
},
{ /* infinities */
infinityovernonzero, /* ��/positive = �� */
nonzerooverinfinity, /* nonzero/�� = 0 */
timesinfinity, /* positive��� = �� */
infinitytimesinfinity, /* ��� = �� */
addinfinity, /* �� + finite = �� */
infinityplusinfinity, /* � + � = � */
toinfinity1, /* u^� = � if u > 1 */
toinfinity0, /* u^� = 0 if 0 < u < 1 */
tominusinfinity1, /* u^(-�) = 0 if u > 1 */
tominusinfinity0, /* u^(-�) = � if 0 < u < 1 */
powerofinfinity, /* � = � if n > 0 */
infinityminusinfinity /* �-� = undefined */
},
{ /* zero_denom */
zerodenom, /* a/0+ = � if a>0 */
zerodenom2, /* a/0- = -� if a>0 */
zerodenom3, /* a/0 = undefined */
infinityoverzero, /* �/0+ = � */
infinityoverzero2, /* �/0- = -� */
infinityoverzero3, /* �/0 = undefined */
infinityoverzerosq, /* �/0� = � */
infinityoverzero2n, /* �/0�� = � */
zerosqdenom, /* a/0� = � if a > 0 */
zerosqdenom2, /* a/0� = -� if a < 0 */
zero2ndenom, /* a/0�� = � if a > 0 */
zero2ndenom2 /* a/0�� = -� if a < 0 */
},
{ /* more_infinities */
lninfinity,
sqrtinfinity,
rootinfinity,
ataninfinity,
acotinfinity,
acotminusinfinity,
asecinfinity,
acscinfinity,
triginfinity,
coshinfinity,
sinhinfinity,
tanhinfinity,
lnzero
},
{ /* polynomial_derivs */
difconstant,
difidentity,
difsum,
difminus,
diflinear,
difpower,
difpoly,
primerule
},
{ /* derivatives */
defnofderivative,
difpoly,
difsum,
difminus,
diflinear,
diflinear2,
difpower,
difproduct,
difrecip,
difquotient,
difsqrt,
difroots,
difinversepower,
difabs,
primerule
},
{ /* diftrig */
difsin,
difcos,
diftan,
difsec,
difcot,
difcsc
},
{ /* dif_explog */
difexp, /* d/dx e^x = e^x */
difatox, /* d/dx c^x = (ln c) c^x, c const */
difexponential, /* d/dx u^v= (d/dx) e^(v ln u) */
difln, /* d/dx ln x = 1/x */
diflnabs, /* d/dx ln |x| = 1/x */
logdif, /* dy/dx = y (d/dx) ln y */
difexp2,
difatox2,
difln2,
diflnabs2,
diflncos, /* d/dx ln(cos x) = -tan x */
diflnsin /* d/dx ln(sin x) = cot x */
},
{ /* dif_inversetrig */
difatan,
difasin,
difacos,
difacot,
difasec,
difacsc,
difatan2,
difasin2,
difacos2,
difacot2,
difasec2,
difacsc
},
{ /* chain_rule */
difpower2,
difsqrt2,
difsin2,
difcos2,
diftan2,
difsec2,
difcot2,
difcsc2,
difabs2,
chainrule, /* d/dx f(u) = f'(u) du/dx */
makesubstitution,
unwinddefinition
},
{ /* minima_and maxima */
/* Code in minmax.c depends heavily on exact numbers of these choices. */
/* if you change them, change the file mpminmax.h to correspond. */
minmaxexperiment,
addcriticalpoints,
addendpoints,
addundefinedpoints,
addlimits,
rejectpoint,
tabulate,
tabulateexact,
selectmax,
selectmin,
derivop,
ssolveop,
limvalop,
eliminateparameter,
functionisconstant
},
{ /* implicit_diff */
derivop,
polyvalop,
ssolveop
},
{ /* related_rates */
difeqn, /* differentiate the equation */
derivop, /* evaluate derivative in one step */
eliminatederivative, /* eliminate derivative by substitution */
ssolveop /* solve simple equation */
},
{ /* simplify */
polyvalop, /* simplify sums and products */
ratsimpop, /* eliminate compound fractions */
commondenomandsimp, /* common denominator and simplify */
contentfactor, /* factor out common term */
factorop, /* factor out expression (not integer) */
multiplyoutandsimp, /* simpprod.c */
cancelgcd, /* show common factor in u/v */
ssolveop, /* solve simple equation */
writeaspoly, /* write as polynomial in ? */
univariatepoly, /* express as polynomial */
monicpoly, /* make the leading coefficient 1 */
backtosqrts, /* x^(1/2) = �x */
backtoroots, /* change fractional exponents to roots */
eliminatesqrts /* change roots to fractional exponents */
},
{ /* higher_derivatives */
difeqn, /* u=v => du/dx = dv/dx */
difdif, /* d�u/dx� = (d/dx)(du/dx) */
difdifn, /* d�u/dx�= d/dx d^(n-1)/dx^(n-1) */
secondderiv, /* d/dx du/dx = d�u/dx� */
highderiv, /* d/dx d�u/dx� = d^(n+1)/dx^(n+1) */
derivop, /* evaluate derivative in one step */
evalatpoint /* evaluate numerically at a point */
},
{ /* basic_integration */
int1,
intconst,
intident,
intlinear, /* if you change positions of these operators you must */
/* adjust integrationop in execute.c */
intminus,
intsum,
intdif, /* �u-v dt = �u dt - �v dt */
intlinearity, /* �au�bv dt = a�u dt � b�v dt */
intpower, /* �t� dt=t^(n+1)/(n+1) (n # -1) */
intinversepower, /* �1/t^(n+1) dt= -1/(nt�) (n # 0) */
intpoly, /* integrate polynomial */
intrecip, /* �(1/t) dt = ln |t| */
intrecip2, /* �1/(t�a) dt = ln |t�a| */
multiplyoutintegrand, /* multiply out integrand */
expandintegrand, /* expand (a+b)� in integrand */
intabs /* �|t| dt = t|t|/2 */
},
{ /* trig_integration */
intsin,
intcos,
inttan,
intcot,
intsec,
intcsc,
intsecsq,
intcscsq,
inttansq,
intcotsq,
inttosec,
inttocsc
},
{ /* trig_integration2 */
intsin2,
intcos2,
inttan2,
intcot2,
intsec2,
intcsc2,
intsecsq2,
intcscsq2,
inttansq2,
intcotsq2,
inttosec2,
inttocsc2
},
{ /* integrate_exp */
intexp1, /* �e^t dt = e^t */
intexp2, /* �e^at dt =(1/a) e^(at) */
intexp3, /* �e^(-t)dt = -e^(-t) */
intexp4, /* �e^(-at)dt = -(1/a) e^(-at) */
intexp5, /* �e^(t/a)dt = a e^(t/a) */
intexp6, /* �c^t dt = (1/ln c) c^t */
intexponential, /* �u^v dt = �(e^(v ln u) dt --if position changes adjust integrationop in integral.c */
intln, /* �ln t = t ln t - t */
inttoerf /* �e^(-t�) dt = ��/2 Erf(t) */
},
{ /*integrate_by_substitution */
choosesubstitution,
autochoosesubstitution,
difsubstitution,
derivop, /* evaluate derivative in one step */
showcallingproblem, /* if position changes, adjust at in_loop in top.c */
trysubstitution, /* integrand = f(u) � du/dx */
changeintegrationvariable, /* � f(u) (du/dx) dx = � f(u) du */
unwinddefinition, /* eliminate defined variable */
intsub,
autointsub
},
{ /*integrate_by_parts */
integratebyparts, /* this must remain the first choice, see equatetoproblem */
autointegratebyparts,
equatetoproblem,
transferintegral,
derivop,
intsub,
autointsub,
simpleint
},
{ /* fundamental_theorem */
fundamentaltheorem,
fundamentaltheorem2
},
{ /* definite_integration */
evalbar, /* f(t) evaluated from a to b = f(b)-f(a) */
evalbarln, /* ln f(t) evaluated from a to b = ln(f(b)/f(a)) */
switchlimits, /* change upper and lower limit */
additivity, /* combine two def integrals with same integrand */
insertpoint, /* break an integral up into two integrals */
breakabsint, /* break integral |f(t)| dt at zeroes of f */
integratenumerically, /* parameters allowed, active line won't advance */
pureintegratenumerically, /* no parameters allowed */
integrateemptyinterval, /* integral(f(x),x,a,a) = 0. */
},
{ /* improper_integrals */
integraltolimit, /* creates a limit of an integral */
integraltolimit2, /* limit at minus infinity */
integraltolimit3, /* limit at left endpoint */
integraltolimit4, /* limit at right endpoint */
intdivtest1, /* limit of integrand is not zero at infinity */
intdivtest2 /* limit of integrand is not zero at -infinity */
},
{ /* oddandeven */
oddintegrand,
evenintegrand
},
{ /* trig_substitutions */
trigsubsin,
trigsubtan,
trigsubsec,
trigsubsinh,
trigsubcosh,
trigsubtanh,
yourtrigsub,
derivop,
simpleint
},
{ /* trigonometric_integrals */ /* menu 128 */
intsinsq, /* sin� t = (1-cos 2t)/2 in integral */
intcossq, /* cos� t = (1+cos 2t)/2 in integral */
intsubcos, /* u=cos x after using sin�=1-cos� */
intsubsin, /* u=sin x after using cos�=1-sin� */
intsubtan, /* u=tan x after using sec�=1+tan� */
intsubcot, /* u = cot x after using csc�=1+cot� */
intsubsec, /* u=sec x after using tan�=sec�-1 */
intsubcsc, /* u=csc x after using cot�=csc�-1 */
tantosecinint, /* tan� x = sec� x - 1 in integrand */
cottocscinint, /* cot� x = csc� x - 1 in integrand */
intsecpower, /* reduce �sec� x dx */
intcscpower, /* reduce �csc� x dx */
weierstrass /* u = tan(x/2) (Weierstrass subst.) */
},
{ /* trigrationalize */
trigrationalizedenom1, /* multiply num and denom by 1+cos x */
trigrationalizedenom4, /* multiply num and denom by 1-cos x */
trigrationalizedenom2, /* multiply num and denom by 1+sin x */
trigrationalizedenom5, /* multiply num and denom by 1-sin x */
trigrationalizedenom3, /* mult num and denom by cos x + sin x */
trigrationalizedenom6 /* mult num and denom by cos x - sin x */
},
{ /* integrate_rational */
polydivop, /* polynomial division */
factordenominator,
cancelgcd, /* show common factor in u/v */
squarefreefactors, /* square-free factorization */
factornumerically, /* factor polynomial numerically */
partialfractionsop, /* expand in partial fractions */
completethesquare1, /* only works in denom or sqrt inside integral or limit */
intrecip3, /* �1/(at�b) dt = (1/a) ln |at�b| */
intinversepower, /* �1/(at�b)^(n+1) dt = -1/na(at�b)� */
inttoatan, /* �1/(t�+a�)dt=(1/a)arctan(t/a) */
inttoacoth, /* �1/(t�-a�)dt=(1/a)arccoth(t/a) */
inttolnratio1, /* �1/(t�-a�)dt=(1/2a)ln|(t-a)/(t+a)|*/
inttoatanh, /* �1/(a�-t�)dt=(1/a)arctanh(t/a) */
inttolnratio2 /* �1/(a�-t�)dt=(1/2a)ln|(t+a)/(a-t)|*/
},
{ /* integrate_sqrtdenom */
completethesquare1,
inttoasin, /* CRC formula 19 */
inttolnratio3, /* CRC formula 20 */
inttoacos, /* CRC formula 21 */
intsub
},
{ /* integrate_arctrig */
intasin,
intacos,
intatan,
intacot,
intacscplus,
intacscminus,
intasecplus,
intasecminus
},
{ /* simplify_calculus */
polyvalop, /* simplify sums and products */
ratsimpop, /* eliminate compound fractions */
/* for the time being polyvalop is put in both places; it */
/* actually does even more, using content-factor and cancel */
commondenomandsimp, /* fractions and non-fractions */
contentfactor,
factorop,
multiplyoutandsimp, /* simpprod.c */
cancelgcd, /* show common factor in u/v */
ssolveop, /* solve simple equation */
derivop, /* evaluate derivative in one step */
limvalop, /* evaluate limit in one step */
intsub, /* change integral by substitution */
simpleint, /* simple integral in one step */
absorbconstant /* absorb number in const of int */
},
{ /* integrate_hyperbolic */
intsinh,
intcosh,
inttanh,
intcoth,
intcsch,
intsech
},
{ /* series_geom1 */
oneminusxseries, /* $$1/(1-x) = sum(x^n,n,0,infinity)$$ */
oneminusxseries2, /* $1/(1-x) = 1+x+x�+...$ */
oneminusxseries3, /* $1/(1-x) = 1+x+x�+...x^n...$ */
oneplusxseries, /* $$1/(1+x) = sum((-1)^n x^n,n,0,infinity)$$ */
oneplusxseries2, /* $1/(1+x) = 1-x+x�+...$ */
oneplusxseries3, /* $1/(1+x) = 1-x+x�+...(-1)^nx^n...$ */
oneminusxseriesrev,
oneminusxseries2rev,
oneminusxseries3rev,
oneplusxseriesrev,
oneplusxseries2rev,
oneplusxseries3rev
},
{ /* series_geom2 */
xoveroneminusxseries,
xoveroneminusxseries2,
xoveroneminusxseries3,
xoveroneplusxseries,
xoveroneplusxseries2,
xoveroneplusxseries3,
xoveroneminusxseriesrev,
xoveroneminusxseries2rev,
xoveroneminusxseries3rev,
xoveroneplusxseriesrev,
xoveroneplusxseries2rev,
xoveroneplusxseries3rev
},
{ /* series_geom3 */
oneoveroneminusxkseries,
oneoveroneminusxkseries2,
oneoveroneminusxkseries3,
xmoveroneminusxkseries,
xmoveroneminusxkseries2,
xmoveroneminusxkseries3,
oneoveroneminusxkseriesrev,
oneoveroneminusxkseries2rev,
oneoveroneminusxkseries3rev,
xmoveroneminusxkseriesrev,
xmoveroneminusxkseries2rev,
xmoveroneminusxkseries3rev
},
{ /* series_geom4 */
oneoveroneplusxkseries,
oneoveroneplusxkseries2,
oneoveroneplusxkseries3,
xmoveroneplusxkseries,
xmoveroneplusxkseries2,
xmoveroneplusxkseries3,
oneoveroneplusxkseriesrev,
oneoveroneplusxkseries2rev,
oneoveroneplusxkseries3rev,
xmoveroneplusxkseriesrev,
xmoveroneplusxkseries2rev,
xmoveroneplusxkseries3rev
},
{ /* series_geom5 */
geometricseriesfromk,
geometricseriesfromk2,
geometricseriesfromk3,
geometricseriesminusfromk,
geometricseriesminusfromk2,
geometricseriesminusfromk3,
geometricseriesfromkrev,
geometricseriesfromk2rev,
geometricseriesfromk3rev,
geometricseriesminusfromkrev,
geometricseriesminusfromk2rev,
geometricseriesminusfromk3rev
},
{ /* series_ln */
lnseries,
lnseries2,
lnseries3,
lnseriesminus,
lnseriesminus2,
lnseriesminus3,
lnseriesrev,
lnseries2rev,
lnseries3rev,
lnseriesminusrev,
lnseriesminus2rev,
lnseriesminus3
},
{ /* series_trig */
sinseries,
sinseries2,
sinseries3,
cosseries,
cosseries2,
cosseries3,
sinseriesrev,
sinseries2rev,
sinseries3rev,
cosseriesrev,
cosseries2rev,
cosseries3rev
},
{ /* series_exp */
expseries,
expseries2,
expseries3,
expseriesrev,
expseries2rev,
expseries3rev,
negexpseries,
negexpseries2,
negexpseries3,
negexpseriesrev,
negexpseries2rev,
negexpseries3rev
},
{ /* series_atan */
atanseries,
atanseries2,
atanseries3,
atanseriesrev,
atanseries2rev,
atanseries3rev,
binomialseries,
binomialseries2,
binomialseries3,
binomialseriesrev,
binomialseries2rev,
binomialseries3rev
},
{ /* series_appearance */
ldots0, /* express series as $a_0 + a_1 + ...$ */
ldots1, /* express series as $a_0 + a_1 + a_2 + ... $ */
ldots2, /* express series using ... and general term */
ldotstosigma, /* express series using sigma notation */
showanotherterm,/* show another term before ... */
showmoreterms, /* show ? more terms before ... */
showevaluatedterms, /* show terms with factorials evaluated */
showfactorialsinterms, /* do not evaluate factorials in terms */
showdevaluatedterms, /* show the coefficients in decimal form */
showundevaluatedterms /* do not use decimal form for coefficients */
},
{ /* series_algebra */
telescopingseries,
multiplyseries,
multiplypowerseries,
divideseriesbypoly, /* divide power series by polynomial */
dividepolybyseries, /* divide polynomial by power seres */
dividepowerseries,
squareseries,
squarepowerseries,
powerofseries,
addseries,
subseries
},
{ /* series_manipulations */
/* if the position of intseries changes,
you must modify integrationop in
execute.c */
seriesfirstterms, /* split off first few terms */
seriesmoreterms, /* decrease lower limit by subtracting terms */
seriesaddindex, /* add ? to index variable */
seriessubindex, /* subtract ? from index variable */
renameindexvariable,
seriessum, /* �(u+v) = �u + �v */
difseries, /* d/dx �u = � du/dx */
reversedifseries, /* � du/dx = d/dx �u */
intseries, /* � �u dx = � �u dx */
reverseintseries, /* � �u dx = � �u dx */
evalfirstterms, /* calculate sum of first few terms */
seriesintdif, /* $$u = integral(diff(u,x),x)$$ */
/* if positions in this menu change, see selectop.c,
search for seriesintdif */
seriesintdifdef, /* $$u = integral(diff(u,t),t,0,x) + u(0)$$ */
seriesdifint, /* $$u = diff(integral(u,x),x)$$ */
eliminatecofi, /* solve for constant of integration */
seriesevenandodd, /* separate terms with even and odd indices */
},
{ /* series_convergence_tests */
divergencetest, /* If these change then change the top of series.h too */
integraltest,
ratiotest,
roottest,
comparisontest1,
comparisontest2,
limitcomparisontest,
condensationtest,
finishdivergencetest, /* must change in_loop if these choice numbers change */
finishintegraltest,
finishratiotest,
finishroottest,
finishcomparisontest1,
finishcomparisontest2,
finishlimitcomparisontest,
finishcondensationtest
},
{ statefinalbound1, /* series_convergence2 */
statefinalbound2,
harmonicseries,
zeta2
},
{ /* complex_functions */
complexlntopolarform, /* ln(u+iv) = ln(re^(i�)) */
complexln, /* ln(re^(i�)) = ln r + i� (-�<���) */
lnofi, /* ln i = i�/2 */
lnofminusone, /* ln(-1) = i� */
lnofnegative, /* ln(-a) = ln a + i� (a > 0) */
complexcos, /* cos � = [e^(i�) + e^(-i�)]/2 */
complexsin, /* sin � = [e^(i�) - e^(-i�)]/2i */
complexsqrt, /* �(re^(i�))=�r e^(i�/2) (0��<2�) */
complexroot, /* ��(re^(i�))=��r e^(i�/n)(0��<2�) */
complexexponential, /* e^(i�) = cos � + i sin � */
complexexponential2, /* e^(x+iy) = e^x cos y + i e^x sin y */
etotheipi, /* e^(i�) = -1 */
etotheminusipi, /* e^(-i�) = -1 */
etothei2npi, /* e^(2n�i) = 1 */
etothecoterminal, /* e^((2n� + �)i) = e^(i�) */
introducelninexponent /* u^v = e^(v ln u) */
},
{ /* complex_hyperbolic */
isinh, /* sin(it) = i sinh t */
icosh, /* cos(it) = cosh t */
coshi, /* cosh(it) = cos t */
sinhi, /* sinh(it) = i sin t */
itanh, /* tan(it) = i tanh t */
icoth, /* cot(it) = -i coth t */
tanhi, /* tanh(it) = i tan t */
cothi, /* coth(it) = -i cot t */
cosisin, /* cos t + i sin t = e^(it) */
cosminusisin, /* cos t - i sin t = e^(-it) */
complexcosrev, /* [e^(i�) + e^(-i�)]/2 = cos � */
complexsinrev, /* [e^(i�) - e^(-i�)]/2i = sin � */
complexcosrev2, /* e^(i�) + e^(-i�) = 2 cos � */
complexsinrev2 /* e^(i�) - e^(-i�) = 2i sin � */
},
{ /* hyperbolic_functions */
coshdef, /* cosh u = (e^u+e^(-u))/2 */
coshdefrev2, /* e^u + e^-u = 2 cosh u */
sinhdef, /* sinh u = (e^u-e^(-u))/2 */
sinhdefrev2, /* e^u-e^(-u) = 2 sinh u */
coshdefrev, /* e^u-e^(-u) = 2 sinh u */
sinhdefrev, /* [e^u-e^(-u)]/2 = sinh u */
cosheven, /* cosh(-u) = cosh u */
sinhodd, /* sinh(-u) = -sinh u */
coshplussinh, /* cosh u + sinh u = e^u */
coshminussinh, /* cosh u - sinh u = e^(-u) */
cosh0, /* cosh 0 = 1 */
sinh0, /* sinh 0 = 0 */
exptohyper1, /* e^x = cosh x + sinh x */
exptohyper2 /* e^(-x) = cosh x - sinh x */
},
{ /* hyperbolic2 */
sinhsqplus1, /* sinh�u + 1 = cosh� u */
coshsqminus1, /* cosh� u - 1 = sinh�u */
coshsqminussinhsq, /* cosh� u - sinh�u = 1 */
coshsqtosinhsq, /* cosh� u = sinh�u + 1 */
sinhsqtocoshsq, /* sinh�u = cosh� u - 1 */
oneminustanhsq, /* 1-tan�u = sech�u */
oneminussechsq /* 1-sech�u = tan�u */
},
{ /* more_hyperbolic */
tanhdef, /* tanh u = sinh u / cosh u */
tanhdefrev, /* sinh u / cosh u = tanh u */
cothdef, /* coth u = cosh u / sinh u */
cothdefrev, /* cosh u / sinh u = coth u */
sechdef, /* sech u = 1 / cosh u */
sechdefrev, /* 1 / cosh u = sech u */
cschdef, /* csch u = 1 / sinh u */
cschdefrev, /* 1 / sinh u = csch u */
tanhsqplussechsq, /* tanh� u + sech� u = 1 */
tanhsqtosechsq, /* tanh� u = 1 - sech� u */
sechsqtotanhsq, /* sech� u = 1 - tanh� u */
sinhsum, /* sinh(u�v)=sinh u cosh v � cosh u sinh v */
coshsum, /* cosh(u�v)=cosh u cosh v � sinh u sinh v */
doublesinh, /* sinh 2u = 2 sinh u cosh u */
doublecosh, /* cosh 2u = cosh� u + sinh� u */
tanhln /* tanh(ln u) = (1-u^2)/(1+u^2) */
},
{ /* inverse_hyperbolic */
asinhtoln, /* ln(x + �(x�+1)) */
acoshtoln, /* ln(x + �(x�-1)) */
atanhtoln /* arctanh x = (1/2) ln((1+x)/(1-x)) */
},
{ /* dif_hyperbolic */
difsinh,
difcosh,
diftanh,
difcoth,
difsech,
difcsch,
diflnsinh,
diflncosh
},
{ /* dif_inversehyperbolic */
difasinh,
difacosh,
difatanh,
difacoth,
difasech,
difacsch
},
{ /* sg_function1 */
sgpos, /* sg(x) = 1 if x > 0 */
sgneg, /* sg(x) = -1 if x < 0 */
sgzero, /* sg(0) = 0 */
sgodd, /* sg(-x) = -sg(x) */
sgodd2, /* -sg(x) = sg(-x) */
sgabs1, /* sg(x) = abs(x)/x (x nonzero) */
sgabs2, /* sg(x) = x/abs(x) (x nonzero) */
abssg, /* abs(x) = x sg(x) */
sgevenpower, /* sg(x)�� = 1, also sg(x)^(even/odd) */
sgoddpower, /* sg(x)^(2n+1) = sg(x), also sg(x)^odd/odd */
sgrecip, /* 1/sg(x) = sg(x) */
difsg, /* d/dx sg(u) = 0 (u nonzero) */
intsg, /* integral sg(x) = x sg(x) */
sgint, /* integral(sg(u)v,x) =
sg(u) integral(v,x) if u is nonzero */
sgassumepos, /* sg(x) = 1 assuming x > 0 */
sgassumeneg /* sg(x) = -1 assuming x < 0 */
},
{ /* sg_function2 */
sgprod1, /* sg(au) = sg(u) if a > 0 */
sgprod2, /* sg(au) = -sg(u) if a < 0 */
sgfract1, /* sg(au/b) = sg(u) if a/b > 0 */
sgfract2, /* sg(au/b) = - sg(u) if a/b < 0 */
sgpower, /* sg(x^(2n+1)) = sg(x) */
sgrecip2, /* sg(1/u) = sg(u) */
sgrecip3, /* sg(c/u) = sg(u) si c > 0 */
sgtoabs, /* u sg(u) = |u| */
abstimessg /* |u| sg(u) = u */
},
{ /* bessel_functions */
difj0,
difj1,
difjn,
dify0,
dify1,
difyn
},
{ /* modified_bessel_functions */
difi0,
difi1,
difin,
difk0,
difk1,
difkn
},
{ /* functions_menu */
applyfunction0,
applyfunction1,
applyfunction2,
applyfunction3,
applyfunction4,
applyfunction5,
applyfunction6,
applyfunction7,
applyfunction8,
applyfunction9,
applyfunction10,
applyfunction11,
applyfunction12,
applyfunction13,
applyfunction14,
applyfunction15
},
{ /* automode_only */
/* brother array at end of this file must always
match this */
expand,
multiplyifcancels,
ordersimplefactors,
limsum1,
limsum2,
limsum3,
intsqrt,
doublecos4,
eliminatesinsq,
eliminatecossq,
eliminatetansq,
eliminatesecsq,
maximalsub,
multiplycoefs,
preparetocancel
},
{ /* automode_only2 */
knownroot,
transfereqn,
transferstrictineq,
transferineq,
transfer, /* works only on intervals */
contentgcd,
fractionalsubstitution,
gcdsubstitution,
distribandcancel,
difofpowers,
limsum4,
factorhelper,
factorandcancel,
factoroneside
},
{ /* automode_only3 */
unitelns,
unitelogs,
unitelns2,
unitelogs2,
trigsuminfraction,
cleanupexponents
}
};
/*_____________________________________________________________*/
/* when an automode_only operator is used by think_ahead, its
brother from the following table is entered in 'plan' instead of
itself; so this should tell what operator the user should choose
at the point where automode used this operator */
/*_______________________________________________________*/
actualop brother[3][16] =
{
{
multiplyout, /* brother of expand */
distriblaw, /* brother of multiplyifcancels */
orderfactors, /* brother of ordersimplefactors */
orderfactors, /* finishedfactoring always fails, so it doesn't matter
what we put in this array for its brother */
factordenominator, /* brother of limsum1 */
commondenom, /* brother of limsum2 */
eliminatenegexp, /* brother of limsum3 */
sqrtexp, /* brother of intsqrt (integrate square root) */
doublecos1, /* brother of doublecos4 */
sinsqtocossq, /* brother of eliminatesinsq */
cossqtosinsq, /* brother of eliminatecossq */
tansqtosecsq, /* brother of eliminatetansq */
secsqtotansq, /* brother of eliminatesecsq */
makesubstitution, /* brother of maximalsub */
multiplyfractions, /* brother of multiplycoefs */
sinsqtocossq /* brother of preparetocancel--doesn't matter what it is. */
},
{ /* brothers of operators in automode_only2 */
evaltorational, /* brother of knownroot */
addeqn, /* brother of transfereqn */
addeqn1, /* brother of transferstrictineq */
addeqn2, /* brother of transferineq */
addeqn1, /* brother of transfer */
factorop, /* brother of contentgcd */
makesubstitution, /* brother of fractionalsubstitution */
makesubstitution, /* brother of gcdsubstitution */
distriblaw, /* brother of distribandcancel */
multiplyoutandsimp, /* brother of difofpowers */
tanrule, /* brother of limsum4; but it could just as
well be secrule, secrule2,... */
contentfactor, /* brother of factorhelper */
differenceofsquares, /* brother of factorandcancel */
factorsquareofsum /* brother of factoroneside */
},
{ /* brothers of operators in automode_only3 */
lnofpower, /* brother of unitelns */
logofpower, /* brother of unitelogs */
lnofproduct, /* brother of unitelns2 */
logofproduct, /* brother of unitelogs2 */
sumofsin, /* brother of trigsuminfraction */
arithmetic /* brother of cleanupexponents */
}
};
/*_________________________________________________________*/
MEXPORT_AUTOMODE actualop * access_optable(int n)
/* access_optable(i)[j] replaces optable[i][j]
from outside symbols.dll */
{
return optable[n];
}
/*_________________________________________________________*/
MEXPORT_AUTOMODE actualop get_brother(int menu, int i)
/* return brother[0][i], brother[1][i], or brother[2][i]
according as menu is automode_only, automode_only2, automode_only3
*/
{
switch(menu)
{ case automode_only:
return brother[0][i];
case automode_only2:
return brother[1][i];
case automode_only3:
return brother[2][i];
}
return NULL;
}
/*__________________________________________________________*/
MEXPORT_AUTOMODE int cousins(operation a, operation b)
/* return 1 if a and b have the same effect, so that
user could have chosen either one. This is called by
think_ahead when generating error messages: if b is what
automode would do at step 2 and user chooses a at step 1,
user will get an error message the same as if he chose b
at step 1. It is presumed that a and b are not equal
(as operators, though the associated actualop might be the
same). The automode-op comes in a and the user's op
comes in b; the function is not necessarily symmetrical
as operators never used in auto mode don't have to be
listed in b position.
*/
{ actualop A, B;
A = optable[a.men][a.choice-1];
B = optable[b.men][b.choice-1];
if((void *) A == (void *) B)
return 1; /* same code at different places in menu */
if( (void *) A == (void *) collectall )
return (void *) B == (void *) collectterms;
if( (void *) A == (void *) collectterms )
return (void *) B == (void *) collectall;
if( (void *) A == (void *) commondenom )
{ if( (void *) B == (void *) commondenomandsimp ||
(void *) B == (void *) commondenominfraction ||
(void *) B == (void *) commondenom2 ||
(void *) B == (void *) findcommondenom ||
(void *) B == (void *) commondenomandsimp2
)
return 1;
else
return 0;
}
if( (void *) A == (void *) commondenomandsimp )
{ if( (void *) B == (void *) commondenom ||
(void *) B == (void *) commondenominfraction ||
(void *) B == (void *) commondenom2 ||
(void *) B == (void *) commondenomandsimp2 ||
(void *) B == (void *) findcommondenom
)
return 1;
else
return 0;
}
if( (void *) A == (void *) findcommondenom )
{ if( (void *) B == (void *) commondenomandsimp ||
(void *) B == (void *) commondenom ||
(void *) B == (void *) commondenominfraction ||
(void *) B == (void *) commondenom2 ||
(void *) B == (void *) commondenomandsimp2
)
return 1;
else
return 0;
}
return 0;
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists