Alla inlägg av Waffe

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: Prolog

På papper lät Kampussitzen som en bra idé. Träffa nya människor, få några nya vänner och ta kvällen en aning lugnare. De blyga blickarna och sångavbrutna small talken var karakteristiska för en långsam start på sitzen. Sociala obekvämheten lättade från sång till sång. Dock för vissa var alkohol det enda botemedlet. Sitzen satte fart i sig. Det mentala ordfiltret slappnade av och skrattet blev allt vanligare. Atmosfären var målad av känslor från hela spektrumet. Det var en bra sitz.

Det festande folket kunde delas in i tre grupper: de som deltog i gruppkaraoke, de som såg på och grimaserade och de som argumenterade om kvantfysik. Robben tillhörde första gruppen. ”En sista beerpong”, tänkte han för andra gången. Från stop till stop, först lonkero, sedan öl nonstop. Vem skulle ha tänkt att en efterfest kunde gå så vilt till?

* * *

Vägen hem skedde i ett ögonblick, som om varken tid eller rymd existerade mellan dörrarna.  Robben fumlar med sina nycklar, och svarar med mummel och svordomar. Luften är fuktig och stilla. Enskilda bilar hörs i bakgrunden. Robben öppnar dörren.

Från vägg till vägg, stumlande och vajande trär Robben in i vad som verkar vara köket. Från kylskåpet tar han en iskall banan och sätter den i sin mikrovågsugn för att tinas. Åtminstone var detta hans plan. Med bananen i handen söker Robben efter sin mikro i mörkret. ”Vafan, den borde vara här”, tänker han. Efter mycket letande hittar han en panel med skärm och knappar, och testar sig fram till den knappen som öppnar luckan på mikron.

En lucka smälls upp.

Den frustrerade studenten lägger in sin kalla banan och trycker in en etta på skärmen; ”Full power”. Luckan sluts och mikrons ljuva hummande börjar, som sakta blir mer och mer högljutt. Ovanligt högljutt.

Ett lysande norrsken läcker ut från den bananfyllda luckan och sveper kring rummet. Rummet avger ett vitt brus i takten med norrskenets gula vågor. Skenet tvinar bort, och brusandet tystnar till. Det mörka rummet står stilla. Robben drar ett par djupa andetag.

Fortsätter om tre veckor…

Idéer är som baciller

Har du försökt skapa förnuftig diskussion på nätet bara för att se den spåra ut till en oändlig flamewar? Känns det som om världen är fylld av idioter?

Känner du till uttrycket the silent majority? Sanningen är att de mest lockande videoklippen, blogginläggen och kommentarerna utnyttjar dina känslor för att infiltrera din hjärna. Problemet med detta är att den mest lockande informationen oftast inte är den faktuellt sett korrektaste. Videon nedan är om mental hygien, och argumenterar över hur tankar och idéer beter sig på samma sätt som mikroorganismer.

PS. För dem som inte har hört om CGP Grey eller Hello Internet YouTube-kanalerna rekommenderar jag båda varmt. Grey gör diverse videon om samhället, psykologi och artificiell intelligens. Hello Internet är en regelbundet utkommen podcast av Grey och Brady Haran där de diskuterar om lite vad som helst. Brady är känd som skaparen av Numberphile och Periodic videos YouTube-kanalerna.