Det här började med ett gammalt Tibia-konto.
Jag fick ett meddelande om att någon försökt logga in på ett konto jag inte använt på ungefär tjugo år. Förr använde Tibia maskinellt tilldelade kontonummer. Min första tanke var därför inte att någon sökte just mig, utan att kontot råkat ligga någonstans i ett stort men ändligt nummerutrymme som en automatisk process passerade genom.
Om gissningen var rätt spelar ingen roll här. Det viktiga var en detalj jag först förenklade bort: ett objekt kan få tre försök under en viss period och låsas först när budgeten är förbrukad.
Och då kommer frågan som måste ställas först:
Vad är det som gör ett redan använt objekt nytt igen?
Är det att P steg har gått sedan just det objektet användes? Är det att ett gemensamt datumfönster slår om och ger tre nya försök? Eller måste båda villkoren vara uppfyllda?
Först när det är definierat vet man vad det betyder att en ändlig sökrymd "tar slut".
Det är problemet jag kallar Tibiasatsen.
R försök under P steg
Vi har K distinkta objekt. Vid varje heltalssteg vill vi välja exakt X olika objekt. Under varje fönster om P steg får ett objekt användas högst R gånger.
Eftersom samma objekt högst kan väljas en gång under ett tidssteg är dess verkliga maximala budget
Under P steg måste processen göra
användningar.
Populationen kan högst leverera
användningar.
Alltså krävs
Vi behöver dessutom
eftersom de X samtidiga valen måste vara olika objekt.
De två villkoren är också tillräckliga.
Numrera objekten
Vid steg t väljer vi
Kod:
tX, tX+1, ..., tX+X-1
modulo K.
Över vilka P steg som helst gör vi exakt X·P val. De motsvarar X·P konsekutiva heltal modulo K, så varje objekt träffas antingen
eller
gånger.
Men ur
följer
Ingen budget överskrids.
Alltså har vi en exakt gräns:
Kod:
Kmin =
max(X, ceil(X·P/min(R,P))).
För ett enda tillåtet försök:
För analogins tre försök, när P ≥ 3:
Kod:
R = 3
Kmin =
max(X, ceil(X·P/3)).
Konstruktionen visar alltså att gränsen nås.
Och den ger mer än vad ett fast resetfönster kräver. Ta vilket rullande P-fönster som helst. De X·P valen är fortfarande X·P konsekutiva heltal modulo K, bara med en annan startpunkt. Varje objekt används därför högst ceil(X·P/K) gånger även där.
Samma optimala schema fungerar alltså både för fasta resetblock och för den starkare regeln "högst R användningar i varje P-fönster".
K = X·P i R=1-fallet är den deterministiska diskreta kusinen till Little's lag: population = genomströmning × tid.¹
Det intressanta börjar när objekten slutar vara identiska.
När varje objekt får sin egen klocka
Låt objekt j behöva vänta Pⱼ steg mellan två användningar.
Objekt j kan då långsiktigt bidra med högst
användningar per steg. För att hålla total takt X krävs därför
Men det räcker inte.
För X=1 är detta ett etablerat problem:
Pinwheel Covering.² Där får objekt j användas högst en gång inom varje Pⱼ-fönster samtidigt som varje tidssteg måste täckas.
Densiteten säger hur mycket kapacitet som finns i genomsnitt, men inte om den går att placera.
Ta det kritiska fallet
Här finns ingen långsiktig slack.
Låt Nⱼ(T) vara antalet gånger objekt j används under [0,T), och låt Eⱼ(T) vara summan av hur mycket mellanrummen mellan användningarna överstiger minimiavståndet Pⱼ.
Har j använts n gånger gäller
Kod:
(n-1)·Pⱼ + Eⱼ(T) ≤ T,
så
Kod:
Nⱼ(T) ≤
(T-Eⱼ(T))/Pⱼ + 1.
Full takt kräver
Eftersom Σ1/Pⱼ = X får vi
och därmed
Kod:
Σⱼ Eⱼ(T) ≤ K·max Pⱼ.
Det sammanlagda överskottet är alltså begränsat av en konstant under hela den oändliga körningen. Bara ändligt många mellanrum kan vara längre än sina respektive Pⱼ.
Inget objekt kan heller falla ur permanent. Tar vi bort objekt j återstår maximal långsiktig takt
vilket inte räcker.
Efter en ändlig transient måste därför varje objekt återkomma exakt var Pⱼ:e steg:
Täckningsfunktionen är periodisk modulo lcm(P₁,...,Pₖ). Är den exakt X i svansen är den därför exakt X över hela perioden och därmed över hela ℤ.
Alltså:
Vid kritisk densitet finns en självbärande återkomstloop om och endast om perioderna kan förses med rester som bildar ett exact X-cover of Z.
Omvändningen är omedelbar: en exakt X-täckning säger direkt vilka X objekt som ska användas vid varje steg.
Ta
Kod:
X = 1
P = {2,3,6}
1/2 + 1/3 + 1/6 = 1.
Men någon loop finns inte.
Lägger vi period 2 på jämna steg återstår de udda, och ingen restklass modulo 3 ligger helt bland dem. Medelvärdet säger "exakt tillräckligt". Restklassgeometrin säger "omöjligt".
För Pinwheel Covering är densitet 1 alltså inte någon generell tillräcklig tröskel. Den optimala universella gränsen för X=1 är numera känd:
Vid eller över den är varje instans schemaläggbar. Kawamura och Kobayashi bestämde gränsen 2025.³
Zhi-Wei Sun visar dessutom att ett konstant exact X-cover med fler än ett objekt inte kan ha enbart distinkta moduler.⁴ Kritisk full takt tvingar alltså fram aritmetisk struktur.
Standard-Pinwheel är dessutom NP-hårt; Kleinberg och Mishra visade 2026 hårdhet för standardrepresentationen och överför resultatet till bland annat Pinwheel Covering. Jag gör inget NP-fullständighetsanspråk för den oändliga standardvarianten.⁵
Och där får Tågrälssatsen I ett syfte
Nu tillbaka till tågen.
I Tågrälssatsen I definierade jag
Kod:
O(t) = Σᵢ χᵢ(t)
M = max O(t).
t
För tågen betydde χᵢ(t)=1 att linje i upptog ett spår. Här läser jag samma matematiska objekt som en periodisk lockout.
Låt därför objekt i ha period Pᵢ och en mängd blockerade rester
Sätt
och låt χᵢ(t)=1 precis när
Alltså är dᵢ antalet steg under varje Pᵢ-cykel som objekt i är låst.
Detta är inte nödvändigtvis samma modell som återkomsttaket ovan: där skapas spärren av våra val; här är låsmönstret redan givet.
Medelantalet låsta objekt är då
så Tågrälssatsen I ger
Kod:
M ≥ ceil(ρ)
= ceil(Σᵢ dᵢ/Pᵢ).
Nu får M ett operationellt syfte.
Har vi totalt K objekt finns vid tid t
fria. Om processen alltid måste kunna välja X objekt krävs
för alla t.
Alltså
eller
Kombinerar vi det med densitetsgolvet får vi det billiga nödvändiga villkoret
Kod:
K ≥
X + ceil(Σᵢ dᵢ/Pᵢ).
Där har golvet fått sitt jobb.
Det säger hur stor reservpopulation som minst krävs utöver de X direkt användbara objekten.
Det strikta återkomstfallet ovan går dessutom att känna igen som ett specialfall när det väl har stelnat till sin periodiska svans. Om objekt i används exakt en gång var Pᵢ:e steg och sedan är otillgängligt under de Pᵢ-1 mellanliggande stegen, då är
Som kontroll: i det kritiska exact-cover-fallet gäller
Då blir
Kod:
ρ = Σᵢ (Pᵢ-1)/Pᵢ
= K-X.
Tågrälssatsens golv ger alltså M ≥ K-X, medan kravet på X fria objekt ger M ≤ K-X. Därför
exakt.
Samma gräns kommer från båda hållen.
Riktningen är viktig: återkomstmodellen
skapar låsmönstret; Tågrälssatsen analyserar det när det finns. Andra exogena Bᵢ och dᵢ fungerar likadant.
Om faserna dessutom får väljas kommer scramblern tillbaka:
Kod:
M* = min max Oφ(t).
φ t
och då krävs
Nu sitter hela kedjan.
II säger vilka spärrar som kan sammanfalla.
III beskriver vittnesrummet.
I tar maximumet M.
Och Tibia säger varför vi behöver veta M:
Kod:
II vilka kan sammanfalla?
↓
III vilka vittnen finns?
↓
I hur stor blir peak lockout M?
↓
finns minst X fria kvar?
Tågrälssatsen I hade ett golv.
Tibiasatsen ger golvet ett jobb.
Men Tibia har fortfarande en detalj kvar
Hittills har jag analyserat två rena fall. I det ena skapas spärren av att vi själva använder ett objekt.I det andra ligger spärren redan ute på tidsaxeln. Men de tre försöken som startade hela funderingen innehåller båda.
Försöksbudgeten minskar därför att vi använder objektet. Resetten kommer från klockan. Ett objekt har alltså både ett exogent och ett endogent tillstånd.
Det är där själva Tibiasatsen kommer in.
Fortsättning följer.
Prior art
¹ J. D. C. Little, "A Proof for the Queuing
Formula: L = λW",
Operations Research
9(3), 1961.
² X=1 med rullande återkomsttak är
Pinwheel Covering, tidigare formulerat bl.a.
som point patrolling.
³ A. Kawamura & Y. Kobayashi,
"A Computer-Assisted Proof of the Optimal
Density Bound for Pinwheel Covering",
2025. Optimal universell tröskel:
α* ≈ 1,264.
⁴ Z.-W. Sun, "On the range of a covering
function",
Journal of Number Theory
111(1), 2005, 190–196;
arXiv:math/0409279.
⁵ R. Kleinberg & A. Mishra,
"NP-Hardness and a PTAS for the Pinwheel
Problem", FOCS 2026. Standardproblemet är
NP-hårt och resultatet överförs även till
Pinwheel Covering; inget
NP-fullständighetsanspråk görs här.