Ersetzt man in Pascals Rekurrenz die Summe durch den Absolutbetrag der Differenz, kollabiert das Wachstum von exponentiell auf linear — und das Sierpinski-Muster bleibt Zelle für Zelle unverändert. Vier Sätze, eine widerlegte Vermutung — und ein Audit, das drei frühere Publikationen dieses Experiments als bildgleich mit vorher verworfenen Läufen ausweist.
L+R → |L−R| ist paritätserhaltend: das mod-2-Bild ist
eintragsweise identisch mit Pascal. Die Box-Dimension bleibt log₂3 ≈ 1,585. Was sich ändert,
sind ausschließlich die Zahlen: Θ(2ⁿ) wird zu O(n).
Der Begriff ist besetzt: IMO 2018, Aufgabe 3 definiert ein Anti-Pascal-Dreieck als Zahlendreieck, in dem jeder Eintrag der Absolutbetrag der Differenz der beiden Einträge unter ihm ist. Die Aufgabe fragt nach einem solchen Dreieck mit 2018 Zeilen, das genau die Zahlen 1 … 1+2+⋯+2018 enthält — Antwort: existiert nicht.
Als generative Rekurrenz von oben nach unten gelesen ist derselbe Operator:
Pascal: C(n,k) = C(n-1,k-1) + C(n-1,k)
Anti-Pascal: C(n,k) = |C(n-1,k-1) - C(n-1,k)| (Rand = 0)
Für das Harness dieses Experiments ist das ein echter Familienwechsel. Die bisherigen
Familien v1/v2 sind linear — C = a·L + b·R + c + d·G (mod m) — und der
Absolutbetrag ist nicht linear. Er ist in v1/v2 nicht darstellbar, auch nicht durch
b = m−1: modulo m ist L−R nur dann gleich |L−R|, wenn
L ≥ R. Deshalb Familie v3, ein optionales Feld abs:
v3: C(n,k) = |a·L + b·R + c + d·G| mod m
Anti-Pascal = {"a":1, "b":-1, "c":0, "mod":null, "apex":[1], "abs":true}
Für jeden Apex und alle n,k gilt anti(n,k) ≡ pascal(n,k) (mod 2).
Beweis. |x| ≡ x (mod 2), also L−R ≡ L+R (mod 2). Beide Dreiecke starten mit demselben Apex; Induktion über die Zeilen. ∎
Folge: Das Sierpinski-Dreieck ist invariant unter dieser Deformation. Der Betrag verändert die Werte drastisch — das Fraktal überhaupt nicht.
parity_hash)Für Apex [s] bleiben alle Einträge in {0, s}, und dort ist
|x−y| = s·((x/s) XOR (y/s)). Das Dreieck ist also exakt das
s-fache Pascal-Dreieck modulo 2 — Sierpinski, nichts weiter.
Jedes mod m ≥ 2 ist dabei wirkungslos, weil das Alphabet {0,1} nie verlassen wird.
Folge für dieses Experiment: Der reinste Anti-Pascal-Fall ist keine
Entdeckung, sondern algo-0002 des eigenen ZAEHL_ALGO_SET. Der Harness bestätigt
es selbst: algo-0059 erhält die Signatur sig-a40e36ba3f67 —
bitgleich mit algo-0002 — und meldet new_pattern: false.
Wegen |x−y| ≤ max(x,y) ist max(Zeile n) monoton fallend. Also
bleibt jeder Eintrag für immer ≤ max(apex), und die Zeilensumme ist durch
max(apex)·(n+|apex|) beschränkt — linear, wo Pascal
exponentiell wächst. Das ist die scharfe Umkehrung von Pascal und der
eigentliche Sinn des Wortes „anti".
Die Schranke hängt an c = 0: mit c = 1
(|L−R+1|) fällt max nicht mehr monoton, und das Alphabet wächst wieder.
Für Apex [1] ist die Zeilensumme sogar exakt bekannt:
2^(Anzahl der Einsen in der Binärdarstellung von n) — Goulds Folge (OEIS
A001316), also die Anzahl der ungeraden Einträge in Pascals Zeile n. Genau das erwartet
man nach Satz 2.
Für Apex [s] hat das Anti-Pascal-Dreieck in seinen ersten 2ᵏ Zeilen
exakt 3ᵏ von Null verschiedene Zellen — die klassische Zählung der ungeraden
Binomialkoeffizienten, unmittelbar aus Satz 2. Box-Dimension: log₂3.
Für breitere Apexe kommen „gerade Geister" hinzu: Einträge, die gerade und trotzdem ungleich Null sind. Sie liegen nicht im Paritätsbild, machen die Null-Bitmap also dichter als Sierpinski. Gemessen bis 1024 Zeilen konvergiert die Dimension trotzdem von oben gegen log₂3 — die Geister haben verschwindende relative Dichte.
| Apex | N=64 | N=256 | N=1024 | log(nz)/log(N) bei N=1024 |
|---|---|---|---|---|
| [1] | 729 | 6 561 | 59 049 | 1,5850 |
| [1,2] | 793 | 6 817 | 60 073 | 1,5874 |
| [1,2,3] | 863 | 7 335 | 63 151 | 1,5947 |
| [5,3,8] | 1 173 | 9 313 | 73 937 | 1,6174 |
| [13,7,2,11,4] | 1 344 | 11 004 | 92 916 | 1,6504 |
Naheliegende Vermutung, aus der Ducci-Theorie („n-number game") entlehnt: sobald eine Zeile nur noch Werte aus {0, M} enthält, ist der Rest des Dreiecks M·Rule-90 über GF(2) — der nichtlineare Operator würde sich also selbst linearisieren. Für Apex-Breite 1 ist das trivial wahr (Satz 2).
Für Breite ≥ 2 ist es falsch. In 255 von 300 Zufallsproben wurde binnen 120 Zeilen nie eine Zwei-Wert-Zeile erreicht; die 45 Kollapse waren ausnahmslos Breite-1-Apexe. Das Alphabet schrumpft zwar auf 5–8 Werte (Apex [5,3,8]: {0,1,2,5,8} bei Zeile 399), wird aber nicht binär.
Das ist der interessante Teil: Anti-Pascal bleibt über ℤ echt nichtlinear, während sein mod-2-Schatten exakt der lineare Automat Rule 90 ist. Die Nichtlinearität lebt vollständig in den höheren 2-adischen Stellen.
Links Pascal mod 2, in der Mitte Anti-Pascal über ℤ mit demselben Apex, rechts das mod-2-Bild von Anti-Pascal. Mitte und rechts unterscheiden sich sichtbar — die geraden Geister; rechts und links sind bei jedem Apex bitgleich (Satz 1).
Hypothese 3 hat einen Messfehler im Harness aufgedeckt. Die Muster-Signatur, mit der
67 Algorithmen über vier Sessions auf Neuheit geprüft wurden, enthält
div2, div3, div5: die Dichte der Nullen. Nicht
ihre Anordnung. Sie misst also gerade nicht das Fraktal, das man sieht.
Nachgerechnet auf der vergleichbaren Kohorte (64 Algorithmen mit 20 Zeilen): 56 Signaturen stehen für nur 45 verschiedene Null-Bitmaps. Der Detektor spaltet elfmal ein bereits bekanntes Bild in ein „neues Muster" auf — und einmal fällt er umgekehrt zusammen (algo-0015 und algo-0035 haben dieselbe Signatur bei verschiedenen Dreiecken, also ein falsches „bekannt").
Drei Publikationen betrifft das direkt:
| publiziert | Rekurrenz | gleiche Null-Bitmap wie | dort bewertet |
|---|---|---|---|
| algo-0009 pascal-mod-3-subtraktion |
L+2R mod 3 | algo-0003 (L+R mod 3) | miss |
| algo-0014 pascal-subtraktions-gesetz |
L+4R mod 5 | algo-0005, algo-0015, algo-0035 | explored / miss |
| algo-0017 pascal-subtraktions-gesetz |
L+6R mod 7 | algo-0010, algo-0032 | explored |
Der Grund ist elementar und war die ganze Zeit ausrechenbar. Mit c = 0 und
Apex [1] hat die lineare Familie eine geschlossene Form:
C(n,k) = a^k · b^(n-k) · binom(n,k) (mod m)
Sind a und b Einheiten mod m, ist dieser Vorfaktor nie 0 — die Nullstellenmenge
ist für alle solchen (a,b) dieselbe wie bei Pascal mod m, nach dem Satz von Lucas. Deshalb
teilen L+2R und L+3R mod 5 (algo-0015, algo-0035) ihre Bitmap mit
dem gewöhnlichen Pascal mod 5 (algo-0005): 2 und 3 sind bloß Einheiten. Der publizierte
Spezialfall b ≡ −1 ist nur die auffälligste Instanz davon.
Fairerhalber: dass „Subtraktion" das vorzeichenbehaftete Pascal-Dreieck ist, hat dieses
Experiment selbst gefunden und unter pascal-aufloesung-subtraktion
veröffentlicht — dort steht wörtlich, das Subtraktions-Dreieck sei „nichts anderes als das
vorzeichenbehaftete Pascal-Dreieck". Zwei Dinge fehlen aber bis jetzt: die
Verallgemeinerung auf beliebige Einheiten a, b (nachgeprüft: die geschlossene Form
gilt eintragsweise für alle 18 Algorithmen mit c=0 und Apex [1], ohne Ausnahme) samt der
Folgerung über die Nullstellenmenge — und, wichtiger, ein Detektor, der das sieht.
Die Auflösung kam als dritte Publikation nachgereicht; die beiden überholten Seiten stehen
weiter als eigenständige Funde da, und der Harness hätte auch beim vierten Versuch wieder
new_pattern: true gemeldet.
None. Die Zahl ist richtig, aber sie stammt nicht
aus der Messung. Ab 24 Zeilen ist sie belegbar.sierpinski_check prüft die
Parität der schon mod-m-reduzierten Werte. Für mod 3, 5, 7 ist das bedeutungslos —
es meldet für Pascal mod 3 korrekt False und sagt damit nichts über dessen
3-adisches Fraktal. Der richtige Test ist Lucas allgemein:
C(p·n, p·k) ≡ C(n,k) (mod p).algo-0004,
algo-0027 und algo-0042 sind bitgleiche Wiederholungen von
0001/0012/0024 — es gab keine Prüfung auf schon versuchte Rekurrenzen. 0042 wurde als
miss abgelegt, während dieselbe Rekurrenz als 0024 publiziert war.analyze-Lauf
auf demselben Algorithmus erhöhte den Erschöpfungszähler.seed ist ein reines Notizfeld. Die Fenstergröße n, von der
jede Dichte und jede Periode abhängt, wurde dagegen nicht festgehalten.parity_hash,
verschiedenes zeroset_hash.rows:N. Invariante: gleiche Zeilen ⇒ gleiche Signatur. Die alte Signatur v1
bleibt eingefroren, sonst wäre der Verlauf von vier Sessions unvergleichbar.eventual_period (Vorlauf +
Zyklus), growth_class, period_detection_limit,
Duplikat-Sperre bei run, Bitmap-Warnung bei mark published.python -m lab add-family v3 --formula 'C(n,k) = |a*L + b*R + c + d*G| mod m'
# Satz 2: Anti-Pascal apex [1] == algo-0002 (Pascal mod 2)
python -m lab run --family v3 --n 20 \
--recurrence '{"a":1,"b":-1,"c":0,"mod":null,"apex":[1],"abs":true}'
python -m lab analyze algo-0059 # -> new_pattern: false, sig-a40e36ba3f67
# Audit: 56 Signaturen v1, aber nur 45 Null-Bitmaps
python -m lab reindex
python -m pytest -q # 58 Tests, davon 22 neu zu v3 + Signatur v2