De monotonie van het algoritme

Chaque problème que j’ai résolu est devenu une règle, qui a servi après à résoudre d’autres problèmes. Descartes, Discours de la Méthode, 1637

Rekenen

Rekenen is saai. Optellen, aftrekken, vermenigvuldigen, delen: er is precies voorgeschreven wat je moet doen en wie braaf de regels volgt krijgt als beloning een uitkomst die al van tevoren vastlag. Sommigen menen dat wiskundigen vooral rekenen en voortdurend geobsedeerd met getallen in de weer zijn. Dat is gelukkig een vergissing. Het wiskundige spectrum is breder. Wiskundigen zijn geïnteresseerd in vele zaken (ook in getallen) maar met rekenen houden ze zich slechts sporadisch bezig – en meestal helemaal niet. Rekenen behoort niet tot de kern van wiskundige activiteiten. Er zijn vele andere objecten dan getallen die de wiskundige bestudeert. Je kunt altijd precies één cirkel tekenen door de drie hoekpunten van een driehoek – dat heeft niets met getallen te maken.

Rekenen is het uitvoeren van operaties op getallen. Het grootste deel van de wiskunde heeft geen betrekking meer op getallen. Het mantra van Pythagoras, ‘alles is getal’, leeft voort als curiositeit in de marge van de filosofiegeschiedenis en zijn muziek der sferen hoort ook niemand meer. Misschien is het, als je dan toch iets algemeens over de essentie van de wiskunde wilt zeggen, beter om te stellen dat de wiskunde over patronen gaat. Structuren. Orde. En daarbij draait het in de praktijk van de wiskundige vooral om het zoeken naar die patronen en het oplossen van problemen daarbij. Het zoeken naar orde, het zoeken naar structuren, het ontdekken van het ontbrekende stukje van een structuur die opdoemt, het analyseren daarvan, dat is wat de wiskunde interessant maakt.

Maar rekenen is nuttig. We hebben uitkomsten nodig, we willen uitkomsten, we eisen uitkomsten. In de praktijk van het dagelijks leven, in de maatschappij, in de wetenschap, is het rekenen noodzakelijk. Sinds de uitvinding van de computer en de ontwikkeling ervan, hebben we het rekenen echter grotendeels uitbesteed. Winkelpersoneel hoeft niet meer te rekenen want dat doet de kassa. Sommigen kunnen het ook niet meer zo goed. Dat is geen probleem. Rekenmachines mogen het saaie werk doen. En ze kunnen het ook veel sneller en steeds beter.

Toch is het rekenproces in abstracto wel interessant – maar om heel andere redenen dan het bepalen van een uitkomst.

RekenmachineTI-25

In het jaar dat ik naar de bovenbouw van de middelbare school ging werd de aanschaf van een rekenmachine voor het eerst verplicht gesteld. We gebruikten een Texas Instruments, de TI 25. Het was een elegant apparaatje, plat en licht en het stond gewoon, net als de schoolboeken, op de boekenlijst. En de TI 25 rekende voor je. Soms niet al te snel. Een geliefde grap was op de rekenmachine van je buurman 99! tikken. Dan was het apparaat een paar minuten bezig. Het scherm bleef blanco. Wilde je buurman in de tussentijd iets berekenen, dan was de suffe conclusie vaak: ‘Hé, hij doet ’t niet!’

Rekenen is dom, de rekenmachine is dom en de gedachteloze gebruiker is het allerdomst. Konden wij zelf nog rekenen? Ja, want we hadden al op de basisschool geleerd hoe je moest optellen, aftrekken, vermenigvuldigen, delen, rekenen met breuken, met procenten. Exact rekenen met breuken, zonder ze af te ronden, dat kon die TI 25 niet. Hoe die TI 25 precies de wortel van een getal uitrekende wisten we zelf eigenlijk ook niet. Moest je zelf nog kunnen rekenen? Ja, want anders begreep je de algebra niet. Wie niet kon rekenen zou daarbij gehanteerde procedures niet of nauwelijks begrijpen. Maar niemand vroeg je meer om een staartdeling te maken. (Toch was het handig om dat te kunnen. Ik meen me te herinneren dat er veeltermen in factoren ontwikkeld moesten worden, ergens in de bovenbouw en dat kon met datzelfde staartdelen dat je, met getallen, op de basisschool geleerd had. Maar misschien behoorde dat niet tot de eindtermen voor het examen.)

We kunnen het rekenen om uitkomsten te vinden dus grotendeels uitbesteden. Waarom kan een computer het? Omdat er precies vaststaat wat er moet gebeuren. Wil je de uitkomst van 6349 + 285? Zet de cijfers van de twee getallen onder elkaar,  beginnend aan de rechterkant, tel de laatste twee cijfers op. Als er meer dan 10 uitkomt, ‘transporteer’ je 1 naar de volgende kolom van twee cijfers en je telt daar op. Ga zo door tot je links aan het eind bent. Het kan daarom machinaal. Mechanisch. Gedachteloos. Dat recept, het rijtje van instructies, is een voorbeeld van een algoritme. Daarbij maakt het niet uit hoe de uitvoering precies gebeurt: het doet er niet toe of je het optellen doet met krabbels op papier of door manipulatie van elektrische stroompjes. Dat laatste gaat in elk geval een stuk sneller.

In de schoolwiskunde komen sommigen een heel eind met algoritmen. Ze leren álles uit het hoofd. Want een algoritme is helder, overzichtelijk en eenvoudig te memoriseren. Neem het opstellen van de vergelijking van een raaklijn aan een grafiek. Alle stappen liggen precies vast. De reden dat een leerling ver kan komen met het aanleren van algoritmen is natuurlijk ook dat het type problemen dat opgelost moet kunnen worden vastligt. (Er moeten weliswaar ook bepaalde algemene wiskundige vaardigheden aangeleerd worden maar die zijn lastig te concretiseren en daarom lastig te examineren.) Het is eigenlijk niet nodig om het raaklijnalgoritme écht te begrijpen, de onderliggende wiskunde ervan, hoewel dat ongetwijfeld de geheugenlast zou verminderen. Ook is het in dit opzicht van geen enkel belang te weten wie het algoritme bedacht heeft, waar het vandaan komt, hoe het ontwikkeld is. Soms valt van dat laatste wel iets te leren. Neem de geschiedenis van de ABC-formule.

al-Chwarizmi

In Chorasmië, een streek in het huidige Oezbekistan in de nabijheid van het Aralmeer, werd ergens tussen 780 en 800 n.Chr. een Pers geboren die later bekend zou worden onder de naam al-Chwarizmi. Over zijn leven is verder weinig bekend. Vermoedelijk was zijn geboortetaal Perzisch, of een dialect daarvan (het schijnt aan het Nederlands verwant te zijn); maar zijn werken schreef hij in het Arabisch. In deze tijd begon Bagdad het Griekse cultuurgoed uit de oudheid te assimileren. De eerste wiskundeboeken in het Arabisch verschenen.

al-Chwarizmi is bekend geworden door twee boeken. Het eerste, een elementair boekje over de rekenkunde, begint met de Latijnse aanhef: ‘Algorismi de numero Indorum’.

In het tweede boekje, Hisab al-jabr walmoeqabala bespreekt al-Chwarizmi eerste- en tweedegraadsvergelijkingen. Alles wordt gepresenteerd in woorden en hij heeft geen algemene oplossingsmethode voor de tweedegraadsvergelijkingen maar hij onderscheidt zes verschillende gevallen:

ax2 = bx, ax2 = c, bx = c, x2 + bx = c, x2 + c = bx, x2 = bx + c

vierkantalkhwarizmiDe oplossingen worden gegeven door middel van een recept, een algoritme, aangevuld met een meetkundige visualisatie, zoals de Grieken veel eerder ook al deden. De vergelijking x2+ 10x = 39 behandelt hij als volgt. Tel aan beide kanten 52 = 25 op: x2+ 10x + 25 = 64. Neem de helft van 10 = 5. Dan (x+5)2 = 82 dus x + 5 = 8 en dus x = 3. De negatieve oplossing werd door hem genegeerd. Een plaatje gaf betekenis aan de manipulaties.

Geschiedenis

Origineel was dit ook toen al niet en het bleef allemaal enigszins onsamenhangend en tamelijk elementair. De geschiedenis laat zien dat de historische ontwikkeling van een algoritme zoals de ABC-formule nog wel iets heel anders is dan de logische en methodische wiskundige ontwikkeling.

De Egyptenaren, rond 1500 v.Chr. kwamen niet verder dan het gebruik van uitgebreide tabellen die vlijtig gekopieerd werden – inclusief fouten. Omstreeks 400 v. Chr. hadden de Babyloniërs min of meer een methode zoals het aanvullen tot vierkanten hierboven. In dezelfde tijd kwamen ook de Chinezen met iets wat hierop leek. Bovendien hadden zij de abacus.

Rond 300 v. Chr. kwam Euclides met een algemene methode om kwadratische vergelijkingen op te lossen. De Indiërs hadden ook al eerder dan al-Chwarizmi een methode.  Zo rond 700 na Chr. kwam Brahmagupta met een algemene methode. Bovendien erkende hij ook dat er twee wortels waren. De volledige methode zoals wij die kwamen ontstond pas omstreeks 1100, bij Baskhara. Vele eeuwen eerder gebruikten de Babyloniërs overigens al x = √[(b/2)2 + c] – (b/2) and x = √[(b/2)2 + c] + (b/2) om x2 + bx = c and x2bx = c op te lossen.

Ook de namen van Diophantos en Cardano kunnen worden genoemd. Cardano compileerde rond 1545 verschillende werken over kwadratische vergelijkingen en combineerde Al-Chwarizmi’s aanpak met de meetkunde van Euclides. De huidige wiskundige notatie moest toen nog uitgevonden worden.

Voortgezet onderwijs

Tegenwoordig leert een leerling reeds in de onderbouw hoe een tweedegraadsvergelijking kan worden opgelost. Eerst worden een paar voorbeelden gegeven, wat elementaire typen en tenslotte volgt het hoogtepunt. In een HAVO-lesboek voor de derde klas van een paar jaar geleden werd dat als volgt gepresenteerd:

“Gelukkig is er een formule waarmee je elke kwadratische vergelijking kunt oplossen.”

ABC-formule 1

Amen!

Neem al-Chwarizmi’s vergelijking  x2+ 10x = 39

Leerling maakt ervan:

x2+ 10x – 39 = 0 En dan maar invullen:

D = 102 – 4∙1∙-39 = 256

√256 = 16

abc3

Klaar. Het is inderdaad gewoon een kwestie van invullen.

Elke tweedegraadsvergelijking (met reële oplossingen) kan in principe zo aangepakt worden. Als we de aanpak in stappen onderverdelen hebben we een voorschrift dat een computer kan uitvoeren. Zo’n voorschrift is een voorbeeld van een algoritme. Zelfs de grafische rekenmachine kan al overweg met zo’n eenvoudig algoritme. De instructies zien er in pseudocode als volgt uit:

abcalgo

Er is hier geen enkele vindingrijkheid meer vereist, er hoeft niet begrepen te worden waarom deze formule werkt, het is gewoon een kwestie van getallen invullen. Georg Polya vond het maar niks. In How to Solve it? karakteriseert hij een routineprobleem: er bestaat een cut-and-dried precept. Een kant-en-klaar voorschrift. Een machine kan het daarom ook.

Voordelen

Toch zouden we wel gek zijn als we nu geen gebruik maakten van onze goedwerkende formule. En waarom zou je dat nu nog zelf zonder rekenmachine moeten kunnen? Iemand moet die algoritmes natuurlijk wel maken, iemand moet die computers vertellen wat ze moeten doen. Maar zelfs zo iemand hoeft in dit geval niet te begrijpen waarom het werkt. Of toch wel? Misschien is al-Chwarizmi’s methode zo gek nog niet. Een kleine generalisatie:

abcgenera

Misschien zou het beter zijn om leerlingen dit kwadraat afsplitsen aan te leren… Dan is er in elk geval nog iets zichtbaar van het geheim… Het algoritme kan inzichtelijk gemaakt worden met oppervlakten, zoals in het voorbeeld van al-Chwarizmi. En je krijgt de negatieve wortels er gratis bij. Vervolgens kan het eventueel ook nog gebruikt worden in combinatie met complexe getallen.

Wat is nu het algoritme? Dat is de reeks instructies hierboven. Het werkt als je erin stopt wat je erin moet stoppen: drie getallen die de tweedegraadsvergelijking bepalen. De uitkomst volgt vanzelf.

Aan het definiëren van het begrip algoritme wordt nog heel wat tijd besteed. Een zeer ruime definitie: een reeks instructies. De invoer bij zo’n algoritme hoeft niet beperkt te blijven tot een reeks getallen.

Methode

In de tijd dat ik op de middelbare school zat bestond de grafische rekenmachine nog niet. Onze TI 25 kon wel rekenen, maar geen grafieken creëren. Wij moesten zelf functies onderzoeken en de bijbehorende grafieken tekenen. Onderzoek de functie en teken zijn grafiek luidde de standaardopdracht. Wat dat onderzoek moest inhouden stond precies vast:

IMG_8432

  • Het domein
  • De nulpunten en een tekenschema
  • Continuïteit
  • Differentieerbaarheid
  • Extreme waarden
  • Het gedrag aan de randen van het domein
  • Asymptoten
  • Het bereik

Enórm saai was dit niet: het succesvol afwerken van het lijstje gaf een zekere bevrediging, zij het van bescheiden aard. Ook kwam er iets tevoorschijn: de tekening van een grafiek waarvan je de vorm misschien nog niet had kunnen voorspellen. Langzamerhand ontstond er een beeld van de grafiek. Beheersing van de stappen gaf bovendien zekerheid. Het functieonderzoek is grotendeels uit de schoolwiskunde verdwenen,- zeker als expliciete opdracht. Maar het plotten van een grafiek op de grafische rekenmachine geeft nog minder bevrediging.

ti-nspire2-cas-so_hi-2Intussen bestaan ook grafische rekenmachines die algebraïsche expressies kunnen manipuleren. CAS (Computer Algebra System) heeft zijn intree gevonden in de rekenmachines. Voorlopig is het leerlingen nog verboden deze te gebruiken. Met deze rekenmachines kunnen bijvoorbeeld eenvoudige algebraïsche uitdrukkingen gemanipuleerd worden. Stop x3 – x2 – 8x +12 erin, stop x + 3 erin en hij geeft braaf als uitkomst: x2 – 4x + 4

Actieprogramma

Een algoritme is eigenlijk een vast actieprogramma. Biologen als Tinbergen en Lorenz onderzochten vaste actieprogramma’s bij dieren zoals de gans. Als het ei van een gans uit het nest rolt, brengt hij zijn snavel erachter en rolt het terug naar het nest. Als hij het ei onderweg verliest, maakt hij toch de beweging af. We zijn geneigd dat instinct te noemen en het niet al te slim te vinden. De flexibiliteit ontbreekt. (Maar hoe is deze handeling evolutionair tot stand gekomen?)

Het invullen van getalletjes in de ABC-formule is niet veel slimmer. Misschien zijn daarom veel van deze rekenmachines zwart…  want voor de meeste gebruikers blijft het natuurlijk een black box.

Wat willen we nu met die algoritmen? Het zelf uitvoeren van een algoritme is niet bijster spannend. De uitkomst ook niet. In veel gevallen kan een rekenmachine het ook – en sneller. En als een rekenmachine het nu nog niet kan, dan in de toekomst toch ongetwijfeld wel. Wat willen we dan wel? Beheersing van nuttige technieken? Structurering van kennis? Ontdekken van wiskundige waarheden?

Denken

Het denken moet bevorderd worden.  Het aanleren van algoritmen valt daar niet direct onder. Het zoeken naar algoritmen is al een niveau hoger: dan moet er nagedacht worden. Eigenlijk zou ‘denken’ een apart vak moeten zijn in het onderwijs. Edward de Bono heeft geprobeerd zoiets op scholen in te voeren en ergens in de rimboe van Venezuela deden ze er enthousiast aan mee. Maar voorlopig zijn wij nog niet zo ver. De voornaamste reden daarvoor is waarschijnlijk dat er geen enkele overeenstemming bestaat over wat ‘denken’ nu eigen inhoudt. Toch waren De Bono’s plannen niet zo gek en men moet ergens beginnen. Wiskunde als schoolvak leent zich misschien wel het beste om hiermee dan toch inderdaad zo’n begin te maken. De mogelijkheden zijn onbegrensd.

Het is duidelijk dat een eenvormige aanpak, met de garantie van een oplossing, zoals de ABC-formule, een stap verder in de ontwikkeling van de wiskunde is.  Ook duidelijk is dat het zoeken naar een eenvormige aanpak, dat in het geval van de ABC-formule vele eeuwen duurde, een zinvolle en nuttige wiskundige activiteit is. L.N. Landa was van mening dat dit zoeken naar algoritmes een van de belangrijkste taken van de wiskunde is. Daar hoeven we het niet meteen mee eens te zijn om het belang ervan te onderkennen. Het is niet de taak van de leraar alleen maar dit soort recepten aan de leerling voor te leggen. Interessanter en zinvoller is het, de leerling te laten zoeken naar een eenvormige aanpak. Natuurlijk moet de leerling daarbij een beetje geholpen worden.

Chaque problème que j’ai résolu est devenu une règle, qui a servi après à résoudre d’autres problèmes schreef Descartes al, in zijn Discours de la methode. Elk probleem dat ik heb opgelost, heb ik tot een regel gemaakt die daarna diende om andere problemen op te lossen. Dat bespaart tijd… We hoeven niet elke tweedegraadsvergelijking apart te onderzoeken. Ook hoeven we ze niet meer in verschillende klassen in te delen zoals al-Chwarizmi nog deed. Of allerlei klassen van vergelijkingen te onderscheiden, zoals Cardano in Ars Magna. Het oplossen van tweedegraadsvergelijkingen is volledig geregeld, het probleem is klaar. We kunnen het gaan proberen met andere vergelijkingen, bijvoorbeeld derdegraads. Dat deed Cardano. En hij (of eigenlijk Scipio del Ferro) vond ook daarvoor een algoritme. De ABC-formule kon daarbij onderweg gebruikt worden.

Een algoritme is, in wiskundig opzicht, de afsluiting van de zoektocht naar een oplossing van een probleem. We kunnen aan de slag met nieuwe problemen en hebben onderweg een handig hulpmiddel, waarbij we precies weten wat we moeten doen, zonder na te denken en waarmee we een hele klasse van (vergelijkbare) problemen kunnen aanpakken – al zijn het dan in zekere zin geen problemen meer. Al verder denkend, kunnen we gebruik maken van de ontwikkelde bouwstenen.

We kunnen ons niet beperken tot het aanleren van algoritmes. Want dat levert gegarandeerd maar één resultaat op: het verliezen van elke vorm van begrip. We zullen de weg kwijtraken. Het aanleren van algoritmen, illustraties van de zin ervan, het zoeken naar nieuwe algoritmen, het aanbieden van heuristieken, het leren hanteren van heuristieken,- dat alles vormt een natuurlijk dynamisch proces. Elke stap heeft didactische waarde. En elke stap moet worden gemaakt in de ontwikkeling van kennis.

Alles?

Moeten we nu proberen uiteindelijk alles te algoritmiseren? Moeten we ernaar streven om de hele wiskunde in algoritmes te vatten? Of zelfs de hele wetenschap? Of moeten we nóg verder gaan? Leibniz, vertelt Russell, heeft zijn leven lang de hoop gekoesterd dat hij de een of andere vorm van gegeneraliseerde wiskunde zou ontdekken, die hij Characteristica Universalis noemde, met behulp waarvan het denken zou kunnen worden vervangen door berekeningen.

Als we daarover de beschikking hadden zouden we in staat zijn op het gebied van de metafysica en de ethiek te redeneren op een manier die overeenkomt met die van de meetkunde en de analyse.

De Characteristica Universalis moest ‘een soort algemene algebra zijn en moet de middelen verschaffen om te denken terwijl men rekent. Zo zou men in plaats van te discussiëren kunnen zeggen: “Laten wij rekenen.”’

Ook Descartes was op zoek naar een universele methode, de Mathesis Universalis. Aan de rekenkunde, de meetkunde, de muziek, de optica, zou deze universele mathesis ten grondslag liggen.

Een kind, bijvoorbeeld, dat heeft leren rekenen en dat een optelsom maakt volgens de regels, kan er zeker van zijn dat het over deze som alles weet wat het menselijk verstand ooit kan uitvinden.

Spinoza begon alvast zijn Ethica, zijn filosofie, te ontvouwen in een wiskundige vorm, met definities en bewijzen.

Men kan ook denken aan de demon van Laplace, de superintelligentie die de toekomst kan berekenen vanuit zijn volledige kennis van alle krachten die op de materie inwerken…

We kunnen de huidige toestand van het heelal beschouwen als het gevolg van het verleden en als de oorzaak van de toekomst. Als er een intelligentie zou zijn die, op een gegeven moment, alle krachten zou kennen die op de materie inwerken, alsook de exacte situatie van elk onderdeel van alle materie, dan zou deze alle bewegingen van de grootste hemellichamen tot het kleinste atoom kunnen omvatten en zou er niets meer onzeker zijn voor deze intelligentie; het verleden net als de toekomst worden voor hem zichtbaar gemaakt.

Het ultieme algoritme zou ons vertellen hoe de toekomst van de wereld eruit ziet. Stop de wereld erin, stop er een datum in en de uitvoer is de stand van zaken op die aangegeven toekomstige datum.

Willen we dat? Het denken vervangen door berekeningen? Alles algoritmiseren? De wiskunde, de wetenschap, alle mogelijke oplossingen voor mogelijke problemen? Misschien zouden we dat wel willen, want misschien zijn we gewoon lui. Helaas – of misschien niet: helaas – bestaat dat universele algoritme niet. En het kan ook niet bestaan… Van veel eenvoudige algoritmen kan al bewezen worden dat ze niet kunnen bestaan. Turing heeft ons geleerd wat een computer in principe kan berekenen. Godel heeft al in de jaren dertig van de vorige eeuw bewezen dat er altijd stellingen in de rekenkunde blijven waarvan de waarheid of onwaarheid niet bewezen kan worden. Althans niet in het gegeven geaxiomatiseerde systeem. En uitgebreidere systemen kampen met hetzelfde probleem. Of om een (nogal willekeurig) concreter voorbeeld te geven: Een stelling van Matiyasevich vertelt ons dat er al geen algemeen algoritme bestaat voor het oplossen van Diofantische vergelijkingen. Daarmee is Hilberts Tiende Probleem, dat hiervoor een algoritme vroeg, onoplosbaar verklaard. Er kan verder worden nagedacht…

Hebben we algoritmen toch nodig? Ja, want we willen praktische hulpmiddelen voor onderweg, op onze zoektocht naar kennis in een complexe wereld. We willen helder zien, goed waarnemen, problemen aanpakken, nadenken, onze kennis uitbreiden. We willen begrijpen. Tijd winnen om aan nieuwe problemen te besteden. Saaie berekeningen machinaal laten uitvoeren. En alleen dan blijven wij de meesters van de machines, de marionetten, de voor altijd gedachteloze golems.

zondag 8 april 2012