diff --git a/research/t74-k554-root-enclosure/INPUTS.json b/research/t74-k554-root-enclosure/INPUTS.json new file mode 100644 index 0000000000..51fd7b007c --- /dev/null +++ b/research/t74-k554-root-enclosure/INPUTS.json @@ -0,0 +1,110 @@ +{ + "m": 73, + "schema_version": 1, + "sources": { + "pr1672": { + "complex_lower": "4199387390313861303339177484801756442495778596256450738650818800407/2500000000000000000000000000000000000000000000000000000000000000000000", + "conservative_complex_lower": "8398774766397181318443389806932001359929734105781555583223880640081/5000000000000000000000000000000000000000000000000000000000000000000000", + "git_blob": "bcff1fe102ce25b852011497a00949461d14e6d7", + "global_profile": { + "1": 1560432, + "2": 336336, + "3": 278724, + "4": 84912, + "48": 22748, + "5": 54612, + "8": 5328 + }, + "grid_digits": 70, + "head": "b8ab040dbb7638e79249e763c60e877765d9d3b7", + "headline_kappa": "1676938111022438771190100017020725032555691674761792047536039179/1000000000000000000000000000000000000000000000000000000000000000000", + "headline_kappa_field": "expected/kappa", + "headline_kappa_file_sha256": "41d7bd51c18eb354c6a785780ddefd35b3a8e2513daa2c4f585b236b7173e943", + "headline_kappa_git_blob": "bcff1fe102ce25b852011497a00949461d14e6d7", + "headline_kappa_path": "research/gmx-t74-k554-signed-001/new/SPEC.json", + "idle_remainder_profile": { + "48": 22748 + }, + "live": 66304, + "path": "research/gmx-t74-k554-signed-001/new/SPEC.json", + "pr": 1672, + "provider_counts": { + "extra": 417, + "gauge44": 249 + }, + "provider_profiles": { + "extra": { + "1": 2340, + "2": 508, + "3": 420, + "4": 126, + "5": 82, + "8": 8 + }, + "gauge44": { + "1": 2348, + "2": 500, + "3": 416, + "4": 130, + "5": 82, + "8": 8 + } + }, + "rank_mass": 4816512, + "sha256": "41d7bd51c18eb354c6a785780ddefd35b3a8e2513daa2c4f585b236b7173e943", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/1672" + }, + "pr1928": { + "complex_lower": "4199387390313861303339177484801756442495778596256450738650818800407161370650814097065764140332111580686128292271465552430176120300413530356928251591732391789337406318476557319287113545248884390842781188897034941960351382596686394704891404699501723135428049418718709236689232642456972306893298138914016713916029313096124127498349567689288209285675394264405773065096529429889138443753536630341365777202964367293952006284101364919632027004202417140334946440407359480806706205382471332309529997347153499308695666280598334352564126733684028617175006317596195963358468687821234989075390704678967144481067158929163665322575074104251551468436525198493266367963405558211577236366279856155138405758415028171860389629684460568438938575596135666642096617361931137649634959375002590037835878229166925877299515512076672181135485425969246728703697800388572944633609228814798794897303100114766994317461300286336908383880867484657055360136170530732119107433714361625801180761032481107204367781125062409838871993838107992237197688318951986389267529871358467684229598049849896585054605803804615376748506250708057816621302164546852401275921847903462666493075404731261566958669733064256956047483421406839863512515077235200221774435200742906320157186181276834168664935117850503249499844360472940224102353281961229096783562793266787360387468195765528099501799028121309826739256725881902234129852894255556257626432656527318277816393475391060773169803922858227906624301870922743838440806516173639281795716263773736121503014399720122573701068039995571242893633795411062574201278855590581353222715573097402423154193337124594849707436508968350774844945886714377322099220471529078173801513349323699203422357954353629566725216978039268884253229083600882147735736727714278944440329769912903664501631414738663977751829543415757273896103320824883372940083947599836709309821974867483874483708080315521307141907095505163124000494820677390762107795042346086559707824883489162978463818020768546232380539136131184078318934026776929007570783180157041058730655580772360350477417155455725411517476366926203997535888530859817928359109582166253365858168675526409412168308901134943209024456971511758070515477303477791151326788983528711183117345492893302402536492328128852609478219893871863378345394594641715095146849392733422633297991949790963235449843976518181982704597991474716087104673238550821404146793411121937328291937801300314746066205218735578385965841804760314744574053848250288963111523380747939304034134618855879667993215066824566928946697590128972405821669834972317104282698757633735332227474205323509046105510505504970697989673128989928012815698107900519784434458240308770271295650039403330119682617785301824405382789814855953958285087943816673312559106160227380179223989623939684423134855656446205255439853646406980213203751523001766470949598536839593068004246537521824590722055729501737292625682040083759492969228294050485704322429331644863566729244718227447791896362652612770205111697869801880470814636196325020053597099014470300558577975762427939030052341308031508785646888869587802549033859868213137861823482525227008919236609029927970784135447888020129280271984793970945825455465161891067076151649732510116168917699165594388908008808984553113896800426719620994868672764585408879136518431691127083217572596661366797102529726164872591419884275781792264173892205873358798461252740758010470197765110179370219549107015604470034285388360251919224102475399263708782773521906783496260251655720862970485814519983033008799843217749551945685998406829184874575977061102991960623773658953390017348784399412598769648266525348379830502259306574470325617954637355581493493489994195539087198526207733567026094341178190461336749489668064798718125500398796489783011560901644035253354568113257775695734329915105768015171125469183580889154715794614308203339449432922055178215657502785364205684398146237366919558291434254479264317558788782593455718721955477030003418048235993285390626650120629810753601690944622998614784327755807413800019445902151206710698737556282968390763434300384095074516777362911552311717328599202639408489043379482811617090774977361194851786453545491045254679801384167386672428051063382545760332934137531220353414212464154493504211877766884083820737682916983604349397058845628059745659363477769097311890180800143710708408844355994120929281650497793137550126919959028125992856848917581977036958396979245117850638289922941155826861082780358234001118944481130580140953020859651533833824570926237187495713385397881329802813876175958019945215431203316729630112034579552037463570861152474312382855873343891454490713374791735057695897168786521623335204396008753517006316885458893275937522422900530827404057191699860579255488868181670683453172327795515304505068922925240548164434591293377027656929883387668827090676987824325697813474776615945193772298662804964748806775169653932924052713648509483232835221043267290265993152684034375192014563325422276867268299893459092719320802615340866232916075393958473572083545943207575432060022848111436138064620128838178056133806103293342390702232062099502053313425694371349849122118480953197753726950116585631496932804206410792173415181691404296978156432804064408780358199186968191270662160545355644364449092166313237462170816017793926915700221930711756229619235052897159483300455318214231288406288244259466648976609760667849427744034654198918368408300466504993873512332829882550965521074408663858302636384679419632657857653817936339523598698436823722460045251668037946110909669575159704466499182941960929367634598258445104635313582696448835819974062156484375258516748570140225593684613566412962034945296750984635032939797264841852362604193683277258599148582688209532922149097419021094269825056669995399206358140960621862691618249033695140151855923800825041582702307069562417333546048768834876002748058345704832515336114620474444565915248135378180275971046289902567973356890967966662988255890438271276272402667855682490876177611166040349055052899398349827817754062408130322053629799093239719997101148538327333701325681251724358954431895505553619718443492634161284479146340008440234365643841603523718509868200875709087408061259275360466516228619945441757238701776293389161956276013734249595450500570770457648923589659573655858969361772639361131404772198738770563607884933947570212985279025468773925979564240034386320299251187554078046878940113616729923052107968874420180885697982457378473649182062772554148052852844135673836652766099117246671089582116734631264814872725649717283234621502350552572978146075137871428488548167398551128886397656843034432260086931311283788459545666526901171741325796530699195274342268882370580497618099263523425602338226213839741748523012565203301165779106447292325062879725344002442252250769410307888358184010781762103662326270179408701305559775413715223736905888023421823121038984056918824493519394576093388684749301671830994161122707968637678321701107161821385583357248450197068939401931835810293406141766290556649614383598620193557255930434759921929962997257257847594932519067135609633486903083300813952711924692672043942689867908341678451508787697016050780960735371777939458885885616934371118720388691893482805032448477786870751094998183606566899376953396463362070184159414652728931907562841168714413673732209746633543170558803795360839386215565549384886049603882823831073506574255324359487446959278727863727950683909322340138679478945663300671562492661389946848455558173582510171502547872686388586447971951439199033999014363186971984741435907318654417625116138738858253620421904648763843294657961720324468967626681878955223473351281498678422181133605816604429613865942645706754737633669022578963571766621062094077536551086423779523551458181262123904427854695505503766544993514788721181589254801875314178017834998019909232840861758247926860953297006059703757363575111288425705793120004283383682647688962370604980727473585379501562075793061423192622207388365400954992114071884632509754339953262167325256474581317489866650643442823225934999077162540871712908356142320097587253018719626286711128069856176345251685261430918577466576335386560620756478143624916906877148211962405569862921010576524654140347800318339335289635664438916047849971335770716489809773387318813691096809461097931201600364479014019363884412752604160121549614295304434386642341268754876965435689820936323407774325702113067709592064825473356830067768320547115793107870482211937342371879910961986514234655020127544630024606655081055261913630266564980386424519435491515166768614862261537602724463978725882545343080189929593530265907906017225810303855820903355005775771222632099162036249926512871572067783972723427072820121042778332040764932414555261257113247493590579363661363345058896613759215982167396845818219655493132592120763644508106270026734871356216484843199127116746932657839880618337484981264340159311410289933063403349075627254996115590005121977876321111367536858632081598730545989682583033891618667784335737705144707602072216995016079061471771204922627326814172117856349909850101700618011112015627719920583390314148358344099769991318375904662047605251112890719795538513809846802001341178232434690310780936404503470657601356757186274146191379605250107173793781443425239903970154558682081124860270944240318460183208400540227178281640054505152042086673329740953870556164895528555075003501477939454791521009645208996151996833381161687401890484295080583918887571802011326413659542726029523838418888274979650476900039733728958149305552184510722900920024910669615610350347662213871469103441810620634119446172697380141150993323637736704481221113654716708155459277107395347406152107895383071616835475106710768016614676439903197781582426823602654959590667424127727202306938583397846456966865928225406552387666089432554632799314773048249800279799616820328454412733997767545225085261175925709892062914178095693243560360904596075619666142035342389132990037568709634212514482127489954686811408310558649440474527970079146598032696161277880678462079474819602309813935113001067563887026077749458567/2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "conservative_complex_lower": "4199387383198590659221694903466000679964867052890777791611940320040577216545325511433990070978440295843879602022508203342113237163591124438876963163000102547453082740944422165655762977007805578302151289557389744545206537564992814001742274280932035224486617782747783526555321697748254379989884026379376969093993535110039926333616115618965811494630983804005113712690252559659865171730054486722554220297195763677456870991812500905099124149265551457166545457873388115990545170037377519394065028616772721090697434798076505747130810940623241428797518767224415188046798190898347613503413493938020903327417787270610903957277066508511088608153634491903733820605267068663864851248538122146113817320332186621404601248516710036559090624045407002421158170635966852669008477558212683107356694382008148603946962380631114864225005462032708139380361699568881691526270534081927043604267271226707171441066611448145041449701482346724384709442773819883857111232738101165759058906446669346116534573799591963399721426170606092341071130911054669695646796654938670503526119045803237662649194999989464059217971076310254385480263975558693043957865309227953625347590517811758504358551770095560847571166493402184336225138790156887541321455527687416579800348854651161557403605268663242971600008567182661127510370864092828921765713443084413267210125352377245006184401498311604592550894588661375574270036479210345160378158673637129073514259280887438262341548105773459971635218529127410272931291112664414107510910274412456488541646393983259381801327638317092431662529192726071572791407975189667643251537223637281211621172652513003411944966529717365405711032790615589348731488113431920002075931654887765291793352760874160467628178634171317132985047976577337207136529820482574094282912842501838979149309480139600788703811064859751954487586541197174697490920521999657138008374764356705297553128562674047583406787541690108006641435506069051578048736101036553294517306632427171203994367326769800698785979096116731925688132013205598158513120880838265505319616034820062338984169634021271389827042892541479779210340685845204021831427243469757506843574355782436013980578224807776329103248067912542611834453077091150686406512201079186468526965376284436453385149557531482243549361898853378974149204053865529706616025001567761534592781526795918917391527322793464853119422239075116908350288183456958967954993858853945275274708076174428505425274810876538865273627270649209652602743375113219437896854770548751793455065559667721553986100412771303719660825561377831942223246734476909488959597198011774531516286117436429677786740504395478635700663461502927753941671533626659855701034884075192552866035305942534384262168719212437988139319796508508470668461639774999331335936415332513620754883099097061122770453361585450293411723676378421973280829076940541077549223393554495356837853059369828222455084678396906555435936983779998958854558112736819876318175195831202958721720570141735772828411238680099562808329264975519422811132185947952335929983867567955031747358928455564389973440808462384158252274340431806595314413648650261691732521102609671238664661825306783176431254772061679465321411294841279063322339632379657849065451104996578317306129135351936997006187882302416072489442597834300903050752968308845127793547005538168426056778028231765734729891361056038952292365575002822959434545318340067048332304877057707001965806975321581862591104038267066270060738027243703562170962976893295863462533463831817987070607298331899805825127212466748086885048543222595538197777393731288946715243774784408492695967837606418432703755079400095745462165311000882416668686620383805558755759373357221791077295824162078606533118270188993183741059412316115211591748007119417961183899442767960149151323483764853226816633821373354226548974064713950126219795850657291867459300941260118832213959623652749213658713251547684373026753056042185934482974143266316941979594679963838644468109414130292198125495630416550470070862983505205432289908106378832851148510391208394994933525750355580675965247151544023660238082050050953286939488755260159399225379964697313377509580852900506127462123304239738824589579399455765734577112533659904130903917467444668106317458258346057623285507376811488509717947720109984725177499027947966337488497367617052908966005991338052097906923072535333734495702351394568737943154173176524811871884064356210676625256078436531354273667623030613405887992997423509400972888781429065293144746706751776772338949839129400080678174968179055442087022898192710340984818304685693718841065290021673111172839234259907199698196040278577445252091637371830425954858481233134906076369738021376021532707242965651024169870930960919510367142377904275319563040134065536537266800618139415829942375615730293065262690100733238438574362856401968717648635497060885886166917243050281588442230005642232883255025704139757824839661020288473171705439232132391058117592636823689791001900628960377409562470816766523359672209293147165353513761228748422963705862221071601767899847745621998477674885917225723808527430382104957191627398061153193571226738250545331416462972475057706709437999632492063873030523205016913017534863002410388282950906001438644172126352209578661605820908023561060699777919481970642476874545202323224764238249700392698136345470727367833928560302876578037596281266538393982779255988812173107752286891105481684782976249405923582247977334900594485513388159144225967951830827936229517114427317798619541091509112621794443169732259520070929129590183867312785554319508643912553304731035508689648184035958299456817911341290805476634880198928353555315256895933951631668261991478491410511628194210225314596513455648283348576921965810474111475677729302175266650410874289370338963423319546107483909556179602066029370868281583710769538538249769277900480443455922899687301123806835521552559812745288306957582253997029671852120717667628888033210328869183951091694327081059970466162350185717645869897119449123079651033215271166930583733280543755478048702719870972096797551204026543019733696702243590500761927248955699650151644831880790835933757409619765890936820001399844804229295941351325043872079505474448529055989417317857011643383931088265419549782083547094762905147539932051628244643163140527260026855758457524511110579755104684542090223585290019602625408480513598391990940213749867285056799040384395855526241167670469299161345682599741323267694657218780556492403645874998183969737869297055616908480136055699361315284299007280480848350903545549767357999254497368701958760230719101229148909957336000706051819830685165612972361598273368610176946244452463874918789869835265825112930434190942061848673732129997448694619668994271839275797787667034312982665770376792520322557274427987447698748933954670958810098199419248718545295332611280652134652087833139011803668710523920923996897348685327030618636983102197713687792876506346400281619104977755239050927023590478811777622850287749163170879817323979147444698931166418211142838371947504584842707930892814282419228208634509636343854142669891590832170946986392649146522603917836274247892264928952777844554585580746060806970405297032561838329945975450814455175837056961236403751544772149406333449234538665521168684015698108532438073692529102959058009242143325169970911494204107325481278825982934710043038957449420544712871421507152728333252940539557373585956178913862280270953560646216007153826398717553071555019907760642198703724469011010772705290328224983763594939957811439643309597907310230333832733220550453468248042681295047550594193222030613062423634713083101570832932778619784106457624763601732124186591299869667207125421962475847960425646585792436972731036657053150919931547563605059050645219062364297221790987026977083142070817158241292269019613571088753338202164229527551118862540995480492086599141910860914741227841637390642001926451993405476043321399102232486632558837941455590187663737951229515963724701430519079510568509399532488528629989449798035720045703531748872093512736444171176603991746728262050757066687748886903254596829865399452958413081231807316886143207673783274864691789585687721745344093646127951247914301294222211654120553017435564222620774817525404322564922470363963994844890660045303321202378117515360985832484721351448301372924004430303640699435079269666363458960323625073011907432231801245472325623715460529601575070337772205948499673713427790208558071619900947146239212305935262783425480038300263848473917568298399335014864678325634093354264763619161137410771171684981015037070723654849197841834831274532195649818059823405345806710600882582982734397400943715983787574569744843553726790240806896449181178260704879365588499359936798426327817162004328850935009204334731738201939947121524976825908758939339257495889567904988256796459362220122324156485341004419772792245798823548747168460625127267557036118768154467754399688704631703265570859948387872543702450154043483768714583300137500284890280108219832857787454419751863530439104573643080620280476047714364251765377280560848754756411440512898117545300806893547220324526847665416966022116492710946309321647442462144577288276035018961797160701038498055775225616762844248270759355344160092901837596780432518677087529672217413422347367919913433492332194049164900846297349547534150129731019871513097615546524692982313078146400672310925159512976624613345936091070414609877995812318474074787160795589229356631917486054123280906794145049738638860468544576190912166053557379838453853295921434376060539546216775360669241762020120848260491518480445255944122282398509409732873519991803533092094069018191732754216172552409387123130763183664601014979900532653263444553511911604045582701178187472433624258239495259020627975758634212936589009347462499786450173650640811649447494375490618628257903156797440163241325117217989035891580876057542957899888213570352866392988571041296186860648384422064355629860973057662624034476205260118164671030201017094549481709380170252495112180324567247898875931062286169456674017088570250533669999113821365411906166465271687942692509533/2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "git_blob": "c9654f8232b5deb3678213c6d4b0ba1eb7482e5c", + "global_profile": { + "1": 1560432, + "2": 336336, + "3": 278724, + "4": 84912, + "48": 22748, + "5": 54612, + "8": 5328 + }, + "grid_digits": 10000, + "head": "07e4e4231459e36b1055396306dcbd950248df62", + "headline_kappa": "83987747806277226066783549696035128849915571925129014773016376008143227413016281941315282806642231613722565845429311048603522406008270607138565031834647835786748126369531146385742270904977687816855623777940698839207027651933727894097828093990034462708560988374374184733784652849139446137865962778280334278320586261922482549966991353785764185713507885288115461301930588597782768875070732606827315544059287345879040125682027298392640540084048342806698928808147189616134124107649426646190599946943069986173913325611966687051282534673680572343500126351923919267169373756424699781507814093579342889621343178583273306451501482085031029368730503969865327359268111164231544727325597123102768115168300563437207792593689211368778771511922713332841932347238622752992699187500051800756717564583338517545990310241533443622709708519384934574073956007771458892672184576295975897946062002295339886349226005726738167677617349693141107202723410614642382148674287232516023615220649622144087355622501248196777439876762159844743953766379039727785350597427169353684591960996997931701092116076092307534970125014161156332426043290937048025518436958069253329861508094625231339173394661285139120949668428136797270250301544704004435488704014858126403143723625536683373298702357010064989996887209458804482047065639224581935671255865335747207749363915310561990035980562426196534785134517638044682597057885111125152528653130546365556327869507821215463396078457164558132486037418454876768816130323472785635914325275474722430060287994402451474021360799911424857872675908221251484025577111811627064454311461948048463083866742491896994148730179367015496898917734287546441984409430581563476030266986473984068447159087072591334504339560785377685064581672017642954714734554285578888806595398258073290032628294773279555036590868315145477922066416497667458801678951996734186196439497349677489674161606310426142838141910103262480009896413547815242155900846921731194156497669783259569276360415370924647610782722623681566378680535538580151415663603140821174613111615447207009548343109114508230349527338524079950717770617196358567182191643325067317163373510528188243366178022698864180489139430235161410309546069555823026535779670574223662346909857866048050729846562577052189564397877437267566907891892834301902936987854668452665959838995819264708996879530363639654091959829494321742093464771016428082935868222438746565838756026006294921324104374711567719316836095206294891481076965005779262230467614958786080682692377117593359864301336491338578933951802579448116433396699446342085653975152674706644549484106470180922110210110099413959793462579798560256313962158010395688689164806175405425913000788066602393652355706036488107655796297119079165701758876333466251182123204547603584479792478793688462697113128924105108797072928139604264075030460035329418991970736791861360084930750436491814441114590034745852513640801675189859384565881009714086448586632897271334584894364548955837927253052255404102233957396037609416292723926500401071941980289406011171559515248558780601046826160630175712937777391756050980677197364262757236469650504540178384732180598559415682708957760402585605439695879418916509109303237821341523032994650202323378353983311887778160176179691062277936008534392419897373455291708177582730368633822541664351451933227335942050594523297451828397685515635845283477844117467175969225054815160209403955302203587404390982140312089400685707767205038384482049507985274175655470438135669925205033114417259409716290399660660175996864354991038913719968136583697491519541222059839212475473179067800346975687988251975392965330506967596610045186131489406512359092747111629869869799883910781743970524154671340521886823563809226734989793361295974362510007975929795660231218032880705067091362265155513914686598302115360303422509383671617783094315892286164066788988658441103564313150055707284113687962924747338391165828685089585286351175775651869114374439109540600068360964719865707812533002412596215072033818892459972295686555116148276000388918043024134213974751125659367815268686007681901490335547258231046234346571984052788169780867589656232341815499547223897035729070909820905093596027683347733448561021267650915206658682750624407068284249283089870084237555337681676414753658339672086987941176912561194913187269555381946237803616002874214168176887119882418585633009955862751002538399180562519857136978351639540739167939584902357012765798458823116537221655607164680022378889622611602819060417193030676676491418524743749914267707957626596056277523519160398904308624066334592602240691591040749271417223049486247657117466877829089814267495834701153917943375730432466704087920175070340126337709177865518750448458010616548081143833997211585109777363633413669063446555910306090101378458504810963288691825867540553138597667753376541813539756486513956269495532318903875445973256099294976135503393078658481054272970189664656704420865345805319863053680687503840291266508445537345365997869181854386416052306817324658321507879169471441670918864151508641200456962228722761292402576763561122676122065866847814044641241990041066268513887426996982442369619063955074539002331712629938656084128215843468303633828085939563128656081288175607163983739363825413243210907112887288981843326264749243416320355878538314004438614235124592384701057943189666009106364284625768125764885189332979532195213356988554880693083978367368166009330099877470246656597651019310421488173277166052727693588392653157153076358726790471973968736474449200905033360758922218193391503194089329983658839218587352691965168902092706271653928976716399481243129687505170334971402804511873692271328259240698905935019692700658795945296837047252083873665545171982971653764190658442981948380421885396501133399907984127162819212437253832364980673902803037118476016500831654046141391248346670920975376697520054961166914096650306722292409488891318304962707563605519420925798051359467137819359333259765117808765425525448053357113649817523552223320806981101057987966996556355081248162606441072595981864794399942022970766546674026513625034487179088637910111072394368869852683225689582926800168804687312876832070474370197364017514181748161225185507209330324572398908835144774035525867783239125520274684991909010011415409152978471793191473117179387235452787222628095443974775411272157698678951404259705580509375478519591284800687726405985023751081560937578802272334598461042159377488403617713959649147569472983641255451082961057056882713476733055321982344933421791642334692625296297454512994345664692430047011051459562921502757428569770963347971022577727953136860688645201738626225675769190913330538023434826515930613983905486845377647411609952361985270468512046764524276794834970460251304066023315582128945846501257594506880048845045015388206157767163680215635242073246525403588174026111195508274304474738117760468436462420779681138376489870387891521867773694986033436619883222454159372753566434022143236427711667144969003941378788038636716205868122835325811132992287671972403871145118608695198438599259945145156951898650381342712192669738061666016279054238493853440878853797358166833569030175753940321015619214707435558789177717712338687422374407773837869656100648969555737415021899963672131337987539067929267241403683188293054578638151256823374288273474644194932670863411176075907216787724311310987697720992077656476621470131485106487189748939185574557274559013678186446802773589578913266013431249853227798936969111163471650203430050957453727771728959439028783980679980287263739439694828718146373088352502322774777165072408438092975276865893159234406489379352533637579104469467025629973568443622672116332088592277318852914135094752673380451579271435332421241881550731021728475590471029163625242478088557093910110075330899870295774423631785096037506283560356699960398184656817235164958537219065940121194075147271502225768514115862400085667673652953779247412099614549471707590031241515861228463852444147767308019099842281437692650195086799065243346505129491626349797333012868856464518699981543250817434258167122846401951745060374392525734222561397123526905033705228618371549331526707731212415129562872498338137542964239248111397258420211530493082806956006366786705792713288778320956999426715414329796195467746376273821936189221958624032007289580280387277688255052083202430992285906088687732846825375097539308713796418726468155486514042261354191841296509467136601355366410942315862157409644238746847437598219239730284693100402550892600492133101621105238272605331299607728490388709830303335372297245230752054489279574517650906861603798591870605318158120344516206077116418067100115515424452641983240724998530257431441355679454468541456402420855566640815298648291105225142264949871811587273227266901177932275184319643347936916364393109862651842415272890162125400534697427124329696863982542334938653156797612366749699625286803186228205798661268066981512545099922311800102439557526422227350737172641631974610919793651660677832373355686714754102894152041444339900321581229435424098452546536283442357126998197002034012360222240312554398411667806282967166881995399826367518093240952105022257814395910770276196936040026823564648693806215618728090069413152027135143725482923827592105002143475875628868504798079403091173641622497205418884806369203664168010804543565632801090103040841733466594819077411123297910571101500070029558789095830420192904179923039936667623233748037809685901611678377751436040226528273190854520590476768377765499593009538000794674579162986111043690214458018400498213392312207006953244277429382068836212412682388923453947602823019866472754734089624422273094334163109185542147906948123042157907661432336709502134215360332293528798063955631648536472053099191813348482554544046138771667956929139337318564508131047753321788651092655986295460964996005595992336406569088254679955350904501705223518514197841258283561913864871207218091921512393322840706847782659800751374192684250289642549799093736228166211172988809490559401582931960653923225557613569241589496392046196278702260021351277740521554989171339999999998998320245043374455478664329006079297/50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "headline_kappa_field": "kappa_rational", + "headline_kappa_file_sha256": "d72b5053ceea907bfb23befc0b73024c8b03d5128ac95f9a50462827ff8d6c09", + "headline_kappa_git_blob": "881309466b325073e16e110a2e74a2fc117f82cb", + "headline_kappa_path": "research/capped-fusion-t74-k554/outer/OUTER-CLAIM.json", + "idle_remainder_profile": { + "48": 22748 + }, + "live": 66304, + "path": "research/capped-fusion-t74-k554/new/SPEC.json", + "pr": 1928, + "provider_counts": { + "extra": 417, + "gauge44": 249 + }, + "provider_profiles": { + "extra": { + "1": 2340, + "2": 508, + "3": 420, + "4": 126, + "5": 82, + "8": 8 + }, + "gauge44": { + "1": 2348, + "2": 500, + "3": 416, + "4": 130, + "5": 82, + "8": 8 + } + }, + "rank_mass": 4816512, + "sha256": "75510fe5113baa42468c5835ebc9728bdc204acd6e07b898b3bc300e453d3443", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/1928" + } + } +} diff --git a/research/t74-k554-root-enclosure/README.md b/research/t74-k554-root-enclosure/README.md new file mode 100644 index 0000000000..dccf9230ba --- /dev/null +++ b/research/t74-k554-root-enclosure/README.md @@ -0,0 +1,78 @@ +# Independent enclosure of the pivot-566+554 T74 complex root + +**Independent verification of a pending supplier number. No new κ, no change to the selected record, and no check of the outer reduction.** + +The open claims from https://github.com/CrocSwap/integer-mult-bounds/pull/1800 to https://github.com/CrocSwap/integer-mult-bounds/pull/1928 all price the same pending complex supplier: the pivot-566 stack with the pivot-554 helper-donor kernel (lineage https://github.com/CrocSwap/integer-mult-bounds/pull/1625 and https://github.com/CrocSwap/integer-mult-bounds/pull/1672). At their "free ε → 1" point, κ approaches this supplier's complex moment root b. https://github.com/CrocSwap/integer-mult-bounds/pull/1928 takes b as its certified native endpoint minus 10^-10010. Up to now, the only certificates of that endpoint came from the authors' own engines. + +This package checks the endpoint with code that shares no algorithm with those engines. + +## Object + +Both pinned PR heads record the same data in `new/SPEC.json`: + +- global profile `{1:1560432, 2:336336, 3:278724, 4:84912, 5:54612, 8:5328, 48:22748}`, m = 73, live W = 66304; +- native and conservative endpoints on a 10^-70 grid (https://github.com/CrocSwap/integer-mult-bounds/pull/1672, head `b8ab040d`) and on a 10^-10000 grid (https://github.com/CrocSwap/integer-mult-bounds/pull/1928, head `07e4e423`). + +`extract_inputs.py` copies these fields, the two provider profiles, the provider counts, the idle remainder and each PR's headline κ into [INPUTS.json](INPUTS.json), with the Git blob and SHA-256 of each source file. With the pull refs fetched, `extract_inputs.py --check` rebuilds the file byte for byte. + +The moment definitions come from the repository's written review, not from code. The native moment is `sum_r H[r] (r/m)^(1-x) / W` ([native-complex-moment552/PROOF.md](../native-complex-moment552/PROOF.md)). The conservative model adds the inherited fallback of `32 m^2 N` rank-one children on a 10^-16 fraction, N = number of children ([three-stage-cover-assembly.tex](../../notes/three-stage-cover-assembly.tex), line 24). An endpoint e on a 10^-d grid is certified when M(e) < 1 < M(e + 10^-d). + +## Method + +`verify.py` uses only the standard library and imports nothing from the repository or from either PR. + +- **Logs.** Write A = ln(16/15), B = ln(25/24), C = ln(81/80); each is 2 atanh(1/31), 2 atanh(1/49) or 2 atanh(1/161). Then ln 2 = 7A + 5B + 3C, ln 3 = 11A + 8B + 5C and ln 5 = 16A + 12B + 7C. The verifier checks these identities exactly from the prime factorizations. ln 73 = 3 ln 2 + 2 ln 3 + 2 atanh(1/145). Every rank here is 5-smooth, so each ln(73/r) is a nonnegative integer combination of four atanh series. +- **Exp.** Halve the argument s times, sum a Taylor polynomial with an explicit tail bound, then square s times. +- **Rounding.** Every quantity is an integer multiple of 2^-bits rounded outward. The final test compares two exact integers. A sign that the enclosure cannot decide counts as failure; precision is raised at most twice and never turns an undecided sign into a pass. + +The authors' engines use a Mercator series and binary range reduction with atanh((x-1)/(x+1)) (`code/fine_mercator.py`, `code/fine_moment.py`). Earlier independent audits used a prime-by-prime log chain (pending-claims-independent-pricing) or binary reduction (pr1407-complex-moment-audit-seed39). This package uses neither. + +## Result + +`PASS_T74_K554_ROOT_ENCLOSURE_INDEPENDENT`, about 15 s on Python 3.12. + +- **Brackets.** All four pass: native and conservative, at both grids. The 10^-70 cases decide at 360 bits and the 10^-10000 cases at 33,347 bits, without precision refinement. +- **Nesting.** For both models, the 10^-70 endpoint of https://github.com/CrocSwap/integer-mult-bounds/pull/1672 equals the 10^-70 floor of the 10^-10000 endpoint of https://github.com/CrocSwap/integer-mult-bounds/pull/1928. +- **Profile composition.** At both heads, 249 gauge44 calls and 417 extra calls with their recorded per-call profiles, plus 22,748 idle rank-48 children, sum to the global profile. Rank mass is 4,816,512 and the deficit is 73 × 66,304 − 4,816,512 = 23,680. +- **Headline κ.** The κ of https://github.com/CrocSwap/integer-mult-bounds/pull/1928 (`outer/OUTER-CLAIM.json`) lies 2.003 × 10^-10010 below the native endpoint, as its stated choice of b implies. The κ of https://github.com/CrocSwap/integer-mult-bounds/pull/1672 (`new/SPEC.json`, 47-inequality outer) lies 2.817 × 10^-6 below. +- **Controls.** All ten are rejected. At 10^-70: next grid point as endpoint, previous grid point as endpoint, one child moved from rank 1 to rank 2, m = 72, W − 1, conservative endpoint without the surcharge, native endpoint with the surcharge. At 10^-10000: the first two and the surcharge-omission control again. + +The optional `crosscheck_decimal.py` (about 4 to 5 minutes) repeats the 10^-10000 case with Python's `decimal` ln and exp at 10,060 digits. It finds all seven log values inside the enclosures and the same four signs. `decimal` rounds to nearest, so this corroborates the result but does not certify it. + +## Reproduce + +From the repository root: + +```sh +python3 scripts/research_package.py --package research/t74-k554-root-enclosure --check-only +python3.12 scripts/research_package.py --package research/t74-k554-root-enclosure +python3.12 -B research/t74-k554-root-enclosure/crosscheck_decimal.py # optional, slow +git fetch origin pull/1672/head pull/1928/head +python3 research/t74-k554-root-enclosure/extract_inputs.py --check # optional, needs the pull refs +``` + +`verify.py --write` regenerates [RESULT.json](RESULT.json); without it the run must reproduce the file byte for byte. + +## Scope + +This checks one number per model and grid, plus the arithmetic that composes the profile. The following are taken as given: + +- the global profile and the per-call provider profiles (no replay of words, owners or hosting); +- the moment model and the native, surcharge-free complex recurrence, from the review of CrocSwap/integer-mult-bounds#552 and CrocSwap/integer-mult-bounds#559; +- the outer reduction from b to κ, the fine source-prime padding and the ε → 1 transfer (see https://github.com/CrocSwap/integer-mult-bounds/pull/1797 for an audit of the CrocSwap/integer-mult-bounds#1786 lemmas on a different supplier); +- all inherited all-size/compiler, realization, hosting, precision/tape, exact-recovery, analytic and bit H1-H5 assumptions. + +It is a finite check of recorded endpoints, not a proof of any multiplication theorem. + +## Open next questions + +The structured list is in [TASK.json](TASK.json). + +1. **Outer ledger of https://github.com/CrocSwap/integer-mult-bounds/pull/1928.** Does `outer/LEDGER.json` follow from the endpoint certified here, checked by code that does not import `outer/*.py`? This package certifies b only. A first step is to re-derive the slack list from `outer/RETUNED-SLACKS.md` and the CrocSwap/integer-mult-bounds#1673 note and compare each slack exactly. Nothing blocks it. +2. **Profile against the emitted program.** Does the global profile equal the one emitted by the T74 hosted template and owner map? The seed78 emitted-ledger rebuild could be adapted to the two-provider layout (249 + 417 calls). The PR's template and owner archives are reproduced externally, so a maintainer replay capsule would make this cheap. + +## Credit + +Supplier construction: mdumitrean (https://github.com/CrocSwap/integer-mult-bounds/pull/1625, pivot-566 kernel), Jeremy Kothe (https://github.com/CrocSwap/integer-mult-bounds/pull/1672 and the refinement chain to https://github.com/CrocSwap/integer-mult-bounds/pull/1928), Rohan Arun (https://github.com/CrocSwap/integer-mult-bounds/pull/1319, T74 fill) and the lineage credited in those PRs. Outer: Vlado Vojdanovski (https://github.com/CrocSwap/integer-mult-bounds/pull/1673) and chafreaky (https://github.com/CrocSwap/integer-mult-bounds/pull/1786). The moment definitions are from the review of CrocSwap/integer-mult-bounds#552 and CrocSwap/integer-mult-bounds#559 and `notes/three-stage-cover-assembly.tex`. The audit pattern follows Sagar Thakrar's frontier1094-emitted-ledger-seed78 and the selected-suppliers-de-diagnostic and pr1407-complex-moment-audit-seed39 packages. + +Prepared by Aaron Wang, with help from opencode. New material is Apache-2.0. diff --git a/research/t74-k554-root-enclosure/RESULT.json b/research/t74-k554-root-enclosure/RESULT.json new file mode 100644 index 0000000000..4df6b640db --- /dev/null +++ b/research/t74-k554-root-enclosure/RESULT.json @@ -0,0 +1,84 @@ +{ + "brackets": { + "pr1672/conservative": { + "bits": 360, + "endpoint_side": -1, + "next_side": 1, + "on_grid": true, + "pass": true + }, + "pr1672/native": { + "bits": 360, + "endpoint_side": -1, + "next_side": 1, + "on_grid": true, + "pass": true + }, + "pr1928/conservative": { + "bits": 33347, + "endpoint_side": -1, + "next_side": 1, + "on_grid": true, + "pass": true + }, + "pr1928/native": { + "bits": 33347, + "endpoint_side": -1, + "next_side": 1, + "on_grid": true, + "pass": true + } + }, + "controls": { + "pr1672": { + "conservative_endpoint_without_surcharge": true, + "dimension_72": true, + "live_minus_one": true, + "native_endpoint_with_surcharge": true, + "next_grid_as_endpoint": true, + "one_child_rank1_to_rank2": true, + "previous_grid_as_endpoint": true + }, + "pr1928": { + "conservative_endpoint_without_surcharge": true, + "next_grid_as_endpoint": true, + "previous_grid_as_endpoint": true + } + }, + "headline_kappa_below_native_endpoint": { + "pr1672": { + "below": true, + "endpoint_minus_kappa": "2.816845103e-6" + }, + "pr1928": { + "below": true, + "endpoint_minus_kappa": "2.003359509e-10010" + } + }, + "inputs_sha256": "609c486efb1fe1e03ff2c84ba11085b231b9372e81fb2650bda821ce84e6e1ae", + "ledgers": { + "pr1672": { + "calls": 666, + "children": 2343092, + "deficit": 23680, + "rank_mass": 4816512 + }, + "pr1928": { + "calls": 666, + "children": 2343092, + "deficit": 23680, + "rank_mass": 4816512 + } + }, + "m": 73, + "nesting": { + "conservative": { + "coarse_equals_floor_of_fine": true + }, + "native": { + "coarse_equals_floor_of_fine": true + } + }, + "scope": "Native and conservative complex moment brackets and the profile composition only. The outer reduction that turns the endpoint into each headline kappa is not checked here.", + "status": "PASS_T74_K554_ROOT_ENCLOSURE_INDEPENDENT" +} diff --git a/research/t74-k554-root-enclosure/SOURCES.json b/research/t74-k554-root-enclosure/SOURCES.json new file mode 100644 index 0000000000..a9a8b3ccd7 --- /dev/null +++ b/research/t74-k554-root-enclosure/SOURCES.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "base_commit": "ae95f60feec79897b153dba6459bb3f9fd4d7b8e", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "ae6a99f28aa468649eb66a361e764d769363bf11", + "sha256": "10b9e340fd8e354a37a0c4813c90e5de1dd42044b5f6aca4a3fc5a42b685fa32" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "06c96f5579bb67ed1b86d334e78fbed7da6945f1", + "sha256": "6686ad58f1fbdbc87134a78901b60fd53a20d3984355e91defbbebc9e9fa8075" + }, + { + "path": "research/native-complex-moment552/PROOF.md", + "usage": "provenance", + "git_blob": "9adf304048b62c6db9250a611a8d4b0b60ed8276", + "sha256": "d5d498edc56fdef8c5798af7f5ec66948bd2f66c553b9efe366cdaab01bd3453" + }, + { + "path": "notes/three-stage-cover-assembly.tex", + "usage": "provenance", + "git_blob": "983ffb6ac8fb9117360cd0797c00c05dfa071c9d", + "sha256": "ccf34a6d37c4af14bebeab15be50ab204eb1caebe546385520050ec30089441d" + } + ] +} diff --git a/research/t74-k554-root-enclosure/TASK.json b/research/t74-k554-root-enclosure/TASK.json new file mode 100644 index 0000000000..66eccb0f9a --- /dev/null +++ b/research/t74-k554-root-enclosure/TASK.json @@ -0,0 +1,65 @@ +{ + "schema_version": 1, + "task_id": "independent-moment", + "priority_revision": 3, + "base_commit": "ae95f60feec79897b153dba6459bb3f9fd4d7b8e", + "original_card": { + "id": "independent-moment", + "question": "Can one selected pricing or assembly claim be checked by a genuinely independent exact implementation?", + "starting_points": [ + "certificates/selected-result.json" + ], + "methods": [ + "Reconstruct the rank ledger from original operations rather than trusting its aggregate.", + "Implement certified moment inequalities through a different exact enclosure method." + ], + "acceptance_gate": "Demonstrate independence, source binding, positive cases and semantic failure controls.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Record the selected certificate and complex_profile rather than taking a PR headline as input.", + "scope": "Positive control / source-bound orientation only; this is not a new construction or full cold replay." + }, + "first_experiment": "Recompute one small part of the ledger or one certified enclosure using an independent implementation.", + "bottleneck_link": "Independent pricing prevents unsupported frontier claims and can reveal genuine accounting slack.", + "allowed_variations": [ + "Reconstruct either a source ledger or a numeric enclosure with a different method." + ], + "scope_change_triggers": [ + "Importing the primary function and calling its output independent verification." + ], + "overlap_terms": [ + "independent moment", + "rank histogram", + "exact enclosure" + ] + }, + "scope_status": "changed", + "actual_scope": "Independent exact enclosure of the complex moment root of the pending pivot-566+554 T74 supplier (profile {1:1560432, 2:336336, 3:278724, 4:84912, 5:54612, 8:5328, 48:22748}, m=73, W=66304): native and conservative brackets at the 1e-70 endpoints of CrocSwap/integer-mult-bounds#1672 (head b8ab040d) and the 1e-10000 endpoints of CrocSwap/integer-mult-bounds#1928 (head 07e4e423), their nesting, the provider/idle profile composition, and the position of each PR's headline kappa below the native endpoint.", + "scope_change_reason": "The selected CrocSwap/integer-mult-bounds#1094 ledger, both moment endpoints, invoice and outer slacks already have independent checks (frontier1094-emitted-ledger-seed78, selected-suppliers-de-diagnostic, pr1407-complex-moment-audit-seed39, CrocSwap/integer-mult-bounds#1735). The card's enclosure method is applied instead to the supplier root behind the highest open claims (CrocSwap/integer-mult-bounds#1800 through CrocSwap/integer-mult-bounds#1928), where kappa tends to this root at the free epsilon -> 1 point and no independent enclosure was found.", + "bottleneck_link": "Every pending claim from CrocSwap/integer-mult-bounds#1800 to CrocSwap/integer-mult-bounds#1928 takes this certified native endpoint as b; an error in it would propagate to all of them. This package checks that number by a code-disjoint method. It does not check the outer reduction, the construction or admission, and it does not change kappa.", + "budget_minutes": 120, + "stop_rule": "Stop when both models' brackets pass at both grids with all semantic controls rejected, or report the first bracket that fails or stays undecided at four times the default precision.", + "outcome": "completed", + "evidence": "RESULT.json: four brackets pass (1e-70 at 360 bits; 1e-10000 at 33347 bits, no refinement needed); the 1e-70 endpoints equal the 1e-70 floors of the 1e-10000 endpoints for both models; both PR heads' provider profiles (249 gauge44 + 417 extra calls) plus 22748 idle rank-48 children sum to the global profile, rank mass 4816512, deficit 23680; CrocSwap/integer-mult-bounds#1928's headline kappa is 2.003e-10010 below its native endpoint, CrocSwap/integer-mult-bounds#1672's is 2.817e-6 below. 10 semantic controls rejected. Optional crosscheck_decimal.py (decimal at 10060 digits) agrees on all 7 log enclosures and 4 signs.", + "author": "Aaron Wang", + "ai_assistance": "Substantial: prepared with help from opencode (agent harness) for analysis, code and packaging.", + "open_questions": [ + { + "question": "Does the capped/fine-padding outer ledger of CrocSwap/integer-mult-bounds#1928 (outer/LEDGER.json) follow from the endpoint certified here, checked by code that does not import outer/*.py?", + "why_it_matters": "This package certifies b only; the headline kappa also depends on the outer slacks and the epsilon -> 1 transfer.", + "first_step": "Re-derive the slack list from outer/RETUNED-SLACKS.md and the CrocSwap/integer-mult-bounds#1673 note, and compare each slack exactly with outer/LEDGER.json.", + "blocked_by": "None; CrocSwap/integer-mult-bounds#1797 covers the CrocSwap/integer-mult-bounds#1786 transfer lemmas on a different supplier, not this ledger." + }, + { + "question": "Does the global profile used here equal the profile emitted by the CrocSwap/integer-mult-bounds#1928 hosted template and owner map?", + "why_it_matters": "This package takes the SPEC.json global profile and provider profiles as data; frontier1094-emitted-ledger-seed78 shows how to rebuild such a profile from emitted programs.", + "first_step": "Adapt the seed78 emitted-ledger rebuild to the T74 two-provider layout (249 gauge44, 417 extra calls) on CrocSwap/integer-mult-bounds#1928's committed template.", + "blocked_by": "CrocSwap/integer-mult-bounds#1928's GLOBAL-TEMPLATE and OWNERS archives are reproduced externally; a maintainer replay capsule would make this cheap." + } + ] +} diff --git a/research/t74-k554-root-enclosure/VERIFY.json b/research/t74-k554-root-enclosure/VERIFY.json new file mode 100644 index 0000000000..feaba86d3d --- /dev/null +++ b/research/t74-k554-root-enclosure/VERIFY.json @@ -0,0 +1,27 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 300, + "checks": "INPUTS.json pin; exact log-identity check; profile composition for both PR heads; native and conservative brackets at 1e-70 (PR1672) and 1e-10000 (PR1928); nesting of the two grids; headline kappa below the native endpoint; 10 semantic controls rejected; RESULT.json byte-equal" + }, + { + "argv": [ + "{python}", + "-B", + "{package}/test_package.py" + ], + "timeout_seconds": 120, + "checks": "log and exp enclosures against float, fail-closed low precision, 1e-70 brackets, 7 controls, ledger control, input pin" + } + ] +} diff --git a/research/t74-k554-root-enclosure/crosscheck_decimal.py b/research/t74-k554-root-enclosure/crosscheck_decimal.py new file mode 100644 index 0000000000..e033e6a2f7 --- /dev/null +++ b/research/t74-k554-root-enclosure/crosscheck_decimal.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +"""Optional third implementation (about 4-5 minutes): Python's decimal ln/exp at 10,060 digits. + +Checks that decimal's ln(73/r) lies inside each verify.py log enclosure at the +PR1928 precision, and that decimal gives the same four moment signs. decimal +rounds to nearest, so this is corroboration, not a certificate; verify.py is +the certificate. Aaron Wang, with help from opencode. Apache-2.0. +""" +from decimal import Decimal, getcontext +from fractions import Fraction as Q +import verify as V + +getcontext().prec = 10060 +src = V.load_inputs()['sources']['pr1928'] +bits = V.default_bits(10000) +scale = Decimal(2) ** bits +for r, (lo, hi) in V.log_table(73, (1, 2, 3, 4, 5, 8, 48), bits).items(): + ln = (Decimal(73) / Decimal(r)).ln() + assert Decimal(lo) / scale <= ln <= Decimal(hi) / scale, r +prof = {int(r): int(n) for r, n in src['global_profile'].items()} +W, N = int(src['live']), sum(prof.values()) + + +def moment_minus_one(x, surcharge): + x = Decimal(x.numerator) / Decimal(x.denominator) + s = sum(Decimal(r * n) / Decimal(73 * W) * (x * (Decimal(73) / Decimal(r)).ln()).exp() for r, n in prof.items()) + if surcharge: + s += Decimal(32 * 73 * N) / (Decimal(10) ** 16 * W) * (x * Decimal(73).ln()).exp() + return s - 1 + + +g = Q(1, 10 ** 10000) +for field, surcharge in (('complex_lower', False), ('conservative_complex_lower', True)): + e = Q(src[field]) + assert moment_minus_one(e, surcharge) < 0 < moment_minus_one(e + g, surcharge), field +print('PASS_DECIMAL_CROSSCHECK | 7 log enclosures | 4 moment signs agree') diff --git a/research/t74-k554-root-enclosure/extract_inputs.py b/research/t74-k554-root-enclosure/extract_inputs.py new file mode 100644 index 0000000000..bb01edd488 --- /dev/null +++ b/research/t74-k554-root-enclosure/extract_inputs.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +"""Rebuild INPUTS.json from the two pinned PR heads (needs a fetched pull ref). + + git fetch origin pull/1672/head pull/1928/head + python3 research/t74-k554-root-enclosure/extract_inputs.py [--check] + +Reads only data fields of each package's new/SPEC.json. Imports nothing from +either package. Aaron Wang, with help from opencode. Apache-2.0. +""" +import argparse +import hashlib +import json +import subprocess +from pathlib import Path + +HERE = Path(__file__).resolve().parent +SOURCES = { + 'pr1672': dict(pr=1672, head='b8ab040dbb7638e79249e763c60e877765d9d3b7', + path='research/gmx-t74-k554-signed-001/new/SPEC.json', grid_digits=70, + kappa=('research/gmx-t74-k554-signed-001/new/SPEC.json', ('expected', 'kappa'))), + 'pr1928': dict(pr=1928, head='07e4e4231459e36b1055396306dcbd950248df62', + path='research/capped-fusion-t74-k554/new/SPEC.json', grid_digits=10000, + kappa=('research/capped-fusion-t74-k554/outer/OUTER-CLAIM.json', ('kappa_rational',))), +} + + +def git(*args): + return subprocess.run(['git', *args], check=True, capture_output=True, cwd=HERE).stdout + + +def build(): + out = dict(schema_version=1, m=73, sources={}) + for key, src in SOURCES.items(): + raw = git('show', src['head'] + ':' + src['path']) + spec = json.loads(raw) + exp = spec['expected'] + kpath, kkeys = src['kappa'] + kraw = git('show', src['head'] + ':' + kpath) + kappa = json.loads(kraw) + for k in kkeys: + kappa = kappa[k] + out['sources'][key] = dict( + headline_kappa=kappa, headline_kappa_path=kpath, headline_kappa_field='/'.join(kkeys), + headline_kappa_git_blob=git('rev-parse', src['head'] + ':' + kpath).decode().strip(), + headline_kappa_file_sha256=hashlib.sha256(kraw).hexdigest(), + pr=src['pr'], url='https://github.com/CrocSwap/integer-mult-bounds/pull/%d' % src['pr'], + head=src['head'], path=src['path'], + git_blob=git('rev-parse', src['head'] + ':' + src['path']).decode().strip(), + sha256=hashlib.sha256(raw).hexdigest(), grid_digits=src['grid_digits'], + live=exp['live'], rank_mass=exp['rank_mass'], global_profile=exp['global_profile'], + idle_remainder_profile=exp['idle_remainder_profile'], provider_counts=exp['provider_counts'], + provider_profiles={p: v['expected_profile'] for p, v in spec['providers'].items()}, + complex_lower=exp['complex_lower'], conservative_complex_lower=exp['conservative_complex_lower']) + return json.dumps(out, indent=1, sort_keys=True) + '\n' + + +if __name__ == '__main__': + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument('--check', action='store_true', help='compare with the committed INPUTS.json instead of writing') + a = ap.parse_args() + text = build() + if a.check: + assert (HERE / 'INPUTS.json').read_text(encoding='utf-8') == text, 'INPUTS.json differs from the pinned PR heads' + print('PASS_INPUTS_MATCH_PINNED_PR_HEADS') + else: + (HERE / 'INPUTS.json').write_text(text, encoding='utf-8', newline='\n') + print('wrote INPUTS.json') diff --git a/research/t74-k554-root-enclosure/test_package.py b/research/t74-k554-root-enclosure/test_package.py new file mode 100644 index 0000000000..e1695830a8 --- /dev/null +++ b/research/t74-k554-root-enclosure/test_package.py @@ -0,0 +1,73 @@ +"""Unit tests and semantic controls for the T74 k554 root enclosure. + +Aaron Wang, with help from opencode. Apache-2.0. +""" +from fractions import Fraction as Q +import math +import sys +import unittest +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) +import verify as V # noqa: E402 + +BITS = 400 + + +class Arithmetic(unittest.TestCase): + def test_log_identities(self): + V.check_log_identities() + + def test_logs_enclose_float(self): + logs = V.log_table(73, (1, 2, 3, 4, 5, 8, 48), BITS) + for r, (lo, hi) in logs.items(): + self.assertLess(lo, hi) + self.assertLess(hi - lo, 2 ** 16) # well inside the verifier's 128 guard bits + self.assertAlmostEqual(lo / 2 ** BITS, math.log(73 / r), places=14) + + def test_exp_encloses_float(self): + y = (Q(1, 137) * 2 ** BITS).__floor__() + lo, hi = V.exp_interval(y, y + 1, BITS) + self.assertLess(hi - lo, 2 ** 12) + self.assertAlmostEqual(lo / 2 ** BITS, math.exp(1 / 137), places=14) + + def test_fail_closed_on_low_precision(self): + src = V.load_inputs()['sources']['pr1672'] + self.assertEqual(V.side(src, Q(src['complex_lower']), False, 64), 0) + + +class Brackets(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.src = V.load_inputs()['sources']['pr1672'] + + def test_native_bracket(self): + self.assertTrue(V.bracket(self.src, False)['pass']) + + def test_conservative_bracket(self): + self.assertTrue(V.bracket(self.src, True)['pass']) + + def test_controls_rejected(self): + controls = V.controls(self.src) + self.assertEqual(len(controls), 7) + for name, rejected in controls.items(): + self.assertTrue(rejected, name) + + +class Ledger(unittest.TestCase): + def test_composition(self): + for src in V.load_inputs()['sources'].values(): + self.assertEqual(V.ledger(src)['deficit'], 23680) + + def test_composition_control(self): + src = dict(V.load_inputs()['sources']['pr1672']) + src['provider_counts'] = dict(src['provider_counts'], extra=416) + with self.assertRaises(ValueError): + V.ledger(src) + + def test_inputs_pinned(self): + V.check_inputs_pin() + + +if __name__ == '__main__': + unittest.main() diff --git a/research/t74-k554-root-enclosure/verify.py b/research/t74-k554-root-enclosure/verify.py new file mode 100644 index 0000000000..55481742f6 --- /dev/null +++ b/research/t74-k554-root-enclosure/verify.py @@ -0,0 +1,320 @@ +#!/usr/bin/env python3 +"""Independent exact enclosure of the pivot-566+554 T74 complex moment root. + +For a profile H, dimension m and live stock W, the native complex moment is + M(x) = sum_r H[r] (r/m)^(1-x) / W = sum_r (r H[r] / (m W)) * exp(x ln(m/r)) +(research/native-complex-moment552/PROOF.md). The conservative model adds the +inherited fallback 32 m^2 N / 10^16 children of rank one, N = sum_r H[r] +(notes/three-stage-cover-assembly.tex), i.e. 32 m N exp(x ln m) / (10^16 W). +An endpoint e on a 10^-d grid is certified when M(e) < 1 < M(e + 10^-d). + +Method, chosen to share no algorithm with the authors' engines (Mercator series +and binary range reduction with atanh((x-1)/(x+1))) or with earlier audits: + ln 2, ln 3, ln 5 are fixed integer combinations of A = ln(16/15), + B = ln(25/24), C = ln(81/80); ln 73 = ln 72 + ln(73/72); each ln(p/q) with + p - q = 1 is 2 atanh(1/(p+q)). exp uses argument halving, a Taylor + polynomial and repeated squaring. Every quantity is an integer multiple of + 2^-bits rounded outward, and the final comparisons are exact integer + comparisons. Inconclusive signs fail closed. + +Standard library only; imports and executes nothing from the repository or +from either source package. Aaron Wang, with help from opencode. Apache-2.0. +""" +import argparse +import hashlib +import json +import math +import sys +import time +from fractions import Fraction as Q +from pathlib import Path + +HERE = Path(__file__).resolve().parent +sys.set_int_max_str_digits(0) # the PR1928 endpoints have about 10,000 digits +INPUTS_SHA256 = '609c486efb1fe1e03ff2c84ba11085b231b9372e81fb2650bda821ce84e6e1ae' + +# ln(p/q) = 2 atanh(1/(p+q)) for these unit-gap ratios; exponent vectors over (2, 3, 5). +RATIOS = {'A': ((16, 15), (4, -1, -1)), 'B': ((25, 24), (-3, -1, 2)), 'C': ((81, 80), (-4, 4, -1))} +# ln p = sum coefficient * ratio log, for p = 2, 3, 5. +PRIME_LOGS = {2: (7, 5, 3), 3: (11, 8, 5), 5: (16, 12, 7)} + + +def require(ok, message): + if not ok: + raise ValueError(message) + + +def cdiv(a, b): + return -((-a) // b) + + +def check_log_identities(): + """Exact check that PRIME_LOGS inverts the exponent vectors of RATIOS.""" + for i, (p, coeff) in enumerate(PRIME_LOGS.items()): + vec = [sum(c * RATIOS[k][1][j] for c, k in zip(coeff, 'ABC')) for j in range(3)] + require(vec == [int(i == j) for j in range(3)], 'log identity for %d' % p) + for (num, den), vec in RATIOS.values(): + require(num - den == 1 and num * 2 ** max(0, -vec[0]) * 3 ** max(0, -vec[1]) * 5 ** max(0, -vec[2]) + == den * 2 ** max(0, vec[0]) * 3 ** max(0, vec[1]) * 5 ** max(0, vec[2]), 'ratio factorization') + + +def atanh_inv(k, bits): + """Integer interval [lo, hi] containing 2^bits * atanh(1/k), k >= 2.""" + one, k2 = 1 << bits, k * k + terms = int(bits / (2 * math.log2(k))) + 2 + plo, phi = one // k, cdiv(one, k) + lo = hi = 0 + for j in range(terms): + lo += plo // (2 * j + 1) + hi += cdiv(phi, 2 * j + 1) + plo, phi = plo // k2, cdiv(phi, k2) + # remaining terms: sum_{j>=terms} k^-(2j+1)/(2j+1) <= k^-(2 terms+1) * k^2/((2 terms+1)(k^2-1)); phi bounds 2^bits k^-(2 terms+1) + hi += cdiv(phi * k2, (2 * terms + 1) * (k2 - 1)) + return lo, hi + + +def combine(parts, coeffs): + lo = sum(c * (p[0] if c > 0 else p[1]) for p, c in zip(parts, coeffs)) + hi = sum(c * (p[1] if c > 0 else p[0]) for p, c in zip(parts, coeffs)) + return lo, hi + + +def factor235(n): + e = [] + for p in (2, 3, 5): + k = 0 + while n % p == 0: + n //= p + k += 1 + e.append(k) + require(n == 1, 'rank is not 5-smooth') + return e + + +def log_table(m, ranks, bits): + """Integer intervals for 2^bits ln(m/r); requires m = 73 (so m - 1 = 72 is 5-smooth).""" + require(m == 73, 'this enclosure is written for m = 73') + base = [tuple(2 * v for v in atanh_inv(num + den, bits)) for (num, den), _ in RATIOS.values()] + d73 = tuple(2 * v for v in atanh_inv(73 + 72, bits)) + out = {} + for r in ranks: + require(0 < r < m, 'child rank range') + e = [a - b for a, b in zip(factor235(72), factor235(r))] # 72/r over (2, 3, 5) + coeff = [sum(e[i] * PRIME_LOGS[p][j] for i, p in enumerate((2, 3, 5))) for j in range(3)] + lo, hi = combine(base, coeff) + out[r] = (lo + d73[0], hi + d73[1]) + return out + + +def exp_interval(ylo, yhi, bits): + """Integer interval containing 2^bits exp(y) for 2^bits y in [ylo, yhi], 0 <= y < 1/2.""" + one = 1 << bits + require(0 <= ylo <= yhi < one // 2, 'exp range') + s = int(math.isqrt(bits)) + 1 + guard = s + 32 + w = bits + guard + xlo, xhi = (ylo << guard) >> s, cdiv(yhi << guard, 1 << s) + W1 = 1 << w + slo = shi = tlo = thi = W1 + n = 0 + while True: + n += 1 + tlo = ((tlo * xlo) >> w) // n + thi = cdiv(cdiv(thi * xhi, W1), n) + slo += tlo + shi += thi + if thi <= 1: + break + shi += thi + 1 # tail after term n is at most term n since x/(n+1) <= 1/2 + for _ in range(s): + slo = (slo * slo) >> w + shi = cdiv(shi * shi, W1) + return slo >> guard, cdiv(shi, 1 << guard) + + +def scaled_product(x, lohi): + """Interval of 2^bits * x * L for exact x > 0 and L given by an integer interval.""" + return (x.numerator * lohi[0]) // x.denominator, cdiv(x.numerator * lohi[1], x.denominator) + + +def side(src, x, surcharge, bits, m=None, profile=None, live=None): + """-1 if M(x) < 1, +1 if M(x) > 1, 0 if the enclosure at this precision cannot decide.""" + m = m or 73 + profile = profile or {int(r): int(n) for r, n in src['global_profile'].items()} + live = live or int(src['live']) + logs = log_table(m, tuple(sorted(set(profile) | {1})), bits) + lo_sum = hi_sum = 0 + for r, n in profile.items(): + if r == m: + elo = ehi = 1 << bits + else: + elo, ehi = exp_interval(*scaled_product(x, logs[r]), bits) + lo_sum += r * n * elo + hi_sum += r * n * ehi + target = m * live << bits + if surcharge: + N = sum(profile.values()) + elo, ehi = exp_interval(*scaled_product(x, logs[1]), bits) + lo_sum, hi_sum, target = (10 ** 16 * lo_sum + 32 * m * m * N * elo, + 10 ** 16 * hi_sum + 32 * m * m * N * ehi, 10 ** 16 * target) + if hi_sum < target: + return -1 + if lo_sum > target: + return 1 + return 0 + + +def default_bits(digits): + return int(digits * math.log2(10)) + 128 + + +def bracket(src, surcharge, endpoint=None, bits=None, **model): + d = int(src['grid_digits']) + grid = Q(1, 10 ** d) + e = Q(endpoint if endpoint is not None else src['conservative_complex_lower' if surcharge else 'complex_lower']) + bits = bits or default_bits(d) + at, nxt = side(src, e, surcharge, bits, **model), side(src, e + grid, surcharge, bits, **model) + for _ in range(2): # refine only an undecided sign; never accept an undecided one + if at and nxt: + break + bits *= 2 + at, nxt = side(src, e, surcharge, bits, **model), side(src, e + grid, surcharge, bits, **model) + on_grid = (e * 10 ** d).denominator == 1 + return {'on_grid': on_grid, 'endpoint_side': at, 'next_side': nxt, 'bits': bits, + 'pass': on_grid and at == -1 and nxt == 1} + + +def ledger(src): + m, live = 73, int(src['live']) + total = {} + for p, cnt in src['provider_counts'].items(): + for r, n in src['provider_profiles'][p].items(): + total[int(r)] = total.get(int(r), 0) + int(cnt) * int(n) + for r, n in src['idle_remainder_profile'].items(): + total[int(r)] = total.get(int(r), 0) + int(n) + glob = {int(r): int(n) for r, n in src['global_profile'].items()} + require(total == glob, 'provider profiles and idle remainder do not sum to the global profile') + mass = sum(r * n for r, n in glob.items()) + require(mass == int(src['rank_mass']), 'rank mass') + require(max(glob) < m, 'child rank range') + return dict(calls=sum(int(c) for c in src['provider_counts'].values()), children=sum(glob.values()), + rank_mass=mass, deficit=m * live - mass) + + +def controls(src, names=None): + """Each semantic mutation must make the bracket fail; True means rejected.""" + d = int(src['grid_digits']) + g = Q(1, 10 ** d) + nat, con = Q(src['complex_lower']), Q(src['conservative_complex_lower']) + prof = {int(r): int(n) for r, n in src['global_profile'].items()} + moved = {**prof, 1: prof[1] - 1, 2: prof[2] + 1} + cases = { + 'next_grid_as_endpoint': lambda: bracket(src, False, endpoint=nat + g), + 'previous_grid_as_endpoint': lambda: bracket(src, False, endpoint=nat - g), + 'one_child_rank1_to_rank2': lambda: bracket(src, False, profile=moved), + 'dimension_72': lambda: _m72(src), + 'live_minus_one': lambda: bracket(src, False, live=int(src['live']) - 1), + 'conservative_endpoint_without_surcharge': lambda: bracket(src, False, endpoint=con), + 'native_endpoint_with_surcharge': lambda: bracket(src, True, endpoint=nat), + } + out = {} + for name, run in cases.items(): + if names is None or name in names: + out[name] = not run()['pass'] + return out + + +def _m72(src): + """m = 72 cannot use the m = 73 log table; evaluate it with ln(72/r) = ln(73/r) - ln(73/72).""" + d = int(src['grid_digits']) + bits = default_bits(d) + e, g = Q(src['complex_lower']), Q(1, 10 ** d) + prof = {int(r): int(n) for r, n in src['global_profile'].items()} + logs = log_table(73, tuple(sorted(set(prof) | {1})), bits) + d73 = tuple(2 * v for v in atanh_inv(145, bits)) + + def sgn(x): + lo_sum = hi_sum = 0 + for r, n in prof.items(): + l = (logs[r][0] - d73[1], logs[r][1] - d73[0]) + elo, ehi = exp_interval(*scaled_product(x, l), bits) + lo_sum += r * n * elo + hi_sum += r * n * ehi + t = 72 * int(src['live']) << bits + return -1 if hi_sum < t else (1 if lo_sum > t else 0) + return {'pass': sgn(e) == -1 and sgn(e + g) == 1} + + +def load_inputs(): + return json.loads((HERE / 'INPUTS.json').read_text(encoding='utf-8')) + + +def check_inputs_pin(): + require(hashlib.sha256((HERE / 'INPUTS.json').read_bytes()).hexdigest() == INPUTS_SHA256, 'INPUTS.json pin') + + +def run(): + check_inputs_pin() + check_log_identities() + inputs = load_inputs() + coarse, fine = inputs['sources']['pr1672'], inputs['sources']['pr1928'] + result = dict(status=None, inputs_sha256=INPUTS_SHA256, m=inputs['m'], ledgers={}, brackets={}, nesting={}, controls={}) + for key, src in inputs['sources'].items(): + result['ledgers'][key] = ledger(src) + for model, surcharge in (('native', False), ('conservative', True)): + b = bracket(src, surcharge) + result['brackets']['%s/%s' % (key, model)] = b + for model, field in (('native', 'complex_lower'), ('conservative', 'conservative_complex_lower')): + e70, e10k = Q(coarse[field]), Q(fine[field]) + floor70 = Q((e10k * 10 ** 70).__floor__(), 10 ** 70) + result['nesting'][model] = dict(coarse_equals_floor_of_fine=(floor70 == e70)) + result['controls']['pr1672'] = controls(coarse) + result['controls']['pr1928'] = controls(fine, ('next_grid_as_endpoint', 'previous_grid_as_endpoint', + 'conservative_endpoint_without_surcharge')) + result['headline_kappa_below_native_endpoint'] = { + key: dict(below=Q(src['headline_kappa']) < Q(src['complex_lower']), + endpoint_minus_kappa=_sci(Q(src['complex_lower']) - Q(src['headline_kappa']))) + for key, src in inputs['sources'].items()} + result['scope'] = ('Native and conservative complex moment brackets and the profile composition only. The outer ' + 'reduction that turns the endpoint into each headline kappa is not checked here.') + ok = (all(b['pass'] for b in result['brackets'].values()) and all(n['coarse_equals_floor_of_fine'] for n in result['nesting'].values()) + and all(all(c.values()) for c in result['controls'].values()) + and all(h['below'] for h in result['headline_kappa_below_native_endpoint'].values())) + require(ok, 'enclosure failed: ' + json.dumps(result, default=str)[:2000]) + result['status'] = 'PASS_T74_K554_ROOT_ENCLOSURE_INDEPENDENT' + return result + + +def _sci(x): + sign = '-' if x < 0 else '' + x = abs(x) + if x == 0: + return '0' + e = math.floor(math.log10(x.numerator) - math.log10(x.denominator)) + mant = x / Q(10) ** e + while mant >= 10: + mant, e = mant / 10, e + 1 + while mant < 1: + mant, e = mant * 10, e - 1 + return '%s%se%d' % (sign, str(Q((mant * 10 ** 9).__floor__(), 10 ** 9).__float__()), e) + + +def main(): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument('--write', action='store_true', help='rewrite RESULT.json instead of comparing with it') + a = ap.parse_args() + t0 = time.perf_counter() + result = run() + text = json.dumps(result, indent=1, sort_keys=True) + '\n' + path = HERE / 'RESULT.json' + if a.write: + path.write_text(text, encoding='utf-8', newline='\n') + else: + require(path.read_text(encoding='utf-8') == text, 'RESULT.json differs from this run') + n_ctl = sum(len(c) for c in result['controls'].values()) + print('%s | brackets %d | nesting %d | controls %d rejected | %.1f s' % ( + result['status'], len(result['brackets']), len(result['nesting']), n_ctl, time.perf_counter() - t0)) + + +if __name__ == '__main__': + main()