De Taal van DNA Piter Dykstra 23 januari 2004
1 1.1
Biologie en Informatica Talen, problemen en automaten
Er zijn duizenden programmeertalen. Het lijkt wel alsof informatici beter in staat zijn om programmeertalen te maken dan er problemen mee op te lossen. En in zekere zin is dat ook zo. In de automatentheorie worden problemen en talen zelfs gelijk gesteld: ieder probleem heeft een specifieke taal en alle oplossingen voor een probleem zijn de syntactisch correcte zinnen/expressies van die taal. Met een aantal voorbeelden wil ik laten zien dat problemen kunnen worden opgelost door ze enkel te formuleren d.m.v. een taal of -wat op hetzelfde neerkomt- een automaat. De oplossing kan dan eenvoudig worden uitgerekend. Deze methode is juist geschikt voor bioinformatica, omdat daar problemen zich al als taalproblemen aandienen. De eerste twee voorbeelden hebben eenvoudige talen (reguliere expressies) een machines (eindige automaten) als object. Het algemene en het biologische probleem staan naast elkaar om de verwantschap te benadrukken. Dat thema wordt nog een keer herhaald met een contextvrije taal, waarin een algemeen en een biologisch voorbeeld worden gegeven. Voorbeeld 1: Het aap-banaan-probleem Een aap zit in een kooi waarin in het midden aan het plafond een banaan hangt. De aap kan niet bij de banaan tenzijn zij een kist, die in een hoek staat, naar het midden van de kooi schuift. Na op de kist te zijn geklommen kan de aap de banaan grijpen. We kunnen de handelingen van de aap met de volgende symbolen coderen: 1
Code l r L R k g
Aktie Aap loopt naar links Aap loopt naar rechts Aap schuift de kist naar links Aap schuift de kist naar rechts Aap klimt op de kist Aap grijpt de banaan
Als we aannemen dat er drie posities zijn (links, midden, rechts) en in de beginsituatie zit de aap links en staat de kist rechts, dan zijn de volgende strings oplossingen voor het probleem: ”Hoe krijgt de aap de banaan? ” rrLkg rlrrLkg rrLLRRLkg ... Figuur 1 laat zien hoe deze zinnen kunnen worden geproduceerd als signalen bij toestandsovergangen van een automaat. Een automaat die toestandsovergangen maakt als het bijbehorende teken wordt gelezen, herkent een zin als correct als de automaat eindigt in een dubbel omcirkelde toestand. k
a op kist
r
al kist
L
r am
ar
l
l a op kist
R
g grijp!
k r
am kist
al l L r al
r am
l
l
r ar l
R ar kist
k
a op kist
Fig. 1: Eindige automaat voor het aap-banaan-probleem. al = aap links; am = aap midden; ar = aap rechts. Er zijn drie toestanden waarin de aap op de kist kan zijn (a op kist) links (links-boven) midden(midden) en rechts (rechts-onder)
2
Een automaat die in meerdere toestanden tegelijk kan zijn, b.v. alle toestanden met de tekst al, omdat de aap wel links zit, maar de positie van de kist onbekend is, heet een indeterministische automaat. Dit principe is ook met vrucht toegepast op biologische problemen. Heel veel vragen m.b.t. sequenties kunnen m.b.v. reguliere expressies worden opgelost. Voorbeeld 2: Reguliere Expressies. Het vinden van het patroon ” atg ” kan met de RE: /atg/. En de RE: /atg(...)*[(taa)(tag)(tga)]/ levert zelfs de posities van genen. In dit verband is elke RE een taal; de eerste expressie heeft maar ´e´en correcte zin. Maar van de tweede zijn alle orf’s in een bepaald bestand syntactisch correcte zinnen. RE’s beschrijven dus talen. De categorie van de RE’s is een taalfamilie . RE’s worden ge¨evalueerd met eindige automaten. Dat zijn mentale constructies bestaande uit een eindig aantal toestanden met toestandsovergangen (zie fig 1). Overgangen treden op bij het lezen van tekens en in een eindtoestand stopt de automaat. a Start
cg a
Eind
a t
a
at
g
atg
cgt ct Fig. 2: Eindige automaat die het patroon ”atg”herkent.
En de vraag is: ”Kunnen alle bioinformatica problemen nu met RE’s worden opgelost? ”Het antwoord is: ”Wel veel, maar niet alle.” Maar gelukkig zijn er meer taalfamilies dan alleen de RE. E´en van de vragen die niet met RE’s beantwoord kan worden, is de vraag naar de secundaire struktuur van eiwitten en RNA, maar dat kan weer met uitbreidingen van RE’s. Een uitbreiding op de RE’s zijn de contextvrije talen . I.p.v. een expressie wordt er een grammatica gegeven (productieregels). 3
Voorbeeld 3: Nederlands grammatica-fragment. Een heel klein fragment van de nederlandse grammatica wordt met de volgende regels weergegeven: Zin → Onderwerp, Gezegde Onderwerp → Jan Gezegde → eet Gezegde → eet LijdendV oorwerp LijdendV oorwerp → een appel Met deze grammatica kan de zin ”Jan eet een appel” ontleed (geparsed) worden. Contexvrije talen draaien op stapelautomaten; eindige automaten maar elke toestand heeft ook nog een eigen geheugen in de vorm van een stapel (stack). Voorbeeld 4: Secundaire struktuur van RNA Figuur 3 geeft een voorbeeld van een contextvrije taal voor de secundaire structuur van RNA. Er zijn productieregels die vastleggen wat hairpins, stems en pseudoknots zijn en een stapelautomaat genereert vervolgens de sucundaire struktuur bij het lezen van de sequentie. Stapelautomaten die in meer dan ´e´en toestand tegelijk kunnen verkeren, om onbekende parameters te kunnen representeren, zijn er ook: dat zijn indeterministische stapelautomaten. Onbekendheid moet niet worden verward met onzekerheid . Onzekerheid ontstaat wanneer een toevalsproces een rol speelt bij het ontstaan van de data. Zo is er een zekere kans dat een nucleotide muteert in ´e´en van de anderen. Dat is wat anders dan dat het onbekend is welk nucleotide zich op een bepaalde basepositie bevindt. Kansmachines bestaan ook: een stochastische eindige automaat, beter bekend als HMM, heeft voor elke overgang een kansparameter. En stochastische stapelautomaten evalueren stochastische contextvrije grammatica’s en daarbij hebben de productieregels een mate van waarschijnlijkheid.
4
Fig. 3: Uit: Sakakibara e.a. (94) Stochastic Contextfree Grammars for tRNA Modeling.[Sak94]
1.2
Vertalen
Het formuleren en herkennen van talen is ´e´en ding. Een compiler controleert in eerste instantie of een programma syntactisch correct is. Daarna moet er wel executable of vertaling komen. Een ”.java” is een Java-programma, maar alleen een ”.class” -file leidt tot aktie. Dit heeft zijn analogon in de moleculaire genetica. Alles draait om de vraag: ”Wat betekent deze sequentie? ” Nu herkennen stapelautomaten wel een syntactische structuur, maar eigenlijk willen we verder. We willen in een automaat ook de betekenis, de semantische struktuur, vastleggen. Dan ontstaan de compilers, zoals we die dagelijks gebruiken - formeel gezegd: een compiler is een automaat die bij herkende string een semantische struktuur produceert. Talen van die klasse zijn b.v. van-Wijngaarden grammatica’s en attribuutgrammatica’s. Aan de productieregels worden attributen de betekenis - gehecht (gedecoreerd). Die decoraties kunnen vari¨eren in rijkdom en dat bepaalt dan weer hun soort. Zo kunnen er bij biologische sequenties ook semantische strukturen gegenereerd worden, die je ook weer als filter in een database kunt 5
gebruiken: ”Geef alle genen betrokken bij de ...glycolyse.”Wat we dus eigenlijk nodig hebben, zijn: compilers voor DNA! Voorbeeld 5: Funktie als semantische struktuur Komt nog.
2 2.1
Bioinformatica Visie
De vorige sectie mag illustreren dat informatica een veel centralere plaats inneemt in bioinformatica dan alleen de leverancier zijn van een aantal algemene onderzoekstools zoals Perl-filters en databases. Het nut van informatica gaat ook verder dan het aanleveren voor het domein speciale tools, zoals interfaces voor biologische databases: Sequence Query Language, String QL en ook Alignment QL. [P.B95, KH94, KH99, JAC01] De voorbeelden laten zien dat de biologische vragen op dezelfde wijze als de andere algemene problemen kunnen worden opgelost, als het probleem ´e´en keer in termen van talen en vertalen is geformuleerd. DNA is een programma en de uitvoering van dat programma kan door biologen bestudeerd en door computers gesimuleerd worden. De theorie is daardoor beter toetsbaar. DNA ∼ = computerprogramma Het concept dat (programmeer-)talen een (executeerbare) semantiek hebben, is rechtsstreeks toe te passen op moleculaire genetica, zelfs met de universele tools zoals grep, lex, bison: het DNA is een taal en de betekenis vinden we in een aantal vertaalslagen. funktie ∼ = compileren De theorie voor het modelleren van funktie op een mechanistisch niveau bestaat al binnen het informatica-vakgebied. Het moet alleen nog op de biologische kennis te worden toegepast. Dat is de kracht van de bioinformatica! 6
2.2
What’s in a name?
Een studierichting moleculaire genetica, die ook een aantal informatica - modulen heeft, zoals programmeren (Java, Perl) en SQL (in 24 uur), zou niet de naam bioinformatica moeten dragen. Er zijn talloze opleidingen met informatica-modulen (welke niet?); civiele techniek kan niet zonder geografische databases; bouwkunde niet zonder tekenprogramma’s waarop materiaaldatabases zijn aangesloten. Zelfs kunstopleidingen zonder computeronderdelen zijn niet meer van deze tijd. Toch hebben ze (terecht) niet het woord ” informatica ” aan hun naam toegevoegd en moleculaire genetica zou dat ook niet moeten doen. Alleen als beide vakgebieden op een ingrijpender manier aan elkaar gekoppeld worden, -het biologisch onderzoeksobject met de mechanistische methode van informatica b.v.- lijkt mij zo’n naam gerechtvaardigd. Overigens is het gebruik van 24-uurscursussen een riskante onderneming. Door het onbesproken of onderbelicht laten van de achtergronden (wat immers tijd vraagt) is de student veel moeilijker in staat om aan te sluiten bij nieuwe ontwikkelingen. Als je alleen Perl hebt geleerd en niet taalonafhankelijk hebt leren programmeren (b.v. in de O-O-stijl), is de overgang naar een andere taal (Python ligt voor de hand) moeilijk. Je bent niet in staat om de nieuwe zaken in een aanwezig kader te plaatsen. Perl moet daarom geen doel op-zich zijn, maar de programmeervaardigheid moet zich ook tot scripting uitstrekken. Als slechts het gebruik van SQL een doel is, ben je niet in staat om de ODBC-package 1 van Java te gebruiken. Bovendien zie je het nut van SQL niet in vanaf het moment dat je een RAD-tool 2 gaat gebruiken. Daarmee maak je n.l. ” in minuten ”3 databases en webapplicaties. SQL op-zichzelf is van een betrekkelijk belang, maar kennis van de mogelijkheden van relationele databases (dat houdt querying in) en hun verhouding tot andere opslagmogelijkheden, is van fundamenteler belang.
1
Open Database Connectivity; een standaard waarmee bijna alle hogeren programmeertalen communiceren met een relationele database. 2 Rapid Application Development tool 3 Volgens de makers van die pakketten tenminste - Raining Data is de leverancier van Omnis Studio
7
Hoofdmenu Omnis Studio 3.3 Database-applicatie bouwdoos voor veel platforms en veel databases.
2.3
Curriculum-modules
Het zich eigen maken van een mechanistische denktrant, zoals die in de informatica ontwikkeld wordt, vereist de actieve beheersing van tamelijk abstracte concepten als relatie, object, grammatica, enz. en is zeker niet minder complex dan het verwerven van inzicht in de problematiek van het biologisch onderzoeksterrein.4 De tijd en studiepunten die daarmee gemoeid zijn, dienen dan ook van dezelfde omvang te zijn. Als de stiefmoederlijke behandeling van de informatica- componenten in het tweede jaar (6 studiepunten (9 EC’s)5 van de 14 in 4 5
Zeker in aanmerking nemend dat we geen speciale toelatingseisen m.b.t. wiskunde hanteren. Algoritmen en Datastrukturen I 2sp, Algoritmen en Datastrukturen II 2sp, waarvan een deel
8
de aanvankelijke opzet) ook in het derde jaar wordt voortgezet, kan informatica onmogelijk boven MBO-niveau uitkomen. Dit ondanks de goede aanzetten in het eerste jaar. We zetten de zaak eens op een rijtje. De informaticaonderdelen kunnen worden ingedeeld in drie hoofdcomponenten: • Software engineering. Kernactiviteit, zoals biologie. Het programmeeronderwijs Java, Perl,, Smalltalk, logica, algoritmen, (alignment, dynamisch programmeren) Datastrukturen, parallel programmeren, automaten. Er is een goede basis gelegd in het eerste jaar, maar er is geen voortzetting van programmeerervaring met engineeringsconcepten die niet rechtsstreeks in de taal zijn geprogrammeerd (stacks, queues, tree’s b.v. maar ook de biologische datastrukturen van BioJava, BioPerl). Daardoor is de basis nu onvoldoende voor technieken die meer op het domein zijn gericht, zoals: stringalgoritmen (substrings - superstrings), datamining (clustering - classificatie), neurale netwerken, Machine learning, kansmachines, stochastische grammatica’s. Het is echt van belang dat er een thema is, waarin deze technieken centraal staan. 6 • Databases. Interfacing tussen dataproducerende software enerzijds en de verwerkende systemen anderzijds, zoals rapportgeneratoren en relationele databases, kan op verschillende niveaus, van Perlscriptjes en piping via XML-streams, waarin al wat meer controle op de data¨ıntegriteit voorkomt, tot volledige protocollen als CORBA en ODBC en speciale querytalen als AQL (Alignment Query Language) StringQL en SequenceQL. Op een aantal uiteenlopende niveaus zou, voor het verkrijgen van overzicht, ervaring moeten worden opgedaan. • Computersystemen. Een component met voornamelijk praktische kanten. te gebruiken voor lapwerk. En Databases 2 sp.. Uit het tweede jaar zijn verdwenen: Digitale Techniek en OS 2sp, Netwerken en datacommunicatie 2sp. De ondersteunende wiskunde voor datastrukturen en Databases II, 2sp 6 En is er nog aandacht voor grafisch programmeren (OpenGL, b.v)? Het programmeren met GUI’s (zoals vorig jaar - applets) is inmiddels uit het eerste jaar verdwenen.
9
Enig benul van wat een computer is, is noodzakelijk. Weten waar een operating systeem voor dient en welk os waar geschikt voor is, is redelijk relevant. Wat blijft er over van de trits: digitale techniek-OS - netwerkendatacom - client/server, die ooit goed waren voor 6 sp.? Om maar te zwijgen van wat (bio-) praktijkgerichte Unix-orientatie (commandlineprogramma’s, jobstreaming, scheduling, de makefaciliteit, sed , grep, lex , bison, het opzetten/ installeren van een pakket, C++, MPI, PVM). Aanvankelijk hadden we zelfs het inrichten van server en een subnet als leerdoel; met de inrichting van het binlokaal is er rekening mee gehouden. 2.4
Conclusie
De overeenkomst tussen DNA en computerprogramma’s is meer dan oppervlakkig. Het informatica-framework past precies op de moleculair genetische vraagstelling. Het is ook al 10 jaar een goudmijn voor onderzoek. Kan een opleiding Bioinformatica daar om heen? Het is de vraag of de student of het bedrijfsleven gediend zijn met studieonderdelen van de formule xxx-in-24-uur. Wanneer de student op de arbeidsmarkt komt zijn die al gauw 4 jaar verouderd. Bovendien is het HBO-niveau ook twijfelachtig: een HBO-er moet een keuze kunnen maken uit relevante beschikbare methoden voor een bepaalde taak. Zou er niet meer ruimte moeten zijn voor het verwerven van in/over-zicht van de informaticamogelijkheden? —oOo—
10
Index algoritmen, 9 alignment, 9 Alignment Query Language, 9 attribuutgrammatica, 5 automaat, 2, 9 stapel-, 4, 5 stochastische eindige, 4 automatentheorie, 1
mechanistisch, 6 moleculaire genetica, 6, 7 MPI, 10 netwerken, 10 object, 8 ODBC, 9 onbekendheid, 4 onzekerheid, 4 OpenGL, 9
bioinformatica, 7 classificatie, 9 client/server, 10 clustering, 9 commando’s bison, 10 grep, 10 lex, 10 make, 10 sed, 10 contextvrij, 4 contextvrije talen, 3 CORBA, 9
Perl, 9 probleem, 1 productieregels, 3 programmeren dynamisch, 9 parallel, 9 pseudoknots, 4 PVM, 10 querying, 7 RAD-tool, 7 reguliere expressie, 3 relatie, 8 RNA, 4
databases, 9 geografische, 7 materiaal, 7 decoratie, 5 digitale techniek, 10
scripting, 7 secundaire struktuur, 3 semantiek, 6 SequenceQL, 9 Smalltalk, 9 SQL, 7 stems, 4 stochastische, 4 stochastische grammatica, 9 StringQL, 9
grammatica, 8 GUI, 9 hairpins, 4 HMM, 4 indeterministische, 4 Java, 9
taal, 1
logica, 9 11
taalfamilie, 3 toestandsovergang, 2 Unix-orientatie, 10 waarschijnlijkheid, 4 Wijngaarden, 5 XML-stream, 9
12
Referenties [AS]
R. Alqu´ezar and A. Sanfeliu. An algebraic framework to represent finite state machines in single-layer recurrent neural networks.
[BD]
Ewan Birney and Richard Durbin. Dynamite: A flexible code generating language for dynamic programming methods used in sequence comparison. pages 56–64.
[BDH+ 95] P. Buneman, S. B. Davidson, K. Hart, C. Overton, and L. Wong. A data transformation system for biological data sources. In Proceedings of the Twenty-first International Conference on Very Large Databases, Zurich, Switzerland, 1995. VLDB Endowment, Saratoga, Calif. [Bla01]
Mathieu Blanchette. Algorithms for phylogenetic footprinting. In RECOMB, pages 49–58, 2001.
[BLSS01] Michael Benedikt, Leonid Libkin, Thomas Schwentick, and Luc Segoufin. A model-theoretic approach to regular string relations. In Logic in Computer Science, pages 431+, 2001. [BW95]
M. Brown and C. Wilson. Rna pseudoknot modeling using intersections of stochastic context free grammars with applications to database search, 1995.
[CH94]
C. Chen and V. Honavar. Neural network automata. In Proceedings of World Congress on Neural Networks, volume 4, pages 470–477, 1994.
[Cla97]
J. Claverie. Computational methods for the identification of genes in vertebrate genomic sequences, 1997.
[CSR+ ]
John A. Crow, Rodney A. Staggs, Shalini Raghavan, James E. Johnson, Kevin A. T. Silverstein, Margaret A. Mayer, Timothy M. Kunau, and Ernest F. Retzel. Design and implementation of a simple relational database for genbank-derived data.
[DHP97]
S. Davidson, C. Hara, and L. Popa. Querying an objectoriented databases using cpl, 1997.
13
[DMS96]
Ju ¨rgen Dassow, Victor Mitrana, and Arto Salomaa. Context-free evolutionary grammars and structural language of nucleic acids. Technical Report TUCS-TR-68, 2, 1996.
[DS94]
S. Dong and D. Searls. Gene structure prediction by linguistic methods, 1994.
[EG]
S. Embury and P. Gray. The declarative expression of semantic integrity in a database of protein structure.
[Elm90]
Jeffrey L. Elman. Finding structure in time. Cognitive Science, 14(2):179–211, 1990.
[GHNU98] G. Grahne, R. Hakli, M. Nyk¨anen, and E. Ukkonen. Aql: An alignment based language for querying string databases, 1998. [Gie98]
R. Giegerich. Declarative approach to the development of dynamic programming algorithms. Technical Report 98-02, 1998.
[Gie00]
Giegerich. A systematic approach to dynamic programming in bioinformatics. BIOINF: Bioinformatics, 16, 2000.
[GJP99]
Vineet Gupta, Radha Jagadeesan, and Prakash Panangaden. Stochastic processes as concurrent constraint programs. In Symposium on Principles of Programming Languages, pages 189–202, 1999.
[GKW99] R. Giegerich, S. Kurtz, and G. Weiller. An algebraic dynamic programming approach to the analysis of recombinant dna sequences, 1999. [GN]
G¨osta Grahne and Matti Nyk¨anen. Safety, translation and evaluation of alignment calculus.
[GNU94]
G¨osta Grahne, Matti Nyk¨anen, and Esko Ukkonen. Reasoning about strings in databases. pages 303–312, 1994.
[HSO]
Kyle W. Hart, David B. Searls, and G. Christian Overton. Sortez: A relational translator for ncbi’s asn.1 database.
[HW]
Kyle Hart and Limsoon Wong. Cpl as a query language for genetic databases. 14
[JAC01]
Rodney A. Staggs et. al. John A. Crow. Design and implementation of a simple relational database for genbankderived data. Technical report, NCBI, 2001.
[KBM+ 93] Anders Krogh, Michael Brown, I. Saira Mian, Kimmen Sjolander, and David Haussler. HIDDEN MARKOV MODELS IN COMPUTATIONAL BIOLOGY: APPLICATIONS TO PROTEIN MODELING. Technical Report UCSC-CRL-93-32, 1993. [KH99]
G.C. Overton Kyle Hart, David B.Searls. Sortez: A relational translator for ncbi’s asn.1 database. National Library of Medicine, Bethesda??, 199?
[KH94]
Limsoon Wong Kyle Hart. Cpl as a query language for genetic databases. National Library of Medicine, Bethesda, 1994.
[Lan]
Collection Programming Language. About cpl.
[Lee02]
Lillian Lee. Fast context-free grammar parsing requires fast boolean matrix multiplication. Journal of the ACM, 49(1):1–15, 2002.
[Nyk97a]
M. Nykanen. Querying string databases with modal logic, 1997.
[Nyk97b]
Matti Nyk¨anen. Querying String Databases with Modal Logic. PhD thesis, University of Helsinki, 1997.
[OAHA94] G. Overton, J. Aaronson, J. Haas, and J. Adams. Qgb : A system for querying sequence database fields and features, 1994. [OTG96]
C. W. Omlin, K. K. Thornber, and C. L. Giles. Fuzzy finite-state automata can be deterministically encoded into recurrent neural networks. Technical Report UMIACS-TR-96-12 and CS-TR-3599, College Park, MD 20742, 1996.
[P.B95]
P.Buneman. A data transformation system for biological data sources. In Proceedings of the 21st VLDB Conference, 1995.
15
[Pol91]
Jordan B. Pollack. The induction of dynamical recognizers. Machine Learning, 7:227–252, 1991.
[Pos03]
Kjell Post. Bottom-up evaluation of attribute grammars. Dep of Comp. Eng., University of M¨alardalen, 2003.
[Rai]
Raining Data. Omnis Studio 3.3 Tutorial.
[RE]
Elena Rivas and Sean R. Eddy. The language of RNA: a formal grammar that includes pseudoknots”, journal = Bioinformatics, volume = 16, number = 4, year = 2000, pages = 334–340, url = citeseer.nj.nec.com/261334.html.
[Run00]
Rune.B.Lyngsø. Computational Biology. PhD thesis, University of Aarhus, 2000.
[Sak94]
Sakakibara. Stochastic contextfree grammars for trna modeling˙ JOSL, 1994.
[SBH+ 94] Yasubumi Sakakibara, Michael Brown, Richard Hughey, I. Saira Mian, Kimmen Sj¨olander, Rebecca C. Underwood, and David Haussler. Stochastic context-free grammars for tRNA modeling. Nucleic Acids Research, 22:5112–5120, 1994. [Sea95]
David B. Searls. String variable grammar: A logic grammar formalism for the biological language of DNA. Journal of Logic Programming, 24(1 and 2):73–102, 1995.
[Sea99]
D. Searls. Formal language theory and biological macromolecules, 1999.
[Shu93]
J. Shutt. Recursive adaptable grammars, 1993.
[Slo92]
D. Searls and l of. American scientist, 1992.
[SM95]
D. B. Searls and K. P. Murphy. Automata theoretic models of mutation and alignment. In Proc. Third Int. Symp. on Int. Sys. for Molec. Biol., pages 341–349, 1995.
[Sto94]
Andreas Stolcke. Bayesian Learning of Probabilistic Language Models. PhD thesis, Berkeley, CA, 1994.
[Wad88]
P. Wadler. Deforestation: Transforming programs to eliminate trees. In ESOP ’88. European Symposium on Programming, Nancy, France, 1988 (Lecture Notes 16
in Computer Science, vol. 300), pages 344–358. Berlin: Springer-Verlag, 1988. [Won95]
L. Wong. The collection programming language reference manual, 1995.
17