Research source · python

check_bounded_fringe_reuse.py

tools/research/check_bounded_fringe_reuse.py

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

File fingerprint

SHA-256: 4d81f59cb2b649b17edd185cd2ebb48b325c651f7860c6ca6026881ec12d7078

#!/usr/bin/env python3
"""Semantic audit for section 10 of name-funded-ball-reuse.md.

Integers, sets and tuples are oracles, not native operations. The written proof
charges unary gap stacks, width descents, fixed masks and persistent capsules.
The pending worker is imported from the maintained ball audit, not duplicated.
"""
from dataclasses import dataclass
from itertools import product
from random import Random
import json
from check_name_funded_ball_reuse import Receipt, record, step, B


@dataclass(frozen=True)
class Row:
    widths: frozenset = frozenset()
    maximum: int = 0
    gap: int = 0
    mask: tuple = ()  # offsets 1,...,b below the maximum


def insert_width(old, n, b):
    gap = old.gap
    window = [True] * b
    predecessors = window[:]
    for position in range(1, n + 1):
        predecessors = window[:]
        if b:
            window = (window + [position in old.widths])[-b:]
        if position > old.maximum:
            gap += 1
    fresh = n not in old.widths
    if fresh:
        assert gap > 0
        gap -= 1
    if n > old.maximum:
        mask = tuple(reversed(predecessors))
    else:
        mask = list(old.mask)
        distance = old.maximum - n
        if fresh and 1 <= distance <= b:
            mask[distance - 1] = True
        mask = tuple(mask)
    new = Row(old.widths | {n}, max(n, old.maximum), gap, mask)
    assert new.gap == new.maximum - len(new.widths)
    assert new.mask == tuple(new.maximum-j <= 0 or
                            new.maximum-j in new.widths
                            for j in range(1, b+1))
    valid = new.gap == sum(not bit for bit in new.mask)
    oracle = all(j in new.widths for j in range(1, new.maximum-b))
    assert valid == oracle
    return new


def profile(h, mask):
    return frozenset(j for j in range(1, h+1)
                     if h-j == 0 or h-j > len(mask) or mask[h-j-1])


def member(h, mask, width):
    if not 1 <= width <= h:
        return False
    distance = h-width
    return distance == 0 or distance > len(mask) or mask[distance-1]


def query(saved, maximum, mask, length, k):
    s = saved
    lanes = [[s.candidate, s.candidate, 0, 0]]
    answers = promotions = repairs = 0
    b = len(mask)
    for t in range(1, length+1):
        for lane in lanes:
            if lane[2]:
                lane[2] += 1
            else:
                lane[1] -= 1
        for _ in range(8*B):
            if not s.queue and s.active is None:
                break
            before = s.candidate
            s, raised = step(s)
            if raised is not None:
                assert t <= (before+7)//8
                lanes.append([raised, raised, t, before-b-1])
                promotions += 1
        for lane in lanes:
            if lane[2]:
                work = min(4, lane[2])
                lane[1] -= work
                lane[2] -= work
                repairs += work
                if not lane[2]:
                    assert t <= lane[3]
            if not lane[2]:
                assert lane[1] == lane[0]-t
            else:
                assert t <= lane[3]
        assert len(lanes) <= k
        answer = any(not debt and member(h, mask, t)
                     for h, _, debt, _ in lanes)
        assert answer == member(maximum, mask, t)
        answers += 1
    return answers, promotions, repairs


def main():
    rng = Random(183)
    updates = gates = nested = unions = answers = promotions = repairs = 0
    # Every short width history, including gaps, duplicates and maximum jumps.
    for b in range(4):
        for length in range(6):
            for seq in product(range(1, 6), repeat=length):
                row = Row(mask=(True,)*b)
                for n in seq:
                    row = insert_width(row, n, b)
                    updates += 1
    # Literal complete-level gate, arbitrary record order and duplicates.
    for trial in range(100):
        b = trial % 4
        maxima = rng.sample(range(1, 6), rng.randrange(1, 4))
        table = {}
        records = []
        for name in range(4):
            h = rng.choice(maxima)
            mask = tuple(bool(rng.randrange(2)) for _ in range(b))
            widths = profile(h, mask)
            words = {format(i, '0%db' % n) for n in widths for i in range(2**n)}
            table[name] = words
            records.extend((name, w) for w in words)
        rng.shuffle(records)
        records += records[:10]
        rows = [Row(mask=(True,)*b) for _ in range(4)]
        seen = [set() for _ in range(4)]
        counts = [{} for _ in range(4)]
        incomplete = bad = 0
        for name, word in records:
            old = rows[name]
            old_bad = bool(old.maximum) and old.gap != sum(not x for x in old.mask)
            rows[name] = insert_width(old, len(word), b)
            new = rows[name]
            new_bad = new.gap != sum(not x for x in new.mask)
            bad += int(new_bad)-int(old_bad)
            if word not in seen[name]:
                n = len(word)
                old_count = counts[name].get(n, 0)
                if old_count == 0:
                    incomplete += 1
                counts[name][n] = old_count+1
                if old_count+1 == 2**n:
                    incomplete -= 1
                seen[name].add(word)
            assert bad == sum(bool(x.maximum) and x.gap != sum(not z for z in x.mask)
                              for x in rows)
            assert incomplete == sum(0 < c < 2**n for cs in counts
                                     for n, c in cs.items())
        assert bad == incomplete == 0
        assert len({row.maximum for row in rows}) <= len(maxima)
        assert seen == [table[i] for i in range(4)]
        gates += 1
    # Direct set oracle for all same-label pairs; then finite union partitions.
    for b in range(4):
        candidates = [(h, mask) for h in range(1, 25)
                      for mask in product((False, True), repeat=b)]
        for h, mask in candidates:
            for bigger in range(h+b+1, 25, b+1):
                assert profile(h, mask) <= profile(bigger, mask)
                nested += 1
        for _ in range(300):
            chosen = rng.sample(candidates, min(20, len(candidates)))
            slots = {}
            for h, mask in chosen:
                key = (mask, h % (b+1))
                slots[key] = max(h, slots.get(key, 0))
            expected = set().union(*(profile(h, m) for h, m in chosen))
            actual = set().union(*(profile(h, m) for (m, _), h in slots.items()))
            assert actual == expected
            unions += 1
        for _ in range(100):
            mask = tuple(bool(rng.randrange(2)) for _ in range(b))
            low = 4*b+9+rng.randrange(8)
            radii = [low+i*(b+1) for i in range(4)]
            s = Receipt()
            selected = []
            for i in range(1, 45):
                value = rng.choice(radii)
                s = record(s, bin(i)[2:], value)
                selected.append(value)
            a, p, z = query(s, max(selected), mask, max(selected)+2, 4)
            answers += a; promotions += p; repairs += z
        # Symbolic huge maxima force pending comparisons and overlapping repairs.
        for exponent in (64, 256, 1024):
            low = (b+1)*(1 << exponent)
            radii = [low+i*(b+1) for i in range(4)]
            mask = tuple(j % 2 == 0 for j in range(b))
            s = Receipt()
            for i in range(1, 100):
                value = low if i < 96 else radii[i-96]
                s = record(s, bin(i)[2:], value)
            a, p, z = query(s, max(radii), mask, 500, 4)
            answers += a; promotions += p; repairs += z
    assert promotions > 0 and repairs > 0
    print(json.dumps(dict(status='passed', width_updates=updates,
                         literal_gate_histories=gates, nested_pairs=nested,
                         union_partitions=unions, query_prefix_answers=answers,
                         query_promotions=promotions, repair_units=repairs), indent=2))


if __name__ == '__main__':
    main()