Combinatory Reduction Systems Jan Willem Klop In de volgende bladzijden wil ik proberen de achtergrond en de inhoud van dit proefschrift te schetsen; daarbij richt ik me vooral tot degenen die niet bekend zijn met het onderwerp. (Een nauwkeuriger beeld wordt gegeven in de 'Introduction and Summary'.) Er zijn ruwweg twee ingangen tot het onderwerp, de eerste van filosofische aard ('Grondslagen van de Wiskunde') en de tweede van praktisch-toegepaste aard ('Computer Science'). Laten we beginnen met het grondslagen-aspect. Zoals bekend, kan de hele wiskunde (in zekere zin) beschreven worden d.m.v. de Verzamelingentheorie (bijvoorbeeld het systeem ZF van Zermelo en Fraenkel), onder het motto 'alles is een verzameling'. Een concurrerende visie (qua aantal aanhangers veruit in de minderheid) propageert als fundamenteel begrip niet 'verzameling', maar 'functie'. Een voorbeeld: de functie f: ℕ->ℕ met f(x) = (x^2+1)x wordt genoteerd als λx. (x^2+1)x, waarmee dus f(3) = (λx. (x^2+1)x)^3 = (3^2+1)3 (het argument 3 wordt voor alle x-en gesubstitueerd). In de "pure" λ-calculus komen in eerste instantie geen natuurlijke getallen of operaties als 'kwadraat' voor; de enige objecten in kwestie zijn de functies zelf, en de enige operatie is applicatie van een functie f op zijn argument x; resultaat fx. Daarbij zijn we zeer liberaal: het domein van zo'n functie is 'alles' en zelf-applicatie wordt dus niet geschuwd. Z0 is er bijv. een functie F = λxy.yx die zijn twee argumenten omkeert: Fab = (λxy.yx)ab = ba. Merk op dat we zuinig zijn met haakjes en niet F(a,b) schrijven; n-aire functies worden namelijk teruggebracht tot unaire functies, via een simpele identificatie. (Bijv. de binaire functie + = λ(x,y). x+y ∊ (ℕxℕ)->ℕ kan geidentificeerd worden met de unaire functie f = λx.(λy.x+y), afgekort tot λxy.x+y, d.w.z. de functie f ∊ ℕ->(ℕ->ℕ) met f(x) = λy.x+y ∊ ℕ->ℕ. Hierbij staat A -> B voor de verzameling functies van A naar B.) Een ander voorbeeld is de functie D = λx.xx die zijn argument verdubbelt: Da = (λx.xx)a = aa. Dit leidt tot een merkwaardig object, namelijk DD; bij 'uitrekenen' komen we in een cykel: DD = (λx.xx)D = DD. Natuurlijk hebben we ook de 'gewone' compositie C van functies f, g; in plaats van f∘g schrijven we Cfg. In feite is dus C = λxyz. x(yz); want dan inderdaad Cfgx (= (f∘g)x) = f(gx). Een van de opmerkelijkste feiten bij dit rekenen met 'λ-termen' is dat elke functie F een vast punt p heeft, dus Fp = p. Namelijk, neem bij gegeven F eenvoudig p = D(F∘D). Dan immers p = D(F∘D) = (F°D)(F°D) = F(D(F°D)) = Fp! Deze zo eenvoudig af te leiden Fixed Point stelling in de λ-calculus hangt samen met Gödel's Onvolledigheidsstelling en met een fundamentele stelling in de Recursietheorie. Bij de genoemde voorbeelden is het duidelijk dat er een zekere asymmetrie zit in de gelijkheid (=); er is sprake van uitrekenen, reduceren genaamd. Bijvoorbeeld, Da wordt gereduceerd tot aa; notatie: Da -> aa. Meestal bevat een λ-term M verschillende onderdelen die gereduceerd kunnen worden (zoals bijvoorbeeld ook de berekening van (3+2).(5+7) op verschillende manieren begonnen kan worden) en we kunnen de term M dus op verschillende manieren uitrekenen. A priori is het mogelijk dat er dan ook verschillende 'uitkomsten' gevonden worden,’waarbij een 'uitkomst' (officieel: normaalvorm) een term is die niet verder gereduceerd kan worden. Dat zou, intuitief gesproken, niet in de haak zijn. Gelukkig zegt een fundamentele stelling (van Church en Rosser) dat wanneer een term M op twee manieren een aantal stappen gereduceerd wordt, zeg tot A en B, er verdere reducties zijn die tot een gemeenschappelijk reduct C van A, B leiden. En deze stelling garandeert (na nog een kort argument) de uniciteit van de uitkomst, als die er tenminste is. (Bijv. de berekening van DD leidt niet tot een uitkomst: DD -> DD -> ...) Het probleem bij het bewijzen van deze Church-Rosser eigenschap is als volgt. Als elk tweetal reductiestappen aangevuld zou kunnen worden tot een 'tegel', zou het niet moeilijk zijn het gemeenschappelijk reduct C te vinden; in [bovenstaande figuur] door 12 tegels te leggen. Helaas zijn de tegels meestal van de vorm [figuur met ongebalanceerd aantal stappen] en dan kan het plaveien om C te vinden gemakkelijk uit de hand lopen. Deze 'Church-Rosser' problematiek, en het al of niet eindigen ('normaliseren') van reducties, hangen nauw met elkaar samen en vormen het centrale thema van dit proefschrift. De λ-calculus werd in de dertiger jaren ontwikkeld. Er is een verwant systeem, genaamd Combinatorische Logica (in 1924 ontdekt), dat even sterk is als de λ-calculus; de twee systemen zijn in zekere zin vertalingen van elkaar. Alles wat λ-calculus kan, voor de Grondslagen van de Wiskunde, kan CL ook. Bovendien heeft CL het voordeel dat er geen gebonden variabelen zijn (zoals de x in λx.xx); filosofisch prettig want het is problematisch wat gebonden variabelen eigenlijk 'betekenen'. In CL zijn er drie basis combinatoren I, K, 3 met als regels voor reductie: Ix -> x Kxy -> x Sxyz -> (xz)(yz). Dus I is de Identieke 'functie', K is de functie die Konstante functies 'maakt' (immers Kx is een functie met y->x voor all y), en S doet iets dat in feite op hetzelfde blijkt neer te komen als Substitutie in de λ-calculus. Substitutie in λ-calculus wordt a.h.w. geélimineerd ten gunste van concatenatie (simpelweg achter elkaar zetten) in CL, en het laatste is natuurlijk een eenvoudiger operatie. Een voorbeeld. De 'combinator' SIT doet hetzelfde als de verdubbelaar D boven: SIIx -> (Ix)(Ix) -> x(Ix) -> xx. CL heeft ook weer zijn nadelen: de beschrijving door een λ-term van een 'rekenproces' is veel directer; de corresponderende combinator is veel ingewikkelder. Een voorbeeld van een typisch verschil in syntactisch gedrag: het is niet moeilijk λ-termen M te vinden zodat M met al zijn 'reducten' precies een reductie-‘loop' vormt: [figuur met vectoren gearrangeerd in een hexagon loop]. (DD was al zo'n loop.) In CL daarentegen genereert de aanwezigheid van een cyclische reductie er meteen oneindig veel in de reductie-graph. (Dit is goed te zien bij de CL-vertaling (SII)(SII) van DD.) We zouden kunnen zeggen dat CL en λ-calculus een analyse geven van rekenprocessen. Een CL- of λ-term is eigenlijk een 'programma', maar dan één in pure vorm, ontdaan van alle 'syntactic sugar' waaronder de essentie van echte programma's soms schuil gaat. De λ-calculus (of CL) is te zien als een 'oer-programmeertaal', waarin veel van de essentiéle aspecten van echte programmeertalen in pure vorm bestudeerd kunnen worden. (Zo bezien is zelf-applicatie (FF) niet vreemd: een programma kan zichzelf als input hebben.) Reductie-stappen zijn atomaire berekeningen, zoals in Turing machines het opschuiven van de band, het veranderen van inwendige toestand, het drukken van een symbool, etc., de atomaire handelingen zijn. (Alles wat een Turing machine kan, kan CL of λ-calculus ook.) Hiermee zijn we terecht gekomen van het Grondslagenaspect op dat van de Computer Science. Het reductiesysteem CL is een voorbeeld van een Term Reductie Systeem (TRS). TRS'en komen al in elementaire wiskunde voor, bijvoorbeeld { x+0 -> x { x+(y+1) -> (x+y)+1 { x.0 -> 0 { x.(y+1) -> x.y+x, de definitie 'vergelijkingen' voor + en . , vormen een TRS. Gegeven de term (2+3).(5+7) dan kan deze, op verschillende manieren, m.b.v. de reductie-regels uitgerekend worden. 0ok hier dus de 'Church-Rosser problematiek' en de vraag of de berekening eindigt. Voor deze TRS zijn die vragen niet zo moeilijk positief te beantwoorden; de regels vertonen de prettige omstandigheid (net als die voor CL boven), dat de variabelen x,y,z aan de linkerkant van de regels paarsgewijs verschillend zijn (rechts niet). Zulke TRS-en heten lineair. Een simpel voorbeeld van een niet-lineaire TRS krijgen we door aan bovenstaande regels de volgende reductie-regel voor de inverse toe te voegen: x+(-x)'+.0. Het dubbel voorkomen van de x aan de linkerkant is lastig om de volgende reden. Stel x + x', en beschouw de 'divergente' bereken-stappen x + -x -> 0 ↓ x'+(—x) dan moeten we om een gemeenschappelijk reduct te vinden eerst de verstoring van de a.h.w. in evenwicht verkerende term x+(—x) compenseren: x + -x --------------> 0 ↓ | x'+(—x) -> x'+(-x') -> 0 Het hoofdresultaat van dit proefschrift is nu, dat door die non-lineariteit van reductie—regels de Church-Rosser eigenschap (CR) beslissend verstoord wordt, als het reductie-systeem in kwestie tenminste 'sterk genoeg' is. Voor de eenvoudige niet—lineaire TRS 2 van boven geldt CR nog wel. Maar als we een 'mixture' zouden bekijken van λ-calculus plus ⅀ (met termen zoals λz.((λxy.x+(-y)+z)), dan geldt CR niet langer! Overigens: het falen van CR impliceert nog niet dat een term dan tot verschillende uitkomsten gereduceerd kan worden. Inderdaad blijkt in de onderzochte systemen dat daar de uniciteit van normaalvormen blijft gelden, ook al geldt CR niet. Zulke non-lineaire systemen komen in verschillende gebieden tevoorschijn; behalve in 'pure' λ-calculus en als TRS-en die samenhangen met algebraische structuren (zoals het voorbeeld boven), ook in de Bewijstheorie en in de Theoretische Informatica, bij een stel regels als: (if true then x else y) -> x (if false then x else y) -> y (if z then x else x) -> x (*) waar het venijn van de niet-lineariteit in regel (*) zit. Uit bovenstaande zal het duidelijk zijn dat a1 deze problemen een 'syntactisch karakter' hebben. Dit proefschrift beperkt zich tot die kant van de zaak; semantische aspecten ('wat betekent een λ-term? Is er een model voor de λ-calculus?') komen hier niet aan bod.