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.
--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 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.
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.
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