用迭代器索引变量

Indexing variables with iterators

我想用列表 X 中给出的许多生成器生成一个 FreeAlgebra。

X=[var('X_%d%d' %(i,j)) for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()

我如何使用迭代器索引变量,例如。比如在 F

中写一个关系字典
X_ij * X_jk : X_jk * X_ij + X_ik, for i in range(1,10) for j in range(i+1,10) for k in range(j+1,10) ?

那我需要

A = F.g_algebra(D)

如果我分别写每个关系,它会起作用,X_12 * X_23 : X_23 * X_12 + X_13,但我希望它适用于任意数量的变量。

我试过

X[i]*X[j] : X[j]*X[i] + X[some formula],

但似乎列表 X 并不知道其元素来自代数 F(也不是 A)。

这可能是一个非常基本的问题 - 我是 Sage 的新手。 感谢您的帮助。

列表X仍然是一个符号变量列表(具有注入的副作用,然后您可以通过注入自由代数变量来覆盖它)。这是一个副作用较少的,但还是一样的。

X = ['X_%d%d' %(i,j)  for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()

但是如果你随后强迫他们每个人都F你就没事了 - see this example:

X = ['X_%d%d' %(i,j)  for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()
print type(X_12)
[F(x)*X_12 for x in X]

这会给你你想要的。请注意 X_12 确实是 F 的元素,但 x in X 不是。