Research source · python

verify_future_observers.py

site/public/research-artifacts/finite-future-observers/verify_future_observers.py

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

File fingerprint

SHA-256: 0c17286fc2c122fb6ce86d9d1a200141529d45bca1cf55c96a613397782ac20a

#!/usr/bin/env python3
"""Finite audit for FPRD-T158 finite future observers."""

from __future__ import annotations

import itertools
import json
from dataclasses import dataclass
from pathlib import Path


MISSING = -1
SELF = -2


@dataclass(frozen=True)
class Scaffold:
    labels: tuple[int, ...]
    edges: tuple[tuple[int, ...], ...]

    @property
    def top(self) -> int:
        return len(self.labels) - 1


def view(scaffold: Scaffold, node: int, radius: int):
    if node == MISSING:
        return ("missing",)
    if radius == 0:
        return ("label", scaffold.labels[node])
    return (
        "node",
        scaffold.labels[node],
        tuple(view(scaffold, target, radius - 1) for target in scaffold.edges[node]),
    )


def radius(distance: int, horizon: int) -> int:
    if horizon == 0 or distance == 0:
        return 0
    return distance + (horizon - 1) * (distance - 1)


def descriptor_words(degree: int, distance: int) -> list[tuple[int, ...]]:
    return [
        word
        for length in range(distance + 1)
        for word in itertools.product(range(degree), repeat=length)
    ]


def follow(scaffold: Scaffold, start: int, descriptor: tuple[int, ...]) -> int:
    node = start
    for port in descriptor:
        if node == MISSING:
            return MISSING
        node = scaffold.edges[node][port]
    return node


def extend(scaffold: Scaffold, label: int, descriptors: tuple[object, ...]) -> Scaffold:
    new = len(scaffold.labels)
    targets: list[int] = []
    for descriptor in descriptors:
        if descriptor == SELF:
            targets.append(new)
        elif descriptor == MISSING:
            targets.append(MISSING)
        else:
            targets.append(follow(scaffold, scaffold.top, descriptor))
    return Scaffold(scaffold.labels + (label,), scaffold.edges + (tuple(targets),))


def score(item) -> int:
    if isinstance(item, int):
        return item + 17
    if isinstance(item, str):
        return sum(ord(char) for char in item)
    return 19 + sum((index + 3) * score(value) for index, value in enumerate(item))


@dataclass(frozen=True)
class TinyMachine:
    seed: int
    degree: int
    distance: int

    def transition(self, state: int, symbol: int, scaffold: Scaffold) -> tuple[int, int, tuple[object, ...]]:
        root_view = ("missing",) if not scaffold.labels else view(scaffold, scaffold.top, self.distance)
        code = score((self.seed, state, symbol, root_view))
        options: list[object] = [MISSING, SELF, *descriptor_words(self.degree, self.distance)]
        next_state = (state + symbol + code + self.seed) % 3
        label = (code // 3 + state + symbol) & 1
        descriptors = tuple(options[(code + 7 * port) % len(options)] for port in range(self.degree))
        return next_state, label, descriptors

    def accepting(self, state: int) -> int:
        return int(state == (self.seed % 3))


def step(machine: TinyMachine, state: int, scaffold: Scaffold, symbol: int) -> tuple[int, Scaffold]:
    next_state, label, descriptors = machine.transition(state, symbol, scaffold)
    return next_state, extend(scaffold, label, descriptors)


def run_from(machine: TinyMachine, state: int, scaffold: Scaffold, word: tuple[int, ...]) -> tuple[int, Scaffold]:
    for symbol in word:
        state, scaffold = step(machine, state, scaffold, symbol)
    return state, scaffold


def answer_from(machine: TinyMachine, state: int, scaffold: Scaffold, word: tuple[int, ...]) -> int:
    final_state, _ = run_from(machine, state, scaffold, word)
    return machine.accepting(final_state)


def empty_scaffold(degree: int) -> Scaffold:
    return Scaffold((), ())


def scaffold_family(node_count: int, degree: int):
    label_choices = itertools.product(range(2), repeat=node_count)
    edge_options = [
        list(itertools.product([MISSING, *range(node)], repeat=degree))
        for node in range(node_count)
    ]
    for labels in label_choices:
        for edges in itertools.product(*edge_options):
            yield Scaffold(tuple(labels), tuple(edges))


def observer(machine: TinyMachine, state: int, scaffold: Scaffold, suffixes: tuple[tuple[int, ...], ...]) -> tuple[int, ...]:
    return tuple(answer_from(machine, state, scaffold, suffix) for suffix in suffixes)


def audit_compiled_control() -> dict[str, int]:
    machines = [TinyMachine(seed, 1 + seed % 2, 1 + (seed // 2) % 2) for seed in range(8)]
    suffix_pool = [word for length in range(3) for word in itertools.product((0, 1), repeat=length)]
    observer_families = tuple(
        tuple(suffix_pool[(seed + offset * offset + 2 * offset) % len(suffix_pool)] for offset in range(3))
        for seed in range(7)
    )
    prefixes = [word for length in range(7) for word in itertools.product((0, 1), repeat=length)]

    compiled_runs = 0
    observer_invariant_checks = 0
    graph_identity_checks = 0
    boolean_output_checks = 0

    for machine in machines:
        for suffixes in observer_families:
            for prefix in prefixes:
                base = empty_scaffold(machine.degree)
                direct_state, direct_graph = run_from(machine, 0, base, prefix)

                compiled_state = 0
                compiled_graph = base
                compiled_vector = observer(machine, compiled_state, compiled_graph, suffixes)
                for symbol in prefix:
                    old_state, old_graph = compiled_state, compiled_graph
                    compiled_state, compiled_graph = step(machine, old_state, old_graph, symbol)
                    compiled_vector = tuple(
                        answer_from(machine, old_state, old_graph, (symbol,) + suffix)
                        for suffix in suffixes
                    )

                assert compiled_state == direct_state
                assert compiled_graph == direct_graph
                assert compiled_vector == observer(machine, direct_state, direct_graph, suffixes)
                observer_invariant_checks += len(suffixes)
                graph_identity_checks += 1

                vector_index = sum(bit << index for index, bit in enumerate(compiled_vector))
                direct_vector = observer(machine, direct_state, direct_graph, suffixes)
                direct_index = sum(bit << index for index, bit in enumerate(direct_vector))
                for truth_table in range(1 << (1 << len(suffixes))):
                    compiled_answer = (truth_table >> vector_index) & 1
                    assert compiled_answer == ((truth_table >> direct_index) & 1)
                    boolean_output_checks += 1
                compiled_runs += 1

    return {
        "tiny_machines": len(machines),
        "observer_families": len(observer_families),
        "compiled_runs": compiled_runs,
        "observer_invariant_checks": observer_invariant_checks,
        "graph_identity_checks": graph_identity_checks,
        "boolean_output_checks": boolean_output_checks,
    }


def audit_locality() -> dict[str, int]:
    families = [
        (TinyMachine(0, 1, 2), 5),
        (TinyMachine(4, 2, 1), 4),
    ]
    suffixes = ((), (0,), (1, 0))
    old_scaffolds = 0
    future_observer_evaluations = 0
    same_view_comparisons = 0
    readable_view_classes = 0

    for machine, node_count in families:
        material = list(scaffold_family(node_count, machine.degree))
        old_scaffolds += len(material)
        distance = max(radius(machine.distance, len(suffix) + 1) for suffix in suffixes)
        for state in range(3):
            for symbol in (0, 1):
                representatives: dict[object, tuple[int, ...]] = {}
                for scaffold in material:
                    key = view(scaffold, scaffold.top, distance)
                    signature = tuple(
                        answer_from(machine, state, scaffold, (symbol,) + suffix)
                        for suffix in suffixes
                    )
                    future_observer_evaluations += len(suffixes)
                    if key in representatives:
                        assert representatives[key] == signature
                        same_view_comparisons += 1
                    else:
                        representatives[key] = signature
                readable_view_classes += len(representatives)

    return {
        "old_scaffold_machine_instances": old_scaffolds,
        "future_observer_evaluations": future_observer_evaluations,
        "same_view_signature_comparisons": same_view_comparisons,
        "readable_view_classes": readable_view_classes,
    }


def chain(depth: int, target: int) -> Scaffold:
    labels = tuple([target] + [0] * depth)
    edges = tuple((MISSING,) if node == 0 else (node - 1,) for node in range(depth + 1))
    return Scaffold(labels, edges)


def reveal_after_horizon(scaffold: Scaffold, distance: int, horizon: int) -> int:
    path = (0,) * distance
    current = scaffold
    for _ in range(horizon - 1):
        current = extend(current, 0, (path,))
    target = follow(current, current.top, path)
    return current.labels[target]


def audit_sharpness() -> dict[str, int]:
    sharp_radius_witnesses = 0
    equal_smaller_views = 0
    separated_observer_updates = 0
    for distance in range(1, 5):
        for suffix_length in range(6):
            horizon = suffix_length + 1
            required = radius(distance, horizon)
            left = chain(required, 0)
            right = chain(required, 1)
            assert view(left, left.top, required - 1) == view(right, right.top, required - 1)
            assert reveal_after_horizon(left, distance, horizon) == 0
            assert reveal_after_horizon(right, distance, horizon) == 1
            sharp_radius_witnesses += 1
            equal_smaller_views += 1
            separated_observer_updates += 1
    return {
        "sharp_radius_witnesses": sharp_radius_witnesses,
        "equal_radius_minus_one_views": equal_smaller_views,
        "separated_observer_updates": separated_observer_updates,
    }


def audit_radius_formula() -> dict[str, int]:
    checks = 0
    for distance in range(5):
        for suffix_length in range(9):
            expected = 0 if distance == 0 else distance + suffix_length * (distance - 1)
            assert radius(distance, suffix_length + 1) == expected
            assert radius(distance, suffix_length + 1) >= distance
            checks += 2
    return {"radius_formula_checks": checks}


def main() -> None:
    result: dict[str, object] = {
        "scope": {
            "compiled_control": "8 deterministic scaffold machines, 7 three-suffix observers, all binary prefixes through length 6, all 256 Boolean observers",
            "locality": "all binary-labelled backward scaffolds: degree 1 on 5 nodes and degree 2 on 4 nodes",
            "sharpness": "distance 1..4 and suffix length 0..5",
        },
        **audit_compiled_control(),
        **audit_locality(),
        **audit_sharpness(),
        **audit_radius_formula(),
        "status": "pass",
    }
    output = Path(__file__).with_name("checker-output.json")
    output.write_text(json.dumps(result, indent=2) + "\n", encoding="utf-8")
    print(json.dumps(result, indent=2))


if __name__ == "__main__":
    main()