我担心这个问题有点技术性,但我希望有人可能会遇到类似的问题,或者给我一些指针。
如果G是一个组(在代数结构的意义上),并且如果g 1 ,...,g n 是G的元素,那么是否存在算法(或某些专用程序中的函数,如GAP)确定是否存在G的子组,使得这些元素形成子组的陪集的一组代表? (我们可以假设G是一个置换群,甚至可能是完全对称群。)
(当然有几种算法可以找到给定子组的陪集,比如Todd-Coxeter算法;这是一种反问题。)
谢谢, 丹尼尔
答案 0 :(得分:1)
我能想出的唯一解决方案就是天真。基本上,如果你有元素x1,...,xn
,你可以使用GAP的LowIndexSubgroupsFpGroup
来枚举索引为n的所有子组(丢弃索引为< n的子组)。然后你将遍历每个这样的组,生成陪集,并检查每个陪集是否包含其中一个元素。
这是我能想到的全部。如果你想出一个更好的方法,我会很感兴趣。
答案 1 :(得分:1)
您要确定的是,如果G的子组H是{g 1 ,...,g n }是{{ H的陪集的3}},即由H的陪集划分G的代表。
首先,按transversal定理,| G | = | G:H | * | G |,其中| G:H | = | G | / | H |是G的子群H的索引。如果{g 1 ,...,g n }确实是横向的,那么| G:H | = | {g 1 ,...,g n } |,因此算法中的第一个测试应该是n是否除| G |。
此外,由于g i 且g j 仅在g i g j -1 在H中,然后您可以检查索引为n的子组以查看它们是否避免g i g j -1 。另请注意(g i g j -1 )(g j g k -1 )= g i g k -1 ,因此您可以选择g的任何配对<子> I 子>秒。
如果n与| G |相比较小,则这应该足够了。
另一种方法是从H开始作为普通组,并添加集合H * = {h in G:h k != g i g j -1 ,对于所有i,j,k; i!= j}到H的生成器,直到你不能再添加(即直到它不再是一个子组)。然后,H是G的最大子群,使得H是H * 的子集。如果你能得到所有这样的H(并且它们足够大)那么你要寻找的子组必须是其中之一。
对于较大的n,这种方法会更好。
无论哪种方式,非指数时间方法都不明显。
编辑:我刚刚在这里讨论了这个话题:Lagrange's
答案 2 :(得分:0)
稍微不那么粗暴的方法是枚举索引n的所有子组,如Il-Bhima建议的那样,然后对于每个子组,检查每个x i * x j -1 以查看它是否包含在子组中。
当且仅当每个产品
时,元素x1,...,xn将成为子组的代表x i * x j -1 其中(i!= j)
不在子组中。
这种类型的检查似乎比生成所有陪集更简单,并且计算速度更快。