Skip to content
Browse the research

Period-4 Anti-Attractor: Tier-1 Verification of the Anna Matrix

Verification (May 2026) that the operator T(v) = sign(M·v) on the Anna Matrix reaches one of two period-4 cycles on every tested input; that these are the only global attractors is a hypothesis. Includes formal T^4 fixed-point property, four random-matrix null hypothesis ensembles, theoretical convergence bound, and architecture clarification distinguishing direct T iteration from the aigarth_search ITU iteration.

Period-4 Anti-Attractor: Tier-1 Verification

1. Statement

Let M ∈ ℤ^{128×128} be the Anna Matrix and define

T : {-1, 0, +1}^128 → {-1, 0, +1}^128, T(v) = sign(M · v)

We verify on samples, and state as hypotheses for the full state space:

  1. (Two cycles, hypothesis for all inputs) In every sampled input, T reaches one of exactly two period-4 cycles; the zero vector is a trivial fixed point. That these two cycles are the global attractors of all non-zero ternary inputs is not proven.
  2. (Convergence, sampled) Every sampled non-zero input reached one of the two period-4 cycles within 24 iterations (median 8 ticks-to-first-cycle-state, median 12 ticks-to-cycle-close). The samples are 100,000 random inputs and all inputs of Hamming weight at most 2.
  3. (Specificity) Period-4 of this form is not generic for int8 matrices: under four distinct null ensembles (200 matrices each) Anna's behaviour is reproduced 0% – 0.5% of the time.
  4. (Period-4 fixed-point property) Each of the 8 cycle states s satisfies T⁴(s) = s exactly. This is a tautological consequence of period-4 (the fourth iterate returns to the start) but is the property a 4-tick sampling regime would exploit.
  5. (Cycle-pair structure) T commutes with negation: T(-v) = -T(v). This holds for any real matrix, because sign is odd; it is not specific to Anna. The orbit of -A[0] is therefore exactly (-A[0], -A[1], -A[2], -A[3]). This is cycle B: the antipodal cycle shifted by the choice of starting phase. There is no additional structural permutation; cycle B is just -A with the orbit origin re-indexed.

2. Methods (Phase A reproducibility)

All computations live in __. Scripts: phase_a.py (~15 s) and phase_a_hardening.py (~80 s). Outputs: JSON files in __.

2.1 Cycle detection

A hash-based detector iterates T from v_0 and records every state via bytes(v.tobytes()). Termination on first repeat or at max_ticks = 100. The cycle period is the index difference between the first occurrence and the repetition.

2.2 Random-matrix null ensembles

Four distinct null hypotheses, each generating 200 matrices and testing 200 ternary inputs per matrix (40,000 input-matrix pairs per null):

NullConstructionQuestion answered
null_uniformeach entry i.i.d. Uniform(int8)Is period-4 generic for any int8 matrix?
null_histogramAnna's value multiset, randomly permutedIs the arrangement the cause?
null_phase_randomeigendecompose M, randomise every conjugate-pair phase, reconstruct + clipIs the spectral magnitude profile alone enough?
null_phase_keep_pi2as null_phase_random but keep dominant pair at exactly π/2Does π/2 alone suffice?

The fourth null was added on advisor's recommendation as the strongest test of the dominant phase as the causal factor.

2.3 Two convergence definitions

  • ttfc (ticks to first cycle state), when the orbit first enters the cycle.
  • ttcc (ticks to cycle close), when we first see a state we've already visited (i.e. observed the full period). ttcc = ttfc + 4 for period-4 orbits.

This reconciles our earlier "median 8" with the Companion PDF's "≈ 11": both correct, different definitions.

3. Cycle structure

QuantityValue
Period distribution over 100,000 random ternary samples{4: 100,000}
Period distribution over exhaustive 32,768 HW≤2 samples{4: 32,768}
Unique cycles foundexactly 2
Cycle A state sums (in tick order)(-42, +50, +38, -56)
Cycle B state sums (in tick order)(+42, -50, -38, +56)
Cycle B vs Cycle AB = -A as orbits. The observed B[k] = -A[(k+1) mod 4] is just the choice of starting phase when discovering B from a random initial state. Under T(-v) = -T(v), the orbit of -A[0] is -A exactly.

Both cycles together form 8 distinct states. Together they map every non-zero ternary input to one of these 8 states within ≤ 24 ticks.

4. Random-matrix null results (hardened)

200 matrices × 200 samples per null. We count matrices in which any period-4 cycle appears at all (the lowest possible bar):

Null ensemblematrices_with_period4 / 200Fraction
null_uniform0 / 2000.000
null_histogram0 / 2000.000
null_phase_random0 / 2000.000
null_phase_keep_pi21 / 2000.005
Anna200 / 2001.000

The null_phase_keep_pi2 result is the most interesting. Preserving only the dominant π/2 phase while randomising every other conjugate-pair phase yields period-4 in just 1 of 200 matrices. A dominant phase near π/2 is not sufficient to reproduce Anna's behaviour. It is also not necessary for period 4 in general: the 2 x 2 matrix [[1, 2], [-2, 1]] has eigenvalue angles of ±63.4 degrees, and all 8 of its non-zero ternary inputs end in period 4. Earlier versions called the phase necessary; that was wrong.

Combined across all four nulls: 1 / 800 matrices. Anna at 200 / 200. Effect size overwhelming.

5. Spectral motivation

Top eigenvalues of M:

IndexMagnitudePhase (deg)Distance to 90°
02342.075+90.45650.4565°
12342.075-90.4565(conjugate)
2884.00818090°
3876.576090°

Spectral dominance |λ₁| / |λ₃| = 2.649.

A linear iteration M^k v with a dominant complex eigenvalue at angle θ produces period 2π/θ for inputs concentrated in the dominant eigenspace. Anna's dominant phase is essentially π/2, which yields period 4.

6. Theoretical convergence bound

Under linear iteration M^k v, components in eigenspaces with smaller magnitude decay like (|λ_3| / |λ_1|)^k. Crossing time at which they fall below resolution ε = 1/N = 1/128:

t_resolution ≈ log(1/N) / log(|λ_3|/|λ_1|) = log(1/128) / log(0.3774) ≈ 4.98 ticks

Empirical ttfc median is 8.0. The factor of ~1.6 between linear-decay bound and observed sign-projected convergence is plausible: sign-projection adds discrete jumps that may delay alignment with the dominant eigenspace.

6.5 Relation to CfB's anti-attractor concept (interpretive)

7. The two iterations on Anna (architecture clarification)

Two distinct algorithms have been studied on the Anna Matrix and they produce different attractor structures. This was the source of confusion in earlier project documents.

AlgorithmOperatorTerminationReported attractorsCycle period
(A) Direct ternary iterationT(v) = sign(M·v)period-4 cycle (no fixed point reached)2 unique cycles4
(B) aigarth_search ITU iterationinput/output neuron split with no-state-change terminationfirst state with no neuron change16,384 unique outputs(1, after termination)

7.1 Verification of (B) being a different algorithm

aigarth_search --hamming 3 on Anna reports max_ticks_reached = 0: every input terminates at tick 1 with avg_ticks = 2. aigarth_search --random 1000 reports max_ticks_reached = 2. If this were direct T iteration, every non-zero input would be in period-4 and never satisfy the no-state-change termination, so tick_count would always equal the cap (100). It does not.

We tested 500 cycle states from search_hamming3.json against T:

TestResult
sign(M · v) == v strictly1 / 500 (the all-zero vector only)
Hamming distance from sign(M · v) to vmean 98.52 / 128, median 100

The 16,384 attractors of aigarth_search are not strict 1-tick anti-attractors of T.

7.2 What this means

Both numbers are real and reproducible. They describe two different mathematical objects:

  • The 2 period-4 cycles of T are the 4-tick anti-attractors of the direct ternary iteration. This is the structure that matches the dominant π/2 eigenvalue and that drives the C-C-R-R behavioural sequence in the ALife simulation (Chapter 25, Section 4.6).
  • The 16,384 unique outputs of aigarth_search are the stopping states of an ITU-style iteration with separate input and output neuron regions. They are not fixed points: all 16,384 stop because no output is zero, and all of them change on one more synchronous step. This is closer to the architecture described by the official aigarth-it Python package.

Earlier project documents conflated the two as "Anna's attractor basins". They are different.

8. Re-checks issued by Phase A

Earlier statementStatus
"Anna has 16,384 anti-attractors of T"Disambiguated: 16,384 is the aigarth_search algorithm's output count, not 1-tick anti-attractors of T. T has 2 period-4 cycles.
"sign(A)^6 column sums all = 42" (Chapter 25 §1.3)Refuted: column sums vary by ~10⁹. The vector iteration analogue is Section 4.6's period-4.
Aigarth anchor table values (earlier technical spec, since removed)Convention clarified: the listed values are at the twin matrix position ([r₂, c₂]), not the primary position ([r₁, c₁]). All 8 values verified at the twin positions.

9. Connections to other chapters

  • Chapter 25 (Aigarth Research Lab) §4.6, discovered the period-4 cycle from random binary inputs and identified the spectral cause. Phase A confirmed and hardened with 4 nulls.
  • Genesis encoding (earlier chapter, set aside), an earlier chapter encoded the 65-byte Genesis pubkey into a 128-vector and observed the same period-4 cycle. Random inputs do the same, so this is not Genesis-specific.
  • Seven-position signature (earlier chapter, set aside), within a single cycle, opposite-tick states (A vs C, B vs D) are near-antipodal but break at 7 positions: {3, 18, 32, 61, 65, 101, 109}. Phase A reproduces this for the table as typed. The break needs the column 30 values exactly as typed and disappears after correcting that very likely entry-error run. See September 2026 re-check.

10. Reproducibility

# Phase A main run (~15 s)
python3
 
# Phase A hardening run (~80 s, 4 null ensembles × 200 matrices)
python3

All output JSON files live in __ with deterministic seeds (42, 100). Hardware: Apple Silicon, no GPU/ANE used.

Verification snippet (period-4 + cycle B = -A pointwise):

import json, numpy as np
 
M = np.array(json.load(open('apps/web/public/data/anna-matrix.json'))['matrix'], dtype=np.int64)
 
def T(v): return np.sign(M @ v).astype(np.int64)
 
def find_cycle(v, max_ticks=100):
 history = [tuple(v.tolist())]
 seen = {history[0]: 0}
 for t in range(1, max_ticks + 1):
 v = T(v)
 h = tuple(v.tolist())
 if h in seen:
 return [history[i] for i in range(seen[h], t)], t - seen[h]
 history.append(h)
 seen[h] = t
 return [], 0
 
# Find both cycles
np.random.seed(42)
cycles = {}
for _ in range(200):
 v = np.random.choice([-1, 0, 1], 128).astype(np.int64)
 c, p = find_cycle(v.copy())
 if p == 4:
 canon = min(tuple(c[i:] + c[:i]) for i in range(4))
 cycles.setdefault(canon, c)
 if len(cycles) == 2: break
 
A, B = list(cycles.values())
assert {tuple(s) for s in A} == {tuple(-np.array(s)) for s in B}, "B should be -A pointwise (as set)"
print("Cycle sums A:", [sum(s) for s in A])
print("Cycle sums B:", [sum(s) for s in B])
# Output:
# Cycle sums A: [-42, 50, 38, -56] (or rotation)
# Cycle sums B: [42, -50, -38, 56] (or rotation)

11. Tier-marked summary

FindingTierEvidence
T reaches period-4 on every sampled non-zero ternary input1 (samples) / 2 (all inputs, hypothesis)100K random + 32,768 exhaustive HW≤2
Exactly 2 period-4 cycles2 (hypothesis for all inputs)observed in every sample
Cycle B = -Cycle A pointwise (set equality + index permutation)1direct check on cycle states
7-position within-cycle break at {3, 18, 32, 61, 65, 101, 109}1 for the table as typeddisappears after correcting the column 30 run
T⁴(s) = s for all 8 cycle states1analytic on every state
Period-4 not generic for int8 matrices10/200 in 3 nulls, 1/200 in fourth
π/2 phase not sufficient1null_phase_keep_pi2 1/200 vs Anna 200/200
π/2 phase necessarynot confirmedcounterexample [[1, 2], [-2, 1]]
Convergence median ttfc = 8, ttcc = 121100K samples
Spectral structure motivates period-42dominant eigenvalue at 90.4565°
aigarth_search is not direct T iteration1tick distribution mismatch confirmed
4-tick reading of CfB's anti-attractor concept3one interpretive reading among several; not confirmed with source

12. Cross-reference: AIT regime gives different behaviour

The period-4 attractor described in this chapter is a property of the direct ternary operator T(v) = sign(M · v). Phase N's verification campaign (2026-05-09, see Chapter 31) found that the project's aigarth_search C scanner (which we read as the production HyperIdentity scoring algorithm; that link is inferred, not verified) uses a different rule:

T_AIT(v) = ternary_clamp(sign(M) · v) with input clamping and a stop condition.

Two consequences:

  1. Magnitudes are inert under T_AIT. Anna's specific int8 values, including the trace of 137 (from a very likely entry-error pair) and the K-e-y diagonal, participate in T but not in T_AIT.
  2. Period-4 does not transfer. Sampling 100 random binary inputs under sign(M) · v shows period-4 in only 1 of 100 cases. Phase G's period-4 finding is M-magnitude-dependent and lives in the T regime; the AIT regime gives different stopping states instead (Chapter 31; the earlier "19-concept classifier" reading was not confirmed and stays open).

Both regimes are valid descriptions of Anna under different operators. The production scoring task uses T_AIT; the analytic exploration in this chapter uses T. They are complementary, not contradictory.

13. Endogenous activity: Anna's period-4 holds under free iteration without clamping

A free-iteration experiment_, pre-registered) tests whether the period-4 structure survives when sign-only iteration sign(M · v) is run from random ±1 initial states without any input clamping. Results (n=20 seeds × T=200; supplementary 5 seeds × T=10,000):

ArchitectureCycle structure
AnnaPeriod-4 in 25/25 random initial states (T=200 + T=10K combined)
Random antipodal sign matrix (uniform ±1, 99.6% antipodal)0/5 cycles within 10,000 ticks
EngineeredDCOnly (Walsh DC-only)Period-2 in 10/10
EngineeredWalsh (Anna-frequency-mimic)Variable 1, 2, 3, or 4 across 10 seeds

Two findings:

  1. Sustained short-cycle dynamics is a Walsh-family property. Anna, DC-only, and Walsh-frequency variants all reach short cycles. Random antipodal matrices do not (orbits > 10,000 long, if they cycle at all).

  2. Period-4 specifically is an Anna-specific property. Engineered Walsh matrices with similar frequency distributions but shuffled row arrangements produce variable cycle lengths (1-4). Anna's exact period-4 depends on the specific row arrangement, not just the frequency spectrum.

This extends the earlier clamped-input runs over 1000 random binary inputs to the UNCLAMPED free-iteration regime: in all sampled states, the period-4 cycle appears in Anna's sign(M · v) dynamics without input encoding.

Reading note. Bounded periodic cycles are structured but not adaptive. Once on the cycle, the dynamics repeat exactly. Adaptive temporal structure (the kind that improves behaviour over a system's lifetime) requires the surrounding framework, Aigarth-IT mutation, ITU growth/prune, or Neuraxon-style neuromodulator/circadian layers. This section establishes the bounded-periodic form of endogenous activity for the bare matrix, not the open-ended adaptive form. The latter is documented in the Cognitive Lab and the Phase 4 Anna×Neuraxon fusion work.

Pre-reg + audit: __, __.

14. The free-iteration cycle and the "concept" centroids (open reading)

An earlier follow-up mapped the four cycle states onto four of the "19 concept attractors" of Chapter 31 and read this as an architectural regularity. The 19 concepts were selected afterwards from 12,356 distinct stopping states, and the stopping states are not fixed points. The mapping therefore describes a nearest-centroid assignment, not a property of the matrix.

Audit: __.