Steenrod代数模¶
让我们 p 做一个质数。该模式 p Steenrod代数 A 是连通代数吗? GF{p} 、的有限域 p 元素。此处提供的所有模块都将在 A 或者它的一个子Hopf代数。例如::
sage: A = SteenrodAlgebra(p=2)
模块类的构造函数将有序的度数组和定义模块的代数作为参数,以及一组可选的关系:
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
sage: F = SteenrodFPModule(A, [0, 1, 7]); F
Free graded left module on 3 generators over mod 2 Steenrod algebra, milnor basis
的模生成子。 A -模块 M 通过 g_{d_1}, ldots, g_{d_N} ,其中下标表示它们的学位。齐次度关系 n 有这样一种形式
where the homogeneous coefficients a_1, ldots, a_N lie in A, such that deg(a_i) + deg(g_{d_i}) = n for i = 1, ldots, N. To create a module with relations, the coefficients for each relation is given:
sage: r1 = [Sq(8), Sq(7), 0] # First relation
sage: r2 = [Sq(7), 0, 1] # Second relation
sage: M = SteenrodFPModule(A, [0, 1, 7], relations=[r1, r2]); M
Finitely presented left module on 3 generators and 2 relations
over mod 2 Steenrod algebra, milnor basis
生成的模块将有三个生成器,这些生成器的度数为:
sage: M.generator_degrees()
(0, 1, 7)
连通分次代数上的模的连通度是它的所有模生成元的最小次数。因此,如果模块不是平凡的,则连通性是一个整数::
sage: M.connectivity()
0
每个模定义在Steenrod代数或它的某个子Hopf代数上,由它的基环给出:
sage: M.base_ring()
mod 2 Steenrod algebra, milnor basis
sage: SteenrodFPModule(SteenrodAlgebra(p=2,profile=(3,2,1)), [0]).base_ring()
sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function
[3, 2, 1]
备注
叫唤 algebra()
不会返回所需的代数。用户应使用 base_ring()
方法。
模块元素¶
模块元素以生成器的形式显示,缺省情况下称为生成器 g[degree]
**
sage: M.an_element(n=5)
Sq(2,1)*g[0] + Sq(4)*g[1]
sage: e = M.an_element(n=15); e
Sq(0,0,0,1)*g[0] + Sq(1,2,1)*g[1] + Sq(8)*g[7]
sage: e.dense_coefficient_list()
[Sq(0,0,0,1), Sq(1,2,1), Sq(8)]
生成器本身是模块的元素::
sage: gens = M.generators(); gens
(g[0], g[1], g[7])
sage: gens[0] in M
True
可以从给定的一组代数系数中产生一个元素:
sage: coeffs = [Sq(15), Sq(10)*Sq(1,1), Sq(8)]
sage: x = M(coeffs); x
Sq(15)*g[0] + (Sq(4,1,1)+Sq(7,0,1)+Sq(11,1))*g[1] + Sq(8)*g[7]
模块操作生成新元素::
sage: Sq(2) * x
Sq(14,1)*g[0] + (Sq(7,1)+Sq(10))*g[7]
每个非零的齐次元素都有一个明确定义的度:
sage: x.degree()
15
但零元素不是::
sage: zero = M.zero(); zero
0
sage: zero.degree()
Traceback (most recent call last):
...
ValueError: the zero element does not have a well-defined degree
在这一点上,需要指出的是,在创建元素时,元素不会减少到最小表示形式。但是,可以强制执行标准化:
sage: g7 = M([0, 0, 1]); g7
g[7]
sage: g7.normalize()
Sq(7)*g[0]
sage: g7 == g7.normalize()
True
sage: m = M([Sq(7), 0, 0])
sage: s = m + g7; s # m and g7 are related by m = Sq(7)*g[0] = g[7],
Sq(7)*g[0] + g[7]
sage: s == 0 # so their sum should zero.
True
sage: s.normalize() # Its normalized form is more revealing.
0
对于每个整数 n ,次数为模元素的集合 n 在地面上形成一个向量空间 GF{p} 。该向量空间的基可计算如下:
sage: M.basis_elements(7)
(Sq(0,0,1)*g[0],
Sq(1,2)*g[0],
Sq(4,1)*g[0],
Sq(7)*g[0],
Sq(0,2)*g[1],
Sq(3,1)*g[1],
Sq(6)*g[1])
请注意,第三台发电机 g_7 在上面的基础上,7度显然是缺失的。这是因为这一关系 operatorname{Sq}^7(g_0) = g_7 。
可以产生向量空间演示:
sage: M.vector_presentation(5)
Vector space quotient V/W of dimension 4 over Finite Field of size 2 where
V: Vector space of dimension 4 over Finite Field of size 2
W: Vector space of degree 4 and dimension 0 over Finite Field of size 2
Basis matrix:
[]
给定任何元素,可以计算其相对于该基数的坐标:
sage: x = M.an_element(7); x
Sq(0,0,1)*g[0] + Sq(3,1)*g[1] + g[7]
sage: v = x.vector_presentation(); v
(1, 0, 0, 1, 0, 1, 0)
反过来,任何元素都可以通过指定其坐标来构造:
sage: x_ = M.element_from_coordinates((1, 0, 0, 1, 0, 1, 0), 7)
sage: x_
(Sq(0,0,1)+Sq(7))*g[0] + Sq(3,1)*g[1]
sage: x_ == x
True
模同态¶
的同态 A -模块 Mto N 是其底层的线性地图 GF{p} -向量空间,它与 A --模块结构。同态要求是齐次的,但不必是零度。
要创建同态,首先使用函数创建对所有此类同态的集合进行建模的对象 Hom
**
sage: Hko = SteenrodFPModule(A, [0], [[Sq(2)], [Sq(1)]])
sage: homspace = Hom(Hko, Hko); homspace
Set of Morphisms
from Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
to Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
in Category of finitely presented graded modules
over mod 2 Steenrod algebra, milnor basis
就像模元素一样,同态是使用同空间创建的。唯一的参数是上域中的元素列表,它给出域的模生成器的图像::
sage: gen = Hko.generator(0) # the generator of the codomain module
sage: values = [Sq(0, 0, 1) * gen]; values
[Sq(0,0,1)*g[0]]
sage: f = homspace(values)
所产生的同态是将 i -域的第TH生成器到 i -给定的第4个协域值::
sage: f
Module endomorphism of Finitely presented left module on 1 generator
and 2 relations over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> Sq(0,0,1)*g[0]
同态可以在域模块的元素上求值::
sage: v1 = f(Sq(4)*gen); v1
Sq(4,0,1)*g[0]
sage: v2 = f(Sq(2)*Sq(4)*gen); v2
(Sq(3,1,1)+Sq(6,0,1))*g[0]
并且他们尊重模块操作::
sage: f(Sq(4)*gen) == Sq(4)*f(gen)
True
sage: f(Sq(2)*Sq(4)*gen) == Sq(2)*Sq(4)*f(gen)
True
创建平凡的态射有一些方便的方法:
sage: x = Sq(4)*Sq(7)*gen
sage: x == 0
False
sage: zero_map = homspace.zero(); zero_map
Module endomorphism of Finitely presented left module on 1 generator
and 2 relations over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> 0
sage: zero_map(x)
0
sage: zero_map(x).is_zero()
True
以及单位自同态::
sage: one = Hom(Hko, Hko).identity(); one
Module endomorphism of Finitely presented left module on 1 generator
and 2 relations over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> g[0]
sage: one.is_endomorphism()
True
sage: one(x) == x
True
sage: one.is_identity()
True
任何非平凡同态都有一个明确定义的度:
sage: f.degree()
7
但就像模元素一样,平凡同态不::
sage: zero_map = homspace.zero()
sage: zero_map.degree()
Traceback (most recent call last):
...
ValueError: the zero morphism does not have a well-defined degree
任何两个同态可以相加,只要它们具有相同的次数::
sage: f1 = homspace([Hko([Sq(0,0,3) + Sq(0,2,0,1)])])
sage: f2 = homspace([Hko([Sq(8,2,1)])])
sage: (f1 + f2).is_zero()
False
sage: f1 + f2
Module endomorphism of Finitely presented left module on 1 generator
and 2 relations over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> (Sq(0,0,3)+Sq(0,2,0,1)+Sq(8,2,1))*g[0]
或当其中至少一个为零时::
sage: f + zero_map == f
True
但如果他们有不同的学位:
sage: F = SteenrodFPModule(A, [0])
sage: b4 = Hom(F, F)([Sq(4) * F.generator(0)])
sage: b8 = Hom(F, F)([Sq(8) * F.generator(0)])
sage: b4 + b8
Traceback (most recent call last):
...
ValueError: morphisms do not have the same degree
最后,存在加性逆数::
sage: (f - f) == 0
True
向量空间中同态的限制 n -维度模块元素是线性变换::
sage: f_21 = f.vector_presentation(21); f_21
Vector space morphism represented by the matrix:
[1 0 0 0 0 0]
[0 0 0 0 0 0]
[1 0 0 0 0 0]
Domain: Vector space quotient V/W of dimension 3 over Finite Field of size 2 where
V: Vector space of dimension 20 over Finite Field of size 2
W: Vector space of degree 20 and dimension 17 over Finite Field of size 2
Basis matrix:
[1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1]
[0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1]
[0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1]
[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1]
[0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1]
Codomain: Vector space quotient V/W of dimension 6 over Finite Field of size 2 where
V: Vector space of dimension 35 over Finite Field of size 2
W: Vector space of degree 35 and dimension 29 over Finite Field of size 2
Basis matrix:
29 x 35 dense matrix over Finite Field of size 2
这与其域和共域模块的矢量表示形式兼容:
sage: f.domain() is Hko
True
sage: f.codomain() is Hko
True
sage: f_21.domain() is Hko.vector_presentation(21)
True
sage: f_21.codomain() is Hko.vector_presentation(21 + f.degree())
True
同态的前象中的元素可以找到::
sage: f.solve(Sq(2)*Sq(4)*Sq(7)*gen)
Sq(0,2)*g[0]
sage: f.solve(Sq(8)*gen) is None
True
同态可以按预期合成::
sage: g = homspace([Sq(0, 0, 0, 1)*gen]); g
Module endomorphism of Finitely presented left module on 1 generator
and 2 relations over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> Sq(0,0,0,1)*g[0]
sage: g*f
Module endomorphism of Finitely presented left module on 1 generator
and 2 relations over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> Sq(0,0,1,1)*g[0]
sage: one = homspace.identity()
sage: f*one == f
True
同调代数¶
上的模块类别 A 是阿贝尔的,所以核、像和核都是存在的,可以用 the morphisms
。
备注
像这样的态射的方法
kernel_inclusion()
,cokernel_projection()
,image()
,homology()
计算与同态相关的子模和商模,但它们不返回模类的实例。相反,它们返回将这些模连接到产生它们的模的自然同态。
例如,函数 kernel_inclusion()
返回一个内射同态,它位于我们要求它计算的内核子模块上,而函数 cokernel_projection()
提供上核模上的满射同态。
在每种情况下,获取对模块实例的引用都需要调用 domain()
或 codomain()
关于返回的同态,视情况而定。
有关具体细节,请参阅每个函数的文档。
焦核¶
在下面的示例中,我们定义了一个循环模块 HZZ 有两种关系:首先是显式的,然后是自由模的同态的余核。然后,我们构造一个同构的候选者,并检查它既是内射的又是满射的::
sage: HZ = SteenrodFPModule(A, [0], [[Sq(1)]]); HZ
Finitely presented left module on 1 generator and 1 relation
over mod 2 Steenrod algebra, milnor basis
sage: F = SteenrodFPModule(A, [0])
sage: j = Hom(F, F)([Sq(1)*F.generator(0)])
sage: coker = j.cokernel_projection() # the natural quotient homomorphism onto the cokernel.
sage: hz = coker.codomain(); hz
Finitely presented left module on 1 generator and 1 relation
over mod 2 Steenrod algebra, milnor basis
sage: a = Hom(HZ, hz)([hz.generator(0)])
sage: a.is_injective()
True
sage: a.is_surjective()
True
内核¶
在计算同态的核时 f ,其结果是到整环的内射同态 f **
sage: k = f.kernel_inclusion(); k
Module morphism:
From: Finitely presented left module on 1 generator and 3 relations
over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
Defn: g[7] |--> Sq(0,0,1)*g[0]
sage: k.codomain() == f.domain()
True
sage: k.is_injective()
True
sage: ker = k.domain()
sage: ker
Finitely presented left module on 1 generator and 3 relations
over mod 2 Steenrod algebra, milnor basis
我们可以检查的内射图像 k 的核心是 f 通过展示出 f 因素包括 hcirc c ,在哪里 c 是到的余核的商映射 k ,以及 h 是内射的::
sage: K = k.codomain() # We want to check that this really is the kernel of f.
sage: coker = k.cokernel_projection() # coker is the natural map: Hko -> coker(f) with kernel K.
sage: h = Hom(coker.codomain(), Hko)(f.values())
sage: h*coker == f # Is K contained in ker(f) ?
True
sage: h.is_injective() # Is ker(f) contained in K ?
True
图片¶
方法 image()
行为类似,返回具有等于子模的图像的内射同态 operatorname{im}(f) **
sage: i = f.image(); i
Module morphism:
From: Finitely presented left module on 1 generator and 3 relations
over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
Defn: g[7] |--> Sq(0,0,1)*g[0]
sage: i.codomain() == f.codomain()
True
sage: i.is_injective()
True
我们可以检查的内射图像 i 是的形象 f 通过提升 f 完毕 i ,并表明升力是满足性的::
sage: f_ = f.lift(i); f_
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 3 relations
over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> g[7]
sage: i*f_ == f # Is im(i) contained in im(f) ?
True
sage: f_.is_surjective() # Is im(f) contained in im(i) ?
True
When a pair of composable homomorphisms gcirc f: Mto Nto L satisfy the condition gcirc f = 0, the sub-quotient ker(g) / operatorname{im}(f) can be computed and is given by the natural quotient homomorphism with domain ker(g):
sage: f * f == 0 # Does the kernel of f contain the image of f ?
True
sage: K = f.kernel_inclusion() # k: ker(f) -> Hko
sage: h = f.homology(f) # h: ker(f) -> ker(f) / im(f)
sage: h.codomain() # This is the homology module.
Finitely presented left module on 1 generator and 4 relations
over mod 2 Steenrod algebra, milnor basis
自由解决方案¶
最后,可以计算自由分辨率。这些计算通常需要一些时间才能完成,因此提高详细标志以输出进度信息通常是个好主意。
以下示例摘自 Michael Catanzaro's thesis 此软件的第一个版本出现的位置::
sage: res = Hko.resolution(6, verbose=True)
Computing f_1 (1/6)
Computing f_2 (2/6)
Computing using the profile:
(2, 1)
Resolving the kernel in the range of dimensions [1, 8]: 1 2 3 4 5 6 7 8.
Computing f_3 (3/6)
Computing using the profile:
(2, 1)
Resolving the kernel in the range of dimensions [2, 10]: 2 3 4 5 6 7 8 9 10.
Computing f_4 (4/6)
Computing using the profile:
(2, 1)
Resolving the kernel in the range of dimensions [3, 13]: 3 4 5 6 7 8 9 10 11 12 13.
Computing f_5 (5/6)
Computing using the profile:
(2, 1)
Resolving the kernel in the range of dimensions [4, 18]: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18.
Computing f_6 (6/6)
Computing using the profile:
(2, 1)
Resolving the kernel in the range of dimensions [5, 20]: 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20.
计算结果是分辨率中所有贴图的列表::
sage: [f.domain() for f in res]
[Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis,
Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis,
Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis,
Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis,
Free graded left module on 3 generators over mod 2 Steenrod algebra, milnor basis,
Free graded left module on 4 generators over mod 2 Steenrod algebra, milnor basis,
Free graded left module on 4 generators over mod 2 Steenrod algebra, milnor basis]
sage: def is_complex(res):
....: for i in range(len(res)-1):
....: f = (res[i]*res[i+1])
....: if not f.is_zero():
....: return False
....: return True
....:
sage: is_complex(res)
True
sage: def is_exact(res):
....: for i in range(len(res)-1):
....: h = res[i].homology(res[i+1])
....: if not h.codomain().is_trivial():
....: return False
....: return True
sage: is_exact(res)
True
sage: [r.codomain().generator_degrees() for r in res]
[(0,), (0,), (2, 1), (2, 4), (3, 7), (4, 8, 12), (5, 9, 13, 14)]
sage: [r.values() for r in res]
[(g[0],),
(Sq(2)*g[0], Sq(1)*g[0]),
(Sq(1)*g[1], Sq(3)*g[1] + Sq(2)*g[2]),
(Sq(1)*g[2], Sq(2,1)*g[2] + Sq(3)*g[4]),
(Sq(1)*g[3], Sq(2,1)*g[3] + Sq(1)*g[7], Sq(2,1)*g[7]),
(Sq(1)*g[4],
Sq(2,1)*g[4] + Sq(1)*g[8],
Sq(2,1)*g[8] + Sq(1)*g[12],
Sq(2)*g[12]),
(Sq(1)*g[5],
Sq(2,1)*g[5] + Sq(1)*g[9],
Sq(2,1)*g[9] + Sq(1)*g[13],
Sq(0,1)*g[13] + Sq(2)*g[14])]
示例:计算电梯数量¶
在这个更详细的例子中,我们展示了如何找到特定同态的所有可能的提升。我们将通过两种方式来实现这一点,作为有效性的检查,我们将在最后比较结果。
我们将使用mod 2 Steenrod代数上的下列模 A :
There is a natural projection q: HZZto Hko, and a non-trivial endomorphism of degree 28, represented as a degree zero map f: Sigma^{28}Hkoto Hko that we define below.
我们要解决的问题是找到所有可能的同态 f': Sigma^{28}Hkoto HZZ ,将下图制作成通勤三角形:
我们从定义模和同态开始 f 和 q 。在以下内容中,我们让 L = Sigma^{28}Hko **
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
sage: A = SteenrodAlgebra(2)
sage: Hko = SteenrodFPModule(A, [0], [[Sq(2)],[Sq(1)]])
sage: HZ = SteenrodFPModule(A, [0], [[Sq(1)]])
sage: L = Hko.suspension(28)
预测::
sage: q = Hom(HZ, Hko)([Hko.generator(0)])
sage: q
Module morphism:
From: Finitely presented left module on 1 generator and 1 relation
over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
Defn: g[0] |--> g[0]
要翻转的地图 q **
sage: f = Hom(L, Hko)([Sq(0,2,1,1)*Hko.generator(0)])
sage: f
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> Sq(0,2,1,1)*g[0]
sage: f.is_zero() # f is non-trivial.
False
我们将用两种方法计算不同电梯的数量。首先,我们将简单地计算所有可能地图的向量空间 L to HZZ ,然后检查其中哪些成为 f 当与 q **
sage: basis = Hom(L, HZ).basis_elements(0) # The basis for the vector space of degree 0 maps L -> HZ
sage: from itertools import product
sage: def from_coords(c):
....: '''
....: Create a linear combination of the three basis homomorphisms.
....: '''
....: return c[0]*basis[0] + c[1]*basis[1] + c[2]*basis[2]
sage: for coords in product([0,1], repeat=3):
....: print('%s: %s' % (coords, q*from_coords(coords) == f))
(0, 0, 0): False
(0, 0, 1): False
(0, 1, 0): True
(0, 1, 1): True
(1, 0, 0): True
(1, 0, 1): True
(1, 1, 0): False
(1, 1, 1): False
由此我们得出结论,八分之四的不同同态 L to HZZ 是升降机 f **
sage: lifts = [from_coords((0,1,0)),
....: from_coords((0,1,1)),
....: from_coords((1,0,0)),
....: from_coords((1,0,1))]
sage: lifts
[Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> Sq(6,5,1)*g[0],
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> (Sq(6,5,1)+Sq(18,1,1))*g[0],
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> Sq(10,1,0,1)*g[0],
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> (Sq(10,1,0,1)+Sq(18,1,1))*g[0]]
或者,我们可以使用函子的左正确度 operatorname{Hom}_A(L, -) 列举所有可能的托举 f 。从找到一个单独的电梯开始 f 在投影之上 q **
sage: fl = f.lift(q); fl
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations
over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation
over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> (Sq(4,3,0,1)+Sq(6,0,1,1)+Sq(7,2,0,1)+Sq(10,1,0,1))*g[0]
我们证实了 fl
确实是一架电梯::
sage: q * fl == f
True
有一个完全相同的序列
which means that the indeterminacy of choosing a lift for f in operatorname{Hom}_A(L, Hko) is represented by an element in operatorname{Hom}_A(L,ker(q)). Therefore, we can proceed to count the number of lifts by computing this vector space of homomorphisms:
sage: iK = q.kernel_inclusion()
sage: K = iK.domain()
sage: K.generator_degrees()
(2,)
sage: K.relations()
(Sq(2)*g[2],)
sage: ind = Hom(L, K).basis_elements(0); len(ind)
2
So now we know that the vector space of indeterminacies is 2-dimensional over the field of two elements. This means that there are four distinct lifts of f over q, and we can construct these by taking the one lift we already found, and add to it all the different elements in the image of iK_*:
sage: flift = [fl,
....: fl + iK * ind[0],
....: fl + iK * ind[1],
....: fl + iK * (ind[0] + ind[1])]
sage: flift
[Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> (Sq(4,3,0,1)+Sq(6,0,1,1)+Sq(7,2,0,1)+Sq(10,1,0,1))*g[0],
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> (Sq(0,7,1)+Sq(3,6,1)+Sq(4,1,3)+Sq(6,0,1,1)+Sq(6,5,1)+Sq(7,0,3))*g[0],
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> (Sq(4,3,0,1)+Sq(6,0,1,1)+Sq(7,2,0,1)+Sq(10,1,0,1)+Sq(12,3,1)+Sq(15,2,1)+Sq(18,1,1))*g[0],
Module morphism:
From: Finitely presented left module on 1 generator and 2 relations over mod 2 Steenrod algebra, milnor basis
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
Defn: g[28] |--> (Sq(0,7,1)+Sq(3,6,1)+Sq(4,1,3)+Sq(6,0,1,1)+Sq(6,5,1)+Sq(7,0,3)+Sq(12,3,1)+Sq(15,2,1)+Sq(18,1,1))*g[0]]
作为正确性的测试,我们现在比较这两组托举。从目前的情况来看,这些名单并不明显 flift
和 lifts
是相同的(直到列表元素的重新排序),因此下面的比较令人放心:
sage: flift[0] == lifts[2]
True
sage: flift[1] == lifts[0]
True
sage: flift[2] == lifts[3]
True
sage: flift[3] == lifts[1]
True