1.MuPAD-Combinat导览

这个包的主要目的是提供操作组合(Hopf)代数的工具(尽管有大量的组合特性可以自己使用)。为了搭建这个舞台,我们首先介绍了两个这样的代数示例的一些示例计算。然后,我们通过许多例子来说明预定义的组合对象,以及如何定义新的组合对象和预定义的组合代数,以及如何确定新的组合代数。我们通过对当前功能的总结来结束本次巡演。

1.1。组合代数的两个例子

在本教程中,我们假设Combinat公司包已加载到MuPAD中。根据您的安装,您可能需要输入以下命令包装(“Combinat”):包(“.”):取决于您的安装。

我们定义了对称函数代数的捷径麦克唐纳。1995财年:

S:=示例::SymmetricFunctions():

我们考虑变量中的三个第一初等对称多项式{x1,…,x6}:

字母表:=[x1,x2,x3,x4,x5,x6]:

e1:=展开(S::e([1])(字母));

数学

e2:=展开(S::e([2])(字母));

数学

e3:=展开(S::e([3])(字母表))

数学

可以看出,该系统区分了抽象(或“符号”)对称函数,例如S: :e([3]),以及它们在字母表上作为对称多项式的展开,存储在这里的变量中,例如e3(电子3).通话展开(f(字母表))对于抽象对称函数(f)在字母表上展开相应的对称多项式。

计算两个这样的对称多项式的乘积会得到一个巨大的多项式,这对于操作来说并不实用:

展开(e2*e3)

10 x 1 x 2 x 3 x 4 x 5+10 x 1 x2 x 3 x4 x6+10 x 2 x 2 x3 x5 x6+

 

10 x 1 x 2 x 4 x 5 x 6+10 x 1 x3 x4 x 5 x6+10 x2 x 3 x4 x5 x6+

 

                 2

3 x 1 x 2 x 3 x 4+。。。(输出一页)

 

         2   2

x1 x 2 x 3+。。。(另一页输出)

 

相反,如果我们使用对称性,前面的乘积可以简洁地表示为:

S::m(S::e([2])*S::e([3]));

数学

在这里,米[2,1,1]表示单项式对称函数数学通过将所有单项式相加,将一个变量提升到幂数学和三个变量的功率数学。乘积是在抽象对称函数的水平上计算的,而没有展开多项式,这样速度更快,所需的内存更少。

因此,对称函数提供了一个典型的示例组合代数它的基被组合对象(分区)索引,以及我们希望高效计算的位置。

作为另一个典型示例,我们目前正在使用Hivert_Novelli_Thibon。PBT.2002,Hivert_Novelli_Thibon。PBT.2003关于所谓Loday-Ronco代数Loday_Ronc.1998,这是理论物理学家Brouder_Frabetti特别感兴趣的。2001,Foissy.2001。论文。它是以二叉树为基础的组合代数。在这里,我们在表示为第页

.

LRA:=示例::LodayRoncoAlgebra():

 

例如,以以下两棵树为例:

t1:=LRA::p(组合::二进制树::unrank(6,4))

订单\

| / \  |

\    \ /

 

t2:=LRA::p(组合::二进制树::unrank(26,5))

订单\

|/\|

\ /\   /

 

从技术上讲,组合::二进制树::unrank(k,n)返回数学-第棵树数学节点,同时LRA::p(t)返回由索引的LRA::p的基本元素数学.

您可以将t1时间t2时间:

2*t2+3/4*t1

2 p/o \+3/4 p/o\

   |  / \ |        | / \  |

   \ /\   /        \    \ /

 

或购买他们的产品:

t2*t1

p/o\+p/o \+p/o\+p/o \+p/o\+/p/o\

|  / \    |    |  / \   |    |   / \  |    |  / \   |    |   / \  |    |    / \  |

| /\  \   |    | /\ /\  |    |  /\  \ |    | /\ /\  |    |  /\  \ |    |   /   \ |

|     /\  |    \    \ \ /    \ /\ \   /    \   /  \ /    \ /\/    /    |  /\     |

\       \ /                                                            \ /\      /

 

这个代数中有一个更复杂的乘积:

%输出分为两页;未试验过

(2*t2+3/4*t1)*t2

3/4 p/o\+3/4 p/o\+3/4 p/o\+

     | / \    |        | / \   |        | / \  |

     |    \   |        |    \  |        |  / \ |

     |     \  |        |    /\ |        |  \   |

     |     /\ |        |    \  |        |   \  |

\/\/\/\/\/\/\/

 

*4个

1.2. MuPAD-Combinate,逐步

我们现在更详细地描述所有这些是如何工作的。在下面,我们假设包复合式MuPAD已加载到MuPAD中。我们还假设读者对MuPAD语法有些熟悉,并且一些练习需要熟悉类似MuPAD的域编程的更高级功能。有关详细信息,请参阅MuPAD教程。在一读中可以安全地忽略技术性;设计说明.

1.使用预定义的组合函数和类

1.使用发电机

1.定义新的组合类

1.使用预定义的组合代数

1.定义新的组合代数

1.2.1. 示例应用程序

这里我们介绍一些同时涉及组合和代数工具的典型应用复合式MuPAD以及MuPAD的通用计算机代数工具。

首先,我们找到对称序群的群代数元素的最小多项式数学:

导出(组合):

域AlgSymGroup4

继承Dom::FreeModule(

域::ExpressionField(),

subClass(排列,参数=4);

类别类别::AlgebraWithBasis(Dom::ExpressionField());

 

基本名称:=保持(p);

exprTerm:=dom::exprTerm索引;

一个:=dom::项([1,2,3,4]);

mult2Basis:=dom::term@permutations::mult2;

结束域(_D):

x:=AlgSymGroup4([2,3,4,1]):

y:=x^0+a1*x^1+a2*x^2+a3*x^3+a4*x^4;

数学

 

求解([系数(y)],[a1,a2,a3,a4]);

数学

 

sub(z^0+a1*z^1+a2*z^2+a3*z^3+a4*z^4,op(last(1),1))

数学

 

其次,我们使用Pólya枚举理论来计算数学没有循环的节点。为此,我们建立了对称群数学被视为数学节点数学和诱导置换群数学在片场上数学TODO:数学“import_TeX(”\binom n 2“)”可能的边数学在这些节点之间:

S4:=Dom::对称组(4):

G4:=域::排列组集合(S4,2):

接下来我们计算循环指标数学。这是一个对称函数,对中排列的循环类型的统计信息进行编码数学:

Z4:=G4::循环指示器()

数学

这应解释如下:数学,有数学具有一个长度循环的置换数学和一个周期的长度数学关于这个对称函数有趣的事实是,当用字母表计算时数学,它返回函数的按权重生成序列数学到一组大小数学其元素权重为数学例如,可以将图形视为中的函数数学到一组数学元素。因此,未标记图的总数由下式给出:

Z4([1,1])

数学

而无标记图的生成序列数学按边数计算的节点为:

展开(Z4([1,q]))

数学

这样的计算是以一种相当有效的方式进行的,因此,例如计算具有20个节点的图的数量只需几秒钟:

(域::PermutationGroupOnSets(Dom::SymmetricGroup(20),

2)::循环指示器()([1,1])

数学

 

如果人们对用边数计算多重图(具有多条边的图)感兴趣,则可以在无限字母表上计算循环指示符多项式数学。尚未直接支持无限字母复合式MuPAD; 然而,由于对称幂和的计算,这可以很容易地用手完成数学在字母表上数学通过编码获得数学作为TODO:数学“1+q+q^2+符号::hellip=import_TeX(“\frac1{1-q}”)”以及替换数学通过数学在这个公式中:

H4:=_plus(_结果(op(term,1),

1/(1-q^k)$k操作(术语,2))

poly2list(Z4)中的$term)

数学

 

现在,可以通过泰勒展开获得具有0到4条边的多重图的数量:

系列(H4、q、5)

数学

 

事实上,这种方法用于在组合类中实现计数combint::integerVectorsModePermutationGroup组合:

M4:=组合::integerVectorsModPermutationGroup(G4):

 

M4::生成序列(q)

数学

 

M4::计数(i)$i=0..10

数学

   

1.2.2. 高级代数结构

当前的开发旨在为高级代数结构提供一个框架,例如具有多个基的模块、Hopf代数、操作数,以及李代数的长期计划。在本节中,我们将演示如何实现此类结构。在撰写本文时,用户界面还没有完全稳定,所以在尝试示例之前,请查看最新的可用文档。

1.具有多个基的代数

1.组合Hopf代数

1.2.3. 当前功能

我们通过对当前功能的总结来结束这次导游之旅。包的第一部分包括预定义的库,用于计算、枚举和操作标准组合对象(分区、组合、集合、单词、排列、tableaux、树、Symbol::hellip),以及帮助定义新组合类的通用工具:

大多数预定义库实际上都使用了这些引擎。

第二部分包括构建组合代数的工具。典型的用法是取一个由一些组合对象索引的基向量空间,为两个基元素定义乘积,并通过双线性扩展乘积。该系统自动处理代数元素的数据结构,通过不同基之间的转换的线性、双线性或结合性对函数进行扩展等。同样,可以定义余积、对极和类似运算符,以实现更复杂的结构,如Hopf代数。已经做了一些初步工作来操纵李代数和操作数。简而言之,该系统负责代数簿记,这样人们就可以专注于底层的组合学,而不是编程。

作为用法和应用的示例,我们提供了对称函数代数的库,并且我们有(目前还没有文献记载的)非交换对称函数代数、(自由)拟对称函数的代数、Loday-Ronco代数、Weyl代数、有理Steenrod代数的库,A类Hecke代数和Hecke-Clifford代数,以及置换群的不变环和群代数。

在未来(或不久的将来,如果您能帮助我们!),我们计划为自由对称代数、矩阵拟对称函数代数、下降和峰值代数、一般Ore-代数、对称Weyl代数、多对称函数代数,分幂代数、自由李代数等提供预定义的库。

最后,我们提供了用于操作加权自动机和相关(热带)半环的库。