{VERSION 2 3 "DEC ALPHA UNIX" "2.3" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 256 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 257 "times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 260 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 261 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 } {CSTYLE "" -1 262 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 263 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "time s" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 268 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 269 "times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 270 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 271 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 272 "time s" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 273 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 274 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 275 "times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 276 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 277 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 278 "time s" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 279 "times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 280 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 281 "times" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Courier" 1 14 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 }1 0 0 0 6 6 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "R3 Font 0" -1 256 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 0 0 2 2 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 2 " -1 257 1 {CSTYLE "" -1 -1 "Courier" 1 14 0 0 0 0 2 2 2 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 3" -1 258 1 {CSTYLE "" -1 -1 "Times" 1 24 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 4" -1 259 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "R3 Font 5" -1 260 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 6" -1 261 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 7" -1 262 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 8" -1 263 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R 3 Font 9" -1 264 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 0 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 10" -1 265 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 0 1 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 258 266 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 266 "" 0 "" {TEXT -1 32 "Combinatorial Structures Package" }}{PARA 0 "" 0 "" {TEXT 256 1170 "\nThe combstruct package i s used to define, count and generate combinatorial structures.\n\nA co mbinatorial class is defined by writing a grammar specification that d escribes it. In this way, an extensive collection of different classe s may be defined. For example, the system applies to all regular and context-free grammars, grammars to define binary trees, plane general trees, necklaces, functional graphs, expression trees etc. \n\nGiven a grammar specification, the system creates a dedicated counting proc edure for that structure. The number of objects of size n is counted \+ in worst-case O(n^2) arithmetic operations. This bound is independent of the combinatorial class.\n\nIn the same way, an object of size n i s generated uniformly at random in worst-case O(n log(n)) arithmetic o perations. Again, this bound applies to all structures. O(n log(n)) i s the best known bound for many combinatorial classes.\n\nThis workshe et explores through examples some of the uses of the combstruct packag e. A companion worksheet explains in detail how to write a grammar sp ecification, the pre-defined structures available in combstruct, and t he use of the various functions.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "with(combstruct):" }}}{SECT 0 {PARA 3 "" 0 "" {TEXT 257 13 "Genera l Trees" }}{EXCHG {PARA 259 "" 0 "" {TEXT 258 475 "Combstruct can be u sed to analyze certain aspects of a combinatorial structure. By repea tedly generating random examples of our structure, we can get some ide a of its average behaviour. For example, say we are interested in the average height of a general tree. We can use combstruct to model such trees and analyze the results.\n\nFirst, we write a grammar specifica tion that describes a tree. A tree consists of a root node, and zero \+ or more children that are also trees.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "Tree := \{T=Prod(Z, Set(T))\}:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 259 42 "\nWe can count and generate general trees.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "seq(count([T,Tree],size=i),i=1..20);" }} {PARA 12 "" 1 "" {XPPMATH 20 "66\"\"\"F#\"\"#\"\"%\"\"*\"#?\"#[\"$:\" \"$'G\"$>(\"%U=\"%mZ\"&'[7\"&tH$\"&6y)\"'\"QN#\"'Z[j\"(f6s\"\"(w')o%\" )Gi#G\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "draw([T,Tree],si ze=5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%%ProdG6$%\"ZG-%$SetG6#-F$6 $F&-F(6$-F$6$F&%(EpsilonG-F$6$F&-F(6#F." }}}{EXCHG {PARA 0 "" 0 "" {TEXT 260 74 "\nNow we write a small procedure that takes a tree and r eturns its height.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 220 "height := \+ proc(t)\nlocal h;\n if t=Prod(Z,Epsilon) then h := 1\n else h := 1+ \+ max(op(map(procname, op(2,t))))\n fi;\n if length(t) < 100 then # s tore small values in the remember table\n height(t) := h;\n fi;\n \+ h;\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "t := draw([T,T ree],size=5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"tG-%%ProdG6$%\"ZG -%$SetG6&-F&6$F(%(EpsilonGF,F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "height(t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 261 85 "\nNext we generate many trees \+ of size 100, and for each tree we calculate its height.\n" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 16 "treesize := 100:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 16 "numtrees := 200:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "heights := array(sparse, 1..treesize):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 96 "to numtrees do \n h := height(draw ([T,Tree],size=treesize)):\n heights[h] := heights[h] + 1:\nod:" }}} {EXCHG {PARA 0 "" 0 "" {TEXT 262 91 "\nIn order to get a reasonably sm ooth curve, we will group the heights into intervals of 4.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "groupedheights := array(sparse,1..treesiz e/4):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 101 "for i to treesize do \n groupedheights[iquo(i-1,4)+1] := groupedheights[iquo(i-1,4)+1 ]+heights[i]od:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 263 74 "\nNow we plot the distribution of heights of our randomly generated trees.\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 112 "plot([seq([i*4-2, groupedheights[i ]], i=1..treesize/4)],\n title=`distribution of heights of trees of si ze 100`);" }}{PARA 13 "" 1 "" {INLPLOT "6$-%'CURVESG6$7;7$$\"\"#\"\"!F *7$$\"\"'F*F*7$$\"#5F*F(7$$\"#9F*$\"#UF*7$$\"#=F*$\"#pF*7$$\"#AF*$\"#c F*7$$\"#EF*$\"#>F*7$$\"#IF*$\"\"*F*7$$\"#MF*$\"\"\"F*7$$\"#QF*F(7$F4F* 7$$\"#YF*F*7$$\"#]F*F*7$$\"#aF*F*7$$\"#eF*F*7$$\"#iF*F*7$$\"#mF*F*7$$ \"#qF*F*7$$\"#uF*F*7$$\"#yF*F*7$$\"##)F*F*7$$\"#')F*F*7$$\"#!*F*F*7$$ \"#%*F*F*7$$\"#)*F*F*-%'COLOURG6&%$RGBG$F0!\"\"F*F*-%&TITLEG6#%Mdistri bution~of~heights~of~trees~of~size~100G" 2 322 322 322 2 0 1 0 2 9 0 4 2 1.000000 45.000000 45.000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 5384 0 0 0 0 0 0 }}}}{SECT 0 {PARA 3 "" 0 "" {TEXT 266 27 "C onnected Functional Graphs" }}{EXCHG {PARA 0 "" 0 "" {TEXT 267 899 "Ev ery function that takes distinct elements \{1,...,n\} into itself has \+ a corresponding graph. Points on the graph are either cyclic, meaning \+ that some iterate of the function takes that element back onto itself, or non-cyclic. The set of points that go to the same cyclic point is a general tree. A connected functional graph is a functional graph \+ which has one component. Such a graph corresponds to a function which , for any two elements, iterating the function on the first element a \+ certain number of times will reach the same result as iterating the fu nction on the second element a (possibly different) number of times. I n other \"words\",\na function f such that, for every x and y in \{1,. ..n\}, there exists a pair of non-negative integers (i,j) such that f^ (i)(x) = f^(j)(y).\n\nWe can count the number of all such functions on n elements by counting the number of connected functional graphs." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "fun graph := \{F=Cycle(tree), tree=Prod(Z,Set(tree))\}:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "count([F, fungraph, labelled], size=40); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"[o++++)oUQ&\\NZd/_))*HCS]=R)3Ubt n1Lr*H#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 53 "seq(count([F, fu ngraph, labelled], size=i), i=1..10);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,\"\"\"\"\"$\"#<\"$U\"\"%p:\"&w:#\"'\"3b$\"('H0o\"*`\"p)[\"\"+!o:-m$ " }}}{EXCHG {PARA 0 "" 0 "" {TEXT 268 64 "\nWe can also generate examp les of functions with this property.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "draw([F, fungraph, labelled], size=11);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%&CycleG6#-%%ProdG6$&%\"ZG6#\"\")-%$SetG6$-F'6$&F*6#\" \"%-F.6#-F'6$&F*6#\"\"&-F.6#-F'6$&F*6#\"#5-F.6$-F'6$&F*6#\"\"\"%(Epsil onG-F'6$&F*6#\"\"(-F.6#-F'6$&F*6#\"\"$FJ-F'6$&F*6#\"\"'-F.6#-F'6$&F*6# \"\"*-F.6#-F'6$&F*6#\"\"#-F.6#-F'6$&F*6#\"#6FJ" }}}}{SECT 0 {PARA 3 " " 0 "" {TEXT 269 8 "Alcohols" }}{EXCHG {PARA 0 "" 0 "" {TEXT 270 174 " We can model alcohol molecules, C_n H_\{2n+1\} OH, using combstruct. \+ We write a grammar for an alkyl, C_n H_\{2n+1\}, which is a ternary ro oted tree that moves freely in space.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "molecule := \{alkyl = Union(H, Prod(C, Set(alkyl, card=3))), H =Atom, C=Atom\}:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "count([ alkyl, molecule], size=6+2*6+1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\" #<" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 271 101 "\nThus we see that there \+ are 17 different alcohol molecules with 6 carbon atoms. Here is one of them.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "draw([alkyl, molecule], size=6+6*2+1);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%%ProdG6$%\"CG-%$S etG6%%\"HGF*-F$6$F&-F(6%-F$6$F&-F(6%F*F*-F$6$F&-F(6%F*F*F*F3F3" }}}} {SECT 0 {PARA 3 "" 0 "" {TEXT 272 9 "Necklaces" }}{EXCHG {PARA 0 "" 0 "" {TEXT 273 523 "A necklace is a classical structure from combinatori cs. It is a cycle containing beads of different colours. Necklaces a re particularly difficult to count because of the symmetries involved, since beads of the same colour are indistinguishable, and because kno wing how many necklaces there are of size n does not help us determine how many necklaces there are of size n+1, since the symmetries change for each size depending on how that integer factors. \n\nWe define a necklace that has three different colours of beads.\n" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 86 "necklace := \{N=Cycle(bead), bead=Union(red,bl ue,green),red=Atom,blue=Atom,green=Atom\}:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 43 "seq(count([N, necklace], size=i), i=1..15);" }} {PARA 11 "" 1 "" {XPPMATH 20 "61\"\"$\"\"'\"#6\"#C\"#^\"$I\"\"$:$\"$M) \"%&>#\"%Mf\"&2h\"\"&oV%\"'VE7\"'-=M\"'Nm&*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "draw([N, necklace], size=10);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%&CycleG6,%$redGF&%&greenGF'%%blueGF&F'F(F'F'" }}} {EXCHG {PARA 0 "" 0 "" {TEXT 274 44 "\nWe can also create necklaces of necklaces.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 96 "neckneck := \{NN=C ycle(Cycle(bead)), bead=Union(red,blue,green), red=Atom, blue=Atom,gre en=Atom\}:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "count([NN,nec kneck], size=80);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"XX_nU-%Q;%>0\\u 7S/iv2%>Gp?q(e%=5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "draw([ NN,neckneck], size=15);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%&CycleG6) -F$6$%&greenGF(-F$6%%%blueGF+F(-F$6#F(-F$6%F+F+%$redG-F$6&F+F+F+F0-F$6 #F+F3" }}}}{SECT 0 {PARA 3 "" 0 "" {TEXT 275 11 "Involutions" }} {EXCHG {PARA 0 "" 0 "" {TEXT 276 191 "An involution is a permutation o f elements that is its own inverse. Such a permutation must decompose into cycles of length one or two. We can count the involutions on n \+ distinct elements.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "involution \+ := \{inv = Set(Cycle(Z, card <= 2))\}:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "count([inv, involution,labelled], size=12);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"'_,9" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 277 140 "\nWe can compare this with the total number of permutations on 12 elements. (Here, we use one of the pre-defined structures of combstr uct.)\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "count(Permutation(12)); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"*+;+z%" }}}{EXCHG {PARA 0 "" 0 " " {TEXT 278 48 "\nHere is one of the involutions on 12 elements.\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "draw([inv, involution,labelled], si ze=12);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%$SetG6)-%&CycleG6$&%\"ZG6 #\"\"&&F*6#\"\"*-F'6#&F*6#\"#5-F'6#&F*6#\"\"%-F'6$&F*6#\"\"$&F*6#\"#6- F'6$&F*6#\"\"\"&F*6#\"\"(-F'6$&F*6#\"\"'&F*6#\"\")-F'6$&F*6#\"\"#&F*6# \"#7" }}}}{SECT 0 {PARA 3 "" 0 "" {TEXT 279 20 "Generating Test Data" }}{EXCHG {PARA 0 "" 0 "" {TEXT 280 859 "Another use of combstruct is t o generate tests for another program (not limited to other Maple progr ams).\n \nThe project CROAP at INRIA, France, is developing a program ming environment generator called Centaur. Given the grammar and \"pr etty-printer\" of a computer language, Centaur produces an editor that knows about the syntax and appearance of that language. The research ers of CROAP are using combstruct in order to produce test cases for t he resulting editor. A specification for the computer language is wri tten in combstruct, and the \"programs\" that combstruct produces are \+ fed to the editor. Here is one of the specifications (which they gene rate automatically from the syntax of the language) that is used to cr eate tests for Centaur. (Thanks to Laurence Rideau, , for explaining her application of combstruct.)\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 883 "Exp_spec := \{EXP_S = Union(Prod(` Exp$exp_s`,Sequence(EXP,\n card >=1))),\n EXP = Union( Prod(`Exp$assign`,VAR, EXP),\n `Exp$integer`,\n \+ Prod(`Exp$minus`,EXP, EXP),\n Prod(`Exp$plus`,EXP, EX P),\n Prod(`Exp$prod`,EXP, EXP),\n Prod(`Exp $uminus`,EXP),\n `Exp$variable`),\n VAR = Union(`Exp$var iable`),\n INTEGER = Union(`Exp$integer`),\n ENV = Union(Prod(`Exp$e nv`,Sequence(PAIR))),\n PAIR = Union(Prod(`Exp$pair`,VAR, INTEGER)), \n COMMENT = Union(`Exp$comment`),\n COMMENT_S = Union(Prod(`Exp$com ment_s`,Sequence(\n COMMENT))),\n `Exp$assign`=Ato m, `Exp$comment`=Atom,\n `Exp$comment_s`=Atom, `Exp$env`=Atom,\n `Ex p$exp_s`=Atom, `Exp$integer`=Atom,\n `Exp$meta`=Atom, `Exp$minus`=Ato m,\n `Exp$pair`=Atom, `Exp$plus`=Atom,\n `Exp$prod`=Atom, `Exp$uminu s`=Atom,\n `Exp$variable`=Atom\}:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 281 63 "\nThe test programs are then generated using the draw function .\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "draw([EXP_S, Exp_spec], size =17);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%%ProdG6$%*Exp$exp_sG-%)Sequ enceG6'-F$6$%+Exp$uminusG-F$6$F,-F$6%%*Exp$minusG-F$6%F1%-Exp$variable G-F$6%%)Exp$prodG-F$6$F,%,Exp$integerGF4F:F:F:F4-F$6%F1F:F4" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}{MARK "0 1 0" 9 } {VIEWOPTS 1 1 0 1 1 1803 }