Deterministic Fixed Point Arithmetic | Dweve Numerus

Numerus: deterministic fixed-point, decimal and integer arithmetic in Rust; same bits under a declared execution contract. Publishing in round two.

Registret över vad som hände, sparat så att det kan läsas tillbaka.

En SMT-lösare, med ett certifikat kopplat till svaret.

Regler som namngivna artefakter, med anledningen till att en kontroll misslyckades.

Välj det numeriska kontraktet före den första beräkningen, behåll resonemanget som följde med det, och ge den som frågar ett register som de kan köra om på sin egen maskin.

Det du får är summan gjord exakt, samma siffra överallt, och ett register över hur den nåddes.

Det är byggt i Europa, under europeiska regler, och dess källkod publiceras under Apache-2.0-villkor i den andra omgången av Dweves grundutgåvaprogram. Tillsynsmyndigheter och konsumentorgan kommer att kunna granska aritmetiken direkt, samma dag som den går live.

Huruvida en regel är rätt förblir en fråga för människor, och du har rätt att ta upp den. Det här ger dig något konkret att ta upp den med: en siffra som blir densamma när någon kontrollerar den, ett skriftligt register över hur den nåddes som inte vilar på någons minne, och en kontroll som säger om registret ändrades efteråt.

Om regeln som tillämpas på dig är orättvis, kommer detta att tillämpa den exakt, till öret, på alla, varje gång. Det gör inte regeln rättvis, och det kan inte se att regeln är orättvis. Allt det gör är att se till att siffran inte också är fel, vilket är ett mindre löfte än du hoppades på och ett som faktiskt hålls.

Inget av detta ändrar det enda du bör höra rakt.

Så det som når dig är en siffra med sin egen marginal bifogad, eller en tomhet där ett påhittat tal skulle ha stått. Var maskinen sitter spelar också roll, och mer än folk förväntar sig. Samma arbete utfört i Frankrike och i Tyskland ger mycket olika koldioxidsiffror, eftersom elen produceras på olika sätt.

Räkningen är inte perfekt, och programvaran säger det utan att bli tillfrågad. Jobb som är för små för att registreras lämnar inga spår alls. Samma jobb som körs två gånger kommer tillbaka lite olika beroende på hur varm maskinen var. På vissa hyrda datorer kan den inte se något, och den säger det istället för att gissa.

Datorer använder el för att tänka. Alla vet det, och ingen har någonsin kunnat berätta hur mycket av det som gick åt till ett visst jobb. Processorer håller en egen löpande räkning av den energi de har förbrukat, och den räkningen kan läsas. Så ett arbete kan komma tillbaka med elen det tog skriven bredvid sig, och där maskinen inte kan säga, med ingenting snarare än en gissning.

Den kan också svara på något ingen kunde fråga för några år sedan: vad summan kostade i el.

Och inget av det behöver ringa någonstans. Avläsningen, dosen, bromssträckan: siffran räknas ut där den mäts, så det finns ingen kopia av den på någon annans dator, och inget väntar på en anslutning. Det spelar större roll när numret handlar om din kropp än när det handlar om ditt vatten.

En mätare är billig delvis för att den inte kan hantera bråk alls, så den räknar i heltal. Det råkar vara samma räkning som ger ett identiskt svar på varje maskin. Så summan i ditt skåp är inte en grövre version av bankens summa för att lådan var liten. Det är samma summa.

Mätaren i ditt skåp bestämmer vad du är skyldig för vatten. En pump på en sjukhusavdelning bestämmer hur mycket av ett läkemedel som går in. En låda bakom en bils hjul bestämmer hur hårt den bromsar. Ingen övervakar någon av dem, och var och en gör samma slags aritmetik som en bank gör med dina pengar. Det kan göras till samma standard, och svaret behöver aldrig lämna rummet där det räknades ut.

en organisation som behöll arbetet kunde lämna över det samma eftermiddag

du ber om arbetsgången, och det är en normal sak att be om

och i varje fall arbetsgången, inte en sammanfattning av den

en offentlig myndighet, för ett beslut om dina pengar

din energileverantör, för en faktura du bestrider

din bank, för en siffra på ditt kontoutdrag

Gjort på det här sättet är svaret inte någons bästa minne. Siffrorna det utgick från sparades, liksom vad som gjordes med dem och i vilken ordning. Kör du det igen blir resultatet identiskt, inte ungefär likadant. Om posten ändrades däremellan syns det först, innan någon kör om något.

Du har förmodligen frågat och fått ett dåligt svar tillbaka. Någon slår upp den aktuella versionen av beräkningen, kör den på dagens siffror och säger att det stämmer ungefär. Ingen undviker att svara. Det som producerade din siffra förra våren finns inte längre, så det finns inget att peka på.

Inget av detta svarar på frågan som alla skulle ställa härnäst.

Förra mars kommer ut ur det nya systemet exakt som det kom ut ur det gamla, så deklarationen du lämnade gäller fortfarande och det finns ingen eftermiddag att förlora. Frågar du hur en siffra togs fram får du arbetsgången, inte en axelryckning. Du behöver inte heller lita på att arbetsgången lämnades orörd, för allt som ändrats efteråt syns.

Inget av svaret kommer från maskinen. Det finns ingen avrundning som går åt ett håll på en chip och ett annat på nästa, och inget genväg som en snabbare dator tar som en långsammare inte gör. Byt maskin och siffran rör sig inte, och inte heller formuläret du lämnade med den eller brevet som citerade den.

Någonstans bakom din bank, din energileverantör eller skattekontoret byts programvaran ut. Ingen berättar det för dig, och normalt skulle du inte bry dig. Du bryr dig den dag det nya systemet räknar ihop förra året och får ett annat svar, för formuläret du redan lämnat matchar inte längre systemet som producerade det, och den som måste förklara det är du.

En räkning betalas på en vecka. Pappersarbetet läses igen ett år senare.

Här skrivs avrundningspunkten ner en gång, innan något summeras, och varje kopia av din räkning följer den. Så det finns inget telefonsamtal, ingen spärr på kontot och inga tre veckor. Kopiorna stämmer för att de räknades ut på samma sätt, inte för att någon satte sig ner efteråt och fick dem att stämma.

Orsaken är mindre än den låter. Skatt kommer ut i bråkdelar av en cent, och någon måste bestämma var de bråkdelarna avrundas. Ett system avrundar på varje rad. Det andra avrundar en gång, på totalen. Båda är rimliga, och de kan skilja sig med en cent utan att något av dem är fel.

En räkning, tre kopior: kvittot i din hand, butikens kassa och din banks. Då och då slutar två av dem på olika cent. Inget stals och ingen var slarvig, och det är ändå du som tar telefonsamtalet och du som väntar tre veckor medan någon bestämmer vilken kopia som var rätt.

Tillräckligt litet för att ignorera, ända tills siffran är vad du är skyldig.

Detta räknar i heltal istället, som du skulle räkna mynt, så inget blir över och inget driver. Vad det ger dig är tråkigt och värt att ha. Din telefon, kortläsaren i butiken och en dator i ett annat land slutar alla på samma siffra, och den äldsta av de tre är inte mindre rätt än den nyaste.

En dator skriver en tiondel som du skulle skriva en tredjedel som decimal, det vill säga inte riktigt. För sig själv är gapet alldeles för litet för att se. Det förblir inte för sig själv: en räkning har rader, ett år har tolv räkningar, och vart och ett av dessa gap sitter fortfarande i totalen längst ner, som är siffran du ombeds betala.

Siffran du fick kom ur en maskin, och en annan maskin kan ha gett dig en något annorlunda. Fråga en dator om en tiondel plus två tiondelar och, om du får den att visa varje siffra den håller, slutar svaret med en förrymd fyra. Varje maskin gör det, så ingen märker det. Var och en städar undan den förrymda fyran på sitt eget sätt, och det är så en summa, beräknad här och beräknad i ett annat land, slutar på två olika ställen.

Vad du får är en siffra som svarar för sig själv, och ett beslut om den med ett datum på.

Certifieringspaketet inleder samtalet med en revisor, och det som avslutar det är din inlämning mot din egen produkt, som ingen kan ge dig. Och om ingen siffra som din organisation producerar någonsin måste försvaras inför någon utanför den, är det ärliga svaret att inget av detta är värt förändringen.

Energimätaren täcker ett operativsystem på en arkitektur, och på andra håll avtar den snarare än uppskattar. Att bevisa en egenskap kräver en extern lösare installerad, och utan den får du gränser och intervall, som är användbara men inte bevis.

Ingenting gör det. Den producerar bevis, och en människa bedömer bevis. Den håller ett dåligt valt numeriskt kontrakt med fullständig konsekvens och producerar en oklanderlig registrering av att ha gjort det, och registreringen är den användbara delen snarare än ett löfte om korrekthet, eftersom ett löfte inte kan kontrolleras och en registrering kan det.

Vad du fortfarande kommer att bli tillfrågad om

Och det är värt att vara lika tydlig med vad detta inte ger dig.

Ingen av dessa fyra är avstått. De gäller inte, vilket är en betydligt starkare position än ett avstående, och det är skillnaden mellan ett bibliotek och en tjänst utklädd till ett. Din releaseartefakt låser versionen och licensen, och en känd build kan behållas för en incident utan att fråga någon.

Inget behandlingsavtal för en beräkning, eftersom det inte finns någon processor. Ingen överföringsbedömning, eftersom ingenting lämnar. Ingen tillgänglighetsberoende av en leverantör, eftersom ingen slutpunkt av vår är på vägen. Och ingen version som anländer under dig på någon annans releaseschema, eftersom du bestämmer när du flyttar.