# Lisa Cangelose # Sonia Bendjemil restart: with(Maplets[Elements]):with(Maplets[Tools]):with(plots):with(plottools): StartEngine(); lightorange:="#FFB300": #darkgreen:=COLOR(RGB, .9, 1, .9): randomize(): great := [ " Bullseye. ", " Right on the mark. ", " Great. ", " That's absolutely right. ", " Awesome. You're unstoppable. ", " Correct. ", " WOW, nailed that one. ", " You got it! ", " YES! Right on. ", " Way to go. ", " Don't stop now. ", " I knew you could do it! ", " Perfect. You're unstoppable. ", " Radical Dude. ", " Power house. ", " Sweet! Keep on Rockin'. ", " You rock! ", " You got those mad skills. ", " Awesome! ", " Wowzers! That was great! ", " Awesome man! ", " Good job! You really know what you are doing. ", " You're awesome kid. ", " Tearing it up. ", " Right on the money. ", " High Five!!!!! ", " Cool Beans. ", " What a nerd! ", " You're so money. ", " You're a genious. ", " You hit the nail on the head. ", " Excellent! ", " If I had a cookie, I'd give it to you. ", " You're a winner. ", " That's a winner. ", " Whoop! Way to go. ", " That's the way, ah ha ah ha, I like it. ", " Oh yeah! ", " You're the bomb! ", " That was fantastic! ", " Oh Snap! ", " That's krunk! " ]: randgreat := rand(1..nops(great)): nextquest := [ "Keep it up.", "Keep going.", "On to the next function.", "Try another function.", "Find the derivative of another inverse function." ]: randnext := rand(1..nops(nextquest)): sorry := [ " Sorry, that's not right. ", " Nope, but don't give up. ", " Not quite, it's a little off. ", " Bummer, thought you would get it this time. ", " Close, but no cigar. ", " Slightly off. ", " If you need help, please ask a human. ", " I don't know where you went wrong. ", " Sorry, killer problem. ", " No, but don't blow it off. ", " D'oh! ", " That's whack. ", " Yikes! Really close. You'll get it next time. ", " Pucha! Thought you would get it this time. ", " Nice try, but your answer is wrong. ", " Ask your neighbor for help. ", " Brutal kid. ", " That won't fly. ", " So close and yet so far. ", " So, that was just practice. ", " Ooooh...close. ", " A swing and a miss. ", " Better luck next time. ", " Oops. ", " Tilt. Play again. ", " I know you can do better. ", " Sorry Charlie. ", " Better luck next time. ", " Tisk, tisk. It's a tough one. ", " It takes a lot of wrongs to make a right. ", " Even Einstein didn't get everything right. ", " Oh man, you were so close. ", " Today's not your lucky day. ", " Don't quit your day job. ", " You're colder than a polar bear's toenail. " ]:# randsorry := rand(1..nops(sorry)): tryagain := [ "Try the hint.", "Fix your answer and check it again.", "Give it another try.", "Try again.", "Please try again." ]: randtry := rand(1..nops(tryagain)): showit := [ " OK That's just practice. But try doing it yourself.", " That's fine for practice. Try doing it yourself.", " Think about it and enter an answer yourself.", " Read the hint and enter an answer yourself.", " Next time, compute an answer yourself.", " So that was practice. Try doing it yourself." ]: randshow := rand(1..nops(showit)): funcs:=[2*x, x/2, 3*x, sqrt(x), x^3, x^(1/3), 1/x^2, 12/x^2, exp(x), ln(x), sin(x), cos(x)]: randfunc := rand(1..12): A[1]:=[2,4,6,8, 1, 1/2]: B[1]:=[1,2,3,4,1/2,1/4]: minis[1]:=[-10, -10, -10, -10, -2, -2]: maxis[1]:= [10, 10, 10, 10, 2, 2]: A[2]:=[1,2,3,4,1/2,1/4]: B[2]:=[2,4,6,8, 1, 1/2]: minis[2]:=[-10, -10, -10, -10, -2, -2]: maxis[2]:= [10, 10, 10, 10, 2, 2]: A[3]:=[3,6,9,12, 1, 1/2]: B[3]:=[1,2,3, 4,1/3,1/6]: minis[3]:=[-10, -15, -15, -10, -1, -1]: maxis[3]:= [10, 15, 15, 10, 1, 1]: A[4]:=[2,3, 4, 5,1/2,1/3]: B[4]:=[4,9,16,25,1/4,1/9]: minis[4]:=[0, 0, 0, 0, 0, 0]: maxis[4]:= [5, 10, 17, 27, 2, 2]: A[5]:=[8,27,64,1/8,1/27,1/64]: B[5]:=[2, 3, 4,1/2, 1/3, 1/4]: minis[5]:=[-10, -30, -70, -1, -1, -1]: maxis[5]:= [10, 30, 70, 1, 1, 1]: A[6]:=[2, 3, 4,1/2, 1/3, 1/4]: B[6]:=[8,27,64,1/8,1/27,1/64]: minis[6]:=[0, 0, 0, 0, 0, 0]: maxis[6]:= [10, 30, 70, 1, 1, 1/2]: A[7]:=[1/4,1/9,1/16, 4, 9, 16]: B[7]:=[ 2, 3, 4, 1/2,1/3,1/4]: minis[7]:=[0,0,0, 0,0, 0]: maxis[7]:= [5, 5, 5, 5, 11, 18]: A[8]:=[1/12,1/3,3/4,4/3,3,12]: B[8]:=[12, 6, 4, 3, 2, 1]: minis[8]:=[0, 0, 0, 0, 0, 0]: maxis[8]:= [20, 10, 10, 10, 10, 20]: A[9]:=[1,exp(1),exp(-1),exp(2), 2, 3]: expfunc:=9: B[9]:=[0, 1, -1, 2, ln(2),ln(3)]: minis[9]:=[-5, -5, -5, -10, -5, -7]: maxis[9]:= [5, 5, 5, 10, 5, 7]: A[10]:=[0, 1, -1, 2, ln(2),ln(3)]: lnfunc:=10: B[10]:=[1,exp(1),exp(-1),exp(2), 2, 3]: minis[10]:=[-5, -5, -5, -10, -5, -7]: maxis[10]:= [5, 5, 5, 10, 5, 7]: A[11]:=[ 1/2, sqrt(2)/2, sqrt(3)/2, sqrt(3)/2, sqrt(2)/2, 1/2]: B[11]:=[Pi/6, Pi/4, Pi/3, Pi/3, Pi/4, Pi/6]: minis[11]:=[-Pi/2, -Pi/2, -Pi/2, -Pi/2, -Pi/2, -Pi/2]: maxis[11]:= [Pi/2, Pi/2, Pi/2, Pi/2, Pi/2, Pi/2]: A[12]:=[sqrt(3)/2, sqrt(2)/2, 1/2, 1/2, sqrt(2)/2, sqrt(3)/2]: B[12]:=[Pi/6, Pi/4, Pi/3, 2*Pi/3, 3*Pi/4, 5*Pi/6]: minis[12]:=[0, 0, 0, 0, 0, 0]: maxis[12]:= [Pi/2, Pi/2, Pi/2, Pi/2, Pi/2, Pi/2]: randpoint:=rand(1..6): As:=[a,b,c,p,q,r,s,t,u,v,w,z]: Bs[1]:=map(x->x/2,As): Bs[2]:=map(x->2*x,As): Bs[3]:=map(x->x/3,As): Bs[4]:=map(x->x^2,As): Bs[5]:=map(x->x^(1/3),As): Bs[6]:=map(x->x^3,As): Bs[7]:=map(x->1/x,As): Bs[8]:=map(x->12/x,As): Bs[9]:=map(x->ln(x),As): Bs[10]:=map(x->exp(x),As): Bs[11]:=map(x->arcsin(x),As): Bs[12]:=map(x->arccos(x),As): randpoints:=rand(1..12): Show_Function := proc() local p1; global randfunc, whichfunc, funcs, func, randpoint, whichpoint, A, B, As, Bs, pta, ptb, funcp, funcpga, guncpa, f0, f1, maxi, mini, plotsoff, darkgreen; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; whichfunc := randfunc(); func := funcs[whichfunc]; if Get('RB2') then whichpoint := randpoints(); pta := As[whichpoint]; ptb := Bs[whichfunc][whichpoint]; plotsoff:=true; else whichpoint := randpoint(); pta := A[whichfunc][whichpoint]; ptb := B[whichfunc][whichpoint]; mini:=minis[whichfunc][whichpoint]; maxi:=maxis[whichfunc][whichpoint]; plotsoff:=false; end if; funcp := convert(diff(func,x),radical); funcpga := eval(funcp, x=ptb); guncpa := simplify(1/funcpga); Set('a0' = pta): Set('a1' = pta): Set('a2' = pta): Set('a3' = pta): Set('a4' = pta): Set('fMML' = func): Set('b1' = " "): Set('b2' = " "): Set('fp' = " "): Set('fpga' = " "): Set('gpa' = " "): Set('b1ck' = "", 'b1ck'(background)=white, 'b1ck'(foreground)=black): Set('b2ck' = "", 'b2ck'(background)=white, 'b2ck'(foreground)=black): Set('fpck' = "", 'fpck'(background)=white, 'fpck'(foreground)=black): Set('fpgack' = "", 'fpgack'(background)=white, 'fpgack'(foreground)=black): Set('gpack' = "", 'gpack'(background)=white, 'gpack'(foreground)=black): Set('reply' = "", 'reply'(background)=white, 'reply'(foreground) = black): if whichfunc = expfunc or whicfunc = lnfunc then Set('reply' = "Enter the exponential function as exp(x).", 'reply'(background)=lightorange, 'reply'(foreground) = black) end if; Set('Bb1ck'(enabled)=true, 'Bb1ck'(background)=turquoise); Set('Bb1sh'(enabled)=true, 'Bb1sh'(background)=turquoise); Set('Bb2ck'(enabled)=true, 'Bb2ck'(background)=turquoise); Set('Bb2sh'(enabled)=true, 'Bb2sh'(background)=turquoise); Set('Bfpck'(enabled)=true, 'Bfpck'(background)=turquoise); Set('Bfpsh'(enabled)=true, 'Bfpsh'(background)=turquoise); Set('Bfpgck'(enabled)=true, 'Bfpgck'(background)=turquoise); Set('Bfpgsh'(enabled)=true, 'Bfpgsh'(background)=turquoise); Set('Bgpack'(enabled)=true, 'Bgpack'(background)=turquoise); Set('Bgpash'(enabled)=true, 'Bgpash'(background)=turquoise); if plotsoff then Set('Plot1'(enabled)=false, 'Plot1'(background)=gold); Set('Plot2'(enabled)=false, 'Plot2'(background)=gold); Set('Plot3'(enabled)=false, 'Plot3'(background)=gold); Set('Plot4'(enabled)=false, 'Plot4'(background)=gold); else Set('Plot1'(enabled)=true, 'Plot1'(background)=gold); Set('Plot2'(enabled)=true, 'Plot2'(background)=gold); Set('Plot3'(enabled)=true, 'Plot3'(background)=gold); Set('Plot4'(enabled)=true, 'Plot4'(background)=gold); end if; f0:=plot([[x,func, x=mini..maxi], [func, x, x=mini..maxi]], x=mini..maxi, y=mini..maxi, color=[green,cyan], legend=[f,g]); Set('myplot'=display(f0, scaling=constrained)); end proc: Check_b1 := proc() local user_b1; global ptb, func, pta; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; user_b1 := Get('b1'::algebraic, corrections=true, update=true): if simplify(normal(ptb - user_b1))<> 0 then Set('b1ck' = "incorrect", 'b1ck'(background)=red, 'b1ck'(foreground)=white): Set('reply' = cat("Solve the equation: ", convert(func = pta,string)), 'reply'(background)=red, 'reply'(foreground) = white): else Set('b1ck' = " correct ", 'b1ck'(background)=green, 'b1ck'(foreground)=black): Set('reply' = "", 'reply'(background)=white, 'reply'(foreground) = black): end if; end proc: Show_b1 := proc() global ptb; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('b1' = ptb): Set('b1ck'="", 'b1ck'(background)=white, 'b1ck'(foreground)=black): Set('reply' = showit[randshow()], 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Check_b2 := proc() local user_b2; global ptb; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; user_b2 := Get('b2'::algebraic, corrections=true, update=true): if simplify(normal(ptb - user_b2))<> 0 then Set('b2ck' = "incorrect", 'b2ck'(background)=red, 'b2ck'(foreground)=white): Set('reply' = "If f(b)=a then g(a)=b.", 'reply'(background)=red, 'reply'(foreground) = white): else Set('b2ck' = " correct ", 'b2ck'(background)=green, 'b2ck'(foreground)=black): Set('reply' = "", 'reply'(background)=white, 'reply'(foreground) = black): end if; end proc: Show_b2 := proc() global ptb; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('b2' = ptb): Set('b2ck'="", 'b2ck'(background)=white, 'b2ck'(foreground)=black): Set('reply' = showit[randshow()], 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Check_fp := proc() local user_fp; global funcp, x; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; user_fp := Get('fp'::algebraic, corrections=true, update=true): if simplify(normal(funcp - user_fp))<> 0 then Set('fpck' = "incorrect", 'fpck'(background)=red, 'fpck'(foreground)=white): Set('reply' = "Simply differentiate f(x).", 'reply'(background)=red, 'reply'(foreground) = white): else Set('fpck' = " correct ", 'fpck'(background)=green, 'fpck'(foreground)=black): Set('reply' = "", 'reply'(background)=white, 'reply'(foreground) = black): end if; end proc: Show_fp := proc() global funcp, x; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('fp' = funcp): Set('fpck'="", 'fpck'(background)=white, 'fpck'(foreground)=black): Set('reply' = showit[randshow()], 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Check_fpga := proc() local user_fpga; global funcpga, x, pta; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; user_fpga := Get('fpga'::algebraic, corrections=true, update=true): if simplify(normal(funcpga - user_fpga))<> 0 then Set('fpgack' = "incorrect", 'fpgack'(background)=red, 'fpgack'(foreground)=white): Set('reply' = cat("Substitute ", convert(x = g(pta),string), " into f '(x)."), 'reply'(background)=red, 'reply'(foreground) = white): else Set('fpgack' = " correct ", 'fpgack'(background)=green, 'fpgack'(foreground)=black): Set('reply' = "", 'reply'(background)=white, 'reply'(foreground) = black): end if; end proc: Show_fpga := proc() global funcpga, x; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('fpga' = funcpga): Set('fpgack'="", 'fpgack'(background)=white, 'fpgack'(foreground)=black): Set('reply' = showit[randshow()], 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Check_gpa := proc() local user_gpa; global guncpa, x; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; user_gpa := Get('gpa'::algebraic, corrections=true, update=true): if simplify(normal(guncpa - user_gpa))<> 0 then Set('gpack' = "incorrect", 'gpack'(background)=red, 'gpack'(foreground)=white): Set('reply' = cat(sorry[randsorry()], tryagain[randtry()]), 'reply'(background)=red, 'reply'(foreground) = white): else Set('gpack' = " correct ", 'gpack'(background)=green, 'gpack'(foreground)=black): Set('reply' = cat(great[randgreat()], nextquest[randnext()]), 'reply'(background)=green, 'reply'(foreground) = black): end if; end proc: Show_gpa := proc() global guncpa, x; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('gpa' = guncpa): Set('gpack'="", 'gpack'(background)=white, 'gpack'(foreground)=black): Set('reply' = showit[randshow()], 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Plot_b1:= proc() global f0, f1, pta, ptb, mini, maxi; options `Copyright 2006, Philip B. Yasskin, Texas A&M Univ.`; f1:=disk([ptb, pta], (maxi-mini)/60, color=magenta); Set('myplot'=display(f1,f0, scaling=constrained)); end proc: Plot_b2:= proc() global f0, f1, f2, pta, ptb, mini, maxi; options `Copyright 2006, Philip B. Yasskin, Texas A&M Univ.`; f2:=disk([pta, ptb], (maxi-mini)/60, color=magenta); Set('myplot'=display(f2,f1,f0, scaling=constrained)); end proc: Plot_b3:= proc() global f0, f1, f2, f3, pta, ptb, mini, maxi, funcpga; local functan; options `Copyright 2006, Philip B. Yasskin, Texas A&M Univ.`; functan:=pta+funcpga*(x-ptb); f3:=plot(functan, x=mini..maxi, y=mini..maxi, color=brown, legend="tangent to f"); Set('myplot'=display(f2,f1,f0,f3, scaling=constrained)); end proc: Plot_b4:= proc() global f0, f1, f2, f3, f4, pta, ptb, mini, maxi, guncpa; local gunctan; options `Copyright 2006, Philip B. Yasskin, Texas A&M Univ.`; gunctan:=ptb+guncpa*(x-pta); f4:=plot(gunctan, x=mini..maxi, y=mini..maxi, color=blue, legend="tangent to g"); Set('myplot'=display(f2,f1,f0,f3,f4, scaling=constrained)); end proc: Hint := proc() global pta; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('reply' = cat("Since f(g(x)) = x, the chain rule says: f'(g(x)) g'(x) = 1 Consequently, g'(x) = 1/f'(g(x)) or g'(", convert(pta,string), ") = 1/f'(g(", convert(pta,string), "))"), 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Hintb1 := proc() global func, pta; options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('reply' = cat("Solve the equation: ", convert(func = pta,string)), 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Hintb2 := proc() options `Copyright 2004, Philip B. Yasskin, Texas A&M Univ.`; Set('reply' = "If f(b)=a then g(a)=b.", 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Hintfp1 := proc() options `Copyright 2005, Philip B. Yasskin, Texas A&M Univ.`; Set('reply' = "Simply differentiate f(x).", 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Hintfp2 := proc() global pta; options `Copyright 2005, Philip B. Yasskin, Texas A&M Univ.`; Set('reply' = cat("Substitute ", convert(x = 'g'(pta),string), " into f '(x)."), 'reply'(background)=lightorange, 'reply'(foreground) = black): end proc: Derivative_Inverse := Maplet(onstartup = RunWindow(MAIN), Font[helv10]("helvetica",10), Window[MAIN]( 'title'="Derivatives of Inverse Functions", 'defaultbutton'='BHint', [ halign=none, background=wheat, 'inset'=0, 'spacing'=0, [ background=wheat, Button("New Function", Evaluate('function' = "Show_Function"), background=turquoise), RadioButton['RB1']("Numeric", 'value'=true, 'group'='BG1', background=wheat), RadioButton['RB2']("Symbolic", 'value'=false, 'group'='BG1', background=wheat), HorizontalGlue(), Button['BHint']("Hint", Evaluate('function' = "Hint"), background=turquoise), Button("Quit", Shutdown(), background=pink) ], BoxRow( BoxColumn( halign=none, 'background'=wheat, 'inset'=0, 'spacing'=0, BoxColumn( halign=none, 'background'=wheat, 'inset'=0, 'spacing'=0, 'border'=true, 'caption'="Goal: To find the derivative of an inverse function.", [ background=wheat, "Let f(x) =", MathMLViewer[fMML]('value'=MathML[Export](" "), 'width'=100, 'height'=55) ], [ background=wheat, " Let g(x) be the inverse function of f(x). Find g'(", TextField['a0']('width'=7, editable=false, background=white), ")." ] ), BoxColumn( halign=none, 'background'=wheat, 'inset'=0, 'spacing'=0, 'border'=true, 'caption'="Step 1 - Find f(b) and g(a).", [ background=wheat, "f(", TextField['b1']('width'=5, 'background'=turquoise), ") = ", TextField['a1']('width'=7, editable=false, background=white), HorizontalGlue(), Button("Hint", Evaluate('function' = "Hintb1"), background=turquoise), Button['Bb1ck']("Check", Evaluate('function' = "Check_b1"), background=wheat, enabled=false), TextField['b1ck']('width'=6, editable=false, background=white), Button['Bb1sh']("Show", Evaluate('function' = "Show_b1"), background=wheat, enabled=false), Button['Plot1']("Plot", Evaluate('function' = "Plot_b1"), background=wheat, enabled=false, background=wheat, enabled=false) ], [ background=wheat, "g(", TextField['a2']('width'=7, editable=false, background=white), ") = ", TextField['b2']('width'=5, 'background'=turquoise), HorizontalGlue(), Button("Hint", Evaluate('function' = "Hintb2"), background=turquoise), Button['Bb2ck']("Check", Evaluate('function' = "Check_b2"), background=wheat, enabled=false), TextField['b2ck']('width'=6, editable=false, background=white), Button['Bb2sh']("Show", Evaluate('function' = "Show_b2"), background=wheat, enabled=false), Button['Plot2']("Plot", Evaluate('function' = "Plot_b2"), background=wheat, enabled=false) ] ) , BoxColumn( 'halign'=none, 'background'=wheat, 'inset'=0, 'spacing'=0, 'border'=true, 'caption'="Step 2 - Find f'(x) and f'(g(a)).", [ background=wheat, "f '(x) =", TextField['fp']('width'=20, 'background'=turquoise), HorizontalGlue(), Button("Hint", Evaluate('function' = "Hintfp1"), background=turquoise), Button['Bfpck']("Check", Evaluate('function' = "Check_fp"), background=wheat, enabled=false), TextField['fpck']('width'=6, editable=false, background=white), Button['Bfpsh']("Show", Evaluate('function' = "Show_fp"), background=wheat, enabled=false), " " ], [ background=wheat, "f '(g(", TextField['a3']('width'=6, editable=false, background=white), ")) =", TextField['fpga']('width'=14, 'background'=turquoise), HorizontalGlue(), Button("Hint", Evaluate('function' = "Hintfp2"), background=turquoise), Button['Bfpgck']("Check", Evaluate('function' = "Check_fpga"), background=wheat, enabled=false), TextField['fpgack']('width'=6, editable=false, background=white), Button['Bfpgsh']("Show", Evaluate('function' = "Show_fpga"), background=wheat, enabled=false), Button['Plot3']("Plot", Evaluate('function' = "Plot_b3"), background=wheat, enabled=false) ] ), BoxColumn( 'halign'=none, 'background'=wheat, 'inset'=0, 'spacing'=0, 'border'=true, 'caption'="Step 3 - Find g'(a)", [ background=wheat, "g '( ", TextField['a4']('width'=7, editable=false, background=white), " ) = ", TextField['gpa']('width'=14, 'background'=turquoise), HorizontalGlue(), Button("Hint", Evaluate('function' = "Hint"), background=turquoise), Button['Bgpack']("Check", Evaluate('function' = "Check_gpa"), background=wheat, enabled=false), TextField['gpack']('width'=6, editable=false, background=white), Button['Bgpash']("Show", Evaluate('function' = "Show_gpa"), background=wheat, enabled=false), Button['Plot4']("Plot", Evaluate('function' = "Plot_b4"), background=wheat, enabled=false) ] )), BoxColumn( halign=none, 'background'=wheat, 'inset'=0, 'spacing'=0, 'border'=true, Plotter['myplot'](width=300, height=400) ) ), TextBox['reply']('width'=70, 'height'=2, 'editable'='false', background=white ), BoxRow('background'="#DDFFFF", 'inset'=0, 'spacing'=0, Label("Programmers: Cangelose / Bendjemil", 'font'=helv10), HorizontalGlue(), Label("Copyright 2006, D.B. Meade and P.B. Yasskin", 'font'=helv10), HorizontalGlue(), Label("v. 1.2a May 2006", 'font'=helv10) ) ]), ButtonGroup['BG1']() ): Maplets[Display]( Derivative_Inverse );