Implantation des bases des polynômes en Sage
Créé en 2005, le logiciel Sage [S+11] a pris une place importante au sein des systèmes de calcul formel pour la recherche en mathématique et plus particulière- ment en combinatoire. Il a pour but de proposer une alternative libre et gratuite aux logiciels traditionnels tels que Maple ou Magma. Sous licence GPL, il s’ajoute à la grande famille des logiciels libres développés dans la philosophie du système d’exploitation Linux. Le développement libre n’est pas nouveau en mathématiques et Sage se propose aussi de réunir au sein d’un même logiciel les outils des dif- férentes communautés. On y trouve entre autres des programmes tels que GAP et Symmetrica. Son modèle de développement est décentralisé, basé sur la commu- nauté. Chaque utilisateur peut devenir développeur et proposer des modifications, corrections ou ajouts au logiciel. Ces propositions sont envoyées sous formes de patchs et validées par d’autres développeurs avant d’être incorporées à une nou- velle version du logiciel. Dans le domaine du calcul formel traditionnel, Sage a atteint un niveau comparable aux logiciels classiques. Il a été ajouté récemment à la liste des logiciels de calculs formels admis au concours de l’agrégation. On pourra lire [CCD+13] pour se familiariser avec ses principales fonctionnalités.Le modèle de développement de Sage trouve un intérêt particulier en combi- natoire algébrique. La recherche en combinatoire est souvent basée sur une explo- ration préliminaire par le calcul informatique. Les outils nécessaires font appel à de nombreuses branches des mathématiques : algèbre linéaire, théorie des groupes, théorie des représentations… Le développement d’une base commune par les dif- férentes communautés est donc un atout majeur. Avant même l’arrivée de Sage, un projet Mupad-Combinat avait été mis en place au sein du logiciel Mupad. Cepen- dant, les possibilités de développement ont été limitées par les contraintes liées au logiciel, en particulier car il était propriétaire. En 2008, la communauté combinat décide de rejoindre Sage devenant alors Sage-combinat [SCc08]. Concrètement, Sage-combinat est un ensemble de patchs qui visent à améliorer l’intégration de la combinatoire dans Sage. Sage-combinat est aussi et surtout une communauté de chercheurs / développeurs qui créent, testent et intègrent ces patchs.Il existait déjà dans Sage une implantation classique des polynômes multivar-iés en tant qu’expressions formelles en plusieurs variables. Cette implantation ne répond pas aux besoins de calculs sur des bases multiples telles que Schubert, Grothendieck ou les polynômes clés. En effet, on veut pouvoir travailler formelle- ment sur les éléments de ces bases, leur appliquer des opérateurs, les convertir d’une base à l’autre et les développer sur la base des monômes seulement si néces- saire. Pour ce faire, nous considérons un polynôme dans une base quelconque comme une somme formelle de vecteurs. L’interprétation de ce vecteur est donné par la base : sur les monômes le vecteur est un exposant, sur les autres bases c’est ce que nous avons décrit dans le paragraphe 3.3. Cela nous permet aussi de travailler en un nombre quelconque de variables, les variables n’étant plus données chacune comme des éléments formels mais seulement par la taille du vecteur. Cette approche n’est pas nouvelle, on la trouve en particulier au sein du logiciel ACE développé sous Maple [Vei96] ou en partie dans le logiciel Symmetrica. Cepen- dant, il n’existait pas encore de version en Sage, et donc accessible à tous, d’une telle implantation. Ce faisant, nous nous inscrivons ici au sein d’un projet plus important de développement de la combinatoire dans Sage. Notre implantation a fait l’objet de plusieurs présentation et d’une publication [Pon11].
Outre les aspects philosophiques qui nous ont fait choisir un logiciel libre plutôt que propriétaire comme Maple, le choix de Sage est aussi d’ordre technique. Sage est développé en python et utilise une architecture orientée objet. Toute notre implantation est basée sur cette architecture, utilisant de façon avancée l’héritage et la classification. En particulier, nous utilisons le modèle de développement en Catégories / Parents / Éléments mis en place par Nicolas Thiéry [NT09]. Par ailleurs, nous avons pu profiter des implantations déjà existantes en Sage comme les groupes de Coxeter ou les modules libres.Dans le paragraphe 5.1, nous commençons par présenter les fonctionnalités de base du logiciel : création d’un polynôme, application d’un opérateur, changement de base, etc. Le paragraphe 5.2 nous sert à expliquer l’architecture globale du pro- jet et nos choix d’implantation. Enfin, paragraphe 5.3, nous donnons des exemples d’applications avancées, et en particulier, les calculs du chapitre 4.