Erstellen wir mit Python eine kostenlose Gruppe

Was ist eine Gruppe?

Eine nicht leere Menge $ G $, die eine "binäre Operation" ausführen kann (Das heißt, wenn $ g, h \ in G $ ist, gibt es eine binäre Operation $ g \ cdot h $, und das Operationsergebnis ist auch das Element von G, dh $ g \ cdot h \ in G $) Diejenigen, die die folgenden Bedingungen erfüllen, werden als Gruppen bezeichnet.

Gruppenbeispiel

--Die Ganzzahlen, die hinzugefügt werden können, sind Gruppen (Einheitselement-> $ 0 $, inverses Element von $ a $ -> $ -a $, Kombinationsgesetz-> Addition enthält bekanntermaßen das Kombinationsgesetz)

Freie Gruppe

Freie Gruppen haben keine anderen Einschränkungen als die Definition von Gruppen.

Betrachten Sie hier $ F_2 $, das aus zwei Elementen in der freien Gruppe generiert wurde. Mit anderen Worten, wählen Sie aus dem Einheitselement, den beiden Elementen $ a, b \ in F_2 $ und den inversen Elementen $ a ^ {-1}, b ^ {-1} $ dasjenige aus, das Sie mögen und berechnen, und Sie mögen Denken Sie an etwas, das so oft wie möglich wiederholt werden kann.

F_2 = \\{e, a, b, a^{-1}, b^{-1}, aa, ab, ab^{-1}, ba, ba^{-1}, bb, a^{-1}b, a^{-1}a^{-1}, a^{-1}b^{-1}, \dots\\}

Was ist die umgekehrte Quelle?

Ich verstehe, dass die Umkehrung von $ a $ $ a ^ {-1} $ ist, aber was ist mit der Umkehrung einer Kombination wie $ ab ^ {-1} aab $? Tatsächlich ist dies die Umkehrung jedes Originals, und die Reihenfolge ist umgekehrt, dh $ b ^ {-1} a ^ {-1} a ^ {-1} ba ^ {-in diesem Fall. 1} $ ist die umgekehrte Quelle. In der Tat, wenn ich versuche, diese zu berechnen

\begin{eqnarray}
ab^{-1}aab\cdot b^{-1}a^{-1}a^{-1}ba^{-1} & = & ab^{-1}aa \cdot a^{-1}a^{-1}ba^{-1}\\
& = & ab^{-1}a \cdot a^{-1}ba^{-1}\\
& = & ab^{-1} \cdot ba^{-1}\\
& = & a \cdot a^{-1}\\
&=&e\\
\\
b^{-1}a^{-1}a^{-1}ba^{-1}\cdot ab^{-1}aab & = & b^{-1}a^{-1}a^{-1}b\cdot b^{-1}aab\\
& = & b^{-1}a^{-1}a^{-1}\cdot aab\\
& = & b^{-1}a^{-1}\cdot ab\\
& = & b^{-1}\cdot b\\
& = & e
\end{eqnarray}

Sicher können Sie sehen, dass es umgekehrt ist.

Lass es uns mit Python machen

Python ist einfach zu machen, da das Überladen von Operatoren einfach ist. Ich werde es sofort versuchen.

Als Implementierungsrichtlinie haben wir $ a $ und $ ab $ als Zeichenfolgen. Das umgekehrte Element wird auch von den Großbuchstaben A und B gehalten.

Verwenden Sie für die inverse Berechnung die Methode "str.swapcase", um den String umzudrehen. Ich benutze Python seit vielen Jahren, aber dies ist das erste Mal in meinem Leben, dass ich "Swapcase" benutze. Diese Methode ist eine Methode, die Groß- und Kleinbuchstaben in Klein- und Kleinbuchstaben macht.

'heLLo woRLd,ゎ ゎ ゎ ωπ'.swapcase() # =>Das Ergebnis ist das nächste
'HEllO WOrlD,ゎ ゎ ΩΠ'

Leider (?) Wird Small Hiragana nicht größer, aber es scheint, dass griechische Zeichen konvertiert werden, auch wenn es sich nicht um ASCII-Zeichen handelt. Nun, das interessiert mich nicht, also lasst es uns implementieren.

Ich habe über die wichtigen Dinge nachgedacht, also schreiben wir den Code.

from collections import namedtuple

FreeGroupBase = namedtuple('FreeGroupBase', 's')
class FreeGroup(FreeGroupBase):
    def __init__(self, s: str):
        if s.lower().replace('a', '').replace('b', ''):
            # a,Überprüfen Sie, ob es nur aus b generiert wird
            raise ValueError('Unexpected element is contained')

    #Quelle umkehren~Ich werde es wie ein nehmen
    def __invert__(self) -> 'FreeGroup':
        return FreeGroup(self.s.swapcase()[::-1])

    #Arithmetik*Ich werde es in tun
    def __mul__(self, other: 'FreeGroup') -> 'FreeGroup':
        return FreeGroup(self._mul_impl(self.s, other.s))

    @classmethod
    def _mul_impl(cls, lhs: str, rhs: str) -> str:
        'Implementierung der Arithmetik'
        if not lhs: #lhs ist das Einheitselement
            return rhs
        if not rhs: #rhs ist die Einheit
            return lhs
        if lhs[-1].swapcase() == rhs[0]: # ...a * ~a...In Form von a* ~kann abbrechen a
            return cls._mul_impl(lhs[:-1], rhs[1:])
        return lhs + rhs #Ansonsten ist es nur eine Folge von Zeichenfolgen

    def __repr__(self) -> 'str':
        if not self.s:
            return 'e'
        return ' * '.join(e if e.lower() else '~' + e.tolower() for e in self.s)

a = FreeGroup('a')
b = FreeGroup('b')
e = FreeGroup('')

g = a * b * b * a * ~b * ~b * ~a * a * b * (a * a * b)
print(g)
print(g * ~g)
print(~g * g)

Ja, es fühlt sich gut an.

Recommended Posts

Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie ein Verzeichnis mit Python
Lassen Sie uns eine GUI mit Python erstellen.
Erstellen Sie eine virtuelle Umgebung mit Python!
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie mit Python + PIL ein Dummy-Image.
Erstellen wir eine virtuelle Umgebung für Python
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Erstellen Sie ein Webframework mit Python! (1)
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Erstellen Sie eine Python-Umgebung
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Erstellen Sie mit Minette für Python einen LINE BOT
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Schritte zum Erstellen eines Twitter-Bots mit Python
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Erstellen Sie mit Python einen Entscheidungsbaum von 0 (1. Übersicht)
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie mit Python + Qt (PySide) ein farbspezifisches Widget.
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Erstellen Sie mit Python eine Datei im Photoshop-Format (.psd)
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Erstellen Sie ein Wox-Plugin (Python)
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Erstellen Sie ein 3D-GIF mit Python3
[Python] Generieren Sie ValueObject mit dem vollständigen Konstruktor mithilfe von Datenklassen
Erstellen Sie eine Homepage mit Django
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Warum nicht einfach mit Python eine stilvolle Tabelle erstellen?
Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Erstellen Sie einen Chatbot, der die kostenlose Eingabe mit Word2Vec unterstützt
Erstellen Sie ein Python-Numpy-Array
Machen Sie eine Lotterie mit Python
Schreiben wir Python mitinema4d.
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
[Python] Erstellen Sie mit np.arange ein Datumsarray mit beliebigen Inkrementen
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Lassen Sie uns Git-Cat mit Python bauen
Erstellen Sie mit Quarry einen gefälschten Minecraft-Server in Python
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen eines Python-Skripts
[Super einfach] Machen wir einen LINE BOT mit Python.
Erstellen Sie eine 2D-CAD-Datei ".dxf" mit Python [ezdxf]
Lassen Sie uns mit Python einen Web-Socket-Client erstellen. (Zugriffstoken-Authentifizierung)
[Python] Erstellen Sie mit tkinter einen Bildschirm zur Datei- und Ordnerpfadspezifikation