Si vous n'êtes pas familier avec la théorie de la tresse, je vous recommande de lire ceci en premier. Cette question suppose que vous êtes au moins familier avec les concepts en jeu et suppose que vous connaissez bien la théorie des groupes
Définissons σ n comme la tresse dans laquelle le n ème brin (un indexé) du haut croise le n + 1 ème brin, et σ n - comme l'inverse de σ n (c'est-à-dire le n + 1 ème brin croise le n e brin).
Le groupe de tresses B n est alors généré par <σ 1 , σ 2 , σ 3 ,. . . , σ n-1 > . Ainsi, chaque tresse sur B n peut être écrite comme le produit des σ-tresses. 1
Déterminer si deux tresses sur un groupe sont égales n'est pas une tâche simple. Il peut être assez évident que σ 1 σ 3 = σ 3 σ 1 , mais il est un peu moins évident que par exemple σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 . 2
La question est donc "Comment déterminer si deux tresses sont identiques?". Eh bien, les deux exemples ci-dessus représentent chacun un peu de cela. En général, les relations suivantes, appelées relations d'Artin, sont vraies:
σ i σ j = σ j σ i ; i - j> 1
σ i σ i + 1 σ i = σ i + 1 σ i σ i + 1
Nous pouvons utiliser ces deux relations conjointement avec les axiomes du groupe pour prouver que toutes les tresses égales sont égales. Ainsi, deux tresses sont égales si l'application répétée de ces relations et les axiomes de groupe peuvent le démontrer.
Tâche
Vous allez écrire un programme ou une fonction pour prendre deux tresses et déterminer si elles sont égales ou non. Vous pouvez également éventuellement prendre un entier positif représentant l'ordre du groupe.
Il s'agit d'une question de code-golf donc les réponses seront notées en octets, avec moins d'octets étant mieux.
Entrée et sortie
Vous devez représenter une tresse comme une liste ordonnée de générateurs (ou toute structure équivalente, par exemple un vecteur). Vous pouvez représenter les générateurs sous toute forme raisonnable (par exemple, un entier, deux tuple d'un entier positif et un booléen).
À égalité avec les règles de problème de descente standard, vous devez sortir l'une des deux valeurs distinctes, un accepter un rejet.
Cas de test
[], [] -> True
[1,-1], [] -> True
[1,2,1], [2,1,2] -> True
[1,3], [3,1] -> True
[1,3,2,1],[3,2,1,2] -> True
[1,4,-4,3,2,1], [3,2,1,2] -> True
[2,2,1], [2,1,2] -> False
[1,2,-1], [-1,2,1] -> False
[1,1,1,2],[1,1,2] -> False
1: Notez que si B n satisfait toutes les propriétés d'un groupe, l'opération sur notre groupe de tresses n'est pas commutative, et donc notre groupe n'est pas abélien.
2: Si vous souhaitez vérifier par vous-même, je suggère d'appliquer σ 1 - des deux côtés.Si vous dessinez les deux sur du papier ou les modélisez avec des chaînes réelles, il devrait devenir évident pourquoi c'est le cas.
[],[]
[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE