$ 1. Getal opbouw
Tel op tot getal en herhaal getallen
en hun herhalingen en noteer dit in functies.
Elk object van de wiskunde is telbaar,
en zo ook de relaties tussen die objecten.
Getal relaties of functies die zichzelf herhalen
heten "recursief".
Recursie is versneld tellen,
maar de "googologie" of leer van de grote getallen,
begint gewoon met tellen op je vingers.
$ 1.1. Tellen met 1
Neem eerst het getal 'nul' 0
dat in wezen niets is,
en stop zonder te tellen.
Een tel erbij 01
geeft het getal 1 een.
Maak vervolgens de natuurlijke getallen,
door units 'een' 1 op te tellen
tot een aantal 1.. enen is bereikt
(dat gelijk is aan het getal)
waar het tellen stopt.
Definieer dit met een repetitie of 'rep'
over de selectie 1 , die op zijn .. plaats
het aantal :n keer wordt herhaald
tot de uitkomst = het getal n geeft.
1.. :0 = 0
1.. :n = n
Maak een getal negatief door links
voor de positieve een factor - te plaatsen.
Of vorm gehele negatieve getallen
door een aantal units 'min' -..
van rechts op te tellen.
Waarbij 1- nul 0 of leeg is.
Peano's primitieve opvolger functie σ
maakt elk volgende natuurlijke getal.
σ(0) = 1
σ(n) = n1
Druk getallen n uit
door functies σ(..) :n: herhaald te nesten,
dan staat elke aanhaling van σ(.)
gelijk aan een 1 tel.
Tellen dat nooit stopt drukt per definitie
een oneindig getal uit.
1... = ω
Getal omega ω zou het eerste en kleinste
oneindige getal boven de natuurlijke getallen zijn.
Waarna het tellen σ(ω) = ω1
weer verder kan gaan.
Getallen zijn wiskundige constructies.
Gehele en oneindige getallen bestaan
uit eenheden of units
en tellen dat stopt of niet.
Operaties en functies en hun inversen
drukken nog meer getallen uit:
breuken en wortels,
transcendente en complexe getallen;
tussen de gehele getallen in en daaraan ontstegen.
Recursieve functies in dit deel blijven
in het domein van de natuurlijke getallen.
$ 1.2. Getallen in basis 10
Lees getallen in unaire notatie
door elke 1 erin een keer te tellen.
Stop met enen tellen bij het getal tien
dat de decimale basis vormt.
Tel van daar af de tientallen.
Stop na tien keer tien bij getal honderd.
Tel tien honderdtallen tot het getal duizend.
Duizend duizendtallen maakt een miljoen.
Tot zo ver zijn de landen
het wel met elkaar eens.
Schrijf in decimale notatie de getallen
van 'twee' tot 'tien' met cijfers 2,3,4,..
maar definieer deze unair.
Zet ze ook om =>
in binaire notatie in 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 notatie met basis of radix r
krijgen de gehele getallen van 0 tot r-
enkele cijfers.
Dan schrijft men de basis r=10
en zo voort.
De notatie lengte wordt door de extra tekens korter.
Van r^k tot voor r^k1
zijn alle natuurlijke getallen op unieke wijze
geschreven op k1 cijfer plaatsen.
Lees een getal in basis r
met een aantal van k1 cijfers d_i
als een = serie van factoren d_i*
van oplopende machten ^i van r
en tel deze serie + op.
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 dit van links : op rechts
is aangeduid in de 'rep'.
De waarde van cijfer plaatsen neemt 'l-r' af,
met de grootste macht vooraan,
terwijl constructie van getallen bij herhaalde
vermenigvuldiging van 10 wel op moet lopen.
Behalve de historische herkomst van onze cijfers
is ook de opbouw richting van decimale getallen
'r-l' net als in het Arabische schrift.
Anderzijds lees je het belangrijkste eerst.
- - - - - - - - - - - - - - - -
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 als dit in het algemeen onmogelijk is,
voor welk soort getallen kan het 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!

$ 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.

$ 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.

$ 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. Pijlfuncties
Conway's pijlketen en Bird's lineaire array
zijn notaties voor getallen die zo groot zijn,
dat ze zelfs in de wiskunde vooralsnog
geen ander doel dienen dan uit te drukken
hoe groot wel niet, en zich met elkaar te meten.
Beide recursieve functies noteren
dezelfde supermachten in drie parameters.
a→b→c = {a,b,c} = a^{c}b
Elke recursieve stap wordt een expressie afgeteld
en genest op de plaats van de afgetelde variabele.
Bij Conway gebeurt dat in hogere variabelen y rechts,
en bij Bird in de lagere variabele b links. ¶
Toon een geneste reeks subexpressies.
Letter R stelt de rest van de rij voor.
R→y1→z1 = R→(R→y→z1)→z
== R→(..R..)→z :y:
{a,b1,c1,R} = {a,{a,b,c1,R},c,R}
== {a,..a..,c,R} :b:
Conway reduceert met regel R→1→z = R
zijn pijlketen consequent naar links.
Maar bij Bird schuift het subtotaal uit b
naar de afgetelde iteraties rechts
om deze opnieuw op te laden.
Te beginnen bij c=1 in de rij,
terwijl bij Conway de dubbele recursor
R→1 = R meteen na dienst afvalt.
Subexpressie recursie met opladen is maximaal,
zodat Bird met zijn rij van vier even ver komt
als Conway over zijn hele tripel recursieve pijlketen rij.
a→..b→c1 :d ~> {a,b1,c,d}
We zullen de rechtse pijlketen van Conway uitbreiden
met Knuth's opwaartse pijlen in een nieuw pijlsysteem,
dat Bird's lineaire array zal omvatten.
$ 4.1. Knuth's pijlen
John H. Conway ontwikkelde het idee voor zijn →
pijlketen in het verlengde van Donald Knuth's
opwaartse pijlen. ¶
Knuth ging uit van de operator ↑
van machtsverheffen.
De volgende operatie van ↑↑ tetratie
vormde hij met een toren van machten,
waarin elke macht van rechts op links
te evalueren is tot getal.
Werk tetratie in stappen uit
tot een reeks machten.
a↑↑b1 = a↑a↑↑b
== a↑..a↑↑1 :b
= a↑..a :b
Door dit proces te herhalen definieerde Knuth
zijn telbare pijloperaties ↑{c1}
als een rechts associatieve reeks
van voorgaande ↑{c>0} supermachten.
-Kn.1. a↑b = a*..1 :b
-Kn.2. a↑{c}1 = a
-Kn.3. a↑{c1}b1 = a↑{c}a↑{c1}b
== a↑{c}..a :b
Tetraties worden al gauw onbegrijpelijk groot.
De meeste supermacht operaties zijn alleen nog
nog algoritmisch te vergelijken.
Het getal in dit voorbeeld
kunnen we niet decimaal weergeven.
Zelfs niet als elk kleinste deeltje in het hele heelal
een cijfer voor zou stellen.
Toch valt er nog wel mee te rekenen.
4^^4 = 4^4^256
= 2^2^513 ≈ 2^2^2^2^3.17
≈ 10^10^153.9
≈ 80.59^^3
≈ (79.8^^2)^^2
≈ 2.3279574277^^5
= 4^^^2
Gebruik een gelijk aantal oppijlen ↑`(..)
of carets ^`(..) voor dezelfde operaties,
maar tel bij sterren *`(..)
een teken extra.
We zullen hier Knuth's oppijlen ↑{c>0}
strikt rechts associatief evalueren.
Voor meerderheids precendentie zijn ^{c>0}
dakjes of carets van nut.
Daarna komt evaluatie van de supersterren *{c1>0}
met voorrang bij minoriteit.
Zo brengen we variatie aan
in het gebruik van deze superoperatoren.
Optellen *{0} werkt direct met unaire getallen,
maar gewoonlijks komt plus + op het laatst.
$ 4.2. Conway's pijlketen
Conway's pijlketen notatie zag in 1996
het levenslicht in zijn
Book of Numbers.
Met de eerste twee pijlen in de keten a→b→c
drukt deze functie dezelfde supermachten uit
als al de oppijlen a↑{c}b van Knuth.
Verschil is dat bij Conway de rechtse pijlen →
enkel zijn en geen operatoren,
maar net als komma separatoren , tussen parameters
een plaats in de functie rij aanduiden.
De functie van a,b,1 kan in principe verschillen.
Hilbert
telt met φ_1(a,b) op, de
Ackermann
functie φ(a,b,1) vermenigvuldigt,
en de eerste pijl a→b
waar a→b→1 tot reduceert
staat bij Conway voor machtsverheffen.
Stapsgewijze definitie van Conway's pijlketen.
-Co.1. a→b = a↑b
-Co.2. X→1 = X
-Co.3. X→1→z = X
-Co.4. X→y1→z1 = X→(X→y→z1)→z
== X→(..X..)→z :y:
Text variabele X staat voor het linker deel
van de keten a.→n_i.. :k≥0
met een k aantal iteratoren n_i
of op zijn smalst de constante a .
Via deze regels verloopt bij Conway de evaluatie
van pijlketen expressies tot getal.
Functie substitutie en aftelling
vinden in voorlaatste variabelen y plaats,
terwijl alleen de z rechts buiten aftelt.
Bij herhaling == van hoofdregel 4. telt y
naar binnen af tot 1 en besluit met
de dubbele cel eliminatie van regel 3.
Zo werkt 1 recursieve stap van de iteratie
over z naar binnen uit.
Na de dubbele recursie over de hele z
valt in de diepst geneste subexpressies
de laatste →1 rechts weg door regel 2.
en schuift daar de keten naar links.
Door deze cel eliminatie te herhalen worden
supermachten a→b→(..a↑b..) en machten bereikt,
waarna de subexpressie reduceert tot subtotaal. ¶
Zo borrelen de subtotalen op uit de diepte
naar de oude wachtende expressies,
wat steeds grotere y oplevert zolang z
verminderd kan worden. Anders schuift
bij z=1 ook de top keten naar links op,
tot uiteindelijk de uitkomst is bereikt.
Conway's functie stapelt op de keten X
de dubbele recursie y→z
die hele expressies nest tot ze een
pijl afstoten, waarbij voorgaande y→1
subtotalen navenant grote nieuwe z geven.
Zo'n functie noemen we "tripel recursief".
Scherp een vergelijking aan uit het
getallenboek van Conway en Guy. ¶
Gardner's getal 3↑{..3↑{4}3..}3 :63:
van Graham ligt: boven de 3→3→64→2
is 3→3→(..3↑3..) :63: in pijlketen notatie
en onder 2→3→65→2 is 2→3→(..2→4→7..) :63:
waarin de top supermacht een goede benadering is
van 3→3→7 (zie § 2.2.3),
zodat de 64ste iteratie van oppijlen
aan beide kanten drie ↑↑↑ verschilt.
# 4.3. Superpijlketen
$ 5. Lineaire arrays
Lineaire arrays zijn recursieve functies
bestaande uit een rij parameters,
met links een constante a,
gevolgd door de variabelen b,c,d,..
die iteraties opstapelen.
Met de regels voor subexpressie substitutie links
en voor het opnieuw opladen
van afgetelde iteratoren met linkse subtotalen,
worden maximale getallen uitgedrukt over de rij. ¶
Voor elke iterator in de rij komt een separator komma.
Hogere array notaties breiden die separatoren
verder uit: met een dimensie index, geneste index rijen,
nest diepte recursie, etcetera.
Ga uit van de
lineaire array notatie
van de Engelse wiskundige Christopher Bird. ¶
De evaluatie regels van Bird's arrays
worden allengs ingewikkelder.
Ook op de eerste rij zijn er overbodige substituties,
die aan de grootte weinig bijdragen. ¶
We definiëren een eenvoudiger lineaire array 'B.I'
die met minimaal aangepaste input expressies
even grote getallen kan noteren.
Sommige regels zullen voor alle array systemen 'B.'
gelden, waar komma's met een geneste structuur
zijn toegerust en extra tekens worden ingezet.
$ 5.1. Basis paar
In de basis staan twee eliminatie regels:
om de functie zelf op te lossen tot getal
en om een cel aan het einde rechts te verwijderen. ¶
Linker deel L stelt een rij a.,p_i..
voor met een aantal :k≥0 iteratoren.
-B.0. B(a) = a1 "successor"
-B.1. B(L,1) = B(L) "afval"
Bij Bird valt de array Bird(a) = a
weg, maar de successor functie oogt chique,
David Hilbert had hem ook,
en geeft ons 1 voorsprong. ¶
Zo evalueert B(a,1) via B(a)
tot de uitkomst a+1 wat bijtelt. ¶
En ook B(a,1,1) = a,1 = a1
telt erbij.
Onze regel 1. die afgetelde uiteindes ,1
af laat vallen, geldt bij elk type array
met rechts een rij gedeelte.
Ook blijft het principe om laatste enen
op te ruimen van kracht bij uitgebreide
separatoren ,[X]1 in hogere arrays.
Maar we zien liever af van Bird's schoonmaak apparaat
in voorliggende rijen en ruimtes.
Bird neemt, in navolging van Conway's pijlketen,
als basis operatie B(a,b) het machtsverheffen.
Dit veronderstelt een stap van vermenigvuldigen
en herhaling tot een reeks a*..a :b
ofwel a^b1 als uitkomst.
Bird(a,b1) = a*(a,b)
== a*..(a,1) :b
= a^b*(a)
= a^b*a
= a^b1 "macht"
Bij Hilbert en Bird's inspirator Jonathan Bowers
begint hun functie primitief,
met de a+b som operatie.
Ook bij ons telt het basis paar B(a,b) direct op.
-B.2. B(a,b) = ab "som"
Tegelijk met de eliminatie van de ene komma
lost de functie op en geeft de uitkomst.
Dit kost ons twee extra **
tellen bij Bird's supermacht c . ¶
Merk op dat regel 0. van de successor uitkomst
zo niet meer aan bod komt.
$ 5.2. Super trio
De algoritmische motor van Bird's lineaire arrays
is de regel voor substitutie van subexpressies,
waarin links variabele b minimaal - minder is.
Deze begint met dubbele recursie over
drie parameters a,b,c die de supermachten uitdrukt.
De regel voor de recursie unit b=1
reduceert de hele array tot de constante a .
Pas deze toe op de bodem
van een reeks geneste subexpressies. ¶
De tekst variabele R rechts
is deel van de rij met een of meer variabelen.
Of universeel geldig in hogere arrays
bevat die R eke mogelijke deelexpressie.
-B.3. B(a,1,R) = a "bodem"
Zo evalueert B(a,2,c1) tot B(a,a,c)
via de bodem a subexpressie.
Mits c>0 omdat regel 1. die rechts ,1
laat afvallen voorrang krijgt. ¶
Zonder precedentie van eerdere regels
zouden we R>1 als voorwaarde stellen.
Of formeel misschien R≥2X waar X
leeg kan zijn of elk ander array deel.
Maar de zo uitgesloten expressies
als bijvoorbeeld a,1,1,2 kunnen
in de evaluatie trein van systeem 'B.' verder
vermeden worden en hebben als input weinig zin.
De regel voor dubbele functie recursie, de werkmotor
die getallen groter maakt over de eerste rij,
essentieel in alle snelle array systemen.
-B.4. B(a,b1,2X) = B(a,(a,b,2X),1X) "recursie"
Tekst variabele X≥0
stelt de rest 1.. van getal c voor,
gevolgd door nul of meer variabelen rechts,
of in het algemeen door ieder ander hoger array deel.
Pas deze regel toe zolang als c aftelbaar is. ¶
Laat het functie voorschrift, de letter B
voor ons versimpelde Bird systeem,
naar believen weg als dat duidelijk genoeg is.
Een rij van drie geeft zo de supermachten.
De dubbele recursie nest in 1 stap
van c>0 een reeks van b subexpressies
tot de bodem a wordt bereikt.
B(a,b1,c1) = B(a,(a,b,c1),c)
== B(a,..(a,1,c1)..,c) :b:
= B(a,..a..,c) :b:
Na vermenigvuldiging B(a,b,2)
en machten B(a,b,3)
dekt ons super trio B(a,b,c2)
exact de supermacht a^{c}b getallen.
$ 5.3. Eerste rij
Gegeven een aftelbare expressie (a,1Z)
krijgt in de volgende evaluatie stap
de subexpressie de vorm (a,Z) die we
met het $ teken afkorten. ¶
Bird laadt deze $ subexpressie ook op
naar de hoogste afgetelde variabele rechts in zijn arrays,
met deze regel (Rule 4).
Bird(a,b1.,1..R) :k>1
= (.a,..$,R) :k
Vanzelf is R≥1X aftelbaar in een gretige scan. ¶
Apart geval k=1 betreft de gewone
recursie regel (Rule 5). Elegant!
We doen simpel en laden in systemen 'B.'
steeds het subtotaal getal uit b op,
en stellen ter compensatie c1
voor de dubbele iterator c in de input.
Oplaadregel voor rechts afgetelde variabelen
in een eerste rij, waar k≥0 .
-B.I.5. B(a,b.,1..,2X) :k1 =
B(a,a1.,1..,b,1X) :k "opladen"
Stel dat opladen bij ons uit twee stappen bestaat:
eerst het subtotaal uit b verschuiven
en dan de lege cel met 1
en een kopie van a vullen. ¶
Per definitie in volgorde van precedentie,
met k≥1 .
-B.I.5a. B(a,.,1..1Y) :k1
= B(a,a1.,1..Y) :k1 "aanvullen"
-B.I.5b. B(a,b.,1..1X) :k1
= B(a,.,1..b,1X) :k "schuiven"
Variaties op een dergelijke oplaadregel met getallen
zijn mogelijk, maar de herleiding tot primitievere regels
maakt onze keuze voor regel 5. plausibel
en geeft daarbij de evaluatie
van een apart stel input expressies.
Door herhaling wordt het hele afgetelde deel
van de rij opnieuw gevuld.
B(a,b1.,1..,1R) :k2
= B(a,a1.,1..,b1,R) :k1
= B(a,a1.,1..,a1,b,R) :k
= B(a,a1.,1..,a1,a,b,R) :k-
== B(a,a1,a1.,a..,b,R) :k
= B(a,$.,a..,b,R) :k1
De getallen die 'B.I' uitdrukt over de rij
zijn maximaal. Essentieel hierbij is dubbele
recursie door subexpressie substitutie in b
en opladen van het subtotaal uit b
naar de hoogste afgetelde iteratie rechts. ¶
Of de opgeladen b ook verpakt is
in een subexpressie $ als bij Bird,
is hierbij van weinig belang.
Doe vooraf 1 extra bij iterator c
om die subs $ recursief te nesten,
dat maakt het verschil bij het opladen
ongeveer (iets meer dan) goed.
Bird(a,b1,1,d1) = Bird(a,a,(a,b,1,d1),d)
== Bird(a,a,..a..,d) :b:
B(a,b1,2,d1) = B(a,(a,b,2,d1),1,d1)
= B(a,a1,(a,b,2,d1),d)
== B(a,a1,..a..,d) :b:
Vergeleken met de lineaire array Bird(a,b,R)
is onze rij B(a,b,2R) dus gelijk
in geval van supermachten of enigszins groter.
Maar dit verschil blijft insignificant onder
de recursie in d en over de rest van de rij.

# 5.4. Pijlketen vergelijk
Bird's lineaire array gebruikt vier parameters
om even grote getallen te noteren
als Conway met zijn pijlketen rij.
Als 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.
- - - - - - - - - - - - - - - -
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:
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:
# 6. Multidimensionale arrays
# 6.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.
# 6.2. 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`
# 7. Geneste arrays