Grote Getallen systemen

Voorbij Conway's pijlketens!

door Giga Gerard

Dag / Nacht

$ 1. Getallen bouwen Tel op tot getal en herhaal getallen en hun herhalingen en noteer dit kort in functies. Objecten van de wiskunde en relaties ertussen kunnen we tellen en soms ook weer gebruiken om te tellen. De "googologie" of de leer van de grote getallen, begint met eenvoudig tellen op vingers. En zo voort, enzovoorts. $ 1.1. Tellen van 1 Constructies van getallen bestaan uit eenheden of units, maar ook uit operaties en functies in een expressie die we kunnen evalueren tot getal. Om natuurlijke getallen te maken, tel 'een' 1 op tot een aantal 1.. enen. Voor negatieve getallen, zet links de factor 'min' - of tel minnen -.. van rechts op. Of begin met het getal 'nul' 0 dat niets   is, en stop zonder te tellen. Hier een repetitie of 'rep', die 1 selecteert en op zijn .. plaats :n aantal keer herhaalt, tot deze enen gelijk = zijn aan de uitkomst n als het tellen stopt. 1.. :0 = 0 1.. :n = n Om een ​ unair genoteerd getal uit te lezen, tellen we elke 1 erin een keer. Peano's primitieve opvolger functie σ geeft het volgende natuurlijke getal. σ(0) = 1 σ(n) = n1 Drukken we getallen n uit door enkel functies σ(..) :n: te nesten, dan staat elke functie σ() daarin gelijk aan de eenheid 1 in wezen. Met tellen dat nooit stopt drukken we per definitie een getal uit dat oneindig is. 1... = ω Dit getal omega ω is het eerste en kleinste oneindige getal boven de natuurlijke getallen. Vanaf deze mijlpaal kunnen we ook weer σ(ω) = ω1 verder tellen. $ 1.2. Getallen in basis 10 Schrijf de getallen van 'twee' tot 'tien' met cijfers 2,3,4,.. en definieer ze met enen. Zet deze ook om => in binaire notatie met basis twee. 2 = 11 => 10 3 = 111 => 11 4 = 1111 => 100 5 = 11111 => 101 6 = 111111 => 110 7 = 1111111 => 111 8 = 11111111 => 1000 9 = 111111111 => 1001 10 = 1111111111 => 1010 In een basis systeem of radix r lopen de cijfers van 0 tot r- en hebben aparte tekens. Daarna komt 10 als de eigen basis en de verdere samenstellingen. De lengte van getallen in een basis wordt door de extra tekens bekort. Zo is ieder natuurlijk getal <r^k op unieke wijze gegeven met maar <k cijfer plaatsen. Schrijf een getal in basis r als een reeks digits d en vertaal deze terug als factoren * van oplopende machten ^ van r die in serie worden opgeteld. d_i.. k:0 <= d_0.+d_i*r^i.. 1:k De index i neemt elke volgende stap toe of af met 1 zoals 'l-r' van links naar rechts aangeduid in de 'rep'. De waarde van de cijfer plaatsen loopt 'l-r' af (het grootste cijfer getal vooraan), maar de constructie van getallen via herhaalde vermenigvuldiging van 10 moet wel oplopen. Derhalve is behalve de historische herkomst van de cijfers ook de 'r-l' richting van decimale getallen Arabisch te noemen. - - - - - - - - - - - - - - - - Vraag: In basis 'zes' is het getal 555 hetzelfde als 215. in basis 'tien'. Maar als de bases onbekenden zijn, zijn die dan te berekenen..? Valt het te bewijzen, dat geen enkel ander basis paar voldoet..? En aangezien dit in het algemeen onmogelijk is, voor welk soort getallen kan het misschien wel..? $ 1.3. Fysieke getalgaten Getallen kunnen bestaan uit eenheden of units, of verkort geschreven worden met operaties of functies in een wiskundige expressie. Expressies voor natuurlijke getallen zijn met behulp van regels te evalueren tot een uitkomst bestaande uit een aantal enen. Om structuur toe te voegen aan de expressie zetten we extra tekens in. En ook het algoritme, met de definitie van de regels voor evaluatie van expressies, zorgt voor een uitbreiding van ons wiskundig taalapparaat. Doel van de googologie is om met een minimaal aantal tekens en zo beperkt mogelijke regels, zo groot mogelijke getallen te noteren. Om hogere wiskundige structuren te herkennen en daarover dan te itereren tot in het oneindige. Hoe sneller de functie, hoe meer getallen tussenin gemist worden in de notatie. Zulke grote gaten liggen dieper verborgen dan de grote getallen zelf, die als vuurtorens boven hun eiland van naburige kenbare getallen uitsteken, terwijl de random zee van getallen eromheen onkenbaar is. Vrij snel in ons verhaal zijn de meeste natuurlijke getallen door geen enkel praktisch getalsysteem meer te bevatten. Want de systemen die in ons fysisch heelal mogelijk zijn, zijn beperkt door het aantal te observeren quantum bits. We kunnen stellen dat binaire getallen met een lengte van ongeveer 10^81 (Vopson 2019) tot wel 10^90 (Lloyd 2001) zich nog in ons zicht bewegen. Daarboven wonen de goden. In elk wiskundig systeem is de expressie lengte van de meeste gehele getallen groter dan in een radix met evenzoveel tekens. Hoewel dit verschil niet meer dan een luttele basismacht 10 kan bedragen in totaal, omdat al die expressies uiteindelijk tot 1.. evalueren in de systeem output. Al de getallen die de mens kan gebruiken zijn relatief "klein". Het vervolg van ons reisverhaal over de getallen is dus volstrekt nutteloos, hopelijk, duimen maar! Reddingsboot met mannen slaat om in een storm op zee $ 1.4. Googol en googolplex Als groot getal noemen we de "googol", te schrijven als 10^100 met exponent, of in onze basis tien als een 1 gevolgd door 100 nullen. De Babyloniërs zouden hier in basis 60 een reeks van 57 spijkerschrift tekens voor nodig hebben. In de digitale radix 256 neemt dit 42 bytes in beslag. Voor de googoloog, die net als Google zijn naam dankt aan dit getal, geeft een basis notatie erge rompslomp. Cijfers zijn handig om getallen mee af te korten, maar googologen tellen net zo goed weer enen als onbenullen nullen. Een "googolplex" is een 1 met googol nullen, ofwel 10^10^100 met dubbele exponent. Dit getal zou in de hypothetische basis "googol" met 10^98 nullen geschreven worden. Als elke 0 daarin de maat van een bacterie heeft vullen die de gehele ruimte van het heelal, een voorbeeld van de onmacht van radix systemen. Om een random getal verborgen in de zee rondom het googolplex uit te drukken met quantum bits, hebben we tot wel 10^20 keer zoveel van die deeltjes nodig dan er in ons heelal zijn. Zelfs bij een vrije keuze om elke mogelijke wiskundige expressie te evalueren met elk mogelijk wiskundig systeem, weer te geven als input (uitrekenen hoeft niet) op onze ene universum quantum tablet, is het nog onzeker of elk getal opgevist zou kunnen worden. Met een hogere exponent erbij de meeste random getallen zeker niet! Googolplex is al een onbegrijpelijk groot getal. Het eerste vuurtoren eiland dat we aandeden op onze ontdekkingsreis naar het oneindige. - - - - - - - - - - - - - - - - - - - - Vraag.. Googol is 10^100 . Vind een benadering voor de tetratie wortel t , zodat t^^t dicht in de buurt komt van googol. Stel t is een exact reëel getal, niet fundamenteel fuzzy of onkenbaar, hoort t thuis in een nieuwe klasse..? Sneller en dieper verzonken in de getallenlijn dan de eindeloze rij breuken, waarmee we algebraïsche en transcendente reëele getallen benaderen...? Stel dat deze superwortels niet kunnen worden berekend. Dan bestaan ze wel door hun wiskundige definitie, maar blijven fundamenteel onbenaderbaar en vallen buiten het deelbare 2^ω continuüm. Er zijn oneindig veel hogere ^{c} operaties en functies met *[X] superarrays. Zijn de meeste inversen daarvan zo vaag, dat ook hun relatieve ordening onbekend moet blijven..? $ 2. Supermacht operaties Elke supermacht ^{c+1} is de herhaling van een aantal vorige macht ^ of supermacht ^{c} operaties. Hier telt c>0 het aantal carets en de text links van .. wordt in totaal :b keer herhaald door de 'rep'. a^{c1}b1 = a^{c}..a :b De supermacht operaties ^{c} of *{c1} zijn rechts associatief, dus deze expressies worden verder 'r-l' van rechts naar links uitgewerkt. Stapsgewijs definiëren we dit als volgt, waarbij *{c≥0} en vermenigvuldiging * tot een reeks directe optellingen reduceert. a*{c1}b1 = a*{c}(a*{c1}b) == a*{c}(..a*{c1}1..) :b: ≡ a*{c}..a :b We zullen deze supermachten evalueren met de nieuwe "popster" operaties. Dit sluit nauw aan bij een primitief recursieve functie voor supermachten over een rij variabelen. We bouwen ons popster systeem langzaam op. $ 2.1. Rekenoperaties Met de eerste supermachten *{k<3} kunnen we rekenen. Dit zijn de operaties van optellen *{0} en vermenigvuldigen *{1} en machtsverheffen *{2} waarvan ook de inversen en vele reële en complexe getallen bekend zijn. $ 2.1.1. Ster 0 optellen Bij variabelen met natuurlijke getallen a en b die naast elkaar staan, is meteen de som ab gegeven, waarin alle enen 1.. bij elkaar optellen. We plaatsen 'plus' + tekens tussen getallen om optellen uit te stellen. - +a+b =` +ab - a+b = ab Door deze regels • voor optellen consequent vanaf rechts toe te passen, komen de wachtende operaties beschikbaar en kan hun + wegvallen. Het "is gelijk" teken = drukt gelijkheid uit en betreft de evaluatie van hele expressies of subexpressies (binnen haakjes). Het "is rechts" teken =` selecteert vanaf rechts in de expressie. Daarmee werken we operaties 'r-l' uit, reducerend van rechts naar links. Zo werken we een optelling tot getal stapsgewijs uit. 1+1+1+1 = 1+1+11 = 1+111 = 1111 ≡ 4 De actieve plus operatie is te beschouwen als *{0} nulde superster, die leeg is. Alle operaties rechts van een plus teken krijgen voorrang, maar ook elke hogere operatie die links ervan staat. $ 2.1.2. Ster 1 vermenigvuldigen Vermenigvuldigen is herhaald optellen van een constant a.. getal. Het keer of maal teken ertussen schrijven we met een * ster. Definitie van vermenigvuldigen voor gehele getallen. Stel b>0 zodat de tweede regel in de laatste stap de iteratie overneemt van de eerste regel. - a*b1 =` a*b+a - a*1 =` a Vindt een match vanaf rechts =` in de expressie voor de vorm links in de regel. Iedere iteratie stap telt een constante a op bij de som. Herhaal de reeks stappen == in combinatie met optellen, tot de laatste stap de operator elimineert en de uitkomst levert. a*b1 = a*b+a == a*1+.a.. :b = a.. :b1 De 'rep' :b herhaalt de tussen . of terzijde van de punten .. geselecteerde passage b maal. Reps zijn beschrijvend bedoeld en niet regelgevend. Een voorbeeld van vermenigvuldiging als optellen in stappen. Neem de vertaling naar decimale getallen hier voor lief. 2*3 = 2*2+2 = 2*1+2+2 = 2*1+4 = 2+4 = 6 De iterator is hier 111 en in het algemeen een variabele b waar elke stap 1 vanaf telt om een kopie van a op te sommen. De ster van vermenigvuldigen is de eerste superster operator. $ 2.1.3. Ster 2 machtsverheffen Machtsverheffen ** of ^ is herhaald vermenigvuldigen. Om machten stapsgewijs uit te werken, met de lagere operaties eerst, moeten we de hogere in de wacht zetten. De 'pop' plus bij de ster *+ operatie stelt vermenigvuldiging uit, alsof deze tussen haakjes staat tot de ster ontpopt. Evalueer popster machten volgens deze speciale definitie, waar b>0 . - +a*+b =` +a*b - a*+b = a*b - a**b1 =` a**b*+a ≡ a*..a :b - a**1 =` a We hebben de regels in een volgorde gezet, die het mogelijk maakt om deze definitie op twee manieren toe te passen: hetzij door de bovenste toepasbare regel uit te voeren, hetzij de regel die meest rechts in de expressie aangrijpt. We gebruiken het equivalentie teken ≡ voor een vorm van expressie, die niet via de regels te bereiken is. Zoals hier voor een reeks factoren, want de regels werken factor voor factor uit tot getal. 2**3 = 2**2*+2 = 2**1*+2*+2 = 2**1*+2*2 == 2**1*+4 = 2*+4 = 2*4 == 8 ≡ 2*2*2 Hoewel dit vanzelf niet in de uitwerking kan gebeuren, telt ons popster systeem in a^b+1 één op bij een factor, maar in 1+a^b gewoon bij het totaal. Volgt een ster *+ met pop plus, dan komt die gewoon als factor bij de reeks factoren. Deze regels werken zonder precedentie en evalueren strikt 'r-l' vanaf rechts, wat vreemde resultaten geeft als we ster operaties op elkaar schrijven. 2**3*2 = 2**3*1+3 = 2**3+3 = 2**2*+2+3 = 2**2*+5 = 2**1*+2*+5 = 2**1*+2*5 == 2**1*+10. = 2*+10. = 2*10. == 20. We kunnen het ook anders regelen: om carets ^ met meerderheids-precedentie op te lossen (hogere operaties met meer tekens eerst), en daarna sterren * met minderheids-precedentie (voorrang aan minder tekens). Dan zou 2**3*2 = 2^6 groter zijn, maar 2^3*2 = 8*2 kleiner. Gulliver ligt vastgebonden tussen mini-mensjes $ 2.2. Popster supermachten Popsterren zijn stap na stap te reduceren, met een extra plus *+ maar zonder haakjes in te lassen, wat een teken bespaart. Door meerdere sterren *`(..) aan de operator toe te voegen, worden de uitgedrukte getallen al snel enorm groot. $ 2.2.1. Definitie De eerste echte supermacht operatie met drie *** sterren of twee ^^ dakjes heet "Tetratie". Dit levert een aantal machtsverheffingen op, een toren van exponenten die 'r-l' van rechts naar links moet worden opgelost. a***b1 = a**(a***b) == a^(..a^^1..) :b: ≡ a^..a :b De macht operant b vormt een reeks of toren van operaties met constantes a . In het popster systeem schrijven we deze torens niet in hun geheel, maar top operaties komen rechts apart te staan en worden met voorrang uitgewerkt. Definitie voor de evaluatie van 'PopSter' supermachten. Steeds is b>0 maar de operator *{c≥0} kan leeg zijn. -PS.1a. +a*{c}+b =` +a*{c}b -PS.1b. a*{c}+b = a*{c}b -PS.2. a*{c1}b1 =` a*{c1}b*{c}+a -PS.3. a*{c1}1 =` a We voeren die regel uit, die een match geeft op de meest rechtse =` positie in de expressie. Maar in de evaluatie van een supermacht blijft dit hetzelfde als voorrang geven aan de bovenste regels. Variabelen zijn "gretig" naar enen, zodat elke getal a in de regels compleet is, zonder rest deel in de expressie. Stap 2. ster operatie introduceert kleinere popster met operant. Trap 1. elimineert de plus uit de rechts gelegen popster. Stap 3. elimineert als laatste stap de ster operatie. De evaluatie van supermachten kan toe met vier regels. Of zelfs drie, wanneer we regel 1a. en 1b. regulier samenvatten. De operatie van *{c}+ wordt actief, als links ervan een plus komt te staan. Het kan zonder regel 1b. door een plus teken +X voor alle expressies te zetten, maar dan is een nieuwe regel +x = x nodig die de uitkomst geeft. $ 2.2.2. Evaluatie Als voorbeeld evalueren we de macht 2**2 en de supermacht 2****3 in stappen met de 'PopSter' regels. We schrijven voor het gemak carets, waarbij *{c1} en ^{c} gelijk zijn en hier strikt rechts associatief 'r-l' met de pop plus uitgewerkt. 2^2 = 2^1*+2 = 2*+2 = 2*2 = 2*1+2 = 2+2 = 4 De ster en pop plus eliminatie van regels 3. en 1. volgen steeds na elkaar, dus kan dat ook = ineens. Een reeks stappen geven we vaak wel met == aan. 2^^^3 = 2^^^2^^+2 = 2^^^1^^+2^^+2 = 2^^^1^^+2^^2 = 2^^^1^^+2^^1^+2 = 2^^^1^^+2^2 = 2^^^1^^+4 = 2^^4 = 2^^3^+2 = 2^^2^+2^2 = 2^^2^+4 = 2^^1^+2^4 = 2^^1^+2^1*+2*4 = 2^^1^+2^1*+2*1+6 = 2^^1^+2^1*+8 = 2^^1^+2*8 = 2^^1^+16. = 2^16. == 65536. De hogere machten in de toren werken we eerder uit, dat is dus het principe. Een ander voorbeeld, de evaluatie van 3****2 of 3^^^2 met popsterren. 3****2 = 3***3 = 3***2**+3 = 3**+3**+3 = 3**+3**3 = 3**+3*+3*3 = 3**+3*+3+6 = 3**+3*9 = 3**+27. = 3**27. == 7625597484987. Alle supermacht expressies zijn met twee type tekens, de 1 en * te noteren. Tijdens de evaluatie komt daar de pop + als solo haakje bij. Slechts drie tekens! Dakjes ^ of carets en ^+ popcarets, cijfers en tientallige getallen (met decimale punt) nemen we erbij als afkortingen. $ 2.2.3. Toepassingen We kunnen sommige supermacht operaties alleen ruwweg met elkaar vergelijken qua grootte. In dit voorbeeld neemt het absolute verschil < tussen twee ster supermachten bij grotere c toe. Terwijl dit verschil in de context van de hierdoor groeiende reeksen klein begint met 1 en niet significanter zal worden. 2^{c}4 = 2*{j}..8 c:1 < 3^{c}3 = 3*{j}..9 c:1 De teller {c} geeft in krulhaakjes het aantal tekens in de operator aan. De repetitie c:1 noteert een reeks waarin de indexen j naar rechts afnemen. In de expressie a^{c}b1*{d}+e ontpopt de iteratie van rechts als hoogste exponent in de toren a*{c}..a*{d}e :b wat significant kan zijn. Deze extra resolutie vormt een aanvulling op ons rekenapparaat, waarmee array functies nauwkeuriger zijn te schatten. Zo helpen popsterren om de oceaan van de supermachten en hun naburige supermachtige getallen in kaart te brengen. - - - - - - - - - - - - - - - - In de teller kan ook een subexpressie staan, die met voorrang wordt uitgewerkt. En dat in serie, zoals Gardner het Getal van Graham aangeeft, met geneste superexponenten en Knuth's pijlen. 3↑{..3↑↑↑↑3..}3 :63: = 3^{..4..}3 :64: = 3*{..4..+1}3 :64: De duorep :d: herhaalt selecties aan beide kanten van de expressie. Plaats elke selectie op zijn punten .. links erna en rechts ervoor in de expressie. En werk in stappen van binnen naar buiten, tot de rep tot :1: is uitgeteld en deze met de punten uit de expressie verdwijnt. Pas in 1976 werden superoperaties uitgevonden door Donald Knuth met carets in de vorm van oppijlen ↑{c} in zijn essay "Omgaan met eindigheid". Maar dezelfde dubbele recursie φ_c(a,b) inclusief Ackermann functie was al te vinden bij David Hilbert in zijn artikel "Over het oneindige" uit 1925. $ 2.2.4. Functie vorm Evaluatie van supermachten gaat makkelijker in een functie. Alle operaties a*{c}b die we uitwerken volgens de 'PopSter' definitie krijgen deze vorm. a*{c_i+1}b_i*{c_i}+..b_0 k:1 waar b>0 en c_i1>c_i≥0 Elke superster telt daarin een ster * meer dan de erop volgende popster. Deze sterparen nemen naar rechts af, maar niet alle sterparen hoeven in die reeks voor te komen. Stel nu, dat we voor de ontbrekende supermachten in die reeks een operant b=0 nemen (een permanente nul), die zijn sterpaar reduceert tot een wegvallende nul 01 = 1 (tegen de variabele erna) met een extra regel. -PS.4. a*{c>0}0*{d}+ =` 0 Zo is de reeks van sterparen die naar rechts toe aflopen compleet. a*{i}b_i*{i-}+..b_0 k:1 En verloopt een uitwerking vanaf rechts bijvoorbeeld via: 2^^^^1^^^+2^^^0^^+2^^2^+2^0*+2*0+1 = 2^^^^1^^^+2^^^0^^+2^^2^+1 == 2^^^^1^^^+2^^^0^^+4 = 2^^^^1^^^+4 = 2^^^+4 = 2^^^4 == 2^^65536. ≡ 2^..1 :65536 Omdat alleen de operanten b en het aantal carets ^{c} of sterren *{c1} variabel zijn en kenmerkend, is het overbodig om de constante a voortdurend aan te halen. Ook komt er van ieder sterpaar nu één voor, in rangorde 'r-l' oplopend, met de hogere supermachten links in de wacht. Om tijdens de uitwerking een popster expressie op te slaan, hoeven we dus enkel de constante a en alle variabelen b_i in volgorde te noteren. 2^^^^2^^^+ 2^^2 2^^^^2^^^+2^^^0^^+2^^2^+2^0*+2*0+1 2^^^^2 ^^^0 ^^2 ^0 *0+1 2 2 0 2 0 0 1 2, 1,0,0,2,0,2 Alle essentiële data is hier met zeven getallen gegeven. En we draaien de rij met zes variabelen ook om, zodat de evaluatie 'l-r' in leesrichting kan verlopen. De achterste pop +1 is eigenlijk alleen voor de vorm en kan in de functie door een andere regel worden ondervangen. Getal 0 schrijven we zonder enen. Dan toont deze popfunctie, dat het aantal supermachten *{k}n steeds 1 verschilt met het corresponderende aantal komma's ,{k1}n links in de rij. 2*{6}3 = 2*****2****+2***2 11,{7}111 = 11,,,,11,,11 Zo zetten we supermacht expressies om naar een rij structuur, met nog maar twee tekens en een veel kortere expressie lengte. De regels voor de evaluatie van een dergelijke functie zijn simpeler en zien we in het volgende hoofdstuk. $ 3. Rij functies De systemen in dit hoofdstuk blijven beperkt tot een enkele rij met variabele getallen. We ontwerpen twee nieuwe primitief recursieve functies, Adam en Eva, waarvan de uitkomsten zich in het supermacht gebied bewegen. $ 3.1. Systeem Adam Systeem 'A' staat voor "Adam's adaptatie". Adam neemt voor zijn eerste rij de functie vorm over van de popster supermachten uit vorig hoofdstuk. Thema bij de constructie van Adam is natuurlijkheid, waarbij iteraties worden afgeteld tot 0 en structuren leeg kunnen staan. $ 3.1.1. Primitieve recursie Om zo zuinig mogelijk te zijn met type tekens, substitueren onze functies geen subexpressies (X) maar getallen. Ronde haakjes zijn hierbij niet nodig en de regels staan dus geen "functionele recursie" toe, waarbij een afgetelde functie expressie terugkeert in de input variabele. Rij expressies bestaan uit getallen met tekens 1 en komma's , ertussen als separator. Als variabelen afgeteld zijn, laten we de 0 weg. Als "primitief" geldt het optellen van de constante a en het opschuiven van de variabele b over de rij, wat "opladen" heet. Dit is de getal opbouw. Beide regels tellen 1 af van een hogere iterator (of schrijf min - bij), rechts van de in te vullen positie. Dit is de expressie afbouw. We herhalen deze stappen "recursief", waarbij een vorige herhaling het aantal volgende herhalingen bepaalt. Tot een natuurlijk getal n wordt uitgedrukt, als een serie enen 1.. :n van die lengte. We kunnen alle supermacht expressies evalueren tot getal, door slechts twee tekens te gebruiken en drie primitief recursieve regels. $ 3.1.2. Definitie 'A.I' Definitie van "Adam" systeem 'A' over structuur 'I' van een rij variabelen, met regels voor de selectie en evaluatie van supermacht expressies. De variabele b≥0 en het aantal komma's ,{k≥0} mag nul zijn, zonder teken, en ook text variabele R voor het deel rechts kan leeg staan. -A.I.1. a,b,1R = a,ab,R -A.I.2. a,b1,,{k},1R = a,,1,{k}b,R 1= a,a,,{k}b,R -A.I.3. a,b,{k} = b Expressies van 'A.I' blijven congruent aan die bij de evaluatie van popster operaties, waar de functie variabelen links op de top operatie rechts worden gestapeld. Maar de regels werken anders. Zo mag de uitgetelde rij structuur in de functie tot op het laatst blijven staan. Regels met = selecteren de hele expressie. Gedurende de evaluatie is steeds precies één van deze regels toepasbaar. Regel 1 telt de constante a op in variabele b . Regel 2 verplaatst het somtotaal van b om een afgetelde iterator op te laden, maar laat 1 slim achter, zodat a optelt in de volgende stap. Regel 3 neemt getal b als uitkomst en stopt de evaluatie. Maar expressies van de vorm a,,,{k>0}1R vallen buiten systeem 'A' en zijn zijn niet reduceerbaar. We geven daar een oplossing voor met de volgende systeem varianten, waar ook de lege structuren rechts eerder wegvallen. $ 3.1.3. Variant 'Aa.I' In de uitgebreidere definitie 'Aa.I' worden de resterende komma's van afgetelde variabelen meteen vanaf rechts opgeruimd. In plaats van een text variabele gebruiken we het scan teken ` voor een passieve passage tot op het eind rechts. Stel b≥0 bij het somtotaal. Waar :k>0 een aantal afgetelde variabelen ,0 tussenin herhaalt, wat we hiervoor noteerden met lege ,{k} komma's. -Aa.I.0. a,`,0 = a,` -Aa.I.1. a,b,c1` = a,ab,c` -Aa.I.2a. a,b1.,0..,d1` :k = a.,0..,b1,d` :k -Aa.I.2b. a.,0..,d1` = a,a.,0..d` :k -Aa.I.3. a,b = b In systeem 'Aa' kiezen we ervoor om expressies met waarde b=0 onder c=0 gelijk te houden aan die waar b=1 zou staan. In het strikte systeem 'A' vielen expressies a,{k>2}1R gewoon niet onder de regels, maar hier worden deze handig gebruikt om een supermacht mee uit te drukken. a*{c>0}b = a,{c1}b De extra regel verandert de evaluatie niet. Regel 2a en 2b van 'Aa' na elkaar toepassen, geeft hetzelfde resultaat als opladen en optellen in systeem 'A'. $ 3.1.4. Variant 'Ab.I' Een ander type definitie benoemt alleen die variabelen en tekens, die voor de selectie en wijziging nodig zijn. We scannen expressies steeds vanaf de linker kant a, naar rechts. Test daarbij de 'l-r' scan regels `= in de definitie van boven naar onder, tot er een match voor de expressie vorm gevonden wordt. Een spatie in een regel betekent het einde van het linker gedeelte van de vorm, waarna we apart doorzoeken naar een match voor het rechter gedeelte. Op de spatie slaat de 'l-r' scan dus elke andere passieve text over. Deze definitie van systeem 'Ab.I' past de regels strikt in volgorde toe. We ruimen komma's pas op als alle iteratoren op rij afgeteld zijn. Stel b≥0 voor het subtotaal. -Ab.I.1. a,b,1 `= a,ab, -Ab.I.2a. a,b1, ,1 `= a,,1 b, -Ab.I.2b. a,,, 1 `= a,1,, -Ab.I.3a. a,b, `= a,b -Ab.I.3b. a,b = b Speciale expressie a,,{k>1}2R evalueert nu tot a,a,{k}R en telt dus een iteratie stap meer af dan in systeem 'Aa'. Dit is rekenkundig juister. Schrijf in 'Ab' net als in 'A' hier altijd b=1 om een standaard supermacht uit te drukken. $ 3.2. Adam met popsterren We vergelijken de evaluatie in functie 'A.I' met de popster operaties. Na wat rekenen ermee volgt de algemene vorm van zulke vergelijkingen. $ 3.2.1. Tetratie in rij van vijf Expressies met drie tot vijf parameters in systeem 'A.I' zijn equivalent aan de eerste popster supermachten * tot *** en komen totaan tetratie. In de volgende voorbeelden tonen we de functie `= regel nummers links van het evaluatie teken en van popsterren =` de regels rechts. Evalueer optellen en vermenigvuldigen. a,b,1c = a*c1+b 1= a,ab,c =2,1 a*c+ab 1== a,a*c+b,1 == a*1+a{c}b 1= a,a*c1+b, =3,1 a{c1}b 3= a*c1+b Evalueer vier parameters in 'A.I' als macht met popsterren. a,1,,2d = a**d2*+1 2= a,,1,1d =2,1 a**d1*+a*1 1= a,a,,1d =3 a**d1*+a 2= a,,a,d =2,1 a**d*+a*a 1== a,a*a,,d == a**d*+a^2 == a,a^d1,,1 == a**1*+a^d1 2= a,,a^d1, =3,1 a*a^d1 1== a,a^d2,, == a^d2 3= a^d2 Gebruik popster operaties in de variabelen om de evaluatie precies te volgen. a,b,c,d == a,a*c+b,,d = a,,a*c+b,d- = a,a*+a*c+b,,d- == a,a^d*+a*c+b,, ≡ a,a^d1*c1 {b=a} = a^d2 {c1=a} De iterator e van tetratie domineert de kleinere operaties en zolang deze niet veel groter zijn dan a dan telt dit ongeveer twee exponenten erbij e2 op. a,b,c,d,e = a,a*c+b,,d,e = a,a^d1*c1,,,e {b=a} ≡ a,1,,a^d2,e- {c1=a} = a,a^a^d2,,,e- == a^^e1^+d2 = a^^e2 {d2=a} Precies gesteld zo, of als d~a dan ronden we een rij van vijf in 'A.I' zo af. $ 3.2.1. Supermachten over de rij Met een reeks lege komma's ,{k} op de Adam rij drukken we direct het aantal sterren *{k} van een supermacht uit. a,1,{k1}p1 = a,a,{k1}p = a,a,{k}a-,p- == a,a*{k}a,{k1}p- == a,a.*{k}a.. :p = a*{k1}p1 Elke voorliggende parameter in de functie rij is een kleinere supermacht en vormt een popster operatie op de hoogste exponent van de supermacht rechts. Algemene vergelijking van expressies 'A.I' met de reeks popsterren, beide in 'rep' notatie. En afgerond tot supermacht, waar we de hele rij met insignificante p~a optellen bij de hoogste operant. a.,p_i.. 0:k = a*{i}p_i*{i-}+..p_0 k:1 ~ a*{k}(p_k+1)*{k-}+p_k- ~ a*{k}(p_k+2) Bij kleine expressies k<2 of bij relatief grote superfactoren p_k- zal de bijtelling van p_k+2 afwijken in de superexponent. Lastig aan systeem 'A.I' zijn de twee oplaadregels in serie: met de substitutie van constante a in de lege cel b na het opladen van hogere cellen. Ook is het zuiniger om tekenreeksen ,{k>1} in te zetten als separatoren in multidimensionale arrays. Het volgende systeem zal dit oplossen. Gulliver op een reuzenmatras met mini-cavalerie $ 3.3. Systeem Eva Systeem 'E' staat voor "Eva's evaluatie". Eva noteert zo groot mogelijke getallen met zo weinig mogelijk expressie tekens en systeem regels. Typerend voor Eva is dat iteraties aftellen tot 1 en elke separator in aanleg apart blijft staan. $ 3.3.1. Definitie 'E.I.' Rij systeem 'E.I' opereert ook in het gebied van de supermachten. Uitgedrukte getallen wijken bij gelijke expressies wel af van die in 'A.I' en lopen er steeds wat op achter, waarbij de vergelijking steeds ingewikkelder wordt. Definitie van systeem 'E' op de eerste rij 'I'. -E.I.1. a,b.,1..,2R :k≥0 = a,.,1..ab,1R :k -E.I.2. a,b.,1.. = ab Elke expressie is op te lossen met maar twee regels. ¶ Regel 1 laadt de som ab uit de basis op naar de meest rechtse iterator ,1 die afgeteld staat te wachten, waarna de tweede variabele b=0 leeg is. Bij een vervolg worden lagere iteratoren ,1 alleen met a opgeladen. In geval :k=0 ontbreekt deze reeks en telt de kopie van a gewoon op bij b . ¶ Regel 2 geeft de uitkomst, mits er geen iterator groter dan 1 rechts volgt. Om afgetelde variabelen van rechts meteen op te ruimen, is er een extra regel, die we met voorrang kunnen toepassen. -E.I.0. a,R,1 = a,R Buiten de basis a,b worden iteratoren niet volledig tot 0 afgeteld. Zodoende komen er reeksen komma's ,.. vrij, die we gebruiken als hogere separatoren en de ruimtes ertussen als dimensies in de uitbreiding van het systeem. $ 3.3.2. Rekenen met 'E.I.' Optellen in Eva kan op twee manieren. De basis operatie wijkt af van Adam. a,b,1 0= a,b 2= a+b = ab Vermenigvuldigen volgt uit de herhaling == van regel 1 over drie parameters, waarbij we de som variabele b=0 aanvankelijk leeg laten. a,b,c1 1= a,ab,c == a,a*c+b,1 2= a*c1+b Als we dezelfde regel aanhalen of een resultaat uit een eerdere afleiding toepassen, hoeven we = geen nummer te geven. a,b,c1,d1 1= a,a+b,c,d1 == a,a*c+b,1,d1 = a,,1a+a*c+b,d = a,a*(a+a*c+b),1,d 0== a,.a*(a+..a*c+b..) :d: 2= (a+a*..c+b..) :d1: ~> a^d1*+c2 {b=a} ~> a^d2 {c1=a} Stel in de Eva definitie dat :k=1 met b=0 en vergelijk dit met systeem Adam, waar expressies A(a,b,c,d) exact op popmacht a^d*+a*c+b uitkomen. E(a,0,1,d1) = a,,a1,d = a,a,a,d ~> a^d1 < A(a,0,1,d1) = a^d2 <~ A(a,a,a,d) = a^d1*+a1 Zowel de initiële als de gewone macht expressie is in Eva 'E.I' kleiner dan in Adam 'A.I' en dat scheelt ongeveer een factor. Het valt te verwachten dat bij gelijke expressies de superexponent in systeem Eva ongeveer 1 kleiner blijft als in systeem Adam. $ 3.3.3. Eva varianten Algemene regel voor varianten van het Eva rij systeem, met gewoon optellen n+ en aftrekken -n en in de 'l-r' scan regel `= vorm. -En.I.1. a,b ,2R `= a,a-n n+b,1R Hier is n≤a een geheel getal, positief of negatief. In geval n=a vormt dit de hoofdregel van ons standaard Eva systeem. Triviaal is dat elke En(a,b,c) op vermenigvuldiging uitkomt. ¶ Stel nu dat n=0 voor de natuurlijke Eva variant 'E0'. -E0.I.1. a,b.,1..,2R :k≥0 = a,a.,1..b,1R :k En werk dezelfde machtsverheffingen uit als hiervoor. E0(a,b,c1,d1) 1= a,ab,c,d1 == a,a*c1,1,d1 {b=a} = a,a,1+a*c1,d = a,a*(1+a*c1),1,d 0== a,.a*(1+..a*c1..) :d: 2= a+.a*(1+..c..) :d1: ~> a^d1*+c1 Zo loopt 'E0' meestal ongeveer gelijk met 'E'. ¶ Alleen initieel opladen kost een factor extra. E0(a,0,1,d2) = a,a,1,d1 = a,a,a1,d ~> a^d*+a1 ~> a^d1 Werk de varianten En(a,0,1,d) precies uit naar een serie machten. a,,1,d1 1= a,a-n,1+n,d = a,(a-1)*n+a,1,d = a,a-n,1+a*n+a,d-1 = a,(a*a-1)*n+a*a+a,1,d-1 = a,a-n,1+a^2*n+a^2+a,d-2 = a,(a^3-1)*n+a^3+a^2+a,1,d-2 == a,(a^d-1)*n.+a^i..,1,1 d:1 2= a+(a^d-1)*n.+a^i.. :d Welk getal n we ook kiezen, dezelfde expressie blijft bij elke Eva variant uit de pas lopen met de eenvoudiger popmacht van Adam. $ 3.3.4. Eva is supermachtig Verder met standaard Eva systeem 'E.I' waar de variant n=a de constante is. Gelijke expressies zouden in andere varianten n ongeveer even grote getallen uitdrukken, omdat bij het opladen van hogere cellen het verschuiven van subtotaal b in de regel dominant is. Zowel de constante a als de variant n worden steeds minder significant. Gegeven was dat E(a,a,a,d) tot ongeveer ~a^d1 reduceert. ¶ Vervolgens drukt Eva's rij van vijf een wat rommelige tetratie uit. a,b,c,d,e {b~a c~a} ~ a,a^d1,1,1,e ~ a,,1,a^d1,e- ~ a,a^a^d1,1,1,e- ~ a,a^^e^+d1 ~ a^^e1 {d~a} Terwijl dezelfde expressie in Adam tot ongeveer a^^e1^+d2 uitwerkt. Eva stapelt steeds een exponent minder. ¶ Maar de minimale expressie met tetratie E(a,0,1,1,e) in Eva is nauwelijks groter dan exacte tetratie A(a,1,0,0,e) in Adam, vrijwel gelijk. a,,1,1,e1 = a,,1,1a,e = a,a,a,a,e ~ a^^e^+a1 ~ a^^e1 Expressies in Eva zijn niet exact te vertalen naar popster supermachten, want de complexiteit van die vergelijking neemt op fractal-achtige wijze toe. We zouden dit "supermachtige getallen" kunnen noemen. ¶ Maar zo ongeveer ~ zijn de dichtstbijzijnde supermachten voor elk supermachtig Eva getal goed te bepalen. Druk systeem 'E.I' bij benadering uit als een reeks popster operaties, waar elke variabele meer op de rij aan de uitkomst een operator ster toevoegt. a,.,1..,z1 :k = a,..z :k2 ~> a*{k1}z*{k}+a1 ~> a*{k1}z1 Of in het algemeen voor een rij met lengte k+2 zoals die in Eva begint met optellen ap_0 met een lege *{0} ster. a.,p_i.. 0:k ~ a*{k}(p_k+1) De hoogste superexponent p_k is dominant, de voorgaande variabele p_k- telt daar ongeveer 1 stap bij, tegen 2 in Adam. De rij lengte of positie van de superexponent is weer dominanter dan de waarde ervan. Van beide primitief recursieve functies 'A.I' en 'E.I' loopt de rij lengte ongeveer gelijk met de tweede iterator van een dubbel recursieve functie. ¶ We gaan de eerste rij recursief verlengen, lengte op lengte, om een hogere klasse van grote getallen te noteren. Door subtotaal b door te laden naar de tweede rij, zullen de variabelen daar gelijk op lopen met die van Bird's lineaire array, die maximaal is. Dit valt te bewijzen met behulp van Conway's pijlketen, die de supermacht pijlen van Knuth natuurlijk opvolgt en meer resolutie geeft. # 4. Functie recursie Bekende notaties voor het maken van grote getallen zijn Conway's pijlketen en Bird's lineaire array. Deze functie recursies nesten afgetelde expressies in een variabele, bij Conway in de hogere y rechts, bij Bird in de lagere b links. ¶ Bird laadt de afgetelde rijgedeeltes opnieuw op, wat grotere getallen oplevert. Beide drukken dezelfde supermachten uit in drie variabelen. Chris Bird, 2012, Bird's Linear Array Notation ¶ John H. Conway, Richard K. Guy, 1996, The Book of Numbers # 4.1. Knuth's pijlen Definieer supermacht herhaling met de pijlen van Knuth. Daarbij is c>0 en is vermenigvuldigen de ↑{0} basis operatie (historisch). - a↑{c}1 = a - a↑b1 = a*a↑b - a↑{c1}b1 = a↑{c}(a↑{c1}b) Zo vormt elke supermacht een reeks vorige operaties, te reduceren vanaf rechts. a↑b1 == a*..a :b a↑{c1}b1 == a↑{c}..a :b # 4.2. Conway's pijlketens Bij Conway's pijlketens vindt functie substitutie vanaf rechts plaats, in de voorlaatste y variabele, en bij Bird's lineaire array vanaf links in de tweede b variabele. Werk een reeks substituties in b uit, samen 1 stap in de iteratie van c . Laat het functie teken en de buitenste haken weg. a,b1,c1 = a,(a,b,c1),c == a,(..a,1,c1..),c :b: = a,(..a..),c :b: De eerste functie a,b,1 kan verschillen, Hilbert begint φ_1(a,b) met optellen en de pijlketens van Conway a→b→1 met machtsverheffen. In den beginne wordt steeds de constante a opgeteld. Stel dat c=1 vermenigvuldigt, en dat c=0 met a,b = ab optelt. Dan werkt deze functie hetzelfde als de linkse evaluatie van supersterren met haakjes. a*{c1}b1 = a*{c}(a*{c1}b) == a*{c}(..a..) :b: Hier is 3,3,3 ofwel 3***3 het getal 7625597484987. al boven de biljoen (VS "trillion"). En dan loopt door substitutie het aantal subexpressies wachtend tussen haakjes snel uit de hand. - - - - - - - - - - - - - - - - → Toen John H. Conway zijn pijlketens had geschapen, zag hij dat de getallen groot waren. Onze definitie van zijn pijlketen notatie gebruikt de text variabele X om het linker deel van de keten voor te stellen, minimaal een getal x . John H. Conway is de schepper van de pijlketen notatie, die met twee enkele pijlen in a→y→z dezelfde supermachten uitdrukt, als Knuth a↑{z}y met al zijn pijlen. De rechtse pijlen → zijn eigenlijk geen operatoren, maar werken als separatoren , tussen de variabelen in een recursieve functie. Stapsgewijze definitie van Conway's pijlketens, met uitwerking == van 1 iteratie. -C.1. a→b = a^b -C.2. X→1 = X -C.3. X→1→z = X -C.4. X→y1→z1 = X→(X→y→z1)→z == X→(..X..)→z :y: → Zo drukt de eerste pijlketen a→b→c Knuth's superexponenten a^{c}b uit. Conway's pijlen → zijn geen operatoren, maar de komma separatoren , van een functie met een variabel aantal parameters of tellers. Text variabele X staat voor a.→x_i.. :k≥0 het linker deel van de keten: de constante a en een rij van iteratoren x_i . Functie substitutie en aftelling vinden plaats binnen in de voorlaatste cel y , terwijl van buiten de laatste iterator z aftelt. Zo worden ketens diep genest, terwijl de recursie over y→z naar links schuift en uiteindelijk reduceert tot machten. Scherp een voorbeeld aan uit het boek van Conway en Guy. Gardner's getal 3^{..3^{4}3..}3 :63: van Graham ligt boven de 3→3→64→2 of 3→3→(..3^3..) :63: in pijlketen notatie, maar onder 2→3→65→2 of 2→3→(..2→4→7..) :63: zo te zien, omdat de top supermacht daarin het grotere 3→3→7 vrijwel benadert (zie sectie 2.2.3). Bird's lineaire array gebruikt vier parameters om even grote getallen te noteren als Conway met zijn pijlketen rij. Omdat we net als Bird het subtotaal vanuit de oorsprong opladen, wat maximaal is, komt er aan het begin van onze tweede rij een variabele, die de lengte van Conway's hele keten zal benaderen. - Martin Gardner Mathematical Games Scientific American, Nov. 1977 $ 4.3. Bird's lineaire array De Engelse wiskundige Christopher Bird Bird's lineaire array notatie noemen we systeem 'B.I'. De regels hier zullen met enige aanpassing ook gelden in de definities van grotere systemen van Bird, waar de array structuur van separatoren verder is uitgebreid. Initieel zijn twee eliminatie regels, om een cel uit de rij te verwijderen of de functie op te lossen. Het linker deel # stelt een reeks a.,p_i.. voor van :k≥0 een of meer waarden in de lineaire array. -B.1a. B(a) = a "uitkomst" -B.I.2. B(#,1) = B(#) "uiteinde" In het algemeen zal de laatste regel gelden voor elk type Bird array met een laatste rij. Het principe van het verwijderen van cellen 1 aan het einde van de expressie geldt met aanpassing van de , separator vorm in alle hogere array structuren en is de enige manier om deze op te heffen. Nu al zien we hoe B(a,1) via B(a) tot getal a reduceert. ¶ Maar als duo B(a,b) direct uit de functie stapt, is de eerste eliminatie regel praktisch overbodig. Zouden we dit duo direct ab optellen, zoals Bowers en Hilbert hun dan bleef zo'n regel primitief en toch over de rij niet significant minder groot. Bird geeft machtsverheffen als basis operatie over de constante a en de som variabele b , die op het laatst in de evaluatie overblijven. ¶ Dit veronderstelt vermenigvuldiging als voorliggende primitivige stap, te herhalen als a*..a :b met a^b1 als uitkomst. -B.1b. B(a,b1) = a*B(a,b) == a^b*B(a,1) = a^b*a = a^b1 "basisregel" Een functie recursie substitueert subexpressies in variabelen. We zullen daar het dollar teken $ voor in de plaats zetten. Voor Bird is $ de in som variabele b afgetelde vorm van de expressie uit de voorgaande evaluatie stap. Met de "separator hekje" tekst variabele ,# geven we rechts een rij variabelen aan, of bij uitbreiding elke mogelijke array structuur, die op de basis volgt. Zo bezien zijn dit universele regels voor subexpressies, die geldig blijven in alle van Bird afgeleide systemen. De unit functie met basis b=1 operant reduceert expressie tot getal. Dit wordt meestal toegepast op de bodem van een reeks geneste subexpressies. ¶ En we voegen dus een universele tussenregel in, die elke expressie aftelt tot zijn subexpressie vorm, zodat we deze simpel met een $ substitueren. -B.3a. B(a,1,#) = a "bodemregel" -B.3b. B(a,b1,#) => $ = B(a,b,#) "subexpressie" Zo heeft de expressie B(a,2,c1) het getal a als subexpressie, die via substitutie in B(a,$,c) tot B(a,a,c) reduceert. Komen we bij Bird's hoofdregel met de functie recursie, de werkmotor die getallen snel groter maakt. Zo'n regel zien we terug in al Bird's systemen. -B.4a. B(a,b,c1,#) = B(a,$,c,#) "recursie" Over een rij van drie definieert dit de supermachten; als een dubbele recursie, waar elke stap in c een aantal van b subexpressies nest, totdat de waarde a op de bodem is bereikt. B(a,b1,c1) = B(a,B(a,b,c1),c) == B(a,..B(a,1,c1)..,c) :b: = B(a,..a..,c) :b: Deze functie B(a,b,c) geeft exact de a^{c}b supermacht operaties weer. Over de rest van de eerste rij geldt dan een oplaadregel, die de subexpressie substitueert in de hoogste afgetelde variabele. -B.I.4b. B(a,b.,1..p,#) :k>0 = B(.a,..$,p,#) :k "rij recursie" Parameter 1p>1 is aftelbaar. Regel 4a is in 'B.I' het speciale geval van regel 4b waar :k=1 zodat er geen afgetelde iterator ,1 rechts op de basis volgt. ¶ Bird heeft hiervoor twee regels nodig, maar het is er wezenlijk een. Dat komt omdat hij de subexpressie $ ook oplaadt. Bird's lineaire array is maximaal. De vroege dubbele recursie door subexpressie substitutie in b , samen met het opladen van de som uit b naar hoge afgetelde variabelen, zorgen ervoor dat de functie rij maximaal grote getallen oplevert. Dat daarbij de opgeladen b verpakt is in een subexpressie is van ondergeschikt belang. Een extraatje bij de input c+1 doen, maakt vrijwel het hele verschil. # 3.5. Maximaliteit Chris Bird heeft maar vier tellers nodig om even grote getallen te noteren als Conway met zijn hele keten. Bird's vierde teller functioneert als de lengte van Conway's keten, omdat... # 5. Multidimensionale arrays # 5.1. Multidimensionaliteit Bij getallen Bijvoorbeeld opbouw van een hyperkubus van 3 bij 3 bij 3 bij 3. 111 = 3 = 3^1 + 111 + 111 = 3^2 + 111 111 111 + 111 111 111 = 3^3 + 3^3 + 3^3 = 3^4 Bij separatoren. Etcetera. Zo kan ook nesting worden verklaard door substitutie op verschillende niveau's. # 5.1. Multidimensionale arrays Een rij variabelen met natuurlijke getallen noemen we de eerste dimensie, terwijl deze eigenlijk bestaat uit rijen van rijen van enen. Een reeks van rijen variabelen vormt dan een vlak of tweede dimensie, hoewel de rij lengtes daarin variabel zijn. Herhaling van het vlak vindt plaats in een kubieke ruimte, de derde dimensie. We noteren al zulke array ruimtes op een lijn in de expressie, waar ze van elkaar gescheiden worden met specifieke separatoren. We zouden door een aantal komma's na elkaar te zetten simpel de dimensies kunnen aangeven. a,b ,c_i..,,..,,,.. :d :e :f Dit veronderstelt wel dat we variabelen niet aftellen tot 0 maar tot 1 , anders zou de betekenis van opeenvolgende komma's al vergeven worden op de eerste rij. Alle ruimtes van een multidimensionale array kunnen we door een aantal ,{k} komma's laten scheiden, maar zou dat niet zonde zijn? Het teken 1 hebben we gereserveerd voor variabelen. Elk opeenvolgend aantal enen 1.. drukt een natuurlijk getal uit in de expressie, waarin de functie van dat getal nader bepaald is door zijn positie en het algoritme. Stel nu dat de andere tekens die we toepassen, zoals separatoren en haakjes paren, substituut staan voor diverse aantallen van een ander wiskundig quantum, ons "type teken" in abstracto, de nul 0 in concreto. Bij de samenstelling van array elementen zullen we steeds rekening houden met deze achterliggende "array bit" notatie. Die moet onze oplossing vormen voor het Busy Beaver probleem, althans ongeveer een maximaal getal schrijven met twee (of meer) mogelijke tekens. Vanuit de constructie van een evoluerend systeem, zonder Gödelachtige alfabetisering, maar gestaag groeiend. Laat de komma , om getallen te scheiden als variabelen, het ene 0 type zijn. Er zijn verschillende manieren om ons systeem economischer uit te breiden dan hierboven met ,.. multipele komma's. Maar welke is natuurlijker? - - - - Door op dubbele variabelen over te stappen .,c_i,q_i.. is het mogelijk om na elke even komma rechts van de variabele c_i de dimensie overgang q_i aan te geven, zonder extra 00 type teken. Er links voor kan ook. Om deze duo variabelen in de rij te herkennen, geeft dit bij de expressie scan in het algoritme helaas telproblemen. Ook groeit zo'n systeem niet natuurlijk. Het hinkt: eerst op één poot en dan op twee poten, en later eventueel op duizend. Door bij elke variabele een vast aantal extra tellers te zetten, behalen we de hyperdimensies in een rij. Dit kennen we als de index rij bij de separator. Of spreek net als Bird af, dat een getal tussen haakjes de dimensie van de ruimte rechts ervan kenmerkt. Door enkele komma's binnen de subarray te halen, breiden Bird's multidimensionale uit tot hyperdimensionale arrays. Zolang onze subarrays niet genest worden en de scanner van eerste tot tweede teken kan tellen, mag het beginhaakje dezelfde zijn als het sluithaakje. Het bit type is dan 00 aan beide einden, ook al gebruiken we in de expressie [ en ] . En afgetelde subarrays [1]=, evalueren meteen tot type 0 komma. Bezwaar is hier, dat de tel bijhouden niet echt een taak is voor de tekst scanner. Een woord moet zonder de helft van de expressie te doorlopen op elke plek herkend kunnen worden. Lijkt op het voorbeeld hiervoor, maar extra tellen kan hier niet, omdat in elkaar nesten van gelijke haakjes verwarring geeft. Juist is om twee typen haakje te gebruiken, of hetzelfde type maar bij de opening gebonden aan een separator teken. Bird gebruikt krulhaken { en } en breekt met het gebruik van enkele komma's , door te stellen dat deze in staan voor index 1 subarrays. Zijn variabelen worden altijd tot 1 en niet tot 0 afgeteld, zodat separator haakjes elkaar nooit zullen raken. Zo bezien zijn Bird's haken van het type 0 en 00 en hij kan daar alle geneste arrays mee vormen. Zijn afgetelde indexen worden steeds opgeladen vanuit de oorsprong met subtotaal b wat optimaal is. We mogen stellen dat gegeven deze beperkte tekens de door Bird geneste getallen maximaal groot zijn. De overgang van de komma uit Bird's lineaire arrays naar zijn dimensie haakjes verloopt niet zo soepel. We gaan liever van , naar ,[n] met behoud van het separator teken, waar het openingshaakje van de index array aan gekoppeld is, ook al kan Bird ons een type voor blijven. Onze opening ,[ telt als type 000 en sluit af ] met type 00 . Schrijf eventueel de multidimensionale arrays met een enkel haakje ,n] om provisorisch even een type te besparen. Na het vrije haakje ] dat de geneste array afsluit, volgt de variabele die meter is van de ruimte ervoor. We expanderen dit systeem door binnen het separator construct nieuwe en grotere array types te plaatsen. Voor het type tellen we simpel 0.. de teken types na elkaar. Vorm diepe arrays met overgangen ][ die als type 0000 scoren. Het volgende diep [X][1Y] zal op die overgang de afgetelde array ervoor tot grotere diepte nesten. We maken dat ook staps-of druppelsgewijs mogelijk. a,b1 ,[1][3] `= a,a ,[1,[b1][2]2] `= ,[1,[b][2]a,[b1][2]1] `== ,[1,[1][2]a`] `= ,[1,[1,[a][1]2]a`] = ,[1,[1,[a]2]a`] `== ,[1,[1,a`]a`] `= ,[1,[a`]a`] `== ,[a`] `== a,a,a Tussen reeksen [X_i].. plaatsen we het teken ; als diepen separator. We scoren deze als type 0 omdat ook de komma , kan worden hergebruikt.; mits in een optimaal systeem dat strikt tot 1 aftelt. Maar we introduceren een nieuw teken, om systemen die tot 0 itereren in dezelfde structuur mogelijk te maken. Deze overgang ];[ is van type 00000 en vermenigvoudigt de lege diepen links. Zoek een gewoon haakje ] of 00 om te eindigen. Onze opzet lijkt op de eerste rij variabelen 1.. waar het systeem mee begon. a,b1 ,[1];[c1] `= a,a ,[1][b1];[c] `= ,[1,[a][b];[c]2] `== ,[1,[1][b];[c]a`] `= ,[1,[1,[a][b-];[c]2]`] `== ,[1..,[1][1];[c]..`] :b: `=` ,[1][1][a];[c-] `= ,[1][1,[1][a][a-];[c-]2] `==` ,[a][a-][a-];[c-] `== ,.[a-]..;[1] :c1 = ,.[a-].. :c1 Maak "diepe dimensies" met de overgang ];[[ van het type 0{7} ertussen (dus niet [[ bij de komma al), lopend tot aan ]][ type 0{6} die het dubbel diepe construct afsluit, zodat het enkel diepe weer begint. Reduceer ;[[1]] tot ; en noteer de diepe dimensies met ;[[n]] naar analogie van de multidimensionale arrays. a,b1 ,[1];[[2]][3] `= a,a ,[1];[[1]][b1];[[2]][2] = ,[1];[b1];[[2]][2] - - - - - - - - - - - - - - - - Systeem 'A' kan op verschillende manieren worden uitgebreid naar de tweede rij. Neem als rij separator een komma met index ,[1] tussen haakjes, tot [1] af te korten. Een nieuwe regel kan met de eerstvolgende parameter m gewoon de eerste rij lengte k vervangen, of er bijvoorbeeld zo bij optellen. - a,b,{k}[1]m = a,,{km}b - a,b,{k}[1]m1 = a,,{k1}b[1]m Direkt of in etappes, dat zal voor de grootte van de uitgedrukte getallen weinig verschil maken. Pas door [1]m,1 af te tellen tot [1],1 en op te laden met [1]b zal de rij lengte ervoor door het somtotaal uit b worden opgeblazen. Dat kan ook op een direkte manier, een parameter sneller, met andere regels. - a,b,{k}[1]c1 = a,,{b}a[1]c = a,a*{b}a[1]c == a*{..b..}a :c1: - a,b,{k}[1]m1 = a,,{kb}2[1]m = a,a*{kb}2,{kb}[1]m De eerste regel werkt natuurlijker uit, ongeveer als a→b→c1→2 en wordt hetzelfde genest als Graham's number. Het bewaren van de lengte k van de bestaande rij en opsommen ervan in het tweede voorbeeld is minder relevant, omdat het subtotaal b domineert. Definitie NB vlak, waar b>0 en de lengte van de deelrij ` mag 0 zijn. -NB.1. a,b = b -NB.2.1. `, = ` -NB.2.2. `,[X] = ` -NB.3. a, ,1` `= a,a ,` -NB.4. a,b, ,1` `= a,, b,` -NB.5. ,,[X] `= ,[X] -NB.6. a,b,[1]1` = a,,{b}a,[1]` -MB.6. a,b1,[1]1` = a,b,,[1]1` # 6. Geneste arrays