Research source · python

l_trivial_quotient_family_review.py

site/public/research-artifacts/result-review-2026-09-01-batch-8/l_trivial_quotient_family_review.py

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

File fingerprint

SHA-256: 042228fb1ef40d638a15488c20ab03dd0f714180333e44978a1efc7044eceb7a

#!/usr/bin/env python3
"""Independent checks for the target-isolating theorem and binary family.

This reviewer does not import the preserved research programs.  It rebuilds
the finite monoids and automata from the displayed definitions using tuples,
sets, and breadth-first search.
"""

from __future__ import annotations

import json
from collections import deque
from itertools import product


def compose(first: tuple[int, ...], second: tuple[int, ...]) -> tuple[int, ...]:
    """Right action: apply ``first`` and then ``second``."""
    return tuple(second[q] for q in first)


def generated_monoid(generators: dict[str, tuple[int, ...]]):
    degree = len(next(iter(generators.values())))
    identity = tuple(range(degree))
    words = {identity: ""}
    queue = deque([identity])
    while queue:
        current = queue.popleft()
        for letter, generator in generators.items():
            nxt = compose(current, generator)
            if nxt not in words:
                words[nxt] = words[current] + letter
                queue.append(nxt)
    return words


def apply_word(generators: dict[str, tuple[int, ...]], word: str):
    result = tuple(range(len(next(iter(generators.values())))))
    for letter in word:
        result = compose(result, generators[letter])
    return result


def target_isolating_example():
    # Multiplication is determined by a^2=0, with 1 an identity and 0 a zero.
    elements = ("1", "a", "0")
    table = {
        (x, y): (
            y if x == "1" else x if y == "1" else "0"
        )
        for x, y in product(elements, repeat=2)
    }
    identity = (0, 1)
    top = (1, 1)
    rho = {"1": identity, "a": top, "0": top}

    def tcompose(x, y):
        return tuple(y[q] for q in x)

    assert all(rho[table[x, y]] == tcompose(rho[x], rho[y])
               for x, y in product(elements, repeat=2))
    fibre = tuple(x for x in elements if rho[x] == identity)
    assert fibre == ("1",)
    assert rho["a"] == rho["0"]
    assert all(image[q] >= q for image in rho.values() for q in range(2))

    left_ideals = {
        x: frozenset(table[m, x] for m in elements) for x in elements
    }
    assert len(set(left_ideals.values())) == len(elements)
    return {
        "monoid_elements": len(elements),
        "multiplication_checks": len(elements) ** 2,
        "target_fibre": list(fibre),
        "collapsed_pair": ["a", "0"],
        "podfa_degree": 2,
    }


def family(n: int):
    a = list(range(n))
    a[0] = 2
    a[n - 1] = 1
    b = list(range(n))
    for q in range(2, n - 1):
        b[q] = q + 1
    return {"a": tuple(a), "b": tuple(b)}


def reachable_and_minimal(generators):
    n = len(generators["a"])
    final = {1}
    state_words = {0: ""}
    queue = deque([0])
    while queue:
        q = queue.popleft()
        for letter, generator in generators.items():
            nxt = generator[q]
            if nxt not in state_words:
                state_words[nxt] = state_words[q] + letter
                queue.append(nxt)
    assert len(state_words) == n

    monoid = generated_monoid(generators)
    for p in range(n):
        for q in range(p + 1, n):
            assert any((x[p] in final) != (x[q] in final) for x in monoid)
    return state_words, monoid


def order_and_confluence(generators):
    n = len(generators["a"])
    order = [0] + list(range(2, n)) + [1]
    rank = {q: i for i, q in enumerate(order)}
    assert all(rank[q] <= rank[g[q]] for g in generators.values() for q in range(n))

    # Directly search a common continuation for the two one-letter successors.
    monoid = generated_monoid(generators)
    for q in range(n):
        left = generators["a"][q]
        right = generators["b"][q]
        assert any(x[left] == x[right] for x in monoid)


def green_triviality(monoid_words):
    elements = tuple(monoid_words)
    left_ideals = {
        x: frozenset(compose(m, x) for m in elements) for x in elements
    }
    right_ideals = {
        x: frozenset(compose(x, m) for m in elements) for x in elements
    }
    assert len(set(left_ideals.values())) == len(elements)
    assert len(set(right_ideals.values())) == len(elements)


def binary_family_review():
    rows = []
    for n in range(4, 19):
        generators = family(n)
        state_words, monoid = reachable_and_minimal(generators)
        order_and_confluence(generators)
        target = (n - 1,) + (1,) * (n - 1)
        witness = "ba" + "b" * (n - 4) + "ab"
        assert apply_word(generators, witness) == target
        distance = len(monoid[target])
        expected = 3 if n == 4 else n
        assert distance == expected
        if n <= 12:
            green_triviality(monoid)
        rows.append({
            "states": n,
            "monoid_size": len(monoid),
            "shortest_target_length": distance,
            "displayed_witness_length": len(witness),
            "green_triviality_checked": n <= 12,
            "reachable_states": len(state_words),
        })
    return {
        "parameter_range": [4, 18],
        "theorem_range": [5, 18],
        "hostile_boundary": {
            "states": 4,
            "shortest_target_word": generated_monoid(family(4))[
                (3, 1, 1, 1)
            ],
            "shortest_target_length": 3,
            "reason_for_n_at_least_5": "the one-a lower bound 2n-5 is below n at n=4",
        },
        "rows": rows,
    }


def main():
    report = {
        "artifact_schema": "fprd.independent-mathematical-audit.v1",
        "review_date": "2026-09-01",
        "target_isolating_example": target_isolating_example(),
        "binary_family": binary_family_review(),
        "status": "PASS",
    }
    print(json.dumps(report, indent=2, sort_keys=True))


if __name__ == "__main__":
    main()