Research source · python

check_learned_width_cache.py

tools/research/check_learned_width_cache.py

249 lines. Source is displayed for inspection; it is not executed by this page.

File fingerprint

SHA-256: 2094fea839449b89b950fc42d7fcb1b5faba63dfc74da8052eae20cab9dc8de0

#!/usr/bin/env python3
"""Foreground165: independent width-dispatch, retained-mask and clock audits.

Small finite cases exercise the large-width algebra at reduced parameters;
they are not executions of the native theorem's separate small-width branch.
Python sets, array indices and object identity are semantic audit tools only.
"""
from collections import Counter
from itertools import product
from fractions import Fraction
import copy
import json
import random
import check_live_rank_transport as live
import check_cross_width_adoption as shared
import check_parity_cell_learning as learn


def replay_cache(widths,k):
    cache=[];seen=set()
    for n in widths:
        # Literal one-pop-per-actual-bit ruler test, not numeric selection.
        rulers={h:[None]*h for h in cache};under={h:False for h in cache}
        for _ in range(n):
            for h in cache:
                if rulers[h]:rulers[h].pop()
                else:under[h]=True
        matches=[h for h in cache if not under[h] and not rulers[h]]
        assert len(matches)<=1
        if matches:cache.remove(matches[0])
        else:
            if n in seen:return False
            if len(cache)==k:cache.pop(0)
            seen.add(n)
        cache.append(n)
    return True


def revisit(widths,k):
    for i,n in enumerate(widths):
        for j in range(i-1,-1,-1):
            if widths[j]==n:
                if len(set(widths[j+1:i]))>=k:return False
                break
    return True


def repair_extend(reader,n,newrows,r):
    # The sentinel's first and subsequent virtual columns have zero state.
    old=list(reader)
    while len(old)<n:old.append(((),(),(0,)*r))
    return shared.repair(old,n,newrows,r)


class Protocol:
    def __init__(self,r,k,counts,fixed_m=None):
        self.r=r;self.k=k;self.count=counts;self.fixed_m=fixed_m;self.cache=[];self.seen=set()
        self.active={};self.physical=[];self.reader=[];self.masks={};self.sets={}
        self.saved=[];self.group=live.invertibles(r);self.rejected=False
    def new_context(self):
        return {'rows':{},'state':((),live.identity(self.r)),'registered':{}}
    def step(self,n,key,x):
        if self.rejected:return
        # A candidate dictionary path is opened for every resident context
        # and the fresh empty context during the ordinary v spelling.
        proposals={};bits=[(x>>i)&1 for i in range(n)]
        for h in self.cache:
            context=self.active[h];row=context['rows'].get(key)
            if row and row['pending'] is not None:
                self.count['speculative_registration_jobs']+=1
                # Actual matching words supply exactly h symbols. Short
                # mismatches can stop a worker early; long ones finish/discard.
                self.count['speculative_service_units']+=min(n,h)
                if n>=h:
                    c=live.update(context['state'],context['registered'],key,
                                  row['pending'],h,self.r,self.group)
                    if c is not None:
                        state,registered,q,_=c
                        replacement=shared.physical(state,self.r)
                        reader=repair_extend(self.reader,h,replacement,self.r)
                        proposals[h]=(state,registered,q,reader,replacement)
                    else:proposals[h]=None
                if h!=n:self.count['discarded_registration_jobs']+=1
        matched=[h for h in self.cache if h==len(bits)]
        if not matched:
            if n in self.seen:
                self.count['reentry_rejections']+=1;self.rejected=True;return
            if len(self.cache)==self.k:
                victim=self.cache.pop(0)
                if not all(self.certified(row) for row in self.active[victim]['rows'].values()):
                    self.count['uncertified_eviction_rejections']+=1;self.rejected=True;return
                del self.active[victim];self.count['certified_evictions']+=1
            self.active[n]=self.new_context();self.seen.add(n)
            self.count['fresh_width_bootstraps']+=1
        else:self.cache.remove(n)
        self.cache.append(n)
        context=self.active[n]
        row=context['rows'].setdefault(key,{'points':set(),'candidate':None,
            'pending':None,'registered':None,'m':None})
        if n in proposals:
            proposal=proposals[n]
            if proposal is None or proposal[3] is None:
                self.count['rank_rejections']+=1;self.rejected=True;return
            state,registered,q,newreader,replacement=proposal
            oldregistered=context['registered']
            for oldkey,item in oldregistered.items():
                if oldkey!=key:assert registered[oldkey][1]==item[1]
            context['state']=state;context['registered']=registered
            row['registered']=row['pending'];row['pending']=None
            while len(self.physical)<n:self.physical.append((0,)*self.r)
            self.physical[n-1]=replacement
            for oldn in range(1,len(self.reader)+1):
                if oldn!=n:
                    for word in range(1<<oldn):
                        assert shared.query(newreader,word,oldn)==shared.query(self.reader,word,oldn)
                        self.count['other_width_preservation_queries']+=1
            self.reader=newreader
            self.masks[n]={v:item[1] for v,item in registered.items()}
            self.sets[n]={v:item[2] for v,item in registered.items()}
            self.count['committed_registrations']+=1
            self.count['nonidentity_transports']+=q!=live.identity(self.r)
        fresh=x not in row['points'];row['points'].add(x)
        B=1<<(n-self.r)
        if fresh:
            c=len(row['points'])
            tiers=[m for m in range(1,(1<<self.r)+1) if c==m*B-B//4+1 and (self.fixed_m is None or m==self.fixed_m)]
            if tiers:
                m=tiers[0];got,_,_=learn.recover(row['points'],n,self.r,m)
                row['candidate']=None if got is None else frozenset(got[0])
                row['pending']=row['candidate'];row['m']=m
                self.count['tier_events']+=1
        if row['candidate'] is not None and x not in row['candidate']:
            row['candidate']=None;row['pending']=None
        self.count['records']+=1
        if self.count['records']%97==0:
            self.saved.append((list(self.reader),copy.deepcopy(self.masks),copy.deepcopy(self.sets)))
        if self.count['records']%43==0:self.check(self.reader,self.masks,self.sets)
    def certified(self,row):
        return row['registered'] is not None and row['candidate']==row['registered'] \
            and row['points']==row['registered'] and row['pending'] is None
    def check(self,reader,masks,sets):
        for n,rows in masks.items():
            mask=0;literal=set()
            for key,g in rows.items():
                mask|=g;literal|=sets[n][key]
                for x in range(1<<n):
                    assert bool((g>>shared.query(reader,x,n))&1)==(x in sets[n][key])
                    self.count['row_queries']+=1
            for x in range(1<<n):
                assert bool((mask>>shared.query(reader,x,n))&1)==(x in literal)
                self.count['union_queries']+=1
    def finish(self):
        if self.rejected:return False
        if not all(self.certified(row) for c in self.active.values() for row in c['rows'].values()):
            self.count['final_certificate_rejections']+=1;return False
        self.check(self.reader,self.masks,self.sets)
        for reader,masks,sets in self.saved:
            self.check(reader,masks,sets);self.count['retained_versions']+=1
        self.count['accepted_histories']+=1;return True


def main():
    counts=Counter();rng=random.Random(165)
    for k in (1,2,3):
        for length in range(8):
            for widths in product((1,2,3,4),repeat=length):
                assert replay_cache(widths,k)==revisit(widths,k)
                counts['exact_revisit_histories']+=1
    # Unbounded-width pattern with shared future rank <=2. Reduced-width
    # spectral components are exact; native clock inequalities are separate.
    for known_density in (False,True):
        for k in (1,2,3):
            for trial in range(4):
                machine=Protocol(2,k,counts,3 if known_density else None)
                widths=list(range(6,10))
                if trial%2:widths.reverse()
                for j in range(0,len(widths),k):
                    queues=[]
                    for n in widths[j:j+k]:
                        bs=[1<<(n-2),1<<(n-1)]
                        for idx,mask in enumerate((7,11) if known_density else (7,10)):
                            points=sorted(learn.row(n,bs,mask));rng.shuffle(points)
                            q=[(n,'0'*6+str(idx),x) for x in points]
                            # Duplicate records have no distinct-count credit.
                            for _ in range(5):q.insert(rng.randrange(len(q)+1),rng.choice(q))
                            queues.append(q)
                    while any(queues):
                        q=rng.choice([q for q in queues if q]);machine.step(*q.pop(0))
                assert machine.finish()
                counts['known_density_histories' if known_density else 'hereditary_histories']+=1
                assert len(machine.seen)==4 and len(machine.cache)<=k
                counts['retired_width_queries']+=sum(1<<n for n in machine.seen if n not in machine.cache)
    # A fixed parallel tuple learns an unknown common density; all branches
    # read the same actual records and only validated roots may be selected.
    for actual_m in (1,2,3,4):
        records=[]
        for n in (6,7):
            bs=[1<<(n-2),1<<(n-1)]
            mask=(1<<actual_m)-1
            points=sorted(learn.row(n,bs,mask));rng.shuffle(points)
            records.extend((n,'0'*7,x) for x in points)
        accepted=[]
        for guess in (1,2,3,4):
            branch=Protocol(2,1,counts,guess)
            for record in records:branch.step(*record)
            if branch.finish():accepted.append(guess)
            counts['density_hypotheses_checked']+=1
        assert accepted==[actual_m]
        counts['unknown_common_density_cases']+=1
    # Ready masks do not excuse evicting an unfinished literal row.
    for k in (1,2,3):
        bad=Protocol(1,k,counts)
        for n in range(5,6+k):bad.step(n,'0'*6,0)
        assert bad.rejected
    # Input-derived intervals: arbitrary coefficient bits, many independent
    # full vectors, but at most one future prefix at every cut.
    for h in range(1,13):
        family=[];old=0;vectors=[]
        for i in range(h):
            n=2*(i+1);a=(rng.randrange(1,4)<<(2*i))
            while len(family)<n:family.append((0,))
            family[n-1]=(a,);vectors.append(a)
        bases,reader=shared.compile_vector(family)
        assert max(map(len,bases))==1 and len(live.basis(vectors))==h
        counts['independent_interval_families']+=1
    # The earliest raw prefix has unbounded rank, while every classifier
    # installed at the single known-density tier is already the final one.
    for n in range(4,10):
        r=2;B=1<<(n-r);bs=(1<<(n-2),1<<(n-1))
        for mask in (7,11,13,14):
            final=learn.row(n,bs,mask);order=sorted(final);rng.shuffle(order)
            assert len(live.minimal({order[0]},n))==n
            q=3*B-B//4+1
            candidate,_,_=learn.recover(set(order[:q]),n,r,3)
            assert candidate is not None and candidate[0]==final
            counts['known_density_raw_rank_witnesses']+=1
    # Exact rational inequalities: preparation/capture plus two full own
    # words (boundary alignment and registration) fit the distinct suffix.
    for r in range(1,9):
        for n in range(2*r+12,2*r+53):
            B=1<<(n-r);T=Fraction(n*B,256)
            delay=T+2*n+(T+2*n)/256+1
            assert delay < Fraction(n*B,64)
            assert delay+2*n < n*(Fraction(B,4)-1)
            counts['strict_horizon_inequalities']+=1
    print(json.dumps({'status':'passed',**counts},sort_keys=True))


if __name__=='__main__':main()