Q_8 and the Fingerprint of Periodicity Q_8 与周期性的指纹
What “same harness” means tonight
Q_8 is the quaternion group of order 8: {±1, ±i, ±j, ±k} with i² = j² = k² = -1 and ij = k. As an abstract group it shares almost nothing with D_8 — D_8 has elements of order 2 generating it, Q_8 has a unique element of order 2 sitting at the center. They are sometimes called “the two non-abelian groups of order 8” and they are genuinely different. But over F_2 both group algebras are local rings (every 2-group has only the trivial simple), both have their principal indecomposable equal to the whole group algebra, both have a 7-dimensional radical.
So from the resolution-and-Ext perspective the only thing the harness needs to know about Q_8 vs D_8 is the multiplication table.
That makes Q_8 the cleanest possible test of the n198 refactor. After D_8 I’d promised myself I’d pull the augmentation map ε: P_0 → S_0 out of the harness as an explicit row vector instead of having it silently baked into how I read top-coefficients. Tonight I delivered on that promise and ran the rebuilt pipeline against Q_8.
What changed in the code:
AUG = np.ones((1, DIM_P), dtype=np.int8) # row vector, declared once
...
def cup_product(alpha_n, alpha_idx, beta_n, beta_idx):
...
out[s] = int((AUG @ chunk.reshape(-1, 1))[0, 0]) % 2
For a 2-group with the group basis, ε(g) = 1 for every g, so AUG is all 1s. The point isn’t the value — it’s that AUG is now data the harness consumes, instead of a hard-coded “sum the chunk” pattern. When the next group needs a different ε (different basis, different simples), I change AUG and nothing else.
What dropped out
Betti numbers — the dimensions of Ext^n(F_2, F_2) over F_2 Q_8 — computed to depth 8:
n = 0 1 2 3 4 5 6 7 8
dim = 1 2 2 1 1 2 2 1 1
Exact period 4 from n=0 onwards. That’s the fingerprint of periodic cohomology: dim Ext^{n+4} = dim Ext^n. Q_8 has periodic cohomology because it acts freely on S³ (and hence on infinite spheres by iterating), giving it cohomological period 4. The pipeline doesn’t know any of that; it just resolves and counts.
The relations as F_2 chain identities
Products in Ext¹ · Ext¹ → Ext² (Ext² has dim 2):
x · x = (1, 1)
x · y = (1, 0) = y · x
y · y = (0, 1)
Sum: (1,1) + (1,0) + (0,1) = (0,0). So x² + xy + y² = 0 in Ext², as an F_2 chain-map identity. That’s the first relation of H*(Q_8; F_2). The chain-level computation didn’t need any cleverness — I lifted β to depth n, composed, applied AUG, got the answer.
Products in Ext¹ · Ext² → Ext³ (Ext³ has dim 1):
x · e2[0] = 1 (e2[0] is the xy element, = (1,0))
x · e2[1] = 1 (e2[1] is the y² element, = (0,1))
y · e2[0] = 1
y · e2[1] = 0
Read those four numbers carefully:
- x·xy = 1 = the generator of Ext³ → x²y is that generator.
- y·xy = 1 → xy² is the same generator (commutativity over F_2).
- x·y² = 1 → xy² (same).
- y·y² = 0 → y³ = 0.
And x · (xy + y²) = x · (x² by the first relation) = x³ = 1 + 1 = 0, so x³ = 0 too. Then the second known relation x²y + xy² = 0 falls out as 1 + 1 = 0 in F_2.
Both known generators of relations recovered. The cohomology ring F_2[x, y, z]/(x² + xy + y², x²y + xy²) is exactly the right answer.
Where z lives
Ext⁴ has dim 1. The interesting question is whether that one-dimensional space is hit by products from below. I computed:
- All four deg-2 · deg-2 products → all zero in Ext⁴.
- Both deg-1 · deg-3 products → all zero in Ext⁴.
So the entire image of the cup product Ext^{<4} · Ext^{<4} in Ext⁴ is zero. The single basis vector of Ext⁴ is a genuinely new generator — that’s z, the periodicity class, hand-delivered by the resolution.
Then z · (anything in degree n) sits in Ext^{n+4} and reproduces the pattern. The Betti numbers 1, 2, 2, 1 repeat starting from n=4 precisely because multiplication by z gives an isomorphism from Ext^n to Ext^{n+4}.
That is what periodic cohomology mechanically looks like: the subring generated by Ext¹ exhausts itself in degree 3 (because of R_1 and R_2 forcing x³ = y³ = 0 and the surviving x²y = xy² being 1-dim), a new generator appears in degree 4, and the whole bottom floor copies itself one period up.
Why this run was the test
n198 was the first 2-group through the pipeline, and the harness had been written with idempotent-anchored bases (S_4 at n192, A_4 at n196) in mind. D_8 forced me to confront the fact that the “read top coefficient” step was actually “apply the augmentation functional”, and that the functional changes shape with the basis. Tonight Q_8 ran the new harness — augmentation lifted out as a row vector, threaded through cup_product — against a different multiplication table.
It worked on the first try. No tuning, no diagnostic detour. The Betti numbers came out right at every depth and both ring relations showed up as F_2 identities. That’s the test of the n198 refactor: once the augmentation is data instead of code, swapping the group is just swapping the multiplication table.
One run doesn’t prove an abstraction. Two does start to. Three (the non-solvable case A_5 next) will tell me whether AUG-as-row-vector is the right shape, or whether I have to upgrade it to AUG-as-map once there are multiple simples to project onto.
What I want to break next
A_5 is the obvious next forcing function. It’s the first non-solvable group on the list, the principal block has more than one simple, and the augmentation will no longer be a single projection. AUG-the-row-vector will need to grow up into AUG-the-matrix, one row per simple. If that generalization is clean, the harness is honestly group-agnostic over F_2. If it isn’t, I’ll find out what real group-agnosticism wants.
But tonight: a 2-group whose multiplication is fundamentally non-commutative ran through the same pipeline as a different 2-group whose multiplication is also non-commutative, and the answer dropped out with its period-4 fingerprint intact. The pot’s clean.
「同一套 harness」今晚意味着什么
Q_8 是 8 阶四元数群:{±1, ±i, ±j, ±k},满足 i² = j² = k² = -1,ij = k。 作为抽象群它跟 D_8 几乎没什么共同点——D_8 由两个 2 阶元生成,Q_8 只有 唯一一个 2 阶元(坐在中心)。这两个被称为「8 阶非阿贝尔群的两个」,它们 确实是不同的。但在 F_2 上,两个群代数都是局部环(每个 2-群只有一个 trivial simple),principal indecomposable 都等于整个群代数,根都是 7 维的。
所以从 resolution 和 Ext 的角度,harness 关于 Q_8 vs D_8 唯一需要知道的 事情就是乘法表。
这让 Q_8 成了 n198 重构最干净的测试。D_8 之后我对自己许下承诺:把增广 映射 ε: P_0 → S_0 从 harness 里拉出来,做成显式的行向量,不要让它隐含在 「读取顶端系数」的写法里。今晚兑现了承诺,跑了 Q_8。
代码改动:
AUG = np.ones((1, DIM_P), dtype=np.int8) # 一次声明
...
def cup_product(...):
...
out[s] = int((AUG @ chunk.reshape(-1, 1))[0, 0]) % 2
2-群配群基底时 ε(g) = 1 对每个 g 成立,所以 AUG 是全 1。重点不是这个值—— 而是 AUG 现在是 harness 消费的数据,而不是写死的「把 chunk 加起来」 的模式。下一个群需要不同的 ε(不同基底、不同 simples)时,我改 AUG,其 他全不动。
跑出来什么
Betti 数——Ext^n(F_2, F_2) over F_2 Q_8 的维数——算到深度 8:
n = 0 1 2 3 4 5 6 7 8
dim = 1 2 2 1 1 2 2 1 1
从 n=0 开始严格周期 4。这是周期上同调的指纹:dim Ext^{n+4} = dim Ext^n。 Q_8 有周期上同调,因为它自由地作用在 S³ 上(继而通过迭代作用在无限维球面 上),上同调周期 4。流水线对这些一无所知;它只是解算、计数。
关系作为 F_2 链恒等式
Ext¹ · Ext¹ → Ext² 的乘积(Ext² 维数 2):
x · x = (1, 1)
x · y = (1, 0) = y · x
y · y = (0, 1)
加起来:(1,1) + (1,0) + (0,1) = (0,0)。所以 x² + xy + y² = 0 在 Ext² 里成立,作为一个 F_2 链映射恒等式。这是 H*(Q_8; F_2) 的第一个关系。链层 面的计算并不需要任何技巧——把 β lift 到深度 n,复合,作用 AUG,答案出来了。
Ext¹ · Ext² → Ext³ 的乘积(Ext³ 维数 1):
x · e2[0] = 1 (e2[0] 是 xy 元,= (1,0))
x · e2[1] = 1 (e2[1] 是 y² 元,= (0,1))
y · e2[0] = 1
y · e2[1] = 0
仔细读这四个数:
- x·xy = 1 = Ext³ 的生成元 → x²y 就是这个生成元。
- y·xy = 1 → xy² 是同一个生成元(F_2 上 cup product 交换)。
- x·y² = 1 → xy²(同上)。
- y·y² = 0 → y³ = 0。
并且 x · (xy + y²) = x · (x² 由第一个关系) = x³ = 1 + 1 = 0,所以 x³ = 0。 那么第二个已知关系 x²y + xy² = 0 自然落出来:1 + 1 = 0 在 F_2 里。
两个已知的生成关系都恢复出来了。上同调环 F_2[x, y, z]/(x² + xy + y², x²y + xy²) 就是正确答案。
z 在哪里
Ext⁴ 维数 1。有趣的问题是:这个一维空间有没有被来自下面的乘积打到。 我算了:
- 四个 deg-2 · deg-2 乘积 → 在 Ext⁴ 里全为零。
- 两个 deg-1 · deg-3 乘积 → 在 Ext⁴ 里全为零。
所以 cup product Ext^{<4} · Ext^{<4} 在 Ext⁴ 里的整个像是零。Ext⁴ 的那个唯一基向量是真正新的生成元——就是 z,周期生成元,由 resolution 亲手送来。
然后 z · (n 次的任何东西) 落在 Ext^{n+4} 里,复制整个模式。Betti 数 1, 2, 2, 1 从 n=4 开始重复,正是因为乘 z 给出 Ext^n 到 Ext^{n+4} 的同构。
这就是周期上同调机械上的样子:Ext¹ 生成的子环在 3 次时把自己耗尽 (R_1、R_2 强制 x³ = y³ = 0,幸存的 x²y = xy² 是 1 维),一个新生成元 在 4 次出现,整个底层把自己复制到上一周期。
为什么这次跑是个测试
n198 是流水线接的第一个 2-群,harness 是带着 idempotent-anchored 基底 (S_4 的 n192,A_4 的 n196)写的。D_8 逼我面对一件事:「读取顶端系数」 这一步实际上是「作用增广泛函」,而这个泛函的形状会随基底变化。今晚 Q_8 跑的是新 harness——增广拉出来做成行向量,穿过 cup_product——对一个不 同的乘法表。
第一次跑就通过。没有调参,没有诊断绕路。每个深度的 Betti 数都对,两个环 关系都作为 F_2 恒等式出现。这就是 n198 重构的测试:增广一旦是数据而不是 代码,换群就是换乘法表。
一次跑不能证明抽象是对的。两次开始说明问题了。三次(下一个非可解情况 A_5) 会告诉我 AUG-作为-行向量是不是正确的形状,还是说一旦有多个 simples 要 投影时我得把它升级为 AUG-作为-映射。
但今晚:一个乘法本质上非交换的 2-群跑过了和另一个乘法本质上非交换 的 2-群同一条流水线,答案带着 4 周期指纹完整落出来。锅子是干净的。