dynamisk-rettsstat/docs/modellkart.md
Kjell Tore Guttormsen 19858bbda9
docs: bring skills and docs in line with the fixed code
Skills ask before using a working copy found in the user's folder and state
its check level first. The drift of the queue models before the shock is
stated in the caveats and the README. README shows how to run the check and
the tests. The drift line names the month a gradual drive begins.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-11 15:46:39 +01:00

21 KiB
Raw Permalink Blame History

Modellkart

Kartet beskriver modellen i notatet Den dynamiske rettsstaten slik koden i modell/kjerne/ regner den, ved commit 2badc25 i notatets repo (2badc25e5134ee26309bd8c3bd008ac64afe55a4). Filene i modell/kjerne/ er byte-like kopier av paper/sim.py, paper/diagnose.py og paper/forlop.py ved den commiten, så linjenumrene i notatets vedlegg C gjelder modell/kjerne/sim.py direkte. Verdiene under er lest fra koden. Ligningsnumre, tabeller og avsnitt er notatets.

Kartet er for den som vil endre modellen: hva tilstanden er, hvor parameterne står, hvilke ligninger koden regner, og hvilke kontroller som skal holde etter en endring.

(a) Tilstandsvariabler og avledede størrelser

Tidsenhet: måned. Nivåene er normalisert slik at referanselikevekten har K = 1, T = 1 og Λ = 0,80. I modellene med kø i domstolen er starttilstanden nesten, men ikke helt, en likevekt: ved start er K′ = ϑ ς_D Q_D > 0, fordi det som faller fra køen, aldri trekkes fra K (ligningen for K′ under). Uten sjokk kryper K og τ_D derfor sakte oppover; se forbehold.md for hvor mye.

I koden Symbol Betyr Merknad
t t tid i måneder Euler-steg DT = 0,05
K K_obj vektet objektiv kriminalitetsbelastning 1 i referansen; i simulate_chain2 er K = K_A + K_B
KA, KB K_A, K_B belastning fra alvorlige (A) og øvrige (B) saker bare simulate_chain2; startverdier 0,4 og 0,6
U U opplevd trygghet start 0,80
L Λ tillit start 0,80; holdes innenfor [10⁻⁴, 1 − 10⁻⁴] etter hvert steg
T T innsats (politiets) proporsjonal regel T = T₀ + k_p (K(t − τ) − K*), begrenset til [0, T_max]; eller MPC
Q Q_D kø i domstolen (modellens ledd med kø) normaliserte enheter; aldri negativ
QA, QB Q_A, Q_B kø per sakstype bare simulate_chain2
tauD τ_D saksbehandlingstid = m_D + Q_D / Z_D tauA, tauB per sakstype
JD J_D innstrømning til domstolen = ξ_D F lign. (27)
RD R_D avgjorte saker = Z_D Q_D / (Q_D + m_D Z_D) lign. (28)
Fa, F F fjerningsstrøm = removal(K, L, T) lign. (12) og (12′)
Z Z_D kapasitet i domstolen ZD0 = 0,10 / 0,95 før sjokket; endogen i simulate_endo
xi ξ_D andel saker til domstolen (1 − andel ledet utenom) ≥ xi_min = 0,8 i reglene
q q prosessuell kvalitet bare kvalitetssløyfen i simulate_endo
g g virkning av lang saksbehandlingstid = D / (D + τ_h), D = max(0, τ_D − τ_D^ref) lign. (30)
Omega(t, p) Ω strukturelt pådrag Ω₀, ganget med shock fra t_shock
tau_ref τ_D^ref saksbehandlingstid i utgangslikevekten 3 måneder
tau τ forsinkelse i politiets sløyfe argument; et helt antall tidssteg
kp k_p reaktivitet i den proporsjonale regelen argument, standard 3,0

Ligningene slik koden regner dem (deriv, deriv_chain, deriv_chain_xz, court):

  • K′ = Ω (1 + χ_D g) − (1 − ξ_D ϑ) F − ϑ R_D − δ K. Uten kjede (deriv): K′ = Ω − F − δ K.
  • F = γ′ Λ^η T K / (1 + K / K_sat), γ′ = γ (1 + 1 / K_sat). Med K_sat = ∞ er F = γ Λ^η T K.
  • U′ = κ_U (U_eq − U), U_eq = U₀ − ψ (K − 1), begrenset til [0, 1].
  • Λ′ = κ_Λ (Λ₀ + μ₁ (U − U₀) + μ₃ q − μ₄ g − Λ) − μ₂ Λ · max(0, T − T_prop K)², T_prop = 1,6.
  • Q_D′ = J_D − R_D − ς_D Q_D.

(b) Parameterne

P: grunnmodellen (sim.py, l. 27–40; tabell 3)

Navn Verdi Enhet Betyr I notatet
gamma 0,125 per mnd effektivitet per enhet tiltak; gir γΛT = 0,10 i likevekt γ; lign. (12), avsnitt 4.3
eta 1,0 – tillitselastisitet η; lign. (12)
delta 0,02 per mnd naturlig avgang δ; lign. (12)
Omega0 0,12 per mnd strukturelt pådrag ved referansen (gir K = 1 ved T = 1, Λ = 0,8) Ω₀; lign. (6), avsnitt 3
shock 1,30 faktor varig økning i Ω (0,12 → 0,156) avsnitt 8.1
t_shock 12,0 mnd når økningen begynner avsnitt 8.1
T0 1,0 – grunninnsats T₀; lign. (11), avsnitt 4.2
Tmax 3,0 – kapasitetstak for innsatsen T^max; lign. (11), (23)
Kstar 1,0 – målnivå for K K*; lign. (11)
kU 0,25 per mnd trygghetens tilpasningsrate κ_U; lign. (20), avsnitt 6.1
U0 0,80 – trygghet i referansen U₀; lign. (20)
psiU 0,30 – hvor mye trygghet faller per enhet K over 1 ψ; lign. (20)
kL 0,10 per mnd tillitens tilpasningsrate κ_Λ; lign. (21), avsnitt 6.1
mu1 0,50 – tillitens følsomhet for trygghet μ₁; lign. (21)
mu2 0,30 – tillitstap ved uforholdsmessig innsats μ₂; lign. (21)
Tprop 1,6 – grense for forholdsmessig innsats, T_prop(K) = 1,6 K T_prop; lign. (21)
Lam0 0,80 – tillit i referansen Λ₀; lign. (21)
ksat ∞ – politiets halvmetningsnivå (Holling type II); 3 og 1,5 i robusthetsanalysen K_sat; lign. (12′), avsnitt 8.3, tabell 5

Andre konstanter i sim.py:

Navn Verdi Betyr
DT 0,05 mnd tidssteg (eksplisitt Euler)
TEND 120,0 mnd horisont for simulate, simulate_chain, simulate_chain2, simulate_soc; standard for simulate_endo
UPS0 0,95 domstolens utnyttelse før sjokket
TAU_REF 3,0 mnd saksbehandlingstid i utgangslikevekten
ZD0 0,10 / 0,95 ≈ 0,105 domstolens kapasitet før sjokket
VARSIGMA 0,01 per mnd frafall fra køen (henleggelse, foreldelse)
J0 0,10 fjerningsstrømmen i referansen, γ Λ₀ T₀
MD ≈ 0,233 mnd ren behandlingstid m_D, kalibrert i lukket form slik at τ_D = 3 i utgangslikevekten (l. 155)

MPC (mpc_step, mpc_step_chain; lign. (24), avsnitt 6.3 og 8.1): horisont H = 24 mnd, vekt på innsatsavvik lamT = 0,05, vekt på tillitsbrudd lamL = 20, myk tillitsgrense Λ₀ − 0,05 = 0,75. Beslutningen tas hver måned.

CH0: domstolen som ledd med kø (l. 157–158; tabell 3, avsnitt 7.3 og 8.2)

Navn Verdi Betyr I notatet
Z ZD0 ≈ 0,105 kapasitet Z_D; lign. (28)
m MD ≈ 0,233 mnd ren behandlingstid m_D; lign. (28)
theta 0,5 andel av virkningen som krever dom ϑ; lign. (29)
chi 0,15 største økning i Ω av lang saksbehandlingstid (celerity) χ_D; lign. (30), tabell 4
mu4 0,12 største tillitstap av lang saksbehandlingstid μ₄; lign. (30)
tauh 9,0 mnd halvmetningstid for g τ_h; lign. (30)
varsigma 0,01 per mnd frafall fra køen ς_D; lign. (28)
xi 1,0 andel saker til domstolen ξ_D; lign. (27)
Zfun, xifun None tidsplan for kapasitet og andel (funksjoner av t) scenario 3–5, avsnitt 8.2
dbr None trommel–buffer–tau: innsatsen begrenses slik at J_D ≤ dbr · Z_D (0,95 i scenario 6 og 7) lign. (32)

CH2: domstol med to sakstyper (l. 352–354; avsnitt 8.3, tabell 6)

Navn Verdi Betyr
Z, m, chi, mu4, tauh, varsigma som CH0
c 1 antall parallelle spor (10 i robusthetsanalysen, med m kalibrert av calibrate_m)
prio True A-saker har forrang; False gir felles kø (FIFO)
piA 0,4 alvorlige sakers andel av K
thetaA, thetaB 0,8, 0,3 andel av virkningen som krever dom, per sakstype (vektet 0,5)
xiA, xiB 1,0, 1,0 andel saker til domstolen, per sakstype
Zfun, xiBfun None tidsplaner
dbr ikke satt leses med ch2.get("dbr"); trommel–buffer–tau via T

Lign. (33). c = 1 gir R = Z Q / (Q + m Z) eksakt; c > 1 bruker Erlang C (erlang_L, rho_of_L).

SOC: rekruttering og vippepunkt (l. 439; avsnitt 8.4, figur 8)

Navn Verdi Betyr
eps 0,30 styrken i rekrutteringsleddet ε
Kh 2,0 halvmetningsnivå K_h
pexp 4 bratthet ϱ

Lign. (34): Ω_soc = ε K^ϱ / (K_h^ϱ + K^ϱ). simulate_soc rekalibrerer Ω₀ slik at K = 1 fortsatt er likevekt, og har et forbigående sjokk: faktor shock = 1,6 i månedene t_on = 12 til t_off = 36.

ENDO: beslutningsreglene (l. 515–530; tabell 3, avsnitt 8.5)

Navn Verdi Betyr I notatet
lagD 3,0 mnd observasjonsforsinkelse for kjedestatistikk τ_D^obs
xi_min 0,8 gulv: høyst 20 % av sakene til forenklede reaksjoner ξ_min; lign. (35), (37)
tau_thr 6,0 mnd terskel for observert saksbehandlingstid (desentral regel) τ_D^gr; lign. (35)
k_xi 0,2 / 12 per mnd forsterkning for påtalepraksis (0,2 per år) k_ξ; lign. (35)
tau_xi 6,0 mnd tidskonstant for endring av påtalepraksis τ_ξ
ups_star 0,95 målutnyttelse ved dimensjonering υ*; lign. (36), (37)
ups_hi, ups_lo 1,0, 0,85 dødsone: bestill over 1, bygg ned under 0,85 tabell 3
kZ 1,0 budsjettforsterkning (1 = hele gapet bestilles) k_Z; lign. (36)
L1, L2 6,0, 24,0 mnd bestilt kapasitet virker lineært fra 6 til 24 mnd etter vedtak τ_Z
tau_down 36,0 mnd tidskonstant for nedbygging τ_ned
T_clear 24,0 mnd restansen avvikles over denne tiden (koordinert regel) H_Q; lign. (37)
H_pred 36,0 mnd prognosehorisont H_p; lign. (37)
period 12,0 mnd budsjettsyklus
qloop False kvalitetssløyfen av eller på avsnitt 8.5
mu3 0,5 tillitsvirkning av q μ₃; lign. (21)
Lam_star 0,78 tillitsmål for kvalitetssløyfen Λ*
k_q 1 / 12 per mnd forsterkning (1 per år) k_q
q_max 0,2 øvre grense for q q_max
lag_survey 3,0 mnd publiseringsforsinkelse for den årlige tillitsmålingen

Faste verdier i scenarioene (if __name__ == "__main__")

T_TILTAK = 24 (vedtak i måned 24), T_UTV = 24 (utvidelsen realiseres over 24 mnd), XI_UND = 0,8, ZD_UTV = 1,34 (+34 % kapasitet), XI_B_UND = 1 − 0,2 / 0,6 ≈ 0,67 (20 % av alle saker er 33 % av klasse B), TEND4 = 180 mnd for reglene i avsnitt 8.5.

Konstanter i diagnose.py og forlop.py

diagnose.py bruker ingenting fra sim.py og har egne kopier av regelverdiene: UPS_STAR = 0,95, UPS_HI = 1,0, T_CLEAR = 24,0, L1, L2 = 6,0, 24,0. Endres ENDO i sim.py, må disse endres likt, ellers regner diagnosen og forløpet med ulike regler. forlop.py bruker ENDO direkte for regelen og diagnose.T_CLEAR/diagnose.UPS_STAR for behovet det sammenligner med.

forlop.py: NAA = 24 (modellmåneden for første budsjettvedtak), OBS = NAA − lagD = 21, SLUTT = 180 mnd, LAM_MYK = Λ₀ − 0,05 = 0,75, K_GULV = 0,80 og T_GULV = 0,50 (under dette regnes forløpet ikke), UPS_FOR_MIN = ups_lo + 0,01 = 0,86 og UPS_FOR_MAKS = 0,98 (tillatt utnyttelse før økningen), RADER (månedene i tabellen). forlop.py har en egen kopi av regnestegene i simulate_endo (simuler, bare koord og sched) og kontrollerer i hver kjøring at den gir bit for bit samme svar som simulate_endo når restansen ikke legges inn. Endres simulate_endo, må simuler endres likt.

(c) Ligning → funksjon → status

Fra notatets vedlegg C (tabell 12). Av de 39 nummererte ligningene er 18 implementert, 12 forenklet og 9 ikke implementert. Implementert: koden regner ligningen slik den står, i aggregert form (n = 1). Forenklet: koden regner et spesialtilfelle eller en enklere form. Ikke implementert: ligningen hører til rammeverket, men ingen simulering bruker den.

Ligning Avsnitt Hva Kode (sim.py) Status
(1) 1 naiv beslutningsregel T ← f(K, O) simulate, l. 66–86; regelen l. 73–75 forenklet: f er proporsjonalregelen (11), O er K forsinket med τ
(2) 2.1 vektet objektiv kriminalitet K_obj simulate_chain2, l. 369–428 (K = K_A + K_B, l. 395) forenklet: to kategorier, allerede alvorlighetsvektet; ellers n = 1
(3) 2.3 effektivt kriminalitetspress K̃ – ikke implementert: reglene svarer på K_obj
(4) 2.4 måleligningen – ikke implementert: feilfritt estimat
(5) 3 makrovektor E – ikke implementert
(6) 3 strukturelt pådrag Ω Omega, l. 45–46; simulate_soc, l. 466 forenklet: eksogent, Ω₀ = 0,12, +30 % fra måned 12 (+60 % i månedene 12–36 i figur 8)
(7) 4.1 tiltaksvektoren v simulate_endo, l. 564–653 forenklet: (T, ξ_D, Z_D, q), én kategori, bare domstolsleddet
(8) 4.1 observasjonene O simulate_endo, l. 582–588 og 609–611 forenklet: K forsinket med τ, kjedestatistikk med 3 mnd, tillit årlig med 3 mnd
(9) 4.1 beslutningsregelen Ψ simulate_endo, l. 590–641 forenklet: reglene i 8.5; tilstanden er den sanne, forsinket
(10) 4.2 forsinkelsen τ simulate, l. 70, og tilsvarende forenklet: én parameter (3, 6 eller 11 mnd)
(11) 4.2 styringsregelen (PID) simulate, l. 75; simulate_chain, l. 218; simulate_chain2, l. 397; simulate_soc, l. 463; predict_F, l. 557; simulate_endo, l. 583 forenklet: bare det reaktive leddet og metningen (k_i = k_d = 0, T_max = 3)
(12) 4.3 kriminalitetsdynamikken deriv, l. 57–58, med removal, l. 49–54; Euler-steget l. 82 implementert
(12′) 4.3 fjerning med metning F_sat removal, l. 49–54 implementert (γ′ = γ(1 + 1/K_sat)); Z_E regnes ikke ut særskilt
(13) 4.4 dempning a og reaktivitet b l. 686–688; l. 827–831 implementert: a = 0,12, b = 0,30
(14) 4.4 kritisk forsinkelse τ_c critical_delay, l. 128–132; største stabile k_p, l. 694–695 implementert: τ_c = 7,2 mnd; k_p ≈ 2,3 ved τ = 11
(15) 4.4 tommelfingerregelen l. 696; l. 724–726 implementert: k_p < 1,4 ved τ = 11
(13′) 4.4 a og b med metning l. 839–848; l. 874–876 implementert
(16) 5.1 forventet nytte – ikke implementert
(17) 5.1 oppdagelsesrisiko – ikke implementert (fjerningsraten svarer til intensiteten h, l. 399)
(18) 5.1 deltakelse – ikke implementert: pådraget er eksogent
(19) 5.2 forskyvning mellom kategorier – ikke implementert
(20) 6.1 trygghet U deriv, l. 59–60, og tilsvarende implementert
(21) 6.1 tillit Λ deriv, l. 61–62; μ₃q i deriv_chain_xz, l. 543–544 implementert; μ₃ = 0 utenom kvalitetssløyfen
(22) 6.2 samfunnsøkonomisk målfunksjon – ikke implementert: MPC minimerer et udiskontert kvadratisk tap over 24 mnd (l. 119–120)
(23) 6.3 skranker metningen i regelen; MPC, l. 120 og 123 forenklet: bare 0 ≤ T ≤ T_max og Λ ≥ 0,75 (myk)
(24) 6.3 MPC mpc_step, l. 89–125; mpc_step_chain, l. 240–265 forenklet: ett konstant innsatsnivå over H = 24, ingen sluttkostnad
(25) 7.1 lovgivers handlingsrom – ikke implementert: T_max er fast
(26) 7.2 utnyttelse og køtid per ledd court, l. 167–178; utskrift l. 732–738 og 783–786 forenklet: bare domstolsleddet
(27) 7.2 J_D = ξ_D F deriv_chain, l. 182–184; deriv_chain_xz, l. 535–536; simulate_chain2, l. 407–408 implementert
(28) 7.3 domstolskøen R_D, τ_D court, l. 167–178; init_chain, l. 195–203; m_D l. 154–155 implementert: m_D = 0,233, τ_D^ref = 3
(29) 7.3 K med domstol deriv_chain, l. 187 implementert
(30) 7.3 tilbakekoblingene g, Ω^eff, Λ₀ − μ₄g court, l. 176–177; deriv_chain, l. 186 og 191 implementert
(31) 7.3 a og b med mettet domstol l. 826–834 implementert (sluttilstanden i scenario 2)
(32) 7.5 kapasitetsskranker i kjeden simulate_chain, l. 226–230; simulate_chain2, l. 400–406 forenklet: bare J_D ≤ 0,95 Z_D, håndhevet ved å begrense T
(33) 8.3 prioritert kø med to sakstyper court2, l. 329–344; capfun, l. 320–326; simulate_chain2 implementert; i tillegg FIFO og c = 10 spor
(34) 8.4 rekruttering hill, l. 442–443; simulate_soc, l. 451–476; soc_equilibria, l. 479–491 implementert
(35) 8.5 påtalemyndighetens regel for ξ simulate_endo, l. 598–604 og 640 implementert
(36) 8.5 budsjettregelen for Z simulate_endo, l. 614–621 og 628–639 implementert
(37) 8.5 den koordinerte regelen simulate_endo, l. 605–608 og 622–634; predict_F, l. 548–561 implementert
– 8.5 sløyfen for q simulate_endo, l. 609–612 og 641 implementert

Merknadene i vedlegg C sier mer om hvert punkt, blant annet hvor koden avviker fra teksten i små ting (grensen på 3 k_ξ per måned i (35), at nedbyggingsmålet i (36) står til ny kapasitet bestilles, og at q også justeres ned).

(d) De fem simulatorene

Alle integreres med eksplisitt Euler, DT = 0,05. Alle tar parameterne som p (standard P), så en endring gjøres med dict(P, navn=verdi). simulate, simulate_chain, simulate_chain2 og simulate_soc bruker den globale TEND; simulate_endo har argumentet tend, med standardverdien TEND slik den var da sim.py ble lest inn.

Funksjon Dekker Styring Datafiler i notatets kjøring Figur / tabell
simulate(controller, tau, p, kp) grunnmodellen uten kjede: K, U, Λ, T "P" eller "MPC" p3, p6, p11, mpc11, p11d; sat_B, sat_C (med ksat 3 og 1,5) figur 4 (regime A–E); figur 7 venstre (sat_C); tabell 5
simulate_chain(controller, tau, ch, p, kp, mpc_knows_chain) domstolen som ledd med kø, med tidsplaner (Zfun, xifun) og trommel–buffer–tau (dbr) "P" eller "MPC" kjede_s1–kjede_s5 figur 6; tabell 4
simulate_chain2(tau, ch2, p, kp) domstol med to sakstyper, forrang eller FIFO, c spor proporsjonal regel prio_s2, prio_s3, prio_s5 figur 7 høyre; tabell 6
simulate_soc(controller, tau, p, s, kp, shock, t_on, t_off) rekruttering og vippepunkt, forbigående sjokk "P", ellers fast T = T₀ vippe figur 8
simulate_endo(policy, tau, p, ch, e, kp, tend, xi_sched, Z_sched) endogene tiltak: ξ_D, Z_D og q bestemt av regler politiet: proporsjonal regel; kjeden: "sched", "desentral", "desentral_prog", "koord" endo_e5, endo_des, endo_desp, endo_ko figur 9; tabell 7 og 10

Regimene i figur 4: A = p3 (k_p = 3, τ = 3), B = p6 (τ = 6), C = p11 (τ = 11), D = mpc11 (MPC, τ = 11), E = p11d (k_p = 1,2, τ = 11). stab.dat og thumb.dat (figur 5) kommer fra critical_delay og tommelfingerregelen, ikke fra en simulering. sat_B og prio_s5 skrives, men brukes ikke i figurene. Det er 22 datafiler i alt.

Kolonner: p*, p11d: t K U L T; kjede_s*: t K U L T Q tauD; sat_*: t K Ks3 Ks15; prio_s*: t K KA KB tauA tauB tauF KF KAF; vippe: t fast p3 p6 p3cap p6cap; endo_*: t K L T Z xi tauD q (Z relativt til ZD0); stab, thumb: kp tauc. Tidsseriene skrives med hver tiende rad (write_csv, hver halve måned).

I tillegg: pure_capacity_loop (ren kapasitetssløyfe, merknad 4; bare utskrift), predict_F (prognosen den koordinerte regelen bruker) og soc_equilibria (likevektene i avsnitt 8.4).

(e) Grensetilfellene koden skriver ut

Regelen i notatet: hver utvidelse har et grensetilfelle som gjenskaper grunnmodellen. sim.py skriver ut avviket. Tallene under er fra en kjøring av modell/kjerne/sim.py med notatets låste versjoner (numpy 2.5.4, scipy 1.18.1), der alle 22 datafilene ble byte-like notatets.

Kontroll Utskrift Største avvik
simulate_chain med Z_D = ∞ gjenskaper regime A–D (p3, p6, p11, mpc11) Del 2, «grensetilfelle: reproduksjon av regime A-D» 0 for p3; høyst 3,8·10⁻¹⁵ i K og 2,9·10⁻¹⁴ i T
simulate_chain med endelig Z_D og ϑ = χ_D = μ₄ = 0 gjenskaper regime A (køen regnes, men virker ikke tilbake) samme sted 0
simulate_chain med stor, endelig Z_D (1 og 10) nærmer seg regime A samme sted 4,7·10⁻³ og 3,6·10⁻³ i K (ikke et eksakt grensetilfelle)
simulate med K_sat = ∞ gjenskaper regime A–C; simulate_chain gjenskaper scenario 2 Del 3 (a) 0
simulate_chain2 med FIFO, ϑ_A = ϑ_B = 0,5 og c = 1 gjenskaper scenario 2 Del 3 (b), «kontrolltall» 2,2·10⁻¹⁵ i K, 2,8·10⁻¹³ i τ
calibrate_m med c = 1 gir MD samme sted 0,2330 mot 0,2330
simulate_endo("sched") gjenskaper scenario 2, og med tidsplanene scenario 5 Del 4, «faste tidsplaner gjenskaper scenario 2 og 5» 0

simulate_soc har ingen utskrevet grensetilfelle. forlop.py kontrollerer sin egen kopi mot simulate_endo i hver kjøring (bit for bit, se over). Den som endrer kjernen, kjører kontrollene på nytt og ser at avvikene fortsatt er 0 eller på avrundingsnivå, og at de 22 datafilene er byte-like med mindre endringen skal endre resultatene. kjor.py kontroll gjør dette og mer: den måler kjernen og fasiten mot notatets sjekksummer, kjører diagnosen, forløpet, hele sim.py, grensetilfellene i utvidelsene og scenariokjøreren, og sier hvilke av notatets resultater som har flyttet seg.