- À propos de sympy.combinatorics
- Installation et import
- Création et manipulation de permutations
- Opérations sur les permutations
- Groupes de permutations
- Orbites et stabilisateurs
- Groupes diédraux et cycliques
- Sous-groupes et tests d'appartenance
- Partitions d'ensembles
- Calcul de l'ordre et des classes de conjugaison
Ce tutoriel vous guide à travers le module sympy.combinatorics, une bibliothèque Python pour la manipulation symbolique de structures combinatoires : permutations, groupes de permutations, partitions, etc. Il est structuré en sections numérotées avec des exemples de code exécutables.
1. À propos de sympy.combinatorics
sympy.combinatorics est un sous‑module de SymPy dédié à la combinatoire algébrique. Il fournit des classes pour manipuler des permutations, des groupes de permutations (comme les groupes symétriques, alternés, diédraux), et des partitions d'entiers ou d'ensembles. Les calculs sont effectués de manière symbolique et exacte.
2. Installation et import
Assurez‑vous que SymPy est installé (pip install sympy). Importez ensuite les classes principales depuis sympy.combinatorics.
|
1 2 3 4 5 |
# Import des modules nécessaires from sympy.combinatorics import Permutation, Cycle, PermutationGroup from sympy.combinatorics.named_groups import SymmetricGroup, AlternatingGroup, DihedralGroup, CyclicGroup from sympy import init_printing init_printing() |
Sortie : Aucune, l'importation est réussie si aucune erreur n'est levée.
3. Création de permutations avec la notation cyclique
La manière la plus naturelle de définir une permutation est d'utiliser la notation cyclique : (0 1 2) signifie que 0 → 1, 1 → 2, 2 → 0. On utilise la classe Cycle pour construire les cycles.
|
1 2 3 4 5 6 7 8 9 10 11 |
# Permutation en notation cyclique : (0 1 2) p = Permutation(Cycle(0, 1, 2)) print("Permutation p :", p) # Permutation avec deux cycles disjoints : (0 1)(2 3) q = Permutation(Cycle(0, 1)(2, 3)) print("Permutation q :", q) # Permutation avec un point fixe : (0 2) laisse 1 invariant r = Permutation(Cycle(0, 2)) print("Permutation r :", r) |
Sortie :
|
1 2 3 |
Permutation p : (0 1 2) Permutation q : (0 1)(2 3) Permutation r : (0 2) |
4. Opérations sur les permutations
Les permutations peuvent être composées, inversées, élevées à une puissance, etc. La composition se fait de gauche à droite (comme en mathématiques) : a * b signifie appliquer b puis a.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Définition de deux permutations en notation cyclique a = Permutation(Cycle(0, 1, 2)) # (0 1 2) b = Permutation(Cycle(1, 2)) # (1 2) print("a =", a) print("b =", b) # Composition : a * b c = a * b print("a * b =", c) # Inverse de a inv_a = a.inverse() print("a^{-1} =", inv_a) # Puissance de a a2 = a ** 2 print("a^2 =", a2) |
Sortie :
|
1 2 3 4 5 |
a = (0 1 2) b = (1 2) a * b = (0 2 1) a^{-1} = (0 2 1) a^2 = (0 2 1) |
5. Groupes de permutations
La classe PermutationGroup permet de définir un groupe engendré par une liste de permutations. Des groupes prédéfinis comme SymmetricGroup, AlternatingGroup ou DihedralGroup sont également disponibles.
|
1 2 3 4 5 6 7 8 9 10 |
# Groupe symétrique S3 (permutations de 3 éléments) S3 = SymmetricGroup(3) print("Groupe S3 :", S3) print("Ordre de S3 :", S3.order()) print("Générateurs de S3 :", S3.generators) # Groupe alterné A4 (permutations paires de 4 éléments) A4 = AlternatingGroup(4) print("Groupe A4 :", A4) print("Ordre de A4 :", A4.order()) |
Sortie :
|
1 2 3 4 5 |
Groupe S3 : PermutationGroup([(0 1 2), (0 1)]) Ordre de S3 : 6 Générateurs de S3 : [(0 1 2), (0 1)] Groupe A4 : PermutationGroup([(0 1 2), (0 2 3)]) Ordre de A4 : 12 |
6. Orbites et stabilisateurs
Pour un groupe de permutations agissant sur un ensemble, on peut calculer l'orbite d'un point et le stabilisateur d'un point (ou d'un ensemble).
|
1 2 3 4 5 6 7 8 9 10 11 |
# Groupe S3 agissant sur {0, 1, 2} G = SymmetricGroup(3) # Orbite de 0 orbite_0 = G.orbit(0) print("Orbite de 0 dans S3 :", orbite_0) # Stabilisateur de 0 stab_0 = G.stabilizer(0) print("Stabilisateur de 0 dans S3 :", stab_0) print("Ordre du stabilisateur :", stab_0.order()) |
Sortie :
|
1 2 3 |
Orbite de 0 dans S3 : {0, 1, 2} Stabilisateur de 0 dans S3 : PermutationGroup([(1 2)]) Ordre du stabilisateur : 2 |
7. Groupes diédraux et cycliques
Les groupes DihedralGroup et CyclicGroup sont des groupes de symétrie très utilisés. Le groupe diédral D_n est le groupe des symétries d'un polygone régulier à n côtés.
|
1 2 3 4 5 6 7 8 9 10 |
# Groupe diédral D4 (symétries du carré) D4 = DihedralGroup(4) print("Groupe D4 :", D4) print("Ordre de D4 :", D4.order()) print("Générateurs de D4 :", D4.generators) # Groupe cyclique C5 C5 = CyclicGroup(5) print("Groupe C5 :", C5) print("Ordre de C5 :", C5.order()) |
Sortie :
|
1 2 3 4 5 |
Groupe D4 : PermutationGroup([(0 1 2 3), (0 3)(1 2)]) Ordre de D4 : 8 Générateurs de D4 : [(0 1 2 3), (0 3)(1 2)] Groupe C5 : PermutationGroup([(0 1 2 3 4)]) Ordre de C5 : 5 |
8. Sous-groupes et tests d'appartenance
On peut tester si une permutation appartient à un groupe, ou si un groupe est un sous-groupe d'un autre.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Groupe S3 G = SymmetricGroup(3) # Une permutation en notation cyclique p = Permutation(Cycle(0, 1, 2)) # (0 1 2) # Test d'appartenance print("p appartient à G ?", p in G) # Création d'un sous-groupe engendré par p H = PermutationGroup(p) print("Sous-groupe H engendré par p :", H) print("H est sous-groupe de G ?", H.is_subgroup(G)) |
Sortie :
|
1 2 3 |
p appartient à G ? True Sous-groupe H engendré par p : PermutationGroup([(0 1 2)]) H est sous-groupe de G ? True |
9. Partitions d'ensembles
Le module sympy.combinatorics.partitions permet de manipuler des partitions d'entiers ou d'ensembles. On peut les utiliser pour des problèmes de combinatoire ou de théorie des représentations.
|
1 2 3 4 5 6 7 8 9 10 11 |
from sympy.combinatorics.partitions import Partition, IntegerPartition # Partition d'un ensemble (par blocs) p = Partition([0, 1], [2, 3]) print("Partition de l'ensemble :", p) print("Blocs :", p.parts) # Partition d'un entier (ex: 5 = 3 + 1 + 1) ipart = IntegerPartition(5, [3, 1, 1]) print("Partition de 5 :", ipart) print("Représentation :", ipart.partition) |
Sortie :
|
1 2 3 4 |
Partition de l'ensemble : Partition([[0, 1], [2, 3]]) Blocs : [[0, 1], [2, 3]] Partition de 5 : [3, 1, 1] Représentation : [3, 1, 1] |
10. Calcul de l'ordre et des classes de conjugaison
Pour un groupe donné, on peut calculer son ordre (nombre d'éléments) et ses classes de conjugaison. Ces notions sont fondamentales en théorie des groupes.
|
1 2 3 4 5 6 7 8 9 10 |
# Groupe symétrique S4 S4 = SymmetricGroup(4) print("Ordre de S4 :", S4.order()) # Classes de conjugaison de S3 S3 = SymmetricGroup(3) classes = S3.conjugacy_classes() print("Classes de conjugaison de S3 :") for i, cls in enumerate(classes): print(f"Classe {i+1} : {cls}") |
Sortie :
|
1 2 3 4 |
Ordre de S4 : 24 Classes de conjugaison de S3 : Classe 1 : [Permutation(()), Permutation((0 1 2)), Permutation((0 2 1))] Classe 2 : [Permutation((0 1)), Permutation((0 2)), Permutation((1 2))] |
Auteur : Younes Derfoufi Lieu de travail : CRMEF OUJDA Site Web : www.tresfacile.net Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile Me contacter : https://www.tresfacile.net/me-contacter/



