{VERSION 6 0 "IBM INTEL NT" "6.0" }
{USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0
1 0 0 0 0 1 }{CSTYLE "" -1 256 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }
{CSTYLE "" -1 257 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1
258 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 260 "" 1 18 0 0 0 0 0 1 0 0 0
0 0 0 0 0 }{CSTYLE "" -1 261 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }
{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2
2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 1" -1 3 1
{CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8
4 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 256 1 {CSTYLE "" -1 -1 "Times"
1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }}
{SECT 0 {PARA 256 "" 0 "" {TEXT 260 57 "Calculus Exploration 8: Indef
inite & Definite Integrals " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA
0 "" 0 "" {TEXT 261 296 "The following is the Maple code for the Indef
inite & Definite Integrals Maplet, which should be used to both explor
e antiderivative techniques, and obtain step-by-step solutions to defi
nite integral problems. You can either execute the code below or run t
he corresponding Maplet from the webpage." }}{PARA 0 "" 0 "" {TEXT -1
0 "" }}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 31 "Indefinite & Definite Inte
grals" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 125 "This maplet guides the u
ser through an integration problem. The user can apply integration rul
es one at a time to a function " }{TEXT 257 1 "f" }{TEXT -1 40 " and v
iew the resulting expression. The " }{TEXT 258 8 "Messages" }{TEXT -1
37 " box displays the status information." }}{PARA 0 "" 0 "" {TEXT -1
0 "" }}{PARA 0 "" 0 "" {TEXT -1 100 "The user enters a function with i
ts independent variable. Various integration rules can be applied.\n"
}}{PARA 0 "" 0 "" {TEXT -1 86 "At any time, the user can request a hin
t for the next step, and then apply the hint. " }}{PARA 0 "" 0 ""
{TEXT -1 128 "The user can also specify that a set of rules are unders
tood, in which case those rules are automatically applied when possibl
e." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 256 0 "" }}{PARA 0 "" 0 ""
{TEXT -1 99 "At any time, the user can display all solution steps in t
he solution or display the final answer. " }}{PARA 0 "" 0 "" {TEXT
259 36 "Click in red area and press [Enter]." }{TEXT -1 0 "" }}{PARA
0 "> " 0 "" {MPLTEXT 1 0 63218 "restart:\nIntMaplet := module()\n\n###
#########################################################\n\n#########
###################################################\n\nexport iniMathM
L, addMathML, addMathML2, addMathML3,\n runIntMaplet, \n s
tartRule, applyRule, applyOtherRule,\n applyMathFuncRule, getHin
t, applyHint, \n getFinalAnswer, showAllSteps, clearSteps,\n \+
applyRuleParts, applyRuleSplit,\n applyRuleRewrite, applyRule
Change,\n changeUnderstoodRules, forgetUnderstoodRule,\n a
boutRule, aboutDefRule, undoLastStep, \n helpStr, partsStr, rewr
iteStr, changeStr:\nlocal steps, mlSteps, iniMlStr:\nsteps:=[]: mlStep
s:=[]:\niniMlStr := \"\":\n\n#########################################
###################\n\n###############################################
#############\n\nhelpStr := \n\"This maplet guides you through an inte
gration problem. You can apply integration rules one at a time to a fu
nction f and view the resulting expression. The 'Messages' box display
s the status information.\n\nEnter a function with its independent var
iable. Click the 'Start' button. This clears the problem history and s
tarts a new one.\n\nTo apply integration rules, click the correspondin
g buttons or select rules from the 'Apply the Rule' menu.\nWhen you ap
ply a rule, the display of the problem is updated with the result of t
he applied rule.\nIf you understand a rule, you can select the rule fr
om the 'Understood Rules' menu. The maplet then applies that rule when
possible.\n\nTo show all steps in the solution, click the 'All Steps'
button. \n\nTo request a hint, click the 'Obtain a Hint' button or se
lect 'Receive a Hint' from the 'File' menu. To apply the hint, click t
he 'Apply the Hint' button or select 'Apply the Hint' from the 'File' \+
menu.\n\nTo clear the problem history, click the 'Clear' button.\n\nTo
display the final answer, click the 'Final Ans' button or select 'Get
the Final Answer' from the 'File' menu.\": # end helpStr\n\n\n#######
#####################################################\n\n#############
###############################################\n\npartsStr := \n\"par
ts - Integrate By Parts \nsolve - Solve the Integral \n\nThe parts rul
e implements integration by parts: \nInt(f(x)*g'(x),x) = f(x)*g(x) - I
nt(g(x)*f'(x),x). \n\nTo apply the rule, you must specify the two func
tions f(x) and g(x): \n [parts, f(x), g(x)]\n\nThat is, the first par
ameter (f(x)) is the term to be differentiated, and the second paramet
er (g(x)) is the integral of the term to be integrated when applying t
he rule. \n\nOften after multiple applications of integration by parts
, the same integral appears more than once on both sides of the equati
on. You can use the 'solve' rule to solve the integral algebraically.
\": # end partsStr\n\n################################################
############\n\n######################################################
######\n\nrewriteStr := \n\"rewrite - Rewrite the form of expression\n
\n\nThe rewrite rule changes the form of the integrand when the integr
ation variable is not changed. \n\nThis rule has the general form: [re
write, f1(x) = g1(x), f2(x) = g2(x), ...],\n\nwhere parameters of rewr
ite rule are input in the text box beside the rewrite rule button, sep
arated by commas.\n\nThe effect of applying the rewrite rule is to per
form each substitution listed as a parameter to the rule, where occurr
ences of the left-hand side of each substitution are replaced by the c
orresponding right-hand side. \": # end rewriteStr\n\n################
############################################\n\n######################
######################################\n\nchangeStr := \n\"change - Ch
ange Integral Variable\nrevert - Revert Integral Variable\n\nThe chang
e rule changes the integration variable. \n\nIt can take the following
forms. \n [change, F(x,u) = G(x,u), u]\n [change, F(x,u) = G(x,
u), u = H(x)]\n\nwhere parameters of rewrite rule are input in the tex
t box beside the rewrite rule button, separated by commas.\n\nThe firs
t parameter (F(x,u) = G(x,u)) defines the relationship between the old
variable (x) and the new variable (u). This most commonly takes the f
orm x = G(u) or u = F(x), but can be much more general, provided it ca
n be solved for x. \n\nNote: The name of the new variable (u in the p
receding paragraph) must be previously unused in the problem to which \+
you are applying this change of variables rule.\nIf you use a name whi
ch has already appeared, the system creates a new name.\nOnce the inte
gration has been completed, you can use the revert rule to revert to t
he original variable, if necessary.\": # end revertStr\n\n############
################################################\n\n##################
##########################################\n# pre: iniEqn :: algebraic
expression\n# post: returns the Presentation MathML of iniEqn\n\niniM
athML := proc(iniEqn)\n MathML:-ExportPresentation(iniEqn);\nend proc
:\n\n############################################################\n\n#
###########################################################\n# pre: ma
thMLStr :: string, in form of Presentation MathML\n# addEqn :: al
gebraic expression\n# post: addEqn appends to the next line of mathMLS
tr,\n# returns the updated mathMLStr \n\naddMathML := proc(math
MLStr, addEqn)\n local tree, cmc, child, children, nl, eqnSign;\n us
e XMLTools in\n tree := FromString(mathMLStr);\n cmc := ContentM
odelCount(tree);\n child := FromString(MathML:-ExportPresentation(a
ddEqn));\n children := ContentModel(child);\n nl := FromString(
\"
\");\n eqnSign := Element(\"mo\",\"=\");
\n tree := AddChild(tree,nl,cmc);\n tree := AddChild(tree,eqnSig
n,cmc+1);\n for child in children do \n cmc := ContentModelCou
nt(tree);\n tree := AddChild(tree,child,cmc);\n end do:\n t
ree := MakeElement(\"mrow\", [], ContentModel(tree) ):\n tree := El
ement(\"math\", tree):\n ToString(tree):\n end use:\nend proc:\n\n
############################################################\n\n######
######################################################\n# pre: mathMLS
tr :: string, in form of Presentation MathML\n# addEqn :: algebra
ic expression\n# post: addEqn appends to the next line of mathMLStr,\n
# returns the updated mathMLStr \n\naddMathML2 := proc(mathMLSt
r, addEqn, rule)\n local tree, cmc, child, children, ruleName, nl, eq
nSign;\n use XMLTools in\n tree := FromString(mathMLStr);\n cmc
:= ContentModelCount(tree);\n child := FromString(MathML:-ExportPr
esentation(addEqn));\n children := ContentModel(child);\n nl := \+
FromString(\"
\");\n eqnSign := Element(\"mo
\",\"=\");\n ruleName := Element(\"mtext\",convert(rule,string));\n
tree := AddChild(tree,nl,cmc);\n tree := AddChild(tree,eqnSign,
cmc+1);\n for child in children do \n cmc := ContentModelCount
(tree);\n tree := AddChild(tree,child,cmc);\n end do:\n cmc
:= ContentModelCount(tree);\n tree := AddChild(tree,ruleName,cmc);
\n tree := MakeElement(\"mrow\", [], ContentModel(tree) ):\n tre
e := Element(\"math\", tree):\n ToString(tree):\n end use:\nend pr
oc:\n\n############################################################\n
\n############################################################\n# pre:
mathMLStr :: string, in form of Presentation MathML\n# addEqn ::
algebraic expression\n# post: addEqn appends to the next line of math
MLStr,\n# returns the updated mathMLStr \n\naddMathML3 := proc(
mathMLStr, addEqn, rule)\n local tree, cmc, child, children, ruleName
, nl, eqnSign;\n use XMLTools in\n tree := FromString(mathMLStr);
\n cmc := ContentModelCount(tree);\n child := FromString(MathML:
-ExportPresentation(addEqn));\n children := ContentModel(child);\n \+
nl := FromString(\"
\");\n eqnSign := Ele
ment(\"mo\",\"=\");\n ruleName := Element(\"mtext\",convert(rule,st
ring));\n tree := AddChild(tree,nl,cmc);\n tree := AddChild(tree
,ruleName,cmc+1);\n tree := AddChild(tree,eqnSign,cmc+2);\n for \+
child in children do \n cmc := ContentModelCount(tree);\n tr
ee := AddChild(tree,child,cmc);\n end do:\n tree := MakeElement(
\"mrow\", [], ContentModel(tree) ):\n tree := Element(\"math\", tre
e):\n ToString(tree):\n end use:\nend proc:\n\n###################
#########################################\n\n#########################
###################################\n# pre: null \n# post: initializes
the Integration problem solving process\n# if input is correct,
integration equation is added to steps\n# understood rule(s) ap
ply if capable\n# MathML Viewer updates too\n# else error \+
message shows\n\nstartRule := proc()\n local funStr, varStr, lowerStr
, upperStr, intStr, \n infoStr, mlStr, intExpr, intEqn, hints, \+
\n i, uRules, uAppliedRules, rulesStr:\n use Student:-Calculus
1, Maplets:-Tools in\n \n clearSteps():\n funStr := Get('TF_f
un'):\n if funStr = \"\" then \n infoStr := \"Enter a valid in
tegration expression\":\n Set('info'=infoStr):\n error \"No \+
integration expression in TextField TF_fun\":\n end if: \n\n var
Str := Get('TF_var'):\n if varStr = \"\" then \n infoStr := \"
Enter the variable expression\":\n Set('info'=infoStr):\n er
ror \"No integration var in TextField TF_var\":\n end if: \n\n l
owerStr := Get('TF_lower'):\n upperStr := Get('TF_upper'):\n\n i
f lowerStr<>\"\" and upperStr<>\"\" then \n intStr := cat(\"Int(
\", funStr, \", \", varStr, \"=\", lowerStr, \"..\", upperStr, \")\"):
\n else \n intStr := cat(\"Int(\", funStr, \", \", varStr, \")
\"):\n end if: \n\n intExpr := parse(intStr):\n hints := [Hin
t(intExpr)][1]:\n\n mlStr := iniMathML(GetProblem(`internal`)):\n \+
iniMlStr := mlStr:\n infoStr := \"Initializing ...\":\n Set('i
nfo'=infoStr):\n \n if nops(hints)>0 then\n uRules := rhs(U
nderstand(Int)):\n uAppliedRules := []:\n\n if nops(uRules) \+
> 0 then\n for i from 1 to nops(hints) do \n if member
(hints[i],uRules) = true then\n uAppliedRules := [op(uAppli
edRules),hints[i]]:\n end if:\n end do:\n\n int
Eqn := Rule[](GetProblem(`internal`)): \n steps := [op(steps),i
ntEqn]:\n\n if nops(uAppliedRules) > 0 then\n if nops(
uRules) = 1 then \n rulesStr := convert(uRules,string):\n \+
infoStr := cat(\"understood rule \", rulesStr,\n \+
\" is automatically applied.\"):\n else \n \+
rulesStr := convert(uRules,string):\n infoStr := c
at(\"understood rules \", rulesStr, \n \" ar
e automatically applied.\"):\n end if: # end if nops(uRules)=
>1\n Set('info'=infoStr):\n mlStr := addMathML(mlStr
,rhs(intEqn)):\n end if: # end if nops(uAppliedRules)>0\n \+
\n else \n intEqn := Rule[](GetProblem(`internal`)):\n \+
steps := [op(steps),intEqn]: \n \n end if: # end if nops(uR
ules) > 0\n \n Set('ML'=mlStr):\n mlSteps := [op(mlStep
s), mlStr]:\n infoStr := \"Apply any rule below\":\n Set('in
fo'=infoStr):\n \n else \n intEqn := Rule[](GetProblem(`intern
al`)): \n steps := [op(steps),intEqn]:\n Set('ML'=mlStr):\n \+
mlSteps := [op(mlSteps), mlStr]:\n infoStr := \"no hint is g
iven\":\n Set('info'=infoStr):\n end if : # end if nops(hints)
>0\n end use:\nend proc:\n\n#########################################
###################\n\n###############################################
#############\n# pre: null \n# post: if aRule is a valid integration r
ule and applicable\n# new step is stored in steps, updates MathM
LViewer \n# else message shows the rule is not applied\n\napplyR
ule := proc(aRule)\n local mlStr, infoStr, intEqn, oldEqn:\n use Stu
dent:-Calculus1, Maplets:-Tools in\n \n if nops(steps)=0 then\n \+
startRule():\n end if:\n\n mlStr := Get('ML'):\n oldEqn \+
:= steps[nops(steps)]:\n if type(aRule,list)=true then\n intEq
n := Rule[op(aRule)](steps[nops(steps)]):\n else \n intEqn := \+
Rule[aRule](steps[nops(steps)]):\n end if: \n\n if (GetMessage()
=NULL) or (not evalb(intEqn=oldEqn)) then\n infoStr := convert(aR
ule,string):\n infoStr := cat(infoStr, \" rule is being applied\"
):\n Set('info'=infoStr):\n\n steps := [op(steps),intEqn]:\n
if nops(steps)=2 then Set(undomenu(enabled)=true) end if:\n\n \+
if type(aRule,list)=true then \n if Get('RMI_single2')=true \+
then\n mlStr := addMathML2(mlStr,rhs(intEqn),aRule):\n \+
elif Get('RMI_single3')=true then\n mlStr := addMathML3(mlSt
r,rhs(intEqn),aRule):\n else\n mlStr := addMathML(mlSt
r,rhs(intEqn)):\n end if:\n else\n if Get('RMI_sing
le2')=true then\n mlStr := addMathML2(mlStr,rhs(intEqn),[aRul
e]):\n elif Get('RMI_single3')=true then\n mlStr := ad
dMathML3(mlStr,rhs(intEqn),[aRule]):\n else\n mlStr :=
addMathML(mlStr,rhs(intEqn)):\n end if:\n end if:\n\n \+
Set('ML'=mlStr):\n mlSteps := [op(mlSteps), mlStr]:\n\n in
foStr := convert(aRule,string): \n infoStr := cat(infoStr, \" rul
e has been applied\"):\n Set('info'=infoStr):\n else\n in
foStr := convert(aRule,string):\n infoStr := cat(infoStr, \" rule
is not applicable\"):\n Set('info'=infoStr):\n end if: # end \+
if GetMessage()=NULL\n\n end use:\nend proc: # end applyRule()\n\n###
#########################################################\n\n#########
###################################################\n# pre: null\n# po
st: apply the integrating by parts\n# Int(f(x)*Diff(g(x),x),x) =
f(x)*g(x) - Int(g(x)*Diff(f(x),x),x)\n# argument f(x) is entere
d in TF_parts_fx, and arguments g(x) is \n# entered in TF_parts_
gx\n\napplyRuleParts := proc()\n local fx, gx:\n use Student:-Calcul
us1, Maplets:-Tools, Maplets:-Elements in\n \n fx := Get('TF_pa
rts_f'):\n gx := Get('TF_parts_g'):\n\n if fx = \"\" or gx=\"\"
then \n Maplets:-Display(Maplet(\n MessageDialog(\"You m
ust specify f(x) and g(x).\"))): \n else\n applyRule([parts, \+
parse(fx), parse(gx)]):\n\n end if:\n\n end use:\nend proc: # end \+
applyRuleParts\n\n####################################################
########\n\n##########################################################
##\n# pre: null\n# post: apply the rewrite rule\n# rewrite equat
ions are listed in TB_args seperated\n# by commas, the left-hand
side of each substitution\n# is replaced by the corresponding r
ight-hand side\n\napplyRuleRewrite := proc()\n local str:\n use Stud
ent:-Calculus1, Maplets:-Tools, Maplets:-Elements in\n \n str :=
Get('TB_args'):\n if str = \"\" then \n Maplets:-Display(Mapl
et(\n MessageDialog(\"You must specify a rewrite equation\")))
: \n \n else\n str := cat(\"rewrite, \", str):\n appl
yRule([parse(str)]):\n end if:\n\n end use:\nend proc: # end apply
RuleWithArgs\n\n######################################################
######\n\n############################################################
\n# pre: null\n# post: apply the change rule, which changes the integr
ation \n# variable, arguments are listed in TB_args\n\napplyRule
Change := proc()\n local str:\n use Student:-Calculus1, Maplets:-Too
ls, Maplets:-Elements in\n \n str := Get('TB_args'):\n if str
= \"\" then \n Maplets:-Display(Maplet(\n MessageDialog(
\"You must specify a change-of-variables equation\"))): \n else\n \+
str := cat(\"change, \", str):\n applyRule([parse(str)]):\n \+
end if:\n\n end use:\nend proc: # end applyRuleWithArgs\n\n#######
#####################################################\n\n#############
###############################################\n# pre: null\n# post: \+
apply the definite integration rule split\n# require argument fr
om TF_c\n\napplyRuleSplit := proc()\n local param:\n use Student:-Ca
lculus1, Maplets:-Tools, Maplets:-Elements in\n \n param := Get(
'TF_c'):\n if ruleArgs = \"\" then \n error cat(\"no split par
ameter in 'TF_c'\"): \n end if:\n applyRule([split, parse(param)
]):\n\n end use:\nend proc: # end applyRuleSplit\n###################
#########################################\n\n#########################
###################################\n# pre: null \n# post: read the in
tegration rule from TF_other, and apply it\n# if TF_other is emp
ty, error message shows\n\napplyOtherRule := proc()\n local aRule:\n \+
use Maplets:-Tools, Maplets:-Elements in\n aRule := Get('TF_other'
):\n if aRule = \"\" then\n Maplets:-Display(Maplet(\n \+
MessageDialog(\"No rule has been entered\"))): \n else \n ap
plyRule(parse(aRule)):\n end if:\n end use:\nend proc: # end apply
OtherRule\n\n#########################################################
###\n\n############################################################\n#
pre: null \n# post: read the integration rule from TF_mathfunc, and a
pply it\n# if TF_mathfunc is empty, error message shows\n\napply
MathFuncRule := proc()\n local aRule:\n use Maplets:-Tools in\n a
Rule := Get('TF_mathfunc'):\n if aRule = \"\" then\n Maplets:-
Display(Maplet(\n MessageDialog(\"No rule has been entered\"))
): \n else \n applyRule(parse(aRule)):\n end if:\n end us
e:\nend proc: # end applyOtherRule\n\n################################
############################\n\n######################################
######################\n# pre: null\n# post: hint for the current inte
gration problem is shown \n# in the message TextField, info\n\ng
etHint := proc()\n local intEqn, hint, hints, infoStr, i:\n use Stud
ent:-Calculus1, Maplets:-Tools in\n\n if nops(steps)=0 then\n \+
startRule():\n end if:\n \n intEqn := steps[nops(steps)]:\n \+
hints := [Hint(intEqn)]:\n hint := hints[1]:\n \n if nops(h
int)=0 then\n infoStr:=\"No hint can be given, or the problem is \+
done\":\n Set('info'=infoStr):\n else\n infoStr:=convert(
hint,string);\n if nops(hints)>1 then \n for i in hints[2.
.-1] do\n infoStr := cat(infoStr, \", \", convert(i,string));
\n end do;\n end if:\n infoStr:=cat(infoStr, \" could
be applied.\"):\n Set('info'=infoStr):\n end if:\n\n hint:
# return value used in applyHint\n\n end use:\nend proc: # end getHi
nt()\n\n############################################################\n
\n############################################################\n# pre:
null\n# post: hint for the current integration problem is applied \n
\napplyHint := proc()\n local mlStr, infoStr, oriEqn, intEqn, hint:\n
use Student:-Calculus1, Maplets:-Tools in\n\n hint := getHint():
\n if nops(hint)>0 then \n applyRule(hint):\n end if: \n\n \+
end use:\nend proc: # end applyHint\n################################
############################\n\n######################################
######################\n# pre: null \n# post: final answer for the cu
rrent problem is shown\n\ngetFinalAnswer := proc()\n local intEqn, hi
nt, mlStr, infoStr:\n use Student:-Calculus1, Maplets:-Tools in\n\n \+
if nops(steps)=0 then\n startRule():\n end if:\n\n intEqn
:= steps[nops(steps)]:\n hint := [Hint(intEqn)][1]: \n\n if nop
s(hint)=0 then\n infoStr := \"No rule could be applied, or the qu
estion is done\":\n Set('info'=infoStr):\n \n else \n m
lStr := Get('ML'): \n while nops(hint)>0 do\n infoStr := \+
cat(convert(hint,string),\" is being applied.\"):\n Set('info'=
infoStr):\n intEqn := Rule[hint](intEqn):\n hint := [Hin
t(intEqn)][1]: \n end do:\n steps := [op(steps),intEqn]:\n \+
if nops(steps)=2 then Set(undomenu(enabled)=true) end if:\n i
nfoStr := \"Exporting final answer ...\":\n mlStr := addMathML(ml
Str,rhs(intEqn)):\n Set('ML'=mlStr):\n mlSteps := [op(mlStep
s), mlStr]:\n infoStr := \"The final answer is displayed\":\n \+
Set('info'=infoStr):\n\n end if: # end if nops(hint)=0\n\n end u
se:\nend proc: # end getFinalAnswer\n\n###############################
#############################\n\n#####################################
#######################\n# pre: null\n# post: a complete solution for \+
the current problem is shown\n\nundoLastStep := proc()\n local i, inf
oStr, mlStr:\n use Student:-Calculus1, Maplets:-Tools in\n\n if (n
ops(steps) > 1) and (not evalb(iniMlStr=\"\")) then\n steps:=[seq
(steps[i], i=1..nops(steps)-1)]:\n mlSteps:=[seq(mlSteps[i], i=1.
.nops(mlSteps)-1)]:\n\n Set('ML'=mlSteps[nops(mlSteps)]):\n \+
infoStr := \"Undo last step\":\n Set('info'=infoStr):\n if n
ops(steps)=1 then Set(undomenu(enabled)=false) end if:\n else \n \+
infoStr := \"Undo is not available\":\n Set('info'=infoStr):\n
end if : # end if nops(steps)\n\n end use:\nend proc: # end undoL
astStep\n\n###########################################################
#\n\n##################################################\n# pre: null\n
# post: a complete solution for the current problem is shown\n\nshowAl
lSteps := proc(boo1, boo2)\n local intEqn, hint, mlStr, infoStr:\n u
se Student:-Calculus1, Maplets:-Tools in\n\n if nops(steps)=0 then
\n startRule():\n end if:\n \n intEqn := steps[nops(step
s)]:\n hint := [Hint(intEqn)][1]:\n\n if nops(hint)=0 then\n \+
infoStr := \"No rule could be applied, or the question is done\":\n \+
Set('info'=infoStr):\n \n else \n mlStr := Get('ML'):\n
\n while nops(hint)>0 do\n infoStr := cat(convert(hint,str
ing),\" is being applied.\"):\n Set('info'=infoStr):\n i
ntEqn := Rule[hint](intEqn):\n if boo1 then\n mlStr :=
addMathML2(mlStr,rhs(intEqn),hint):\n elif boo2 then\n \+
mlStr := addMathML3(mlStr,rhs(intEqn),hint):\n else\n \+
mlStr := addMathML(mlStr,rhs(intEqn)):\n end if:\n ste
ps := [op(steps),intEqn]:\n if nops(steps)=2 then Set(undomenu(
enabled)=true) end if:\n mlSteps := [op(mlSteps),mlStr]:\n \+
hint := [Hint(intEqn)][1]: \n end do:\n \n infoStr := \+
\"Exporting the full solution ...\":\n Set('info'=infoStr):\n \+
Set('ML'=mlStr):\n infoStr := \"A complete solution is displaye
d\":\n Set('info'=infoStr): \n\n end if: # end if nops(hint)=
0\n \n \n end use:\nend proc: # showAllSteps\n\n#############
###############################################\n\n###################
#########################################\n# pre: name is a valid inte
gration rule \n# fun is in a valid algebraic expression or functi
on \n# post: pop up a Window with the description of the rule 'name'\n
\naboutRule := proc(name,fun)\n local eqn, intEqn, understoodRules:\n
use Student:-Calculus1, Maplets:-Tools in\n\n understoodRules := \+
rhs(Understand(Int)):\n Understand(Int,'none'):\n \n intEqn :
= Int(fun,x): \n eqn := intEqn=rhs(Rule[name](intEqn)): \n\nif f
un <> x^n then\n Set('ruleWin(title)'=cat(convert(name,string),\" r
ule\")):\n Set('ML_rule'=MathML:-ExportPresentation(eqn)):\n\nelse
\n Set('ruleWin(title)'=cat(convert(name,string),\" rule\")):\n \+
Set('ML_rule'=\n\"\"):
\n\nend if;\n\n Understand(Int, op(understoodRules)): \n \n end
use: \nend proc: # end aboutRule\n###################################
#########################\n\n#########################################
###################\n# pre: name is a valid definite integration rule \+
\n# post: pop up a Window with the description of the rule 'name'\n\na
boutDefRule := proc(name)\n local eqn, intEqn, understoodRules:\n us
e Student:-Calculus1, Maplets:-Tools in\n\n understoodRules := rhs(
Understand(Int)):\n Understand(Int,'none'):\n \n if name=flip t
hen\n intEqn := Int(f(x),x=a..b): \n eqn := intEqn=rhs(Rule[
flip](intEqn)): \n elif name=join then\n intEqn := Int(f(x),x
=a..c)+Int(f(x),x=c..b):\n eqn := intEqn=rhs(Rule[join](intEqn)):
\n else\n intEqn := Int(f(x),x=a..b): \n eqn := intEqn=
rhs(Rule[split,c](intEqn)): \n end if:\n\n Set('ruleWin(title)'
=cat(convert(name,string),\" rule\")):\n # Set('ML_rule'=MathML:-Ex
portPresentation(eqn)):\n\n Understand(Int, op(understoodRules)): \+
\n \n return MathML:-ExportPresentation(eqn):\n end use: \nend p
roc: # end aboutRule\n\n##############################################
##############\n\n####################################################
########\n# pre: aRule is a valid integration rule\n# post: if ruleSta
te=true, aRule is understood\n# else, aRule is removed from unde
rsto0d integration rules\n\nchangeUnderstoodRules := proc(aRule, ruleS
tate)\n use Student:-Calculus1 in\n if ruleState=true then \n \+
Understand(Int,aRule):\n else\n forgetUnderstoodRule(aRule):
\n end if:\n end use: \nend proc: # end changeUnderstoodRules\n\n#
###########################################################\n\n#######
#####################################################\n# pre: aRule is
a valid integration rule \n# post: aRule is removed from understood i
ntegration rules\n\nforgetUnderstoodRule := proc(aRule)\n local rules
:\n use Student:-Calculus1 in\n rules := rhs(Understand(Int)):\n \+
rules := subs(aRule=NULL,rules):\n Understand(Int,'none'):\n i
f nops(rules)>0 then\n Understand(Int,op(rules));\n end if:\n \+
end use:\nend proc:\n################################################
############\n\n######################################################
######\n# pre: null\n# post: clears the historic record of all steps\n
\nclearSteps := proc()\n use Student:-Calculus1, Maplets:-Tools in\n \+
Set('ML'=\"\"): Set('info'=\"\"): \n Clear(all): steps:=[]: mlSt
eps:=[]:\n Set(undomenu(enabled)=false) \n end use:\nend proc: # e
nd clearSteps()\n\n###################################################
#########\n\n#########################################################
###\n# pre: Maple 8 or higher is installed\n# post: run Step-by-Step I
ntegration Solver\n\nrunIntMaplet := proc()\n\nlocal maplet, bc, dc, l
c:\nbc := 'background'=\"#DDFFFF\":\ndc := 'background'=\"#CCFFFF\":\n
lc := 'background'=\"#EEFFFF\":\n\nuse Maplets, Maplets:-Elements, Stu
dent:-Calculus1 in\n\nmaplet := Maplet( \n 'onstartup'=RunWindow('int
Win'),\n\n############################################################
\n\n Font['F1'](\"Default\", 'bold'='true', 'size'=14),\n Font['F2']
(\"Default\", 'italic'='true', 'size'=12), \n\n#######################
#####################################\n \n Window['intWin']( 'menuba
r'='intMB',\n 'resizable'='false', \n 'title'=\"Calculus 1 - Ste
p-by-Step Indefinite & Definite Integrals Solver\",\n BoxColumn(bc,
\n\n BoxRow('border'='true','inset'=0,'spacing'=0, \n 'ca
ption'=\"Enter a function\", bc, \n Label('caption'=\"Function \+
\", 'font'='F1',bc),\n TextField['TF_fun']('value'=3*sin(x), '
width'=22, lc),\n Label('caption'=\" Variable \", 'font'='F1',
bc), \n TextField['TF_var'](\"x\",4,lc),\n Label('captio
n'=\" from \", 'font'='F1', bc),\n TextField['TF_lower']('width
'=5, lc),\n Label('caption'=\" to \", 'font'='F1',bc), \n \+
TextField['TF_upper']('width'=5, lc) \n ), # end BoxRow\n\n \+
BoxRow('inset'=0,'spacing'=0, bc, \n BoxColumn('border'='tr
ue', 'inset'=0, 'spacing'=0, \n 'caption'=\"Note: To find ant
iderivatives (indefinite integrals) omit limits of integration above.
\", bc, \n BoxRow(MathMLViewer['ML']('height'=470, 'width'=40
0, lc), bc),\n BoxRow('halign'='right', bc,\n Butt
on(\"Start\", \n 'onclick'=Evaluate('function'='startRule
()'),\n 'tooltip'=\"Initialize to find a integration\", l
c),\n Button(\"Final Ans\", \n 'onclick'=Evalu
ate('function'='getFinalAnswer()'),\n 'tooltip'=\"Get the
final answer\", lc), \n Button(\"All Steps\", \n \+
'onclick'=Evaluate('function'='showAllSteps(RMI_all2, RMI_all3)'),
\n 'tooltip'=\"Show a complete solution\", lc),\n \+
Button(\"Clear\", \n 'onclick'=Evaluate('function'='c
learSteps()'),\n 'tooltip'=\"Clear output and problem his
tory\", lc),\n Button(\"Close\", Shutdown(), 'tooltip'=\"cl
ose\", lc) \n ) # end BoxRow\n ), # end BoxColumn\n\n \+
BoxColumn('inset'=0, 'inset'=0, 'spacing'=0, bc, \n\n \+
BoxRow('border'='true', 'caption'=\"Messages\", \n 'in
set'=0, 'spacing'=0, bc, \n BoxCell(\n TextBo
x['info']('editable'='false',\n 'value'=\"\", lc, \n \+
'tooltip'=\"Message\", \n 'height'=4, 'wi
dth'=24 \n ) # end TextBox\n ) # end BoxCell\n
), # end BoxRow \n\n BoxRow('border'='true
', 'caption'=\"Hints\", \n 'inset'=0, 'spacing'=10, bc
, \n BoxCell(Button['B_getHint'](\"Obtain a Hint\", \n \+
'onclick'=Evaluate('function'='getHint()'), \n \+
'tooltip'=\"Receive a Hint\", lc)),\n BoxCell(But
ton['B_applyHint'](\"Apply the Hint\", \n 'onclick'=
Evaluate('function'='applyHint()'), \n 'tooltip'=\"A
pply the Hint\", lc))\n ), # end BoxRow\n\n BoxColum
n('border'='true', 'inset'=0, 'spacing'=0,\n 'capt
ion'=\"Integration Rules\", bc, \n BoxRow('halign'='left', \+
'inset'=0, 'spacing'=3, bc,\n BoxCell('halign'='left',\n \+
Button['B_constant'](\" Constant \", lc, \n \+
Evaluate('function'='applyRule(constant)'), \n \+
'tooltip'=\"Int(c, x)= c*x or Int(c, x=a..b) = c*b - c*a\")\n \+
), # BoxCell\n BoxCell('halign'='left',\n \+
Button['B_constantmultiple'](\" Constant Multiple\", lc, \n \+
Evaluate('function'='applyRule(constantmultiple)'), \n \+
'tooltip'=\"Int(c*f(x)) = c*Int(f(x))\")\n \+
) # BoxCell\n ), # BoxRow\n\n BoxRow('halign'=
'left', 'inset'=0, 'spacing'=1, bc, \n BoxCell('halign'='
left',\n Button['B_identity'](\"Identity\", lc, \n \+
Evaluate('function'='applyRule(identity)'), \n \+
'tooltip'=\"Int(x,x) = x^2/2\")\n ), # BoxCell\n \+
BoxCell('halign'='left',\n Button['B_sum'](
\"Sum\", lc, \n Evaluate('function'='applyRule(sum)')
, \n 'tooltip'=\"Apply sum rule: Int(f(x)+g(x)) = Int
(f(x)) + Int(g(x))\")\n ), # BoxCell\n BoxCe
ll('halign'='left',\n Button['B_difference'](\"Differen
ce\", lc, \n Evaluate('function'='applyRule(differenc
e)'), \n 'tooltip'=\"Int(f(x)-g(x)) = Int(f(x)) - Int
(g(x))\")\n ) # BoxCell\n ), # BoxRow\n\n \+
BoxRow('halign'='left', 'inset'=0, 'spacing'=5, bc,\n \+
BoxCell('halign'='left',\n Button['B_power'](\"Powe
r \", lc, \n Evaluate('function'='applyRule(power)'),
\n 'tooltip'=\"Int(x^n, x) = x^(n+1)/(n+1)\")\n \+
), # BoxCell\n BoxCell('halign'='left',\n \+
Button['B_revert'](\" Revert \", lc, \n Eval
uate('function'='applyRule(revert)'),\n 'tooltip'=\"R
everts a change of variables substitution\")\n ), # BoxCe
ll\n BoxCell('halign'='left', \n Button['B
_solve'](\" Solve \", lc, \n Evaluate('function'='app
lyRule(solve)'), \n 'tooltip'=\"Algebraically solve f
or the integral appeared more than once\")\n ) # end BoxC
ell\n ) # end BoxRow\n ), # end Column\n\n \+
BoxColumn('border'='true', 'inset'=0, 'spacing'=0,\n \+
'caption'=\"Integration Rules with Arguments\", bc,\n \+
BoxRow('inset'=0, 'spacing'=0, bc,\n Button['B_parts'](\"
Int By Parts\", lc, \n 'onclick'=Evaluate('function'='a
pplyRuleParts()'), \n 'tooltip'=\"Int(f(x)*Diff(g(x),x)
,x) = f(x)*g(x)-Int(g(x)*Diff(f(x),x),x)\" ),\n Label(\" f(
x)=\", dc), \n TextField['TF_parts_f']('width'=3, lc), \n \+
Label(\" g(x)=\", dc), \n TextField['TF_parts_g']
('width'=3, lc) \n ), # end BoxRow\n \n Bo
xRow('inset'=0, 'spacing'=0, bc,\n BoxColumn('halign'='le
ft', 'inset'=0, 'spacing'=0, bc, \n Button['B_rewrite']
(\"Rewrite \", lc, \n 'onclick'=Evaluate('function'='
applyRuleRewrite()'), \n 'tooltip'=\"Change the form \+
of the expression\"),\n Button['B_change'](\"Change\", \+
lc, \n 'onclick'=Evaluate('function'='applyRuleChange
()'), \n 'tooltip'=\"Change the variable of the integ
ration\")\n ), # BoxColumn\n TextBox['TB_arg
s'](\n 'value'=\"\", lc,\n 'tooltip'=\"A
rguments of the Rules\", \n 'height'=2, 'width'=22 \n \+
) # end TextBox\n ) # end BoxRow\n ),
# end BoxColumn \n\n BoxColumn('border'='true', 'inset'=0, '
spacing'=0,\n 'caption'=\"Function Rules\", bc, \n
BoxRow('halign'='left', 'inset'=0, 'spacing'=0, bc, \n \+
Label('caption'=\"Enter a Function: \", bc),\n \+
TextField['TF_mathfunc']('width'=6, lc)\n ), # end BoxR
ow\n BoxRow('halign'='left', 'inset'=0, 'spacing'=5, bc, \+
\n Button['B_applyMathFunc'](\"Apply\", lc,\n \+
Evaluate('function'='applyMathFuncRule()')),\n But
ton['B_selectMathfunc'](\"Select a Function\", \n 'oncl
ick'=RunWindow('mathfuncWin'), lc)\n ) # end BoxRow\n \+
), # end BoxColumn \n\n BoxRow('border'='true', 'inset
'=0, 'spacing'=3,\n 'caption'=\"Definite Integral Rule
s\", bc, \n Button(\"Flip\", lc, \n Evaluate(
'function'='applyRule(flip)'), \n 'tooltip'=\"Int(f(x),x=
a..b) = -Int(f(x),x=b..a)\" ),\n Button(\"Join\", lc, \n \+
Evaluate('function'='applyRule(join)'), \n 't
ooltip'=\"Int(f(x),x=a..c) + Int(f(x),x=c..b) = Int(f(x),x=a..b)\" ),
\n Button(\"Split\", lc, \n 'onclick'=Evaluat
e('function'='applyRuleSplit()'), \n 'tooltip'=\"Int(f(x)
,x=a..b) = Int(f(x),x=a..c) + Int(f(x),x=c..b)\" ), \n Labe
l(\" at \", dc), \n TextField['TF_c']('width'=2, lc)\n \+
) # end BoxRow\n \n ) # end BoxColumn \n ) # end BoxR
ow\n\n ) # end BoxColumn\n ), # end Window\n\n####################
########################################\n\n Window['mathfuncWin']('r
esizable'='false',\n 'title'=\"Select a Mathematical Function\",\n \+
'defaultbutton'='B_close2',\n BoxColumn(bc, \n\n BoxRow('bo
rder'='true', 'inset'=1, 'spacing'=5, bc, \n 'caption'=\"Expone
ntial and Logarithmic Functions\", \n Button['B_exp'](\"Natural
Exponential\", lc,\n 'onclick'=Action(\n SetOpti
on('TF_mathfunc'=\"exp\"),\n CloseWindow('mathfuncWin'), \+
\n Evaluate('function'='applyRule(exp)')) \n ), # e
nd Button exp\n Button['B_ln'](\"Natural Logarithmic\", lc,\n \+
'onclick'=Action(\n SetOption('TF_mathfunc'=\"ln\"
),\n CloseWindow('mathfuncWin'), \n Evaluate('
function'='applyRule(ln)')) \n ) # end Button ln\n ), # en
d BoxRow\n\n GridLayout('border'='true', 'inset'=1, bc, \n \+
'caption'=\"Trigonometric, Hyperbolic Functions and their Inverses\",
\n\n GridRow(\n GridCell(Button['B_sin'](\" sin \+
\", lc,\n 'onclick'=Action(\n SetOption('TF_m
athfunc'=\"sin\"),\n CloseWindow('mathfuncWin'), \n \+
Evaluate('function'='applyRule(sin)') ) \n )), # en
d Button/GridCell\n GridCell(Button['B_cos'](\" cos \", \+
lc,\n 'onclick'=Action(\n SetOption('TF_mathfu
nc'=\"cos\"),\n CloseWindow('mathfuncWin'), \n \+
Evaluate('function'='applyRule(cos)')) \n )), # end Button
/GridCell\n GridCell(Button['B_tan'](\" tan \", lc,\n \+
'onclick'=Action(\n SetOption('TF_mathfunc'=\"t
an\"),\n CloseWindow('mathfuncWin'), \n Ev
aluate('function'='applyRule(tan)') ) \n )), # end Button/Gr
idCell\n GridCell(Button['B_cot'](\" cot \", lc,\n \+
'onclick'=Action(\n SetOption('TF_mathfunc'=\"cot
\"),\n CloseWindow('mathfuncWin'), \n Eval
uate('function'='applyRule(cot)') ) \n )), # end Button/GridC
ell\n GridCell(Button['B_sec'](\" sec \", lc,\n \+
'onclick'=Action(\n SetOption('TF_mathfunc'=\"sec\"),
\n CloseWindow('mathfuncWin'), \n Evaluate
('function'='applyRule(sec)') ) \n )), # end Button/GridCell
\n GridCell(Button['B_csc'](\" csc \", lc,\n \+
'onclick'=Action(\n SetOption('TF_mathfunc'=\"csc\"),\n \+
CloseWindow('mathfuncWin'), \n Evaluate('f
unction'='applyRule(csc)') ) \n )) # end Button/GridCell\n \+
), # end GridRow\n \n GridRow(\n GridCell(But
ton['B_arcsin'](\" arcsin \", lc,\n 'onclick'=Action(\n \+
SetOption('TF_mathfunc'=\"arcsin\"),\n CloseW
indow('mathfuncWin'), \n Evaluate('function'='applyRule(
arcsin)') ) \n )), # end Button/GridCell\n GridCell(
Button['B_arccos'](\" arccos \", lc,\n 'onclick'=Action(\n \+
SetOption('TF_mathfunc'=\"arccos\"),\n Clo
seWindow('mathfuncWin'), \n Evaluate('function'='applyRu
le(arccos)') ) \n )), # end Button/GridCell\n GridCe
ll(Button['B_arctan'](\" arctan \", lc,\n 'onclick'=Action(
\n SetOption('TF_mathfunc'=\"arctan\"),\n \+
CloseWindow('mathfuncWin'), \n Evaluate('function'='appl
yRule(arctan)') ) \n )), # end Button/GridCell\n Gri
dCell(Button['B_arccot'](\" arccot \", lc,\n 'onclick'=Acti
on(\n SetOption('TF_mathfunc'=\"arccot\"),\n \+
CloseWindow('mathfuncWin'), \n Evaluate('function'='a
pplyRule(arccot)') ) \n )), # end Button/GridCell\n \+
GridCell(Button['B_arcsec'](\" arcsec \", lc,\n 'onclick'=A
ction(\n SetOption('TF_mathfunc'=\"arcsec\"),\n \+
CloseWindow('mathfuncWin'), \n Evaluate('function'
='applyRule(arcsec)') ) \n )), # end Button/GridCell\n \+
GridCell(Button['B_arccsc'](\" arccsc \", lc,\n 'onclick
'=Action(\n SetOption('TF_mathfunc'=\"arccsc\"),\n \+
CloseWindow('mathfuncWin'), \n Evaluate('functi
on'='applyRule(arccsc)') ) \n )) # end Button/GridCell\n \+
), # end GridRow\n \n GridRow(\n GridCell(Button[
'B_sinh'](\" sinh \", lc,\n 'onclick'=Action(\n \+
SetOption('TF_mathfunc'=\"sinh\"),\n CloseWindow('
mathfuncWin'), \n Evaluate('function'='applyRule(sinh)')
) \n )), # end Button/GridCell\n GridCell(Button['B
_cosh'](\" cosh \", lc,\n 'onclick'=Action(\n \+
SetOption('TF_mathfunc'=\"cosh\"),\n CloseWindow('ma
thfuncWin'), \n Evaluate('function'='applyRule(cosh)') )
\n )), # end Button/GridCell\n GridCell(Button['B_t
anh'](\" tanh \", lc,\n 'onclick'=Action(\n \+
SetOption('TF_mathfunc'=\"tanh\"),\n CloseWindow('math
funcWin'), \n Evaluate('function'='applyRule(tanh)') ) \+
\n )), # end Button/GridCell\n GridCell(Button['B_co
th'](\" coth \", lc,\n 'onclick'=Action(\n \+
SetOption('TF_mathfunc'=\"coth\"),\n CloseWindow('mathf
uncWin'), \n Evaluate('function'='applyRule(coth)') ) \n
)), # end Button/GridCell\n GridCell(Button['B_sech
'](\" sech \", lc,\n 'onclick'=Action(\n S
etOption('TF_mathfunc'=\"sech\"),\n CloseWindow('mathfun
cWin'), \n Evaluate('function'='applyRule(sech)') ) \n \+
)), # end Button/GridCell\n GridCell(Button['B_csch']
(\" csch \", lc,\n 'onclick'=Action(\n Set
Option('TF_mathfunc'=\"csch\"),\n CloseWindow('mathfuncW
in'), \n Evaluate('function'='applyRule(csch)') ) \n \+
)) # end Button/GridCell\n ), # end GridRow\n\n Gr
idRow(\n GridCell(Button['B_arcsinh'](\"arcsinh\", lc,\n \+
'onclick'=Action(\n SetOption('TF_mathfunc'=\"arc
sinh\"),\n CloseWindow('mathfuncWin'), \n \+
Evaluate('function'='applyRule(arcsinh)') ) \n )), # end Butt
on/GridCell\n GridCell(Button['B_arccosh'](\"arccosh\", lc,\n
'onclick'=Action(\n SetOption('TF_mathfunc'=
\"arccosh\"),\n CloseWindow('mathfuncWin'), \n \+
Evaluate('function'='applyRule(arccosh)') ) \n )), # end
Button/GridCell\n GridCell(Button['B_arctanh'](\"arctanh\", \+
lc,\n 'onclick'=Action(\n SetOption('TF_mathf
unc'=\"arctanh\"),\n CloseWindow('mathfuncWin'), \n \+
Evaluate('function'='applyRule(arctanh)') ) \n )), \+
# end Button/GridCell\n GridCell(Button['B_arccoth'](\"arccot
h\", lc,\n 'onclick'=Action(\n SetOption('TF_
mathfunc'=\"arccoth\"),\n CloseWindow('mathfuncWin'), \n
Evaluate('function'='applyRule(arccoth)') ) \n \+
)), # end Button/GridCell\n GridCell(Button['B_arcsech'](\"a
rcsech\", lc,\n 'onclick'=Action(\n SetOption
('TF_mathfunc'=\"arcsech\"),\n CloseWindow('mathfuncWin'
), \n Evaluate('function'='applyRule(arcsech)') ) \n \+
)), # end Button/GridCell\n GridCell(Button['B_arccsch'
](\"arccsch\", lc,\n 'onclick'=Action(\n SetO
ption('TF_mathfunc'=\"arccsch\"),\n CloseWindow('mathfun
cWin'), \n Evaluate('function'='applyRule(arccsch)') ) \+
\n )) # end Button/GridCell\n ) # end GridRow\n\n \+
), # end GridLayout\n\n BoxRow('border'='true', 'inset'=1, 'spac
ing'=5, bc, \n 'caption'=\"Other Maple Mathematical Functions\"
, \n Label('caption'=\"Enter a Maple Mathematical Function: \",
bc),\n TextField['TF_other'](15, lc),\n Button['B_other
'](\"Apply\",'onclick'='A_other', lc)\n ), # end BoxRow\n\n \+
BoxRow( Button['B_close2'](\"Close\",CloseWindow('mathfuncWin'), lc), \+
bc )\n\n ) # end BoxColumn\n ), # end Window\n \n#################
###########################################\n\n Window['argRuleWin'](
'defaultbutton'='closeArgRuleWin',\n 'title'=\"Using Rules with Arg
uments\",\n 'resizable'='false',\n BoxColumn('inset'=6, 'spacing
'=6, bc, \n BoxCell(\n TextBox['TB_argRule']('height'=
15, 'width'=40, lc, \n 'editable'='false', 'font'='F2', \n
'value'=\"Click the button below to see the description\"
\n ) # end TextBox\n ), # end BoxCell\n BoxRow('ins
et'=0, 'spacing'=12, bc, \n Button(\"Parts and Solve\", lc, \+
\n 'onclick'=SetOption('TB_argRule'=partsStr)),\n Bu
tton(\"Rewrite\", lc, \n 'onclick'=SetOption('TB_argRule'=
rewriteStr)),\n Button(\"Change and Revert\", lc, \n \+
'onclick'=SetOption('TB_argRule'=changeStr)),\n Button['closeA
rgRuleWin'](\"Close\", CloseWindow('argRuleWin'), lc)\n ) # end B
oxRow\n ) # end BoxColumn \n ), # end Window\n\n##################
##########################################\n\n Window['ruleWin'](\n \+
'title'=\"Integration Rule\", 'resizable'='false',\n BoxColumn('i
nset'=0, 'spacing'=5, 'inset'=10, bc, \n BoxRow('inset'=0, 'spac
ing'=0, bc, \n MathMLViewer['ML_rule']('width'=380, 'height'=8
0, lc) \n ), # end BoxRow\n BoxRow('inset'=0, 'spacing'=0, b
c, \n Button(\"Close\", 'onclick'=A_ruleWin, lc)\n ) # end
BoxRow\n ) # end BoxColumn\n ), # end ruleWin\n\n################
############################################\n\n Window['helpWin']( '
resizable'='false',\n 'title'=\"Using the Step-by-Step Integration \+
Problem Solver Maplet\",\n BoxColumn('border'='true', 'inset'=0, 's
pacing'=8, bc,\n BoxCell(\n TextBox('height'=24, 'width'=4
0, lc,\n 'editable'='false', 'font'='F1', 'foreground'=\"#333
399\",\n 'value'=helpStr\n ) # end TextBox\n ), #
end BoxCell\n BoxRow('inset'=0, 'spacing'=0, bc,\n Button
(\"Close\", lc, \n CloseWindow('helpWin'))\n ) # end Bo
xRow\n ) # end BoxColumn\n ), # end helpWin\n\n###################
#########################################\n\n MenuBar['intMB'](\n\n \+
Menu(\"File\",\n MenuItem(\"Start to Solve\", \n 'onclic
k'=Evaluate('function'='startRule()')),\n MenuItem(\"Final Answer
\", \n 'onclick'=Evaluate('function'='getFinalAnswer()')),\n \+
MenuItem(\"Show All Steps\", \n 'onclick'=Evaluate('function
'='showAllSteps(RMI_all2, RMI_all3)')),\n MenuSeparator(),\n \+
MenuItem(\"Obtain a Hint\", \n 'onclick'=Evaluate('function'='
getHint()')),\n MenuItem(\"Apply the Hint\", \n 'onclick'=
Evaluate('function'='applyHint()')),\n MenuSeparator(),\n Me
nuItem['undomenu'](\"Undo\", 'enabled'=false, \n 'onclick'=Eval
uate('function'='undoLastStep()')), \n MenuSeparator(),\n Me
nuItem(\"Clear\", \n 'onclick'=Evaluate('function'='clearSteps(
)')),\n MenuSeparator(),\n MenuItem(\"Close\", Shutdown())\n
), # end Menu/File\n \n Menu(\"Rule Definition\",\n Menu
Item(\"Constant Rule\", 'onclick'='A_i_constant'),\n MenuItem(\"C
onstant Multiple\", 'onclick'='A_i_constantmultiple'),\n MenuSepa
rator(),\n MenuItem(\"Sum Rule\", 'onclick'='A_i_sum'),\n Me
nuItem(\"Difference Rule\", 'onclick'='A_i_difference'),\n MenuSe
parator(),\n MenuItem(\"Identity Rule\", 'onclick'='A_i_identity'
),\n MenuItem(\"Power Rule\", 'onclick'='A_i_power'),\n Menu
Separator(),\n MenuItem(\"Flip Rule\", 'onclick'='A_i_flip'),\n \+
MenuItem(\"Join Rule\", 'onclick'='A_i_join'),\n MenuItem(\"S
plit Rule\", 'onclick'='A_i_split'),\n MenuSeparator(),\n Me
nuItem(\"Integrate by Parts\", 'onclick'='A_i_parts'),\n MenuItem
(\"Solve Integral\", 'onclick'='A_i_parts'),\n MenuSeparator(),\n
MenuItem(\"Rewrite Expression\", 'onclick'='A_i_rewrite'),\n \+
MenuSeparator(),\n MenuItem(\"Change (Int Variable)\", 'onclick
'='A_i_change'),\n MenuItem(\"Revert (Int Variable)\", 'onclick'=
'A_i_change'),\n MenuSeparator(),\n MenuItem(\"Natural Expon
ential\", 'onclick'='A_i_exp'),\n MenuItem(\"Natural Logorithm\",
'onclick'='A_i_ln'),\n MenuSeparator(),\n Menu(\"Trigonometr
ic Functions\",\n MenuItem(\"sin\",'onclick'='A_i_sin'),\n \+
MenuItem(\"cos\",'onclick'='A_i_cos'),\n MenuItem(\"tan\",'o
nclick'='A_i_tan'),\n MenuItem(\"cot\",'onclick'='A_i_cot'),\n \+
MenuItem(\"sec\",'onclick'='A_i_sec'),\n MenuItem(\"csc
\",'onclick'='A_i_csc')\n ), # end Menu/Trig\n Menu(\"Invers
e Trigonometric Functions\",\n MenuItem(\"arcsin\",'onclick'='A
_i_arcsin'),\n MenuItem(\"arccos\",'onclick'='A_i_arccos'),\n \+
MenuItem(\"arctan\",'onclick'='A_i_arctan'),\n MenuItem(
\"arccot\",'onclick'='A_i_arccot'),\n MenuItem(\"arcsec\",'oncl
ick'='A_i_arcsec'),\n MenuItem(\"arccsc\",'onclick'='A_i_arccsc
')\n ), # end Menu/Inverse Trig\n Menu(\"Hyperbolic Function
s\",\n MenuItem(\"sinh\",'onclick'='A_i_sinh'),\n MenuIt
em(\"cosh\",'onclick'='A_i_cosh'),\n MenuItem(\"tanh\",'onclick
'='A_i_tanh'),\n MenuItem(\"coth\",'onclick'='A_i_coth'),\n \+
MenuItem(\"sech\",'onclick'='A_i_sech'),\n MenuItem(\"csch
\",'onclick'='A_i_csch')\n ), # end Menu/Hyperbolic \n Menu(
\"Inverse Hyperbolic Functions\",\n MenuItem(\"arcsinh\",'oncli
ck'='A_i_arcsinh'),\n MenuItem(\"arccosh\",'onclick'='A_i_arcco
sh'),\n MenuItem(\"arctanh\",'onclick'='A_i_arctanh'),\n \+
MenuItem(\"arccoth\",'onclick'='A_i_arccoth'),\n MenuItem(\"ar
csech\",'onclick'='A_i_arcsech'),\n MenuItem(\"arccsch\",'oncli
ck'='A_i_arccsch')\n ) # end Menu/Inverse hyperbolic\n ), # en
d Menu/About the Rule\n \n Menu(\"Apply the Rule\",\n MenuItem
(\"Constant Rule\", \n 'onclick'=Evaluate('function'='applyRule
(constant)')),\n MenuItem(\"Constant Multiple\", \n 'oncli
ck'=Evaluate('function'='applyRule(constantmultiple)')),\n MenuSe
parator(),\n MenuItem(\"Sum Rule\", \n 'onclick'=Evaluate(
'function'='applyRule(sum)')),\n MenuItem(\"Difference Rule\", \n
'onclick'=Evaluate('function'='applyRule(difference)')),\n \+
MenuSeparator(),\n MenuItem(\"Power Rule\", \n 'onclick'
=Evaluate('function'='applyRule(power)')),\n MenuItem(\"Identity \+
Rule\", \n 'onclick'=Evaluate('function'='applyRule(identity)')
),\n MenuSeparator(),\n MenuItem(\"Solve\", \n 'oncli
ck'=Evaluate('function'='applyRule(solve)')),\n MenuItem(\"Revert
\", \n 'onclick'=Evaluate('function'='applyRule(revert)')),\n \+
MenuSeparator(),\n MenuItem(\"Natural Exponential\",\n \+
'onclick'=Evaluate('function'='applyRule(exp)')),\n MenuItem(\"N
atural Logorithm\", \n 'onclick'=Evaluate('function'='applyRule
(ln)')),\n MenuSeparator(),\n Menu(\"Trigonometric Functions
\",\n MenuItem(\"sin\",\n 'onclick'=Evaluate('function
'='applyRule(sin)')),\n MenuItem(\"cos\",\n 'onclick'=
Evaluate('function'='applyRule(cos)')),\n MenuItem(\"tan\",\n \+
'onclick'=Evaluate('function'='applyRule(tan)')),\n Men
uItem(\"cot\",\n 'onclick'=Evaluate('function'='applyRule(cot
)')),\n MenuItem(\"sec\",\n 'onclick'=Evaluate('functi
on'='applyRule(sec)')),\n MenuItem(\"csc\",\n 'onclick
'=Evaluate('function'='applyRule(csc)'))\n ), # end Menu/Trig\n \+
Menu(\"Inverse Trigonometric Functions\",\n MenuItem(\"arcs
in\",\n 'onclick'=Evaluate('function'='applyRule(arcsin)')),
\n MenuItem(\"arccos\",\n 'onclick'=Evaluate('function
'='applyRule(arccos)')),\n MenuItem(\"arctan\",\n 'onc
lick'=Evaluate('function'='applyRule(arctan)')),\n MenuItem(\"a
rccot\",\n 'onclick'=Evaluate('function'='applyRule(arccot)')
),\n MenuItem(\"arcsec\",\n 'onclick'=Evaluate('functi
on'='applyRule(arcsec)')),\n MenuItem(\"arccsc\",\n 'o
nclick'=Evaluate('function'='applyRule(arccsc)'))\n ), # end Menu
/Inverse Trig\n Menu(\"Hyperbolic Functions\",\n MenuItem(
\"sinh\",\n 'onclick'=Evaluate('function'='applyRule(sinh)'))
,\n MenuItem(\"cosh\",\n 'onclick'=Evaluate('function'
='applyRule(cosh)')),\n MenuItem(\"tanh\",\n 'onclick'
=Evaluate('function'='applyRule(tanh)')),\n MenuItem(\"coth\",
\n 'onclick'=Evaluate('function'='applyRule(coth)')),\n \+
MenuItem(\"sech\",\n 'onclick'=Evaluate('function'='applyRu
le(sech)')),\n MenuItem(\"csch\",\n 'onclick'=Evaluate
('function'='applyRule(csch)'))\n ), # end Menu/Hyperbolic \n \+
Menu(\"Inverse Hyperbolic Functions\",\n MenuItem(\"arcsinh\"
,\n 'onclick'=Evaluate('function'='applyRule(arcsinh)')),\n \+
MenuItem(\"arccosh\",\n 'onclick'=Evaluate('function'='
applyRule(arccosh)')),\n MenuItem(\"arctanh\",\n 'oncl
ick'=Evaluate('function'='applyRule(arctanh)')),\n MenuItem(\"a
rccoth\",\n 'onclick'=Evaluate('function'='applyRule(arccoth)
')),\n MenuItem(\"arcsech\",\n 'onclick'=Evaluate('fun
ction'='applyRule(arcsech)')),\n MenuItem(\"arccsch\",\n \+
'onclick'=Evaluate('function'='applyRule(arccsch)'))\n ) # end
Menu/Inverse hyperbolic\n ), # end Menu/Apply Rules\n\n Menu(\"
Understood Rules\",\n CheckBoxMenuItem['CMI_constant'](\"Constant
Rule\", \n 'onclick'=Evaluate('function'='changeUnderstoodRule
s(constant,CMI_constant)') ),\n CheckBoxMenuItem['CMI_constantmul
tiple'](\"Constant Multiple\",\n 'onclick'=Evaluate('function'=
\n 'changeUnderstoodRules(constantmultiple,CMI_constan
tmultiple)') ),\n MenuSeparator(),\n CheckBoxMenuItem['CMI_s
um'](\"Sum Rule\", \n 'onclick'=Evaluate('function'='changeUnde
rstoodRules(sum,CMI_sum)') ),\n CheckBoxMenuItem['CMI_difference'
](\"Difference Rule\", \n 'onclick'=Evaluate('function'='change
UnderstoodRules(difference,CMI_sum)') ),\n MenuSeparator(), \n \+
CheckBoxMenuItem['CMI_identity'](\"Identity Rule\", \n 'onc
lick'=Evaluate('function'='changeUnderstoodRules(identity,CMI_identity
)') ),\n CheckBoxMenuItem['CMI_power'](\"Power Rule\", \n \+
'onclick'=Evaluate('function'='changeUnderstoodRules(power,CMI_power)
') ),\n MenuSeparator(),\n CheckBoxMenuItem['CMI_solve'](\"S
olve Rule\", \n 'onclick'=Evaluate('function'='changeUnderstood
Rules(solve,CMI_solve)') ),\n CheckBoxMenuItem['CMI_revert'](\"Re
vert Rule\", \n 'onclick'=Evaluate('function'='changeUnderstood
Rules(revert,CMI_revert)') ),\n MenuSeparator(), \n CheckBox
MenuItem['CMI_exp'](\"Natural Exponential\", \n 'onclick'=Eval
uate('function'='changeUnderstoodRules(exp,CMI_exp)') ),\n CheckB
oxMenuItem['CMI_ln'](\"Natural Logorithm\", \n 'onclick'=Evalua
te('function'='changeUnderstoodRules(ln,CMI_ln)') ),\n MenuSepara
tor(),\n Menu(\"Trigonometric Functions\",\n CheckBoxMenuI
tem['CMI_sin'](\"sin\", \n 'onclick'=Evaluate('function'='cha
ngeUnderstoodRules(sin,CMI_sin)') ),\n CheckBoxMenuItem['CMI_co
s'](\"cos\", \n 'onclick'=Evaluate('function'='changeUndersto
odRules(cos,CMI_cos)')),\n CheckBoxMenuItem['CMI_tan'](\"tan\",
\n 'onclick'=Evaluate('function'='changeUnderstoodRules(tan,
CMI_tan)') ),\n CheckBoxMenuItem['CMI_cot'](\"cot\", \n \+
'onclick'=Evaluate('function'='changeUnderstoodRules(cot,CMI_cot)') \+
),\n CheckBoxMenuItem['CMI_sec'](\"sec\", \n 'onclick'
=Evaluate('function'='changeUnderstoodRules(sec,CMI_sec)') ),\n \+
CheckBoxMenuItem['CMI_csc'](\"csc\", \n 'onclick'=Evaluate('
function'='changeUnderstoodRules(csc,CMI_csc)') )\n ), # end Menu
/Trig\n Menu(\"Inverse Trigonometric Functions\",\n CheckB
oxMenuItem['CMI_arcsin'](\"arcsin\", \n 'onclick'=Evaluate('f
unction'='changeUnderstoodRules(arcsin,CMI_arcsin)') ),\n Check
BoxMenuItem['CMI_arccos'](\"arccos\", \n 'onclick'=Evaluate('
function'='changeUnderstoodRules(arccos,CMI_arccos)') ),\n Chec
kBoxMenuItem['CMI_arctan'](\"arctan\", \n 'onclick'=Evaluate(
'function'='changeUnderstoodRules(arctan,CMI_arctan)') ),\n Che
ckBoxMenuItem['CMI_arccot'](\"arccot\", \n 'onclick'=Evaluate
('function'='changeUnderstoodRules(arccot,CMI_arccot)') ),\n Ch
eckBoxMenuItem['CMI_arcsec'](\"arcsec\", \n 'onclick'=Evaluat
e('function'='changeUnderstoodRules(arcsec,CMI_arcsec)') ),\n C
heckBoxMenuItem['CMI_arccsc'](\"arccsc\", \n 'onclick'=Evalua
te('function'='changeUnderstoodRules(arccsc,CMI_arccsc)') )\n ), \+
# end Menu/Inverse Trig\n Menu(\"Hyperbolic Functions\",\n \+
CheckBoxMenuItem['CMI_sinh'](\"sinh\", \n 'onclick'=Evaluate
('function'='changeUnderstoodRules(sinh,CMI_sinh)') ),\n CheckB
oxMenuItem['CMI_cosh'](\"cosh\", \n 'onclick'=Evaluate('funct
ion'='changeUnderstoodRules(cosh,CMI_cosh)') ),\n CheckBoxMenuI
tem['CMI_tanh'](\"tanh\", \n 'onclick'=Evaluate('function'='c
hangeUnderstoodRules(tanh,CMI_tanh)') ),\n CheckBoxMenuItem['CM
I_coth'](\"coth\", \n 'onclick'=Evaluate('function'='changeUn
derstoodRules(coth,CMI_coth)') ),\n CheckBoxMenuItem['CMI_sech'
](\"sech\", \n 'onclick'=Evaluate('function'='changeUnderstoo
dRules(sech,CMI_sech)') ),\n CheckBoxMenuItem['CMI_csch'](\"csc
h\", \n 'onclick'=Evaluate('function'='changeUnderstoodRules(
csch,CMI_csch)') )\n ), # end Menu/Hyperbolic \n Menu(\"Inv
erse Hyperbolic Functions\",\n CheckBoxMenuItem['CMI_arcsinh'](
\"arcsinh\", \n 'onclick'=Evaluate('function'='changeUndersto
odRules(arcsinh,CMI_arcsinh)') ),\n CheckBoxMenuItem['CMI_arcco
sh'](\"arccosh\", \n 'onclick'=Evaluate('function'='changeUnd
erstoodRules(arccosh,CMI_arccosh)') ),\n CheckBoxMenuItem['CMI_
arctanh'](\"arctanh\", \n 'onclick'=Evaluate('function'='chan
geUnderstoodRules(arctanh,CMI_arctanh)') ),\n CheckBoxMenuItem[
'CMI_arccoth'](\"arccoth\", \n 'onclick'=Evaluate('function'=
'changeUnderstoodRules(arccoth,CMI_arccoth)') ),\n CheckBoxMenu
Item['CMI_arcsech'](\"arcsech\", \n 'onclick'=Evaluate('funct
ion'='changeUnderstoodRules(arccoth,CMI_arccoth)') ),\n CheckBo
xMenuItem['CMI_arccsch'](\"arccsch\", \n 'onclick'=Evaluate('
function'='changeUnderstoodRules(arccoth,CMI_arccoth)') )\n ) # e
nd Menu/Inverse hyperbolic\n ), # end Menu/Understood Rules\n \n \+
Menu(\"Help\", \n RadioButtonMenuItem['RMI_all1']('value'=false
, 'group'='RMI_all',\n \"Hide the Rule in 'All Steps'\" ),\n \+
RadioButtonMenuItem['RMI_all2']('value'=true, 'group'='RMI_all', \n
\"Show the Rule on the Right in 'All Steps'\" ), \n Radio
ButtonMenuItem['RMI_all3']('value'=false, 'group'='RMI_all',\n \+
\"Show the Rule on the Left in 'All Steps'\" ),\n MenuSeparator()
,\n RadioButtonMenuItem['RMI_single1']('value'=false, 'group'='RM
I_single',\n \"Hide the Rule in a single step\" ),\n Radio
ButtonMenuItem['RMI_single2']('value'=true, 'group'='RMI_single', \n \+
\"Show the Rule on the Right in a single step\" ), \n Radio
ButtonMenuItem['RMI_single3']('value'=false, 'group'='RMI_single',\n \+
\"Show the Rule on the Left in a single step\" ),\n MenuSep
arator(),\n MenuItem(\"Using this Maplet\", 'onclick'=RunWindow('
helpWin'))\n ) # end Menu/Help\n\n ), # end MenuBar\n\n\n#########
###################################################\n\n ButtonGroup['
RMI_all'](), ButtonGroup['RMI_single'](), \n\n########################
####################################\n\n Action['A_other'](\n SetO
ption('target'='TF_mathfunc',Argument('TF_other')),\n CloseWindow('
mathfuncWin'), \n Evaluate('function'='applyOtherRule()') \n ), #
end A_other\n\n Action['A_ruleWin'](\n SetOption('ML_rule'=\"\"),
\n CloseWindow('ruleWin')\n ), # end A_ruleWin\n \n############
################################################\n\n Action['A_i_cons
tant'](\n Evaluate('function'='aboutRule(constant, c)'),\n RunWi
ndow('ruleWin')\n ), # end A_i_constant\n \n Action['A_i_constantmul
tiple'](\n Evaluate('function'='aboutRule(constantmultiple, c*f(x))
'),\n RunWindow('ruleWin')\n ), # end A_i_constantmultiple\n \n \+
Action['A_i_sum'](\n Evaluate('function'='aboutRule(sum,f(x)+g(x))'
),\n RunWindow('ruleWin') \n ), # end A_i_sum\n\n Action['A_i_di
fference'](\n Evaluate('function'='aboutRule(difference,f(x)-g(x))'
),\n RunWindow('ruleWin') \n ), # end A_i_difference\n \n Actio
n['A_i_identity'](\n Evaluate('function'='aboutRule(identity,x)'),
\n RunWindow('ruleWin')\n ), # end A_i_identity\n \n Action['A_i
_power'](\n Evaluate('function'='aboutRule(power,x^n)'),\n RunWi
ndow('ruleWin')\n ), # end A_i_power\n\n Action['A_i_flip'](\n Ev
aluate('ML_rule'='aboutDefRule(flip)'),\n RunWindow('ruleWin')\n )
, # end A_i_flip\n\n Action['A_i_join'](\n Evaluate('ML_rule'='abo
utDefRule(join)'),\n RunWindow('ruleWin')\n ), # end A_i_join\n\n \+
Action['A_i_split'](\n Evaluate('ML_rule'='aboutDefRule(split)'),
\n RunWindow('ruleWin')\n ), # end A_i_split\n\n Action['A_i_part
s'](\n SetOption('TB_argRule'=partsStr),\n RunWindow('argRuleWin
')\n ), # end A_i_parts\n\n Action['A_i_rewrite'](\n SetOption('T
B_argRule'=rewriteStr),\n RunWindow('argRuleWin')\n ), # end A_i_p
arts\n\n Action['A_i_change'](\n SetOption('TB_argRule'=changeStr)
,\n RunWindow('argRuleWin')\n ), # end A_i_parts\n\n Action['A_i_
exp'](\n Evaluate('function'='aboutRule(exp,exp(x))'),\n RunWind
ow('ruleWin')\n ), # end A_i_exp\n\n Action['A_i_ln'](\n Evaluate
('function'='aboutRule(ln,ln(x))'),\n RunWindow('ruleWin')\n ), # \+
end A_i_ln\n\n Action['A_i_sin'](\n Evaluate('function'='aboutRule
(sin,sin(x))'),\n RunWindow('ruleWin')\n ), # end A_i_sin\n\n Act
ion['A_i_cos'](\n Evaluate('function'='aboutRule(cos,cos(x))'),\n \+
RunWindow('ruleWin')\n ), # end A_cos\n\n Action['A_i_tan'](\n \+
Evaluate('function'='aboutRule(tan,tan(x))'),\n RunWindow('ruleWin'
)\n ), # end A_i_tan\n\n Action['A_i_cot'](\n Evaluate('function'
='aboutRule(cot,cot(x))'),\n RunWindow('ruleWin')\n ), # end A_i_c
ot\n\n Action['A_i_sec'](\n Evaluate('function'='aboutRule(sec,sec
(x))'),\n RunWindow('ruleWin')\n ), # end A_i_sec\n\n Action['A_i
_csc'](\n Evaluate('function'='aboutRule(csc,csc(x))'),\n RunWin
dow('ruleWin')\n ), # end A_i_csc\n\n Action['A_i_arcsin'](\n Eva
luate('function'='aboutRule(arcsin,arcsin(x))'),\n RunWindow('ruleW
in')\n ), # end A_i_arcsin\n\n Action['A_i_arccos'](\n Evaluate('
function'='aboutRule(arccos,arccos(x))'),\n RunWindow('ruleWin')\n \+
), # end A_i_cos\n\n Action['A_i_arctan'](\n Evaluate('function'=
'aboutRule(arctan,arctan(x))'),\n RunWindow('ruleWin')\n ), # end \+
A_i_arctan\n\n Action['A_i_arccot'](\n Evaluate('function'='aboutR
ule(arccot,arccot(x))'),\n RunWindow('ruleWin')\n ), # end A_i_arc
cot\n\n Action['A_i_arcsec'](\n Evaluate('function'='aboutRule(arc
sec,arcsec(x))'),\n RunWindow('ruleWin')\n ), # end A_i_arcsec\n\n
Action['A_i_arccsc'](\n Evaluate('function'='aboutRule(arccsc,arc
csc(x))'),\n RunWindow('ruleWin')\n ), # end A_i_arccsc\n\n Actio
n['A_i_sinh'](\n Evaluate('function'='aboutRule(sinh,sinh(x))'),\n \+
RunWindow('ruleWin')\n ), # end A_i_sinh\n\n Action['A_i_cosh'](
\n Evaluate('function'='aboutRule(cosh,cosh(x))'),\n RunWindow('
ruleWin')\n ), # end A_i_cosh\n\n Action['A_i_tanh'](\n Evaluate(
'function'='aboutRule(tanh,tanh(x))'),\n RunWindow('ruleWin')\n ),
# end A_i_tanh\n\n Action['A_i_coth'](\n Evaluate('function'='abo
utRule(coth,coth(x))'),\n RunWindow('ruleWin')\n ), # end A_i_coth
\n\n Action['A_i_sech'](\n Evaluate('function'='aboutRule(sech,sec
h(x))'),\n RunWindow('ruleWin')\n ), # end A_i_sech\n\n Action['A
_i_csch'](\n Evaluate('function'='aboutRule(csch,csch(x))'),\n R
unWindow('ruleWin')\n ), # end A_i_csch\n\n Action['A_i_arcsinh'](\n
Evaluate('function'='aboutRule(arcsinh,arcsinh(x))'),\n RunWind
ow('ruleWin')\n ), # end A_i_arcsinh\n\n Action['A_i_arccosh'](\n \+
Evaluate('function'='aboutRule(arccosh,arccosh(x))'),\n RunWindow(
'ruleWin')\n ), # end A_i_cosh\n\n Action['A_i_arctanh'](\n Evalu
ate('function'='aboutRule(arctanh,arctanh(x))'),\n RunWindow('ruleW
in')\n ), # end A_i_arctanh\n\n Action['A_i_arccoth'](\n Evaluate
('function'='aboutRule(arccoth,arccoth(x))'),\n RunWindow('ruleWin'
)\n ), # end A_i_arccoth\n\n Action['A_i_arcsech'](\n Evaluate('f
unction'='aboutRule(arcsech,arcsech(x))'),\n RunWindow('ruleWin')\n
), # end A_i_arcsech\n\n Action['A_i_arccsch'](\n Evaluate('func
tion'='aboutRule(arccsch,arccsch(x))'),\n RunWindow('ruleWin')\n )
, # end A_i_arccsch\n\n###############################################
#############\n\n Action['A']()\n\n): # end maplet\n\n##############
##############################################\n\nUnderstand(Int,none)
:\nMaplets[Display](maplet) :\n\nend use: # end use\nend proc: # end \+
runIntMaplet\n\n######################################################
######\n\nend module: # end IntMaplet()\nIntMaplet:-runIntMaplet();" }
}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{EXCHG }}{MARK "3 0"
0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }