Kategoriarkiv: 2018

Texter från 2018

Minne: Kapitel 2

Direkt Robben tror sig trycka på strömbrytaren känner han en kraftig smäll på kinden och han kvicknar till. Under en kort stund är han igen borttappad och förbryllad, men efter ett par minuter börjar pusselbitarna äntligen falla ihop. Smällen på kinden fick han av Linda, en ung matematiker, som väckt honom och nu berättar vad Robben gjort den senaste timmen.

Robben hade tydligen aldrig gått hem efter den sista beerpongen, utan efter att ha vunnit spelet mot gamylerna John och Mathias hade han ännu svept ett fullt stop öl och meddelat med hög röst att ”jag tror jag borde gå hem nu”. Enligt Linda var detta uppenbarligen stunden då Robben tappat sitt minne och började yra omkring på Alina-salen värre än Spektrums normala fyllehund Olle.

Robben hade, istället för att ta rocken och gå hem, börjat vingla sig mot kökets frys och letat fram en iskall flaska punsch. Han hade bestämt sig för att en pünschen skulle förgylla kvällen och fick Olle övertalat om att detta faktiskt stämmer. John och Mathias fungerade som domare och som nyfiken gulis hade Linda tagit fram sin telefon och filmat hela prestationen, och visade den till Robben som nu var övertygad om att pünschen inte hade varit en bra idé. Olle och Robben var supertaggade på pünschen och hade före starten meddelat med väldigt berusad röst: ”full power framåt, inget kan stoppa oss”. Linda, som hade en ny telefon och inte ännu fullständigt bemästrade den, hade glömt blixten på då hon filmade vilket hade förbryllat både Robben och Olle.

Efter att Robben slickat den sista punschen från tallriken och domarna meddelat att prestationen var underkänd pga för mycket spill, hade Robben fallit ner på golvet och slocknat. Robben vaknade efter en dryga 10 minuter och började mumla något om att han har en föreläsning nästa dag klockan åtta och borde komma ihåg att lägga alarmet på så att han inte sover hela morgonen. Linda hade då hjälpt Robben att ställa in hans alarm på klockan till 07:30 (vilket borde räcka så att han hinner från Majstranden till Gumtäkt på morgonen), men Robben hade som princip att alltid ha ett primtal som minutvärdet på sin väckning, så Linda ställde klockan in på 07:31 så att Robben var nöjd. Nu började Robben vingla sig mot vessan, en del krypandes och en del på två ben. På vägen till vessan hade Robben knuffat Spektrums vice-ordförande Albert som redan börjat moppa golvet och spytt i vattenämbaret som Albert använt till moppandet. När Robben äntligen kommit fram till vessadörren försökte han våldsamt knuffa sig genom dörren tills han lyckades dra i dörren och den öppnades. Då hade Robben blivit stående i dörröppningen med en tom blick mot väggen. Nu hade Linda fått nog av Robbens yrande och gett honom en klapp på kinden för att få honom tillbaka till denna verklighet.

Linda, som också bodde i Majstanden, bestämde sig för att hjälpa Robben hem, klockan var ju redan fyra på natten och Robben verkade inte vara i skick att hitta hem på egen hand. De tog flygfältsbussen och steg av i Vallgård och gick tillsammans mot Arabia. Robben hade nyktrat till lite grann och medan de gick började Linda och Robben tala om allt mellan himmel och jord. Linda märkte att Robben egentligen var ganska trevlig och smart trots kvällens X antal öl. De växlade telefonnummer utanför Robbens hemdörr där han bad om ursäkt och tackade Linda för en trevlig och förvirrande kväll. Robben steg in, märkte att han hade väckning om knappa två timmar och ramlade i sin säng och somnade direkt.

PyClojuR: En kod ouroboros

Betrakta Python-koden nedan.

s = 's = %r\nprint(s%%s) #Hello'
print(s%s) #Hello

Du kan prova köra den härifrån. Vad händer?

Ett program som skriver ut sin egen källkod utan att fuska kallas för en ’quine’. (Som ’fusk’ räknas direkt uppläsning av programfilen och annat liknande.) Exemplet ovan består av tre delar:

  1. Kod som data. Strängen ’s = %r\nprint(s%%s) #Hello’ innehåller kopian av programmet i text form.
  2. Kod som processerar datan. Notera att all processerande kod befinner sig i någon form i den användbara datan.
  3. Övrig data. Kommentarerna #Hello samt mellanslagen är fullständigt övriga och kan tas bort utan större problem.

Du kanske tänker att quiner är unika för Python-språket, men i själva verket kan man bevisa följande sats:

För alla vettiga programmeringsspråk L existerar det åtminstone ett program P∈ L som skriver ut innehållet av P.

Beviset kan läsas här för dem som är intresserade. I ett nötskal listas alla giltiga program Pi upp, vartefter det bevisas att för varje beräkningsbar funktion h kan man hitta en fixpunkt k så att Pk och Ph(k) är identiska. Genom att välja funktionen h så att Ph(t) skriver ut innehållet av Pt kan man hitta k så att programmet Pk skriver ut innehållet av sig själv.

Utifrån detta presenterar jag Waffes ouroborosprogram teorem (WOooP teoremet):

Givet vettiga programmeringsspråk L1, L2, … Ln  existerar det ett en serie av program P1∈ L1, P2 ∈ L2, … Pn∈ Ln där Pn skriver ut P1, och Pi skriver ut Pi+1.

Programmen P1, P2, … Pn kallas då för ouroborosprogram, namngett efter den mytologiska ormen som äter sin egen svans. Börjandes från Pi får man efter minst n körningar tillbaka det ursprungliga programmet Pi. En quine kan då tänkas vara ett ouroborosprogram på bara ett språk.

För att bevisa WOooP räcker det med att definiera LC som språkens L1, L2, … Ln sammansättning. Man kan sedan använda första satsen för att bevisa att det måste finnas en quine för LC, vilket är ouroborosprogrammet vi söker efter.

Som ett test på mitt teorem skrev jag ett hackigt ouroborosprogram från Python till Clojure till R. Ta gärna och testa för er själva! Koden finns i min git här: code.py.

Alla tre språken har online terminaler, så inget behöver installeras för att testa koden.

P.S. Här är ett lite längre ouroborosprogram på 128 språk.

Minne: Kapitel 1

Pingisbollen seglar genom luften. Riktningen är perfekt, kraften i kastet var perfekt avvägt och den vita plastsfären närmar sig sitt mål. Men muggen är plötsligt borta. Istället slukas bollen av ett skimmer. Norrskenet ökar i styrka och ett öronbedövande hummande fyller rummet. Till sist badar rummet i ett bländande ljus.

Robben slår upp ögonen. Rummet är beckmörkt. Han känner den kalla linoleummattan mot sitt svettiga ansikte. Huvudet känns som om någon slagit in en femtumsspik rakt genom hans pannlob. De enda ljuden i rummet är hans egna hjärtslag som dånar i tinningarna och ett svagt tickande från en klocka på väggen. Den upplysta displayen på hans mullirolex visar 07:31. Mödosamt sätter han sig upp på golvet. Plötsligt går det en kall kår över Robbens rygg: han har ingen väggklocka i sin lägenhet.

Robben blinkar flera gånger för att låta ögonen vänjas vid mörkret. Konturerna av ett skrivbord urskiljer sig och en datorskärms standbylampa lyser rött. Robben hör röster som kommer närmare. Han inser att han måste ut, bort härifrån. Han försöker kvickt komma upp på fötterna men slår huvudet hårt i något. Det svartnar tillfälligt för hans ögon. Det tidigare kolsvarta rummet klyvs nu av en liten ljusstrimma. Någon har tänt lampan utanför. ”Rösterna!”, tänker Robben. Krypande siktar han mot dörren. På andra sidan bländas han av ett fluorescerande ljus. Robben står i en korridor han inte har något minne av. Huvudvärken tilltar. Rösterna närmar sig från höger och Robben skyndar iväg i motsatt riktning. Han svänger runt ett hörn och tacklar nästan en städare. Han försöker få fram ett ”Anteeksi” men munnen är alldeles för torr. Städaren betraktar honom med förvåning och Robben känner hennes blick i ryggen då han springer vidare.

Två dörrar senare stormar Robben slutligen ut i en stor aula. Han känner med ens igen sig, han står på andra våningen i Physicum. Omtöcknad och fortfarande aningen panikslagen fortsätter Robben nästan omedvetet mot sin trygga plats på campus, vardagsrummet utanför hemmet: kafferummet. Utanför caféet på bottenvåningen spyr han i en papperskorg. Det bultar i Robbens öron då han går den korta sträckan till Exactum. ”En Battery skulle sitta riktigt bra just nu” tänker han och försöker återkalla ifall det fanns några kalla i kylskåpet. Samtidigt som han funderar på detta rundar han det sista hörnet. Robben fortsätter till dörren längst bort till höger och tar i dörrhandtaget. Dörren öppnas inte. ”Är den ännu låst?” funderar han, sneglar på klockan och försöker igen. Precis då han är beredd att ge upp ger dörren med sig och öppnas utåt. Robben tror sig minnas att den alltid har öppnats inåt. Grubblandes över detta stiger han in i det mörka rummet och trycker på strömbrytaren.