Getallen tellen – over automatiseren

Lilly’s vraag

Kleindochter Lilly is nog geen zeven jaren jong wanneer ze mij met trots demonstreert hoe goed ze al kan tellen. Terwijl de jongste van amper twee het rijtje namen van de getallen van 1 tot 10 kan opzeggen, is bij Lilly het kwartje gevallen. Ze heeft het systeem in onze naamgeving voor de getallen ontdekt: van negentien, twintig, éénentwintig, twee-en-twintig, drie-en-twintig, …, gaat ze naar dertig, één-en-dertig, twee-en-dertig. En zo verder gaat ze. “Knap hoor”, onderbreek ik haar demonstratie.

En dan vraagt ze: “Opa, hoeveel getallen zijn er?” Als kleinkind kun je alles aan opa vragen. “Daar moet ik even over nadenken”, zeg ik. Ze heeft geen tijd om op het antwoord te wachten. Ze rent al weer naar buiten om met haar broertje verstoppertje te spelen.

Ze liet me enigszins verbaasd achter. Dat in een kind dat pas komt kijken zo’n vraag opkomt! Immers, hoeveel eeuwen heeft de mens er niet over gedaan voor dat hij de getallen als een soort van zelfstandige objecten los dacht van de waarneembare dingen?

De wiskunde bestond (en bestaat) eerst als de praktische discipline van meten en tellen. Het tellen is wellicht de eerste wiskundige ‘uitvinding’. Het is een activiteit die berust op een vorm van abstractie die we ‘mathematisch’ noemen. Daarbij hoort een bepaalde houding die we tegenover de zintuiglijk waarneembare werkelijkheid aannemen. Wie de koeien in de wei telt die ziet af van de individuele verschillen die er zijn. We beschouwen ze allemaal als koe. Wat we vast houden is hun abstracte individualiteit, de individualiteit afgezien van de verschillende zintuiglijk waarneembaar kwaliteiten, kleur, grootte, etc. De koeien zijn ruimtelijk onderscheiden eenheden, aanwijsbaar: die en die en die.

Het resultaat van tellen is een aantal, een aantal koeien, in het algemeen ietsen, een concrete veelheid. Het eerste wiskundige object is waarschijnlijk het getal, het getelde aantal tegenover de concrete veelheid van ietsen, als object gedacht. In eerste instantie zijn getallen zelf niet telbaar, maar dingen waarmee je telt. Ze vormen een meetsysteem. Meten is het tellen van het aantal keren dat een maat als eenheid vergeleken kan worden met een concrete eenheid, die daarmee een structuur krijgt: een eenheid bestaande uit een aantal maateenheden. Maar ook getallen zijn telbare objecten, die we door tekens voorstellen.

Waarom tellen we? Een reden om te tellen is dat we veelheden willen vergelijken qua grootte. Om het aantal schapen in de kudde dat ‘s avonds de stal weer in komt te vergelijken met het aantal dat ‘s ochtends de stal verliet bewaarde de herder voor elk schaap een steentje. Als het aantal gelijk was, kon de herder rustig slapen. Het is niet nodig te weten hoeveel steentjes er zijn. Wanneer je de herder zou kunnen opbellen en vragen hoeveel schapen hij heeft, kan hij alleen antwoorden dat het er net zo veel zijn als er steentjes zijn. Maar hoeveel zijn dat er? Een getal kan hij niet noemen, want die kent hij nog niet. Daar heeft hij nog geen woord voor. (Misschien waren ze er nog helemaal niet. Net zo min als de telefoon, natuurlijk). De verzameling steentjes is de maat voor het aantal schapen. De functie van de tekens die staan voor de aantallen worden geleidelijk overgenomen door telwoorden. Getallen zijn de abstracte objecten die we zijn gaan onderscheiden van de telwoorden. Getallen zijn niet waarneembaar, zoals de verzameling steentjes. We kunnen ze eigenlijk alleen maar negatief karakteriseren: het zijn de als object gedachte dingen waar de telwoorden als tekens naar verwijzen.

De rol die de steentjes spelen bij het bepalen van de hoeveelheid schapen, wordt omgekeerd, wanneer we het aantal steentjes tellen om te bepalen hoeveel schapen er zijn. Dat kan wanneer we aan mogen nemen dat ieder steentje voor een schaap staat. Om het aantal schapen te bepalen berekenen we het aantal steentjes door ze op handige wijze te herordenen. Bijvoorbeeld in groepjes van tien. De steentjes worden de bolletjes van een telraam, een primitief mechaniek dat als hulpmiddel gebruikt wordt om te rekenen.

Waarom zouden we getallen tellen? Om hun aantal te vergelijken met andere aantallen dingen? Maar die moeten dan wel ook telbaar zijn. Wil het tellen van de getallen zinvol zijn dan moet hun aantal vergelijkbaar zijn met dingen die ontelbaar zijn in aantal. Dat lijkt een paradox.

Het tellen is de eerste ‘cognitieve activiteit’, een handeling die je doet om iets te kennen, waarin het kind leert – door te doen – wat automatiseren betekent. Deze vaardigheid vooronderstelt het snappen van het cijfertaalsysteem (bij ons het tientallig cijfersysteem). We tellen immers met behulp van de telwoorden (en niet met de getallen). Bovendien moet er de bereidheid zijn zich ‘slaafs’ neer te leggen bij de opdracht om te tellen hoeveel dingen er van een bepaald soort zijn. Wie telt gedraagt zich als het ware als een telmachine.

Uit het inzicht dat er geen einde komt aan de uitvoering van de opdracht te tellen hoeveel getallen er zijn en dat je op elk zelf gekozen moment kan stoppen maar ook door kan tellen, blijkt dat we reeds als kind ‘boven’ het proces van automatiseren staan. De mens is zowel in staat zich mechanisch te gedragen en slaafs regels te volgen, maar tegelijk is hij daarin altijd meer dan een machine die werkt in opdracht van een programma.

Ik meen dat Lilly’s vraag er blijk van geeft dat ze getallen als objecten zoals knikkers, of stoelen, ziet. De vraag hoeveel getallen er zijn is voor haar niet anders dan de vraag hoeveel stoelen er zijn. Voor haar zijn de getallen waarschijnlijk nog niet onderscheiden van de (Nederlandse) telwoorden waarmee ze de getallen aanduidt. Maar ook dat zijn ‘dingen’ waarvan je je kunt afvragen hoeveel er van zijn. Ook de telwoorden bestaan buiten het eigenlijke gebruik ervan. De mens is van nature realist.

Plato wees ons er reeds op dat getallen geen zintuiglijk waarneembare objecten zijn zoals stenen en stoelen. Het zijn ideële objecten, ‘gedachtedingen’. Waarna Aristoteles zich afvroeg wat de mathematische objecten dan met de waarneembare werkelijkheid te maken hebben. Hoeveel eeuwen heeft het vervolgens niet geduurd voordat er een notatiesysteem werd ingevoerd voor de getallen. Ons tientallig positionele ‘plaatswaardestelsel’ is pas sinds de late Middeleeuwen in West-Europa in gebruik.

De Engelse medicus en filosoof John Locke (1632-1704) schreef in een reisverslag:
“Sommige Amerikanen die ik sprak (en die waren echt niet gek) konden niet, zoals wij, tot 1000 tellen. Ze hadden geen enkel benul van dat getal.” (mijn vertaling)

Locke had het niet over de grondleggers van de Verenigde Staten van Amerika,
maar over de Tououpinambos, een volk dat diep in de Braziliaanse jungle leefde. Hun taal kende alleen de telwoorden voor de getallen van 1 tot en met 5. Kennelijk hadden ze geen behoefte aan meer dan deze vijf.  (Bron: Rochel Gelman and Brian Butterworth, 2005).

“Hoeveel getallen zijn er?” Om het antwoord te vinden moet je getallen tellen. Maar wat is dat voor merkwaardig gedoe? Er nog eens over nadenkend moest ik terug denken aan het onderzoek dat ik deed voor mijn afstuderen bij de afdeling wiskunde en informatica van de toenmalige Technische Hogeschool Twente. Dat ging over de relatie tussen wiskundig denken en automatisering. In de informatietechnologie gebruiken we de correspondentie tussen wiskundige tekens en de toestanden van een fysisch proces. De fysische processen van de machine hebben voor ons betekenis. Ze berekenen een functie.

Het begrip tellen en de toepassing ervan in het tellen van getallen bevat alle aspecten van het historische proces dat tot de programmeerbare machines heeft geleid al in zich. Wat kinderen al vroeg leren is automatiseren. En dat begint met tellen. Hoe zit dat precies?

Tellen: basale vorm van mathematiseren

Het tellen van dingen om het aantal te bepalen is de eerste en meest basale vorm van mathematiseren, een bijzondere manier van kennend en handelend omgaan met de werkelijkheid. Tellen is niet, zoals sommige mensen schijnen te denken een vorm van rekenen. Het is een eenvoudige vorm van meten. Het resultaat van het meten is informatie: het aantal van gegeven dingen wordt bepaald: er staan drie paarden in de wei. De informatie is de kwantitatieve uitdrukking (beschrijving) van een toestand in de werkelijkheid.

Volgens mijn afstudeerdocent de logicus en filosoof Louk Fleischhacker zijn onverschilligheid en afstandelijkheid de termen die horen bij de mathematiserende kenhouding.

“It is a characteristic of mathematical thinking that it relates itself to something external to the subject performing it. That means that it regards the distinctions it creates as indifferent with respect to the unity of its object as well as with respect to its own doings. They are distinctions in thought only.” (Fleischhacker, 1995, p. 128).

Laten we even stilstaan bij het tellen, de ons meest bekende vorm van mathematiseren, om te begrijpen wat deze woorden betekenen. Zodra het kind het cijfertaalsysteem heeft ontdekt, wordt het tellen iets automatisch, een mechanisch gebeuren dat zich als het ware buiten het denkend subject voltrekt. De inhoud staat als het ware buiten het denkproces van het subject, dat eigenlijk helemaal niet van hem of haar is. Dit denken is niet iets emotioneels, niets iets persoonlijks. De denkinhouden van dit onpersoonlijke rekenende denken zijn wat de filosoof en wiskundige Gottlob Frege ‘Gedanken’ noemde.

“Ich verstehe unter Gedanken nicht das subjektive Tun des Denkens, sondern dessen objektiven Inhalt, der fähig ist, gemeinsames Eigentum von vielen zu sein.” (Frege, Über Sinn und Bedeutung, 1892)

Wanneer we het over ‘denkende machines’ hebben dat bedoelen we dit soort van denken. (Zie: Arnold Metzger, Automation und Autonomie, 1964, p. 9). Deze vooronderstellen het mathematiseren van het denken (mathematische logica) en het uitdrukken van logische denkregels in een eenzinnige taal waarmee de machine rekent. De kunstmatige intelligente machine is de fysische realisatie van het denken als een door regels gestuurde activiteit waarbij de formele regels uitwendig zijn aan de inhoud ervan. Ook machines die niet redeneren volgens logische regels maar op basis van statistieken die uit gegevens worden gehaald (machine learning) trekken conclusies door toepassing van een programma dat regelt hoe een conclusie getrokken moet worden.

Machines kunnen rekenen omdat rekenen mechanisch denken is. Machines kunnen denken in zoverre we onder ‘denken’ verstaan deze aktiviteit die volgens vaste denkregels, mechanisch, verloopt. Als we het over de mogelijkheden van de computer (kunstmatige intelligentie) hebben vergelijken we vaak de computer met de mens. We plaatsen deze twee als het ware tegenover elkaar als onafhankelijke entiteiten. Dat is onjuist. In werkelijkheid gaat het om twee kanten van een proces. Zonder de mens is de machine geen machine, zonder het mechanische kan de mens niet rekenen.

Het tellen als bron van het automatische rekenen

Wat zijn de vooronderstellingen waar de werkelijkheid aan moet voldoen opdat ze door ons geteld kan worden? Ze moet als telbaar voor ons verschijnen. Er moeten eenheden, dingen, onderscheiden worden. Meerdere goed onderscheidbare eenheden. Wanneer we die verschillende dingen tellen vatten we ze op als eenheden van hetzelfde. De waarneembare eigenschappen waarin de dingen van elkaar verschillen doen er voor het tellen niet toe. We staan daar volstrekt onverschillig tegenover. Aristoteles merkt dan ook op dat we weliswaar waarneembare dingen tellen, maar het gaat niet om de dingen als waarneembaar. Het zijn allemaal onderscheidbare dingen: allemaal dieren, allemaal paarden. Die watheid van de door ons getelde eenheden, maakt de continuïteit uit, het ene dat de veelheid van telbare dingen, objecten, uitmaakt en verbindt.

In abstracto, is de onderscheidbaarheid (van de dingen) al de eenheid van de onderscheiden dingen. Hun kwaliteit (paard of knoop zijn) doet er niet toe voor de telbaarheid.

Verder moeten we onthouden wat we al geteld hebben. We moeten geen dingen dubbel tellen. Zonder geheugen is er geen telproces. We geven de dingen allemaal een eigen, bekende, naam. De ‘cijfernamen’: 1,2,3,…Het doet er niet toe welk ding we welke naam geven, als we ze maar allemaal een unieke naam geven. Die naam wordt door de volgorde van tellen voorgeschreven door het afgesproken systeem, de cijfertaal. Ieder cijfer verwijst impliciet naar zowel voorganger (en heeft dus geheugen) als naar de opvolger (en zegt dus hoe verder te tellen).

De namen van de cijfertaal en hun volgorde die we gebruiken bij het tellen, hebben we geleerd, zoals elk taal geleerd moet worden. Mijn kleindochter Lilly snapte het systeem van die taal en ontdekte dat ze alsmaar door kon tellen.

Dit snappen van de regelmaat vind ik iets wonderlijks. Het bestaat in het tonen van de vaardigheid in het uitvoeren van het tellen. Vergelijkbaar met traplopen. Wie kan traplopen kan alle trappen oplopen. Dit snappen is echter anders dan het snappen wat een woord betekent. Een kind dat plotseling voor het eerst het woord ‘draaien’ gebruikt wanneer het met de neus tegen het ruit van de rijdende trein naar buiten kijkt naar een punt in de verte, geeft er blijk van iets te snappen. Het landschap lijkt dan inderdaad voorbij te draaien. Het kind heeft ooit situaties gezien waarin het woord ‘draaien’ (door anderen, ouders misschien) gebruikt werd. Maar het nieuwe eigen gebruik ervan toont dat ze snapt wat het betekent. Dat is begrip.

Het snappen dat voor het tellen nodig is, is het zien van een expliciete regelmaat. Die regelmaat zit ook wel in het herkennen van situaties waarin er sprake is van ‘draaien’ of ‘stoel’, of ‘spel’, of welk woord ook.

De werkelijkheid biedt het stopcriterium voor het tellen. Het getelde aantal dingen drukken we uit in het laatste cijfer dat we gebruikten bij het tellen. Zo onthouden we het aantal getelde dingen en we kunnen dit aantal meedelen aan anderen. Het resultaat van deze meting: “Er staan drie paarden in de wei”. Dit resultaat, het aantal, is onafhankelijk van de specifieke volgorde waarin de dingen geteld zijn.

In de wiskunde doet het voor de inhoud van een resultaat, een stelling of som, er niet toe hoe je de stelling bewijst of de som berekent. Het is een ‘uitwendig’ gedoe, zoals Hegel opmerkt in de Inleiding van zijn Phänomenologie des Geistes. Of de kinderen ‘kolomsgewijs’ van rechts naar links of van links naar rechts leren optellen is een onderwijskundige kwestie want voor het resultaat van de optelling is het om het even.

We zien de vele eenheden die we tellen als elementen van een geheel, een nieuwe eenheid: een verzameling paarden. Elementen van een verzameling is abstracter dan individuen of leden van een groep of samenleving. Als elementen opgevat staan de dingen volstrekt buiten elkaar: ze hebben niets met de verzameling. Die is immers van buiten af door ons opgelegd. Tijdens het tellen, deze abstracte activiteit, is de werkelijkheid bevroren, onveranderlijk.

Natuurlijk is het opvatten van de leden van een groep als elementen van een telbare verzameling een abstractie. De leden van een groep hebben wel iets met elkaar. Ze verhouden zich niet alleen tot elkaar als teamgenoten of klasgenoten of als leden van een familie, maar ook tot de groep als groep. Bij het tellen abstraheren we van deze inhouden.

We vertrouwen op de onmiddellijke waarneming van de onderscheiden dingen die we telden. Deze waarneming is in het begin een sterk fysieke activiteit. Het kind raakt de dingen nog één voor één aan terwijl het telt: dit, dit, dit. Aanwijzen is al een vorm van meten: dit object hier, die steen daar. We positioneren het aangewezen object. Het aanraken is het houvast van het waarnemen en het identificeren. We positioneren het object ten opzicht van ons lichaam in de fysieke ruimte die we ermee delen.

Waar komen de cijfernamen vandaan?

In de namen, de woorden voor de dingen, zit de historische bepaaldheid van ons denken in het algemeen en het tellen in het bijzonder. Ooit moet de mens het woord ‘leeuw’ bedacht hebben om naar een leeuw te verwijzen. Het woord kan in de plaats komen van het levende dier. We hoeven ons het dier niet eens meer voor te stellen als we het woord gebruiken.

Ooit moeten mensen de namen voor de getallen gemaakt hebben. Het heeft even geduurd voordat de abstracte getalsnamen los kwamen van de namen van de getelde dingen zelf. Sommige talen kennen nog verschillende woorden voor één en voor twee van hetzelfde. Bijvoorbeeld Grieks: anèr, man; andre; twee mannen. (Struik, 1977, p. 13) . Geleidelijk ontstaan cijfernaamsystemen. Struik geeft een voorbeeld uit het Kamilaroi, een taal van een Australische stam: 1 = mal, 2 = bulan, 3 = guliba, 4 = bulan-bulan, 5 = bulan-guliba, 6 = guliba-guliba (Uit: Conant, The number concept, blz. 106-107.)

Volgens Kant zijn de stellingen van de zuivere wiskunde, waaronder de leer van de natuurlijke getallen, oordelen a priori, “omdat zij een noodzakelijkheid in zich dragen die niet uit de ervaring kan worden gehaald.” (Prolegomena, p. 52). Dat wil zeggen dat ze niet gebaseerd zijn op de waarneming. De historische ontwikkeling van de wiskunde laat echter zien dat deze een basis heeft in de zintuiglijke waarneming en de ervaring. Dat je drie steentje en twee steentjes samen kunt nemen en kunt beschouwen als een geheel dat is een inzicht dat aan de ervaring is ontleend. Dat daarmee een nieuwe entitiet ontstaat die in zekere zin onderscheiden is van de samengestelde delen dat maakt het synthetische karakter van het wiskundig oordeel uit.

Een belangrijke stap in de ontwikkeling van de wiskunde wordt gemaakt met de invoering van het positionele notatiesysteem. Rond 300 voor Christus werden in India getallen in het Brahmi-systeem geschreven. Dit systeem had nog speciale tekens voor de getallen 10 (zeg A) en 100 (zeg B). De positie van de tekens in een rijtje heeft geen betekenis voor de waarde die het rijtje aanduidt. AAB3 duidt bijvoorbeeld hetzelfde aan als BA3A, namelijk ons getal 123. Het Brahmi-systeem is dus geen positiestelsel. Ongeveer 500 na Christus werd in India het cijfer 0 ingevoerd in het Brami en werd het een positioneel systeem (Hogendijk 1990). De 0 verving een lege plek of een punt in een positioneel notatiesysteem, een getalsysteem waarin de positie van het cijfer de waarde bepaalt, zoals in ons tientallig getalsysteem (203 is de naam van een ander getal dan 230 of 23), dat in de veertiende eeuw in West-Europa haar intrede deed. Het Romeinse systeem is enkele eeuwen ouder.

Het getal 0 kent nog een heel andere historie. Men kan zich voorstellen dat het enige tijd gekost heeft voordat men het getal 0 bedacht. Daarvoor moeten de wiskundige objecten immers los gedacht worden van de waarneembare, fysieke, objecten. Wie telt nou 0 objecten? Hoe kun je nul streepjes onderscheiden en optekenen, als je als afbeelding voor een aantal voor elk geteld element een streepje zet (IIII)? Wanneer het teken 0, mogelijk afkomstig van het Griekse woord ‘oudèn’ dat niets betekent, werd ingevoerd is onduidelijk (Butterworth 1999).

Zo ontstaat het getalbegrip met de ontwikkeling van een eigen cijfertaal, de taal waarmee de individuele getallen als abstracte denkinhouden worden onderscheiden. Zonder de wiskundige objecten een eigen naam te geven (een identifier) kunnen we ze niet onderscheiden, er niet over denken en niet mee redeneren. De wiskundige heeft het over de driehoek D, de lijn l, de getallen x en y, etcetera.

De cijfertaal, zoals ons tientallig stelsel, is zelf een structuur. Zonder dat is het mechaniseren en automatiseren van het rekenen niet mogelijk. De organisatie van het telraam, het rekenmechaniek, reflecteert deze structuur. Het telraam is heel duidelijk een materialisatie van het positionele systeem. Voor elke positie is er een aparte stang met bolletjes.

We zien dat bij het tellen van dingen er een afbeelding plaats vindt van de dingen op de ideële werkelijkheid van de getallen waardoor de werkelijkheid geordend wordt. De fysicus Heinrich Hertz drukte in het voorwoord van zijn Prinzipien der Mechanik dit afbeeldingsbegrip in de mathematische fysica uit. Denkprocessen en processen in de werkelijkheid zijn elkaars afbeelding. Zoals de toestand van de bolletjes van de abacus een getal representeert en de rekenkundige bewerking door akties op het telraam worden gerepresenteert. Dit afbeeldingsbegrip zou een grote rol gaan spelen in het denken van de 20ste eeuw.

Zodra de getallen een eigen individueel bestaan hebben gekregen los van de zintuiglijk waarneembare werkelijkheid rijst de vraag hoeveel er van zijn. En of er ook een grootste getal is. Dit is de vraag die opkwam bij mijn kleindochter toen ze de regelmaat in ons getalnamensysteem zag en ontdekte dat ze alsmaar verder kon tellen. “Hoeveel getallen zijn er?”

Wie getallen telt telt de door ons zelf gemaakte dingen (objectivaties) van abstracties die we gemaakt hebben voor het tellen van echte waarneembare dingen, zoals knoopjes of zandkorrels, of schapen. De getallen zijn zelf telbare objecten geworden. Het getal is het getelde als telbaar. We hebben ze een volgorde gegeven, de volgorde die hun identiteit uitmaakt: vier is wat na drie en voor vijf komt. Met het getal 0 of 1 en de opvolger-relatie ligt het hele getal-systeem vast. De getallen schrijven vanwege hun identiteit als geordende getallen voor in welke volgorde we ze zullen tellen. De taal legt deze volgorde vast. We identificeren de getallen met hun unieke namen (‘identifiers’, de rigid designators van Saul Kripke) in het door ons gebruikte getalnamensysteem. Wanneer je de getallen telt dan volg je de ordening van de getalnamen. Je begint niet bij 23 te tellen en dan 45 en dan 321, of zo wat.

In het tellen van de getallen buigt het wiskundig denken zich op zichzelf terug: het werkt op het resultaat van zijn eigen ontwikkeling die bestond uit de creatie van de getallen als objectivatie van de abstractie van de werkelijkheid als telbaar. Deze zelfreflectie van het wiskundig denken zien we ook in de aanvang van de vorige eeuw in de meta-mathematica en de mathematische logica, de wiskundige formalisering van het wiskundig redeneren.

Soms is het handig de dingen zo geordend te denken dat we gebruik kunnen maken van de structuur van de getallen. Vier rijen van vijf huizen is totaal twintig huizen, omdat 4 keer 5 20 is. De zuivere rekenkunde biedt technieken voor het handiger tellen en voor het handiger rekenen in het algemeen. Zoals eerder opgemerkt, het resultaat, het aantal getelde objecten, is onafhankelijk van de methode van tellen en rekenen. Zoals de inhoud van de wiskundige stelling onafhankelijk is van de wijze van bewijzen. (En deze uitwendige relatie is typisch voor het wiskundig denken.)

We zien in het tellen reeds de begripsmatige kern van de automatisering. Het zijn de cijfers, de getalnamen, de identifiers, die voorschrijven hoe de getallen geteld worden. De taal die een wezenlijke rol speelt in de automatisering is de uitwendige vorm van het rekenend denken (de overheersing van deze vorm van denken werd door Heidegger als karaktertrek van onze westerse cultuur gezien). De taaltekens werken in de machine volgens de betekenis die ze voor ons hebben.

Het tellen van de telgetallen is een inhoudsloze beweging (een motor die onbelast draait) met een onbereikbaar doel, het vaststellen van het aantal dingen die zelf al tellend door het denken voortgebracht worden. De getallen tellen zichzelf. Het zijn de werkende tekens van onze rekenmachines.

Het is een vreemde gedachte: dat getallen zichzelf zouden tellen. Maar we zien hier wat er gebeurt wanneer we proberen op een wiskundige manier de werking van een geprogrammeerde machine te begrijpen en te beschrijven. Zo’n machine bevat het voorschrift voor zijn eigen werking in de vorm van een in fysieke toestanden van de machine uitgedrukte code (het programma). We zeggen dat zo’n machine ‘vanzelf’ werkt. (Dat is iets anders dan ‘uit zichzelf’.) Het ‘zelf’ van de machine is het programma, het ontwerp dat de werking ervan beschrijft. Een werkende machine is ook een natuurproces. De machine is een samenwerking van mens en natuur. De mens heeft een voor hem zinvolle orde aangebracht aan de werking van de natuur.

De afstudeeropdracht

In 1979 studeerde ik af als wiskundig informaticus op een onderzoek op het gebied van de wiskundige semantiek van programmeertalen volgens de recursieve domein theorie van de logicus Dana Scott. Daarin verdedig ik de stelling dat de mathematische uitdrukking van het principe van de programmeerbare zichzelf reproducerende automaat de uitdrukking Z(Z) = Z(Z) is, waarbij Z = λx.x(x), de zelfapplicatie functie is (in termen van de lambda-calculus, een taal voor het rekenen met functies). Dit is overigens geen wiskundige stelling. Het is meer een stelling over de relatie tussen wiskunde en de automatisering van het rekenende denken.

Uitgangspunt is dat de betekenis (formele semantiek) van een computerprogramma een wiskundige functie is. Het is een functie die een invoer afbeeldt op een uitvoer, het resultaat van het uitvoeren van het programma.

Leibniz voerde de ‘functio’ in als een grootheid die van een andere grootheid afhangt. De wiskunde had er moeite mee en het heeft enige tijd geduurd voordat functies als wiskundige objecten werden beschouwd. De variabele is net als de functie al een probleem voor de wiskundige. Gottlob Frege worstelde ermee. Het is geen wiskundig object. De variabele staat voor de vrijheid van het stellende denken, dat een willekeurige naam (teken) geeft aan een bepaalbaar iets. Bijvoorbeeld, de variabele l die de lengte van een staaf voorstelt. Maar ook, een nog abstractere variabele x die een willekeurige nog onbepaald getal voorstelt, zonder enige fysische interpretatie.

Een functie is een variabele waarvan de waarde van een andere afhangt. Niet zoals de variabele van het stellend subject, maar van iets anders. De lengte l is functie van de temperatuur t; l = f(t).

In de mathematische natuurwetenschap gaan we er vanuit dat de natuur zich gedraagt volgens wetmatigheden die we in een systeem van wiskundige functies kunnen uitdrukken. Vanwege die aanname is de experimentele natuurwetenschap hypothetisch. We nemen aan dat er een functioneel verband is. We gaan door metingen bepalen hoe dat verband is. Dat vooronderstelt meetbaarheid als vorm van kenbaarheid van de natuur. Het gemiddelde van een aantal metingen verwijst niet naar een object dat onmiddellijk in de waarneembare werkelijkheid voorkomt, zoals de lengte van object. Het gemiddelde is een eigenschap van een verzameling van objecten. We gaan er niettemin vanuit dat het gemiddelde bestaat en dat het iets zegt over de werkelijkheid. Het gemiddelde is een functie, een hypothese. Het hypothetische karakter van de mathematische fysica zit hem er niet zozeer in dat we door middel van testen bepalen welke waarde het gemiddelde heeft. Het hypothetische karakter zit hem erin dat we aannemen dat er zoiets als een gemiddelde, een ideële grootheid bestaat. Eigenlijke berust ook het meten van de lengte van een object al op zo’n aanname. Deze lengte drukken we immers uit in een getal. Zonder deze abstractie zouden we nooit bijvoorbeeld het moment van de krachten van een balans kunnen berekenen. Daarvoor moeten we immers de kracht vermenigvuldigen met de lengte van de arm.

De lambda-calculus is een formele theorie van functies. De eerste versie werd door Alonzo Church ingevoerd om als basis te dienen voor de gehele wiskunde, als alternatief voor de axiomatische theorie van verzamelingen. In latere versies van deze calculus kunnen precies alle op een computer berekenbare functies gedefinieerd worden. (Er zijn ook functie die niet berekenbaar zijn. Daar heb je dus niet veel aan. ;-))

De lambda-calculus heeft twee basisoperaties. De eerste is de lambda-abstractie, waarmee een functie wordt gemaakt op basis van een expressie. Bijvoorbeeld λx. (x+1) is de functie die ieder object x afbeeldt op het object x+1. De tweede operatie is de functie-applicatie.

Bijvoorbeeld: als de functie t = λx. (x+1) dan is t toegepast op 2 : t(2) = λx. (x+1) (2) = 2+1 = 3.

Dus als Z de zelfapplicatie functie is: Z = λx. x(x), dan levert Z toegepast op Z zelf het volgende resultaat: Z(Z) = Z(Z) = Z(Z) = …

De zelfapplicatie functie toegepast op de zelfapplicatie functie zelf levert als resultaat deze zelfde zelfapplicatie weer op; een oneindig voortdurend proces van zelfreproductie. De zelfreproductie is de slinger van het onbelaste wrijvingsvrije slingeruurwerk dat zichzelf in stand houdt met het slingeren. Maar ook de teller die zichzelf reproduceert als teller in het telproces dat verloopt volgens de ordening van de getalnamen: … dertig, één-en dertig, twee-en-dertig, …Het tellen van de getallen geprogrammeerd door het notatiesysteem van de cijfers. Het is de machine die zichzelf in het werken in stand houdt.

Wat is de betekenis van een computerprogramma? Wel, de functie ervan is voor te schrijven hoe invoerwaarden moeten resulteren in uitvoerwaarden. Wiskundig gezien een functie die invoerwaarden afbeeldt op uitvoerwaarden. Een simpele opdracht als x := x +1 heeft als betekenis de functie t die bij de invoer 1 optelt: t = λx. (x+1). Bijvoorbeeld: t(2) = 2+1 = 3.

Dit simpele programma stopt na één enkele stap. Een wat serieuzer programma zorgt voor meerder stappen (eventueel ‘oneindig’ veel, zoals een besturingsprogramma) afhankelijk van de invoer ervan. Zo’n programma moet zichzelf weer aanroepen.

Welke functie hoort er bij een programma dat zichzelf meerder keren aanroept? Een voorbeeld.

De lengte van een lijst: een recursieve definitie

We kunnen precies definiëren wat we onder de lengte van een lijst verstaan. Voorbeeld van een lijst is een boodschappenlijst. Het is een opsomming van items. Een lijst is een type data-structuur. Bijvoorbeeld: [a,b,c,d] is een lijst met 4 elementen, waarvan a het eerste element is; ook wel de kop van de lijst genoemd. De lijst die je overhoudt wanneer je de kop eraf haalt heet de staart. We noteren: (a:[b,c,d]) om aan te geven dat a de kop is van de lijst [a,b,c,d]. De lege lijst noteren we als []. (a:xs) is de lijst met a op kop met er achter de lijst xs.

We kunnen nu definieren wat de lengte van een lijst is. Dat is het aantal elementen dat in de lijst staat:

lengte [] = 0 , de lengte van de lege lijst is 0

lengte (a: xs) = 1 + lengte (xs), oftewel de lengte van een niet-lege lijst is 1 + de lengte van de staart xs van de lijst.

De definitie lijkt circulair te zijn: het gedefinieerde komt rechts in de omschrijving voor. Dat is echter niet helemaal zo. De lengte wordt impliciet gedefinieerd door een recursieve definitie die zegt hoe de lengte van een bepaalde gegeven lijst uit die van een andere lijst (de tail ervan) kan worden berekend. Door de naam lengte in te voeren stellen we als het ware het bestaan van de functie al vast. Door deze naam te gebruiken in de definitie specificeren we welke de functie is.

De lengte van een oneindige lijst is onbepaald. Het proces dat de lengte berekend komt niet tot een einde. De functie lengte is een actueel oneindig bestaand object, de afsluiting van een oneindige reeks van partiële functies, functies die slechts voor een deel van de invoerwaarden gedefinieerd zijn.

We kunnen de definitie van de lengte functie ook in één regel samenvatten:

F(xs) = als xs=[] dan 0 anders 1 + F(tail (xs)) (*)

Deze definities hebben de vorm van een rekenvoorschrift. Ze kunnen direct gebruikt worden om de waarde ervan voor een gegeven lijst te berekenen. Het zijn computer programma’s in een functionele taal (zoals Haskell of Miranda).

Programmeurs specificeren functies en data-structuren. De uitvoering van de recursieve opdracht houdt een herhaling in van dezelfde operatie op telkens een kortere lijst. Tot de overgebleven lijst leeg is. Dat is het stopcriterium. Volgens de wiskundige recursie theorie bestaat bij een dergelijke recursieve definitie altijd een functie die we als de betekenis van het programma kunnen opvatten. Deze functie kan expliciet gemaakt worden door middel van een zelfapplicatie van een hogere orde functie.

Die heeft de vorm: F (x) = G (G, x).

Waarbij:

G (f,xs) = als xs = [] dan 1 anders 1 + f(f, tail(xs))

De functie F is gedefinieerd door G die op zichzelf wordt toegepast. G is zelf ook gedefinieerd met behulp van zelfapplicatie, namelijk van zijn eerste argument, de functie f, hierboven gedefinieerd door (*).

Om de betekenis van een recursief programma op wiskundige wijze uit te drukken als een functie F die een invoer afbeeldt op een uitvoer, waarvoor we een rekenmachine gebruiken, moet deze functie gedefinieerd worden door middel van een zelfapplicatie van een zelfapplicatie.

In deze zelfapplicatie komt op wiskundige wijze tot uitdrukking dat de toestanden van een automaat zelf zorgen voor de toestandsovergangen die overeenkomen met de betekenis ervan. De zelfapplicatie als functie toegepast op zichzelf is de theoretische uitdrukking van de zichzelf reproducerende machine. Een machine is zodanig gemaakt dat deze niet alleen iets uitvoert, iets zinvols produceert, maar ook zichzelf reproduceert. Het blijft dezelfde machine die blijft werken.

In het tellen van de getallen herkennen we deze zelfapplicatie. De zuivere vorm van de zelfapplicatie is al even nutteloos als het tellen van de getallen.

De zelfapplicatie van de zelfapplicatie, deze reflectie in het kwadraat, komen we ook tegen in de constructie van de bekende Russell verzameling. Dit is de verzameling R van die verzamelingen die zichzelf niet als element bevatten. De vraag of deze R zichzelf als element bevat is de tweede zelf-reflectie. Een definitief antwoord is er niet, want als R zichzelf bevat dan bevat volgens de definitie van R zichzelf niet. Maar dan is het dus een verzameling die zichzef niet als element bevat, wat tot de conclusie moet leiden dat deze zichzelf wel bevat. Etcetera, …

Wanneer we f(x) lezen als x is element van f, dan komt de Russell-verzameling overeen met de functie R = λx. ~x(x), de functie die als resultaat oplevert de negatie van x is element van x. Het toepassen van de functie R op zichzelf heeft als resultaat het oneindige denkproces dat maar niet tot een eindconclusie komt. R(R) = ~R(R) = ~~R(R) = …

Zelfreproductie van de levende cel

De mathematische biologie probeert levensprocessen volgens de methode van de wiskunde te modelleren.

Zelfreproductie is één van de meest belangrijke karakteristieke kenmerken van levende organismes. In (Andrade et al. 2011) claimen de auteurs dat dit idee wiskundig uitgedrukt kan worden in de zelf-refererende vergelijking f = f(f). Naar één van de oudste mythische symbolen, tonende een slang die zichzelf in de staart bijt, wordt deze de Ouroboros vergelijking genoemd.

De Ouroboros slang

De uitdrukking van de zichzelf reproducerende automaat door middel van een zelfapplicatie van een zelfapplicatie, formeel als Z(Z) waarbij Z = lambda x. x(x), (Op den Akker, 1983; Fleischhacker 1982) gaat een stap verder dan de Ouroboros vergelijking, de zelfapplicatie uitdrukking f(f) = f in (Andrade et al. 2011).

De uitdrukking Z(Z)=Z(Z) kan gezien worden als de dynamische tegenhanger van de Ouroboros vergelijking f(f) = f van (Andrade et.al.2011)

Vanwaar het verschil tussen beide gelijkheden? De levende cel is niet een realisatie van een expliciet in de cel uitgedrukt programma, zoals de automaat dat is. Bij de cel is dit hoogstens aanwezig doordat wij het erin zien. Bij de automaat verklaart het programma de werking van de machine. De machine is zo door ons gemaakt.

Het refereren naar een programma kan echter, zoals de biochemicus en filosoof Jacques Monod opmerkt, niet als wetenschappelijke verklaring dienen voor de zelfreproductie van de levende cel, zoals dat voor de geprogrammeerde automaat wel kan. Het programma voor de automaat is door ons zelf geschreven evenals de machine die zodanig is gemaakt dat het een programma voor ons kan uitvoeren. Voor de levende cel is geen programma voorgeschreven.

Er zijn oneindig veel getallen. Daar had Lilly waarschijnlijk al wel een vaag vermoeden van. Dat ze met tellen net zolang door kan gaan als ze zelf wil. We noemen zo’n proces wel potentieel oneindig. Over het bestaan van het aktueel oneindige als bepaald resultaat van een dergelijk proces zijn de meningen verdeeld. In de echte wereld komen geen actueel oneindige grootheden voor. Maar dat geldt ook al voor de getallen zelf. Ook die komen niet in de echte wereld voor. Al kun je ze kennelijk wel tellen.

Als kind leren we al snel tellen. We leren de telwoorden van onze ouders, broer of zus. Op school leren we het telwoordensysteem en hoe je moet rekenen. Mathesis is de kennis die leerbaar is, voorzover we die van anderen kunnen overnemen. We leren op school niets over de geschiedenis van de getallen, over hoe ze ontstaan zijn en over de eigenaard van het rekenende denken. Het verstaan van die geschiedenis vereist een andere vorm van denken, een andere vorm van begrip dan het mathematische. En een andere vorm van leren dan het meeste schoolse leren, dat meer een leren van buiten is.

Inzicht in het wiskundige denken is van belang om te begrijpen wat we bedoelen als we het over ‘denkende machines’ of ‘artificiële intelligentie’ hebben.

Bronnen

Brian Butterworth (1999). The mathematical brain. MacMillan, 1999.

Rieks op den Akker (1979). Zelfapplicatie en zelfregulatie. Doctoraalverslag Technische Hogeschool Twente, Onderafdeling Toegepaste Wiskunde, 1979.

Rieks op den Akker (1983). De zelfstandigheid van automaten en de semantiek van programmeertalen, Intern rapport Technische Hogeschool Twente, Onderafdeling Wijsbegeerte en Maatschappijwetenschappen (ook als intern rapport verschenen bij de Onderafdeling der Informatica). Dit is een bewerking van mijn afstudeerverslag verschenen bij de onderafdeling Informatica van de TH Twente (1979).

Jorge-Soto Andrade, Sebastian Jaramillo-Riveri, C. Gutiérrez & J. Letelier (2011). “Ouroboros avatars: A mathematical exploration of self-reference and metabolic closure.” ECAL (2011).

Louk Fleischhacker (1976). Wijsbegeerte van het wiskundig denken. Syllabus van het collegejaar 1975/76. Technische Hogeschool Twente, Onderafdeling der Wijsbegeerte en Maatschappijwetenschappen, 1976.

Louk Fleischhacker (1982). Over de grenzen van de kwantiteit. Proefschrift Universiteit van Amsterdam, 1982.

Louk Fleischhacker (1995). Beyond structure; the power and limitations of mathematical thought in common sense, science and philosophy. Peter Lang Europäischer Verlag der Wissenschaften, Frankfurt am Main, 1995.

Louk E. Fleischhacker (1999). `De Henide als Paradigma. Otto Weiningers invloed op Ludwig Wittgenstein’ in: De Uil van Minerva 15 nr. 3 (Lente 1999).

Rochel Gelman and Brian Butterworth (2005) Number and language: how are they related?, Trends in Cognitive Sciences, Volume 9, Issue 1, 2005, Pages 6-10.

Goossens, J., Hirsch Ballin, E., van Vugt, E. (2021). Algoritmische beslisregels vanuit constitutioneel oogpunt: Tweedeling tussen algemene regels en concrete toepassing onder druk. Tijdschrift voor constitutioneel recht, 12(1), 4-19.

J.P. Hogendijk (1990). Over de geschiedenis van de cijfers. Tijdschrift voor Nederlands Wiskunde Onderwijs, december 1990.

D.J. Struik (1977). Geschiedenis van de wiskunde. SUA, Amsterdam, 1977.

Sarnecka, Barbara W. (2015). Learning to Represent Exact Numbers. Synthese, pp.1-18.

Published by

admin

Rieks op den Akker was onderzoeker en docent kunstmatige intelligentie, wiskunde en informatica aan de Universiteit Twente. Hij is gepensioneerd.

Leave a Reply