Research source · python

verify_selector_covers.py

site/public/research-artifacts/finite-causal-selector-covers/verify_selector_covers.py

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

File fingerprint

SHA-256: 55b5fe15f3142efed624a21873006507c28cff87b9eadb4c22e6b3f18abbe535

#!/usr/bin/env python3
"""Finite product audit for FPRD-T167 and logic audit for FPRD-T168."""

from __future__ import annotations

import itertools
import json
from pathlib import Path


BITS = (0, 1)


def words(max_len):
    yield ()
    for n in range(1, max_len + 1):
        yield from itertools.product(BITS, repeat=n)


WORDS = tuple(words(4))


def one_state_selectors():
    """All one-state binary synchronous selectors."""
    for outputs in itertools.product(BITS, repeat=2):
        yield outputs


def transduce(selector, word):
    return tuple(selector[a] for a in word)


def run_source(table, accepting, word):
    state = 0
    trace = []
    for letter in word:
        state, action = table[2 * state + letter]
        trace.append(action)
    return state, tuple(trace), state in accepting


def run_packed(table, accepting, selectors, word):
    states = [0] * len(selectors)
    traces = [[] for _ in selectors]
    for letter in word:
        for i, selector in enumerate(selectors):
            emitted = selector[letter]
            states[i], action = table[2 * states[i] + emitted]
            traces[i].append(action)
    return tuple(states), tuple(tuple(t) for t in traces), any(
        state in accepting for state in states
    )


def audit_finite_covers():
    selectors = tuple(one_state_selectors())
    choices = tuple(itertools.product(BITS, BITS))  # next state, local action
    comparisons = 0
    families = 0

    for table in itertools.product(choices, repeat=4):
        for mask in range(4):
            accepting = frozenset(i for i in BITS if mask & (1 << i))
            for width in (1, 2, 3):
                for family in itertools.product(selectors, repeat=width):
                    families += 1
                    for word in WORDS:
                        sources = tuple(
                            run_source(table, accepting, transduce(selector, word))
                            for selector in family
                        )
                        packed = run_packed(table, accepting, family, word)
                        assert packed[0] == tuple(source[0] for source in sources)
                        assert packed[1] == tuple(source[1] for source in sources)
                        assert packed[2] == any(source[2] for source in sources)
                        comparisons += 1
    return len(selectors), families, comparisons


def audit_raw_cover_growth():
    checks = 0
    witnesses = []
    for hidden_choices in range(2, 6):
        for selector_count in range(1, 65):
            n = 0
            while hidden_choices**n <= selector_count:
                n += 1
            assert hidden_choices**n > selector_count
            witnesses.append((hidden_choices, selector_count, n))
            checks += 1
    return checks, witnesses


def audit_hard_lift_logic():
    # Encoded implications only. External premises are not reverified here.
    visible_lift_in_sca = True
    projection_outside_sca = True
    finite_selector_cover = False
    if visible_lift_in_sca and projection_outside_sca:
        finite_selector_cover = False
    assert not finite_selector_cover
    return {
        "visible_lift_transport": "finite",
        "projected_transport": "infinite",
        "causal_selection_number": "infinity",
    }


def main():
    selector_count, families, comparisons = audit_finite_covers()
    growth_checks, witnesses = audit_raw_cover_growth()
    output = {
        "status": "pass",
        "scope": "finite selector product identity and implication orientation",
        "does_not_verify": [
            "FPRD-T91's visible-lift construction",
            "the persistent-stack compiler in full generality",
            "Kim-Park Theorem 4.19 or its Lean artifact",
            "necessity of finite selector covers for arbitrary SCA projections",
        ],
        "one_state_binary_selectors": selector_count,
        "packed_selector_families": families,
        "packed_run_comparisons": comparisons,
        "raw_cover_growth_checks": growth_checks,
        "largest_raw_cover_witness": witnesses[-1],
        "resource_bound": "(m*d,k,g^m,q^m*product(s_i))",
        "hard_lift": audit_hard_lift_logic(),
    }
    Path(__file__).with_name("checker-output.json").write_text(
        json.dumps(output, indent=2) + "\n", encoding="utf-8"
    )
    print(json.dumps(output, indent=2))


if __name__ == "__main__":
    main()