Research source · python

check_independent_store_reuse.py

tools/research/check_independent_store_reuse.py

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

File fingerprint

SHA-256: 17b79db388e1c0bb6066f4861dcd8fedee955a73250fa08d6bdabbeca73b8455

#!/usr/bin/env python3
"""Finite semantic audit of bounded per-source independent-store reuse.

The local producer is the separately audited scanned-omission oracle. This
checker independently compares grouped input, lane scheduling and final OR
with direct literal relation composition. Python maps, sets, copied snapshots
and numerical codes are semantic oracles, not a native execution or timing test.
"""
from copy import deepcopy
from random import Random
from collections import Counter
import json
from check_scanned_omission_reuse import Store


class Invalid(ValueError):
    pass


def word(value, width):
    return format(value, '0%db' % width)


def valid_word(value):
    return bool(value) and set(value) <= {'0', '1'}


def encode_store(name):
    if not valid_word(name):
        raise Invalid('store name')
    return ''.join('0' + bit for bit in name) + '11'


def split_middle(encoded):
    """Decode E(b)v, returning the ordinary store and alias spellings."""
    name, pos = [], 0
    while pos + 1 < len(encoded):
        pair = encoded[pos:pos + 2]
        pos += 2
        if pair == '11':
            alias = encoded[pos:]
            if not name or not valid_word(alias):
                raise Invalid('middle spelling')
            return ''.join(name), alias
        if pair not in ('00', '01'):
            raise Invalid('store encoding')
        name.append(pair[1])
    raise Invalid('unterminated store encoding')


class Joined:
    def __init__(self, k, p):
        self.k, self.p = k, p
        self.stores, self.relation, self.sources = {}, {}, {}
        self.current = None
        self.frozen = False
        self.selected = {}
        self.metrics = Counter()

    def right(self, b, v, w):
        assert not self.frozen
        if not all(valid_word(x) for x in (b, v, w)):
            raise Invalid('right spelling')
        assert split_middle(encode_store(b) + v) == (b, v)
        if b != self.current:
            if b in self.stores:
                raise Invalid('regroup')
            if self.current is not None and not self.stores[self.current].gate():
                raise Invalid('previous local final gate')
            self.stores[b] = Store(self.k, 1 << len(v), len(w), len(v))
            self.relation[b] = {}
            self.current = b
        store = self.stores[b]
        if len(v) != store.ell or len(w) != store.n:
            raise Invalid('right local width')
        store.step(int(v, 2), int(w, 2))
        self.relation[b].setdefault(v, set()).add(w)
        self.metrics['right_records'] += 1
        self.metrics['encoded_store_bits'] += len(encode_store(b))

    def freeze(self):
        if self.current is None or not self.stores[self.current].gate():
            raise Invalid('last local final gate')
        self.frozen = True
        # Local identical code values need not identify identical literals.
        code_owner = {}
        for b, store in self.stores.items():
            for code, target in store.inverse.items():
                literal = word(target, store.n)
                if code in code_owner and code_owner[code] != literal:
                    self.metrics['cross_store_code_collisions'] += 1
                code_owner[code] = literal

    def left(self, source, b, v):
        assert self.frozen
        if not valid_word(source):
            raise Invalid('source spelling')
        b, v = split_middle(encode_store(b) + v)
        if b not in self.stores:
            raise Invalid('unknown store')
        store = self.stores[b]
        if len(v) != store.ell:
            raise Invalid('left local width')
        lanes = self.sources.setdefault(source, {})
        if self.p is not None and b not in lanes and len(lanes) == self.p:
            raise Invalid('source dependency cap')
        before = deepcopy(lanes)
        lane = lanes.setdefault(b, dict(committed=None, pending=None))
        if lane['pending'] is not None:
            holes = store.holes(lane['pending'])
            lane['committed'] = holes if lane['committed'] is None else lane['committed'] & holes
            # This models service ownership, not an instruction count.
            assert store.m - store.d <= len(v)
            self.metrics['lane_jobs_completed'] += 1
        alias = int(v, 2)
        lane['pending'] = alias if alias in store.rows else None
        for other, old_lane in before.items():
            if other != b:
                assert lanes[other] == old_lane
                self.metrics['other_lanes_unchanged'] += 1
                if old_lane['pending'] is not None and self.stores[other].ell > len(v):
                    self.metrics['long_jobs_retained_across_short_aliases'] += 1
        self.selected.setdefault(source, []).append((b, v))
        self.metrics['left_records'] += 1
        self.metrics['encoded_store_bits'] += len(encode_store(b))

    def query(self, source, target):
        assert self.frozen and valid_word(target)
        found = False
        for b, lane in self.sources.get(source, {}).items():
            store = self.stores[b]
            if len(target) != store.n:
                continue
            t = int(target, 2)
            B = lane['committed']
            if B is not None and t in store.births and all(t != store.inverse[c] for c in B):
                found = True
            pending = lane['pending']
            if pending is not None:
                row = store.rows[pending]
                found |= t in row['R'] or t == row['p']
        literal_union = set()
        for b, v in self.selected.get(source, []):
            literal_union |= self.relation[b].get(v, set())
        assert (not found) == (target not in literal_union)
        self.metrics['negative_queries'] += 1
        return not found


class Routed(Joined):
    """Unbounded source lanes; a target's actual E(b) selects one lane."""
    def __init__(self, k):
        super().__init__(k, None)

    def right(self, b, v, encoded_target):
        target_store, local = split_middle(encoded_target)
        if target_store != b:
            raise Invalid('right target namespace mismatch')
        super().right(b, v, local)
        self.metrics['encoded_store_bits'] += len(encode_store(b))

    def query(self, source, encoded_target):
        b, target = split_middle(encoded_target)
        lane = self.sources.get(source, {}).get(b)
        found = False
        if lane is not None:
            store = self.stores[b]
            if len(target) == store.n:
                t = int(target, 2)
                B = lane['committed']
                found = B is not None and t in store.births and all(
                    t != store.inverse[c] for c in B)
                if lane['pending'] is not None:
                    row = store.rows[lane['pending']]
                    found |= t in row['R'] or t == row['p']
        literal_union = set()
        for selected_b, v in self.selected.get(source, []):
            if selected_b == b:
                literal_union |= self.relation[b].get(v, set())
        assert (not found) == (target not in literal_union)
        self.metrics['routed_negative_queries'] += 1
        return not found


def audit():
    total = Counter()
    def rejects(action, reason):
        try:
            action()
        except Invalid as error:
            assert str(error) == reason, (str(error), reason)
            total['rejections_checked'] += 1
        else:
            raise AssertionError('Expected rejection: ' + reason)
    for malformed in ('11' + '0', '10' + '110', '00', '0011', '00112'):
        try:
            split_middle(malformed)
        except Invalid:
            total['malformed_middle_checks'] += 1
        else:
            raise AssertionError(malformed)
    for k in (1, 2, 3):
        # Different widths, overlapping/disjoint supports, and identical local
        # code numbers with different meanings. There are more global stores
        # than any one source is allowed to mention.
        for seed in range(20):
            rng = Random(k * 100 + seed)
            joined = Joined(k, 3)
            specs = [('0', 12, 2), ('00', 1, 9), ('101', 3, 3),
                     ('1' * 25, 2, 2), ('1110', 3, 4)]
            for b, ell, n in specs:
                targets = list(range(min(1 << n, 6)))
                aliases = list(range(min(1 << ell, 3)))
                for a in aliases:
                    # Each row is locally dense but need not be globally dense.
                    omitted = {a % len(targets)} if a else set()
                    for t in targets:
                        if t not in omitted:
                            joined.right(b, word(a, ell), word(t, n))
                    joined.right(b, word(0, ell), word(0, n))
            joined.freeze()
            snapshots = []
            sources = ['0', '1', '00101']
            choices = {s: rng.sample(specs, 3) for s in sources}
            # Deterministic cross-width pending-job stress precedes randomness.
            for b, ell, _ in specs[:2] * 3:
                joined.left('111', b, word(0, ell))
            for _ in range(80):
                source = rng.choice(sources)
                b, ell, _ = rng.choice(choices[source])
                alias = rng.randrange(min(1 << ell, 4))
                joined.left(source, b, word(alias, ell))
                queries = {'0', '1', '00000', '1' * 13}
                queries |= {w for rows in joined.relation.values() for row in rows.values() for w in row}
                for q in queries:
                    joined.query(source, q)
                    joined.query('0101010101', q)
                if len(snapshots) < 4:
                    snapshots.append(deepcopy(joined))
            for old in snapshots:
                for s in sources + ['111']:
                    for q in ('0', '00', '000', '000000000', '11111'):
                        old.query(s, q)
                total['retained_join_snapshots'] += 1
            # Missing row still counts as a distinct store mention.
            cap = deepcopy(joined)
            for b, ell, _ in specs[:3]:
                cap.left('1111110', b, word((1 << ell) - 1, ell))
            rejects(lambda: cap.left('1111110', specs[3][0], '11'), 'source dependency cap')
            rejects(lambda: joined.left('0', '10101010101', '0'), 'unknown store')
            rejects(lambda: joined.left('0', '0', '0'), 'left local width')
            total.update(joined.metrics)
            total['histories'] += 1
        # One source selects far more than p=3 stores. Query routing, not
        # global OR, distinguishes equal local targets in different namespaces.
        routed = Routed(k)
        for index in range(17):
            b = word(index, 5)
            ell, n = (1 + index % 4), (1 + index % 5)
            for target in range(min(1 << n, 4)):
                routed.right(b, word(0, ell), encode_store(b) + word(target, n))
        routed.freeze()
        for index in range(17):
            b = word(index, 5)
            ell = 1 + index % 4
            routed.left('010', b, word(0, ell))
            routed.left('010', b, word(0, ell))
            for query_index in range(18):
                qb = word(query_index, 5)
                for q in ('0', '00', '000', '0000', '00000', '111111'):
                    routed.query('010', encode_store(qb) + q)
                    routed.query('0010', encode_store(qb) + q)
        assert len(routed.sources['010']) == 17
        total['routed_histories'] += 1
        total['routed_max_source_dependencies'] = max(
            total['routed_max_source_dependencies'], len(routed.sources['010']))
        total.update(routed.metrics)
        rejects(lambda: Routed(k).right('0', '0', encode_store('1') + '0'),
                'right target namespace mismatch')
        regroup = Joined(k, 1)
        regroup.right('0', '0', '0')
        regroup.right('1', '0', '1')
        rejects(lambda: regroup.right('0', '0', '0'), 'regroup')
        bad = Joined(k, 1)
        for t in range(k + 3):
            bad.right('0', '0', word(t, 4))
        bad.right('0', '1', '0000')
        rejects(bad.freeze, 'last local final gate')
        rejects(lambda: bad.right('1', '0', '0'), 'previous local final gate')
    for required in ('cross_store_code_collisions', 'long_jobs_retained_across_short_aliases',
                     'other_lanes_unchanged', 'lane_jobs_completed'):
        assert total[required] > 0
    return dict(total)


if __name__ == '__main__':
    print(json.dumps({'status': 'pass', 'scope': 'finite semantics and lane ownership; not native timing',
                      'checks': audit()}, indent=2, sort_keys=True))