Forum der Letteren. Jaargang 1976
(1976)– [tijdschrift] Forum der Letteren– Auteursrechtelijk beschermd
[pagina 179]
| |||||||||||||||||||||
Overpeinzingen bij een rede A. OllongrenSamenvatting. - In een Rede heeft Prof. Dr. E.M. Uhlenbeck onlangs een conceptie voor vorm en functie van natuurlijke talen uiteengezet, die verwantschap vertoont met aspecten van programmeertalen, of meer in het algemeen talen voor communicatie tussen mens en machine. De verwantschap gaat dieper dan het voorkomen van begrippen als syntax en semantiek in beide gebieden, en het vermoeden rijst dat onderzoek in kunstmatige talen zou kunnen profiteren van opvattingen bij de studie van natuurlijke talen en omgekeerd. In dit artikel worden enige aspecten hiervan belicht. (Schr.) | |||||||||||||||||||||
1. OnderwerpOp 9 februari jl. sprak Prof. Dr. E.M. Uhlenbeck de traditionele diesrede uit ter gelegenheid van de 401ste gedenkdag der stichting van de Rijksuniversiteit te Leiden. De titel was ‘Taal en taalwetenschap’Ga naar voetnoot1 en in de Rede werden de contouren van een conceptie van natuurlijke talen uiteengezet die de spreker samen met anderen en in de loop van langdurig onderzoek van het Javaans heeft ontwikkeld. De Rede viel uiteen in drie delen.
In het eerste deel worden enkele opmerkingen gemaakt over het instrument van het spreken in de moedertaal en wordt aangegeven waarom het nodig en nuttig is dit instrument aan wetenschappelijk onderzoek te onderwerpen. Het doel van dergelijk onderzoek is algemeen geldige uitspraken te verkrijgen over talen in het algemeen en moedertalen in het bijzonder, en het blijkt dan dat zelfs voor reeds lang bestudeerde talen als het Engels en het Frans er in dit opzicht slechts een zeer beperkte hoeveelheid kennis bestaat. De oorzaak hiervan schijnt voornamelijk gezocht te moeten worden in de complexiteit van een natuurlijke taal, waarvoor overigens naar mijn weten nog geen maat gevonden is. | |||||||||||||||||||||
[pagina 180]
| |||||||||||||||||||||
In het tweede deel wordt een linguaal evenement ten tonele gevoerd; op een donderdagavond in januari tegen elf uur zat de spreker (op dat moment waarschijnlijk veeleer de auteur) achter zijn schrijftafel toen zijn echtgenote binnenkwam en tegen hem zei: ‘Denk je aan de vuilniszakken?’. Op kostelijke wijze worden in de oratie verschillende interpretaties die aan deze vraag gegeven kunnen worden toegelicht. En dan Wordt het interpretatieproces aan een analyse onderworpen. Het blijkt dat de hoorder volgens drie fundamentele richtlijnen te werk gaat bij de interpretatie van hetgeen tot hem gezegd wordt. (1) Hij gaat ervan uit dat het gezegde zinvol is. (2) Hij gaat ervan uit dat het gezegde betrekking heeft op de werkelijkheid van het moment. (3) Hij tracht het gezegde in te passen in en zinvol te verbinden met zijn kennis voor zover relevant op het moment en in relatie tot de spreker. Naast het interpretatieproces wordt voor het linguale evenement het gesprokene zelf beschouwd. Hiervoor moet ik de lezer naar de oratie verwijzen. Het onderscheid tussen de fatische en de musische of intonationele component is natuurlijk belangrijk in de studie van natuurlijke talen maar het speelt geen rol bij de bestudering van talen voor de communicatie tussen mens en machine. En de overpeinzingen bij de Rede die in dit artikel gestalte gegeven wordt hebben betrekking op mogelijke verwantschappen bij de studie van natuurlijke talen en programmeertalen.
In de eerste twee delen van de oratie zijn erg duidelijk de contouren aangegeven van een taal-conceptie waarover weinig misverstand mogelijk is. In het derde deel van de oratie dat gewijd was aan enkele centrale vraagstukken waarmee de taalwetenschap op dit ogenblik te maken heeft, ligt dit naar mijn gevoel duidelijk anders. De centrale vraagstukken betreffen: de empirische basis van taalkundig onderzoek, de vorm van taalbeschrijvingen en het onderzoek van de semantische dimensie. Over het eerste vraagstuk zal ik geen opmerkingen maken omdat ik geen verwantschap zie tussen de problemen van natuurlijke talen en kunstmatige talen op dit gebied. De overpeinzingen bij de Rede zijn gecentreerd rond de twee overige vraagstukken. | |||||||||||||||||||||
2. Vormen van taalbeschrijvingen en programmeertalenSinds het baanbrekend werk van N. Chomsky in de linguistiek beschikken we over een bruikbare definitie van taal. Een taal kan beschouwd worden als de verzamelingen zinsvormen en zinnen die door het axioma van een generatieve grammatica worden voortgebracht. De grammatica | |||||||||||||||||||||
[pagina 181]
| |||||||||||||||||||||
bestaat uit een aantal woorden en grammaticale categorieën waaronder het axioma en voorts een eindig aantal herschrijfregels. Een herschrijfregel definieert een grammaticale categorie in termen van woorden en/of grammaticale categorieën, al of niet in een context. Een grammaticale categorie kan in termen van zichzelf gedefinieerd worden: hiermee wordt recursiviteit geïntroduceerd. De herschrijfregels worden gebruikt om zinsvormen en zinnen te genereren. Een taal bestaat uit een oneindig aantal zinnen dan en slechts dan als een zinsvorm kan worden gegenereerd door het axioma waarin een recursieve grammaticale categorie voorkomt. Voor het gemak zullen we aannemen dat de herschrijfregels geen context bevatten, of context-vrij zijn.
De hierboven beschreven definitie van talen is goed bruikbaar voor alle programmeertalen, maar vertoont ernstige gebreken voor de natuurlijke talen. Chomsky heeft zelf aangetoond dat de herschrijfregels contextgevoelig genomen moeten worden in het geval van natuurlijke talen. En verder hebben we het verre van triviale probleem dat de klasse van grammaticale zinnen veel te groot is. Onzinnige zinnen kunnen evengoed als zinvolle zinnen worden voortgebracht, en de betekenis van zinnen die onzinnig genoemd zouden kunnen worden speelt geen rol. Het zelfde probleem speelt overigens ook bij programmeertalen, en we zullen in de volgende paragraaf zien hoe dit probleem behandeld wordt. Veel aandacht is in de linguistiek besteed aan methoden om onzinnige zinnen als zodanig te merken (‘starring problem’) en veel werk is verricht om de grammatica's zodanig samen te stellen dat onzin vermeden wordt. Daarbij is tegelijkertijd het probleem van equivalentie van zinnen aan de orde geweest. Veel van de motivaties voor het introduceren van een transformationele component in de theorie van de generatieve methoden van taalbeschrijving zijn ontleend aan deze groepen van problemen.
Men schijnt het er in de linguistiek wel over eens te zijn dat de transformationeel generatieve grammatica's in het algemeen niet in staat zijn om een acceptabele deelverzameling van een taal (in de formele zin zoals hierboven eraan te geven) vast te leggen, waarvan men kan zeggen dat het een natuurlijke taal is. Deze constatering vindt men in de Rede terug en wel in de passages waarin gesteld wordt dat de Chomskyaanse linguistiek tekort schiet als basis voor een breed opgezette studie van taal. In dit verband is het nuttig te wijzen op de ontwikkeling van een wat men zou kunnen noemen ‘post-Chomskyaanse’ linguistiek, waarbij | |||||||||||||||||||||
[pagina 182]
| |||||||||||||||||||||
de srtucturele beschrijving van zinnen à la Chomsky vervangen wordt door een meer ingewikkelde structuur. Daarbij worden associaties aangebracht tussen elementen van een zin (woorden) en eigenschappen (attributen) ervan al of niet gerelateerd aan een corpus van kennis. R.C. SchankGa naar voetnoot2 als exponent van deze school heeft veel werk verricht op dit gebied dat wel aangeduid wordt als ‘cognitive information processing’. Echter tot nu toe is niet vastgesteld of er wellicht een eenduidig verband bestaat tussen Chomsky-structuren en Schank-structuren, en op grond van overwegingen uit de grafentheorie zou het me niet verwonderen als dit inderdaad het geval zal blijken te zijn.
Hoe is de situatie voor programmeertalen? Laten we beginnen met vast te stellen dat de verschillen tussen programmeertalen en natuurlijke talen kleiner zijn dan het op het eerste gezicht lijkt. Immers programmeertalen zijn niet alleen bedoeld voor rekenkundige doeleinden (het berekenen van de waarde van een of andere algebraïsche uitdrukking waarin variabelen voorkomen die een waarde zijn toegekend, getallen en operatoren) maar voor een grote scala van problemen op het gebied van de communicatie tussen mens en machine (computer zo U wilt). Dat kan zijn het opzoeken van informatie uit een verzameling gegevens, het bijwerken van een dergelijke verzameling, dat kan zijn het geven van instructies aan een machine (verplaats, reorganiseer, sorteer, vergelijk, extraheer enz. gegevens uit een verzameling gegevens), het kan ook zijn het voeren van een dialoog met een machine, waarbij aan beide kanten geleerd wordt. Schaakprogramma's zijn wel volgens het laatste principe ontworpen, programma's waarbij in dialoog met een gebruiker uitspraken over andere programma's worden geverifieerd of gefalsifieerd horen in deze groep thuis, evenals de programma's voor computer-gestuurd onderwijs.
Zoals hierboven al gezegd is de syntactische beschrijving van programmeertalen met behulp van (context-vrije) herschrijf-regels bevredigend. Het is dan immers mogelijk een programma of instructie als een lineare rij tekens aan een machine door te geven, en de machine is dan in staat de structuur à la Chomsky door ontleding te bepalen, waarna uitvoering van de opdracht mogelijk wordt op de wijze in de volgende | |||||||||||||||||||||
[pagina 183]
| |||||||||||||||||||||
paragraaf uitgelegd. Dus voor programmeertalen is de beschrijvingsvorm door middel van herschrijfregels bruikbaar en adequaat. Daarmee wordt bereikt enerzijds dat een programmeertaal syntactisch volkomen beschreven kan worden met behulp van een klein aantal productieregels (voor niet triviale programmeertalen minder dan tien), anderzijds dat een machine in staat gesteld kan worden een syntactische analyse uit te voeren. Zondigen tegen de regels van de syntax hoeft niet meteen te betekenen dat het programma door een machine afgewezen wordt, omdat in de interpretatieve fase de herstelling van fouten niet uitgesloten wordt. | |||||||||||||||||||||
3. Semantische dimensie voor programmeetalenIn de Rede wordt de hypothese dat de beschrijvingsvorm van een natuurlijke taal altijd de vorm aan zou moeten nemen van een samenhangend complex van op elkaar afgestemde regels afgewezen. We vragen ons in deze paragraaf af of dit ook zo is voor het geval van de programmeertalen. Het antwoord zal ontkennend luiden en bij de nu volgende analyse van de vraag blijkt ook waarom: de semantische dimensie wordt niet geïntroduceerd door middel van transformationele regels, maar door de constructie van een hypothetische machine die in staat is een programma te interpreteren.Ga naar voetnoot3 In de terminologie van Schank hebben we hier te maken met interpretatieve semantiek. Door deze werkwijze worden wegen geopend voor onderzoek op allerlei fronten: in de informatica krijgt men de mogelijkheid het ontwerp en de implementatie van compilatoren te beschrijven, in de wiskunde kan men het probleem van het al of niet correct functioneren van programma's bestuderen, in de logica komen zaken als de aard van programma's, zichzelf reproducerende programma's, zelf interpretatie en simulatie gemakkelijk aan de orde; en wellicht dat de linguistiek ook met vrucht gebruik zou kunnen maken van de nu te schetsen methode van benadering.
Het is voor analyse in deze paragraaf nuttig een eenvoudige programmeertaal te introduceren. We nemen aan dat de objecten waarmee gemanipuleerd moet worden verzamelingen zijn en dat er twee binaire operaties mogelijk zijn; doorsnede (de bepaling van gemeenschappelijke elementen) en vereniging (de bepaling van elementen die tot de ene of | |||||||||||||||||||||
[pagina 184]
| |||||||||||||||||||||
de andere verzameling behoren). In de programmeertaal behoort in eerste instantie gezegd te kunnen worden welke de verzamelingen zijn, en daarna welke de operaties zijn. Een programma heeft zodoende twee componenten: een declaratie gedeelte (welke variabelen gebruikt zijn en welke verzamelingen ze voorstellen) en een opdracht gedeelte (welke variabelen door toekenning de waarde kunnen krijgen door overname van de leden van een andere verzameling of als resultaat van een binaire operatie tussen verzamelingen). In formule:
De verticale strepen geven hier keuze mogelijkheden aan. De bovenstaande grammatica definieert een abstracte klasse van programma's, d.w.z. dieptestructuren in de Chomkyaanse zin, en er worden geen uitspraken gedaan over de vorm die de rij van tekens van een programma aan moet nemen. ‘Verenig A en B’ is even goed toegestaan als (het teken: = stelt toekenning voor) dan zegt de grammatica dat er een abstract object bestaat (een abstracte opdracht) met twee componenten:
Aangezien er recursiviteit is in de vorm van expressies is de verzameling van programma's oneindig. Hiermee is de vorm van de programmeertaal beschreven. Onzinnige programma's zijn mogelijk, bijvoorbeeld: laten we aannemen dat A en B gedeclareerde verzamelingen zijn en dat A de verzameling van vrouwelijke studenten voorstelt en B de verzameling mannelijke studenten die in een bepaald jaar aan een bepaalde instelling van onderwijs zijn ingeschreven. Dan is A B een zinvolle operatie. Maar A: = A B is, ofschoon syntactisch juist, semantisch | |||||||||||||||||||||
[pagina 185]
| |||||||||||||||||||||
niet acceptabel omdat A
B niet aan de declaratie van A voldoet, of in andere woorden andere attributen heeft.
We geven nu een voorbeeld van een zinvol programma: De verzamelingen in dit voorbeeld zijn verzamelingen letters, expliciet tussen de haakjes { en } genoteerd.
De betekenis van programma's in de eenvoudige programmeertaal kan nu als volgt worden vastgelegd: we nemen aan dat er een abstracte machine bestaat die in staat is een programma PROG (d.w.z. het abstracte object dat hoort bij de rij tekens) te interpreteren. De machine beschikt over een opslag gedeelte, waarin het programma in een of andere representatie is ondergebracht en waarin de resultaten van toekenningen worden geplaatst.Ga naar voetnoot4 Voor het bovenstaande kan het opslag gedeelte als volgt worden voorgesteld:
In de derde kolom staat de waarde van de variabele in de begintoestand van de machine; de waarde van PROG is het abstracte object dat met het bovenstaande programma correspondeert, de waarden van A, B en C zijn de lege verzameling. De abstracte machine ondergaat in een rij van toestandsovergangen gestuurd door de waarde van PROG. Verschillende programma's geven verschillende rijen toestandsovergangen. Na een | |||||||||||||||||||||
[pagina 186]
| |||||||||||||||||||||
eindig aantal overgangen komt de machine in een eindtoestand en stopt. In de opslag is PROG onveranderd maar de waarden van andere variabelen hebben wijzigingen ondergaan.
Het voert te ver om de toestandsovergangsfunctie van de eenvoudige programmeertaal expliciet te defiëren. De volgende drie uitspraken zullen echter duidelijk zijn:
Hetgeen hierboven enigszins uitgewerkt is voor een eenvoudige programmeertaal is in veel detail voor uiterst complexe programmeertalen onderzocht. De complexiteit van de machine blijkt niet erg af te hangen van de complexiteit van de taal en het is zelfs mogelijk met een heel simpele, maar wel universele machine te werken. De toestandsovergangsfunctie van deze machine kan op zijn beurt weer als een programma worden voorgesteld. Langs deze weg verder gaand komen we uit op een opmerkelijk resultaat: het is mogelijk de semantische dimensie van een programmeertaal te behandelen met behulp van de programmeertaal zelf mits de programmeertaal voldoende rijk aan concepten is. Een analogie met natuurlijke talen dringt zich op: in de linguistiek wordt getracht taal met taal te beschrijven. In dit verband is het | |||||||||||||||||||||
[pagina 187]
| |||||||||||||||||||||
vermeldenswaard dat een universele abstracte machine in staat is zijn eigen programma te interpreteren. Zelf interpretatie is echter een nieteindigend proces. Beschouwen we nu de menselijke handeling van het hanteren van het instrument van de taal als het gedrag van een universele machine, dan ligt de conclusie voor de hand dat het menselijk handelen niet in staat is in een eindige tijd zijn eigen beschrijving te interpreteren. Echter, zelfs als we niet zover gaan dat we over problemen van zelf interpretatie in de linguistiek spreken, en ons beperken tot de beschrijving van minder omvangrijke taken: zelfs dan kan ik het optimisme dat uit de laatste alinea van de Rede spreekt niet delen. We lezen daar: ‘Ik moet bekennen dat ik in het vermogen van de taal om aan iedereen alles duidelijk te maken een onverwoestbaar vertrouwen heb ...’. De schrijver van deze overpeinzingen wil een andere visie daar tegenover stellen: de taal is een inderdaad wonderlijk instrument (uit de Rede) waarmee veel duidelijk gemaakt kan worden, maar de tijd die daarvoor nodig is (het aantal toestandsovergangen van de abstracte machine in het constructieve beeld dat hierboven geschetst is) zou wel eens onbegrensd groot kunnen zijn. Dan voel ik meer voor de uitspraak van Treebeard in Tolkien's triologie ‘The lord of the rings’Ga naar voetnoot5: ‘Old Entish .... It is a lovely language, but it takes a very long time to say anything in it, because we do not say anything in it, unless it is worth taking a long time to say, and to listen to’.
Instituut voor Toegepaste Wiskunde en Informatica, R.U. Leiden, Juni 1976. |
|