2026-08-28, 15:43
  #49
Medlem
The Crashs avatar
Tibiasatsen — Del IV: Från Tibias flashbacks till The Flashback Theorem

I Del III blev kugghjulen källkod.
Deploy hittar ni på https://pi.gegge.se

Kalendrar reducerades till perioder och rester, CRT slog ihop de rester som kunde leva på samma dygn, och vittnen räknades fram aritmetiskt i stället för att sökas dag för dag.

Men vart tog Tibiasatsen vägen?

Tibiasatsen är mitt svenska namn för The Flashback Theorem. Den säger i grunden att en sökning bara får återanvända framtiden när den kommit tillbaka till samma framtidsrelevanta tillstånd.

Kod:
samma framtidsrelevanta tillstånd
=
samma möjliga framtid
=
ingen ny lösning behövs

Inte samma datum. Inte samma fasad. Samma regler, samma resurser och samma möjliga nästa steg.

Tänk ett spel: kommer du tillbaka till samma rum med samma nycklar, ammunition, cooldowns och fiender kvar, då är resten redan löst. Historien som tog dig dit spelar ingen roll. Skiljer något av detta sig är det däremot inte samma rum i satsens mening. Så vi tillåter källkoden försöka att själv få definiera vilka träffar som finns att söka, och se om en maskin som får nya regler också måste börja minnas.

I kalenderkärnan finns en liten statisk variant. När olika CRT-vägar ger samma kanoniska vittnesklass

Kod:
t ≡ residue (mod modulus)

behåller koden den en gång. Olika väg in, samma restklass ut, samma återstående kugghjul. Det är flashback-principen i miniatyr.² Men det är inte den fulla Tibiasatsen. Kalendern bryr sig inte om att vi hittade ett datum i går. Vittnen förbrukas inte. Ingen cooldown uppstår. Ingen frontier rörs. Ingen historik förändrar nästa sökning. Sedan gjorde jag merge-historiken till ett belöningssystem.

Kod:
reckon()

tar SHA, UTC-tid, antal commits, additions, deletions, lockfil, mergeföräldrar och diverse editorrelaterade olyckor. Resultatet blir ett bundet sökfönster på JDN-axeln. Ingen Git-process körs i motorn, ingen persons namn behövs och samma mergebeskrivning ger samma sökning.¹

SHA:n är fröet. Antalet commits är frekvensen:

Kod:
f = clamp(commits, 1, 124)

Det är inte poäng. Det är livslängd. Fler commits ger fler varv i sökningen, inte en garanterad träff. Belöningen för en merge är alltså mer arbete.

Additions och deletions bestämmer riktningen:

Kod:
D < 0.1 · A
→ AD

D ≥ 0.1 · A
→ BC

Bygger du går du mot framtiden. Städar du gräver du i historien. A = 0 ger ingen riktning och sökningen voidas.
Sedan kommer fortunes. Fredag, söndag, lockfiler, merge commits, CRLF, trailing whitespace och jämnt antal commits får avgöra din kosmiska värdighet. Samtidigt premieras 03:14 och 15:14 UTC, Pi Day, onsdag 14:00, primtal antal commits och SHA:n som råkar innehålla 314. 03:14:15 UTC blir legendariskt.

Kod:
f' = clamp(round(f · produkt(av fortunes)), 0, 124)

Vart tog hårdheten vägen?
Den här gången vet jag exakt vart den tog vägen. Den hamnade i ett regelverk som delar ut godtyckliga bedömningar till helt vanliga merge:ar. Och när man får ett godtyckligt beräkningsproblem måste man naturligtvis svara med en godtycklig simulering. Hade de två sakerna hängt ihop hade det varit en modell, och då hade man fått börja ta ansvar för den. Rent matematiskt måste negativitet kontreras med negativitet:

Kod:
(-1)² = 1

Medan principalroten ur 1 blir 1, inte -1. Det motsatta ledet återställer alltså inte den negativa informationen. Slutsatsen är given: vill man få något positivt ur något negativt måste man lägga på ytterligare något negativt. Därför straffas en fredagsmerge. Inte för att den gjort fel, utan för att algebra kräver sin tribut.

En perfekt π-dag är en perfekt π-dag. Singel, dubbel och trippel är egenskaper hos dagen, inte grader av människovärde. En träff hör till commiten, inte personen bakom den. Annars får man snabbt en troféhall för inbördes beundran, och i mitt fall hade den haft en ovanligt konstant medlemslista.

The Flashback Theorem finns däremot fortfarande inte i koden i sin fulla dynamiska form. Reckoning är en ren funktion: mergefakta in, sökfönster och träffar ut. Resultatet från merge n förändrar inte merge n + 1. Det finns ingen frontier, ingen cooldown, ingen återstående resurs och ingen cykelanalys över ett tillståndsrum. Det är därför satsen saknas. Inte för att den glömdes, utan för att den vore fel sats för ett system där historiken ännu inte ändrar framtiden.

Frö är inte minne

Det finns en skillnad som är lätt att missa eftersom båda råkar använda det förflutna. SHA:n är ett frö. Den beskriver var en enskild sökning ska börja, men den minns inget från den föregående sökningen. Den ger variation mellan merge:ar utan att någon merge lämnar ett spelstate efter sig. En cooldown gör motsatsen: den säger att det som hände nyss begränsar vad som får hända sedan. En frontier gör samma sak: den gör nästa steg beroende av hur långt man redan har kommit.

Det är alltså inte nog att programmet läser historiska fakta. Ett bankutdrag är inte ett bankkonto bara för att båda nämner pengar. För att Tibiasatsen ska bli relevant måste utfallet från den gamla körningen vara en del av indata till den nya. Först då kan två olika historier kollapsa till samma state. Först då blir det meningsfullt att leta efter en cykel i stället för att bara köra samma rena funktion igen med andra argument.

Det gör också den nuvarande begränsningen till en fördel. Reckoning använder mergehistoriken som kryptiskt väder, inte som kausalitet. SHA:n placerar fönstret. Additions och deletions väljer riktning. Fortunes förvränger räckvidden. Men inget av detta ger en commit rätt att påverka nästa commits öde. Maskinen är därför rättvis på det tråkigaste möjliga sättet: den behandlar varje merge som en isolerad naturkatastrof.

Den verkliga hårdheten

I Del III flyttades hårdheten från tidsaxeln till restgeometrin. Här flyttas den igen, men inte till datorn. Själva Reckoning-sökningen är billig eftersom den arbetar med redan kompilerade perioder och vittnen. Den svåra delen är att avgöra vilka detaljer som ska få följa med in i framtiden. Räcker SHA, riktning och frekvens? Ska en fångad dag tas ur kartan? Ska en bot-merge räknas? Återställs en cooldown vid ny regelbok eller lever den för evigt?

Varje sådant beslut är en ny koordinat i tillståndet. Glömmer man en koordinat får man en falsk flashback: två lägen ser lika ut, men har olika framtid. Lägger man till för många blir staten så detaljerad att ingenting någonsin återkommer. Tibiasatsen är därför mindre en belöning för att ha hittat en cykel än ett hot om att man måste kunna förklara exakt vad man har glömt.

Append-only är inte dekor

Det är också därför regelboken måste vara append-only. Om en ny kalender, datumordning eller belöningsregel läggs till ändras vilka framtider som över huvud taget är möjliga. Då är det inte längre samma spelstate, hur gärna man än vill återanvända gamla träffar. Den korrekta flashbacken är inte “samma SHA” eller “samma datum” utan samma state under samma regelbok.

Det är en hög ribba. Men den är mindre godtycklig än att först döma två saker som lika, sedan hävda att deras olika framtider ändå saknar betydelse. Här får godtycket åtminstone ett versionsnummer.

Sidan har också fått en viktig korrigering. JDN är den egentliga axeln: samma absoluta dygn. Kalendrar är olika namn på den axeln. Det gregorianska datumet är nu ett synligt ankare, medan en juliansk träff visar sin egen läsning:

Kod:
Juliansk läsning:
2031-04-15
31 · 4 · 15 · 92653589

Samma JDN som gregorianskt:
2031-04-28

Gregorian är för närvarande låst som presentationsankare, men ankaret är inte sanningen. JDN är sanningen. Gregorian är bara den kalender som får stå bredvid och förklara sig.³

Det finns en viss tröst i att regelboken åtminstone blir append-only. Den får gärna vara hård, absurd och full av negativa multiplikatorer, men den ska inte behöva räkna bokstäver för att avgöra om två saker är samma. Den behöver bara avgöra om framtiden faktiskt skiljer sig. Är tillståndet detsamma, är också domen densamma. Allt annat är bara administrativ restgeometri.

Det blir nästan komiskt hur jag försökte tackla problemet genom att skapa en sökrymd via den anekdot som gav upphov till Tibiasatsen, och därmed göra det oändliga mer hanterbart. I efterhand vet vi att Tibiasatsen använder sig utav minne för att spirala i sin sökrymd. Sökrymden får inte vara oändlig. Under tiden låter jag min Raspberry Pi med Pi fortsätta i all oändlighet att söka efter dagar som råkar sammanfalla på pi. Svaret på problemet är att göra minnet till något som är tillbakablickande. Så här skriver jag på Flashback om mina flashbacks genom att göra flashback till ren jävla matematik.

Referenser
¹ Reckoning-kärnan vid commit 1f77a11 och fortunes vid samma commit
² CRT och deduplicering vid commit 1f77a11
³ JDN-ankare och kalenderns egen läsning vid commit 1f77a11
__________________
Senast redigerad av gason 2026-09-16 kl. 00:38. Anledning: Länkar till referenser längst ner korrigerade på begäran.
Citera
2026-08-29, 08:28
  #50
Medlem
The Crashs avatar
Index per den 2026-08-29

Listor

Kapitel I: Introduktion av "en perfekt π-dag", CRT och Bezouts identitet
(FB) Den ultimata π-dagen — Introduktion
(FB) Perfekta π-dagar — del I: en sats, en självkorrigering — och nästa krock
(FB) Perfekta π-dagar — del II: trippel-π och de döda stjärnorna

Kapitel II: Schemaläggningsproblemet när mängden är godtycklig, NP och verifiering av vittne
(FB) Tågrälssatsen I — hur många spår räcker? (ett ärligt hårdhetsbevis) med prior art
(FB) Tågrälssatsen II — nu ställer vi frågan rätt
(FB) Tågrälssatsen III — efter vittnet (och tian jag missade)

Kapitel III: The Flashback Theorem — När oändligheten blir ändlig, driven genom gamification
(FB) The Flashback Theorem — Del I: när räcker en ändlig sökrymd?
(FB) The Flashback Theorem — Del II: när evigheten blir "en cykel på köpet"
(FB) The Flashback Theorem — Del III: TBD
(FB) The Flashback Theorem — Del IV: Från Tibias flashbacks till The Flashback Theorem

Hemsidor:
Hostas på Render — Gratis, reklamfritt och utan vinstsyfte
pi.gegge.se som pekar på --> chrono-pi1.onrender.com

Den berömda (B)loggen

Eventuell staging:

Källkod (Open Source via MIT)
Github (upstream mirror): (GH) GeGGe01/chrono-pi
Self-hosted (SoT): git.gegge.me/GeGGe01/chrono-pi

Wiki för serien
(Samma information som i mina inlägg ovan, fast renskrivet, samt SWE/ENG | (GH) GeGGe01/chrono-pi/wiki | motsvarar (B)loggen


__________________
Senast redigerad av The Crash 2026-08-29 kl. 08:43.
Citera
2026-08-29, 13:14
  #51
Medlem
The Crashs avatar
Citat:
Ursprungligen postat av The Crash
Jag gjorde en hemsida till tabellen ovan.
https://chrono-pi1.onrender.com
Lite inspirerad av https://bitbo.io/halving men tycker min blev snyggare.

Den kommer vara reklamfri, och hostas gratis på serverless.

Källkoden finnes här: https://github.com/GeGGe01/chrono-pi

Tydligen var det klart för tre veckor sedan. Oh well. Tiden går fort när man har roligt

Citat:
Ursprungligen postat av nerdnerd
Jäklar vad du har varit produktiv här! Imponerad. Och jag förstår nog lite ditt driv, sånt händer mig med och ibland om rätt udda grejer.


Citat:
Ursprungligen postat av The Crash
Väldigt icke-originellt att tänka på pi-dagen på pi-dagen. Därav att jag tog tag i det en helt vanlig tisdag/onsdag några timmar i spridda skurar. För vad är ens pi-dagen? Ja, tack vare min lista så vet vi. Den händer flera gånger om året beroende på kalender och datumformat. Ska nämnas att det blir en dubbel perfekt-π-krock mellan gregorianska och holocene 2031-04-15. När jag insåg att dubbla π-krockar var relativt vanligt så behövde jag leta efter trippla. Min lista på kommande visar inte några trippla, så ser inte ut att bli i vår livstid. Min beräkning har varit utifrån selektivt utvalda kalendrar, och ska alltså inte läsas som "närmaste trippel-π-krocl över huvud taget". Så vill någon scanna alla kalendrar och hitta den närmaste så är det fortfarande ett problem att ta tag i
Väldigt klantigt av mig att inte verifiera de träffar som visas på sidan. Halocene och Gregorianska kalendrarna krockar (men ändå inte). Jag visste inte när jag skrev det, men Halocene är Gregorianska kalendern +12 000 år. Syftet med beräkningen är att spegla mänsklighetens historia, snarare än "När Jesus föddes". Så att säga att det uppstår en dubbelkrock den 15 april 2031 är inte felaktigt per se, men det är en oärlig krock eftersom kalendrarna är i perfekt fas per design. Det är bara ett prefix på året som är skillnaden. Inte hur man beräknar en årscykel. Således oärlig krock. Fixen blev att vara mer pedagogisk i min lista på verifierade dagar, så att man enklare förstår vad som konstituerar en perfekt pi-dag.

Jag uppdaterade sidan så att det blir enklare att filtrera ut kalendrarna. Just nu är gregorianska ett permanent ankare. Och det är ju korrekt för vår kultur. Men inkorrekt för de som inte är födda i västvärlden. Så framtida feat är att user ska kunna välja sitt eget ankare för att presentationen av ett datum ska framgå i prefererat format/tidräkning. Inte för att jag tror att det är något som någon någonsin skulle efterfråga. Däremot för att det är mer korrekt och ligger närmare en universiell sanning, än om jag skulle tvinga alla att utgå ifrån hur vi ser på tiden här i västvärlden .

Nu kanske alla undrar hur nya datum läggs till. Som jag nämnde i mitt förra inlägg så är det genom gamification av hur källkoden utvecklas. Med andra ord: När ny källkod är granskad och godkänd så använder en fristående runner en algoritm för att beräkna hur länge sökningen ska pågå, och i vilken riktning. Allt framgår här, och är inte helt implementerat i källkoden ännu. Men det kommer!

https://raw.githubusercontent.com/GeGGe01/chrono-pi/9660431e45b4c13694c347a9ee2265efa5834318/docs/RECKONING.md

Det eleganta är att den brute-forcar inte sökningarna. Vilket man intuitivt vill göra. Istället letar den efter sökvägar som kan vara kompatibla med datumformatet.

Om brute-force är en linjär funktion (där varje X ökar med lika många Y), så är min algoritm en triple-helix som rör sig med en viss frekvens, vilket omvandlas till cykler, och begränsas av ett maxtak.
Kod:
// commits in the merge = frequency = helix turns; MAX_TURNS = 124 (31×4)
f  =  clamp(commits, 1, MAX_TURNS)

Maxtaket är alltså produkten av 31 x 4.

Bedömningen för söklängden vilar på godtyckliga bedömningskriterier, som i viss mån går att anpassa sig efter. Men att det ens utgör ett kriterium är godtyckligt. Inte i hur kriteriet tillämpas. Där är det exakt rätt varje gång.

Ska vi söka Anno Domini eller Before Christ?
Addition/deletion ratio av källkoden bestämmer riktningen med gränsvärde på mer än 1/10 (eller 10%) av antalet additions såsom delete. Mycket deletions signalerar nämligen refactor eller revert. Alltså bakåt. Fler additions (vilket det normalt är) signalerar utveckling. Alltså framtiden. Vilket därmed blir koherent.
__________________
Senast redigerad av The Crash 2026-08-29 kl. 13:39.
Citera
2026-09-24, 19:46
  #52
Medlem
The Crashs avatar
Detta blir sista inlägget i tråden som är ren info.
Jag har renskrivit och lagt upp allt på min wikipedia för källkoden. Den finns på svenska och engelska. Hittar ni något som ser konstigt ut, hojta gärna till.

Jag provade konvertera wikisidan till BBcode. Se här



Ser att länkar inte konverterar korrekt. Men ni har länkarna på wikisidan . Så ovanstående i spoiler är läsbar, inte klickbar.


Men här har ni en snygg illustration på hur The Flashback Theorem opererar:
https://raw.githubusercontent.com/GeGGe01/chrono-pi/wiki-canonical/wiki/assets/flashback-cycle.svg

Ni hittar den här i sitt sammanhang: https://github.com/GeGGe01/chrono-pi/wiki/%5Bsv%5D-The-Flashback-Theorem#the-flashback-theorem

Wikin är komprimerad från prosa och revisioner. Dessutom är matematiken mycket vackrare presenterad.
__________________
Senast redigerad av The Crash 2026-09-24 kl. 20:45.
Citera
Idag, 09:23
  #53
Medlem
Muppetys avatar
3,14159 räcker...

Vi fick poäng för varje decimal i Pi vi kunde i sjuan. De flesta visste inte ens vad Pi var för nått då, men jag vann överlägset med 3,14159...
Citera
  • 4
  • 5

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in