Einige Fragen zum Überprüfen, ob eine Menge in C ++ eine algebraische Gruppe ist

8

Ich habe begonnen, eine Bibliothek zu erstellen, um Dinge mit abstrakter Algebra zu tun. Im Moment versuche ich eine Funktion zu erstellen, die überprüft, ob ein Set eine Gruppe ist. Es sollte selbsterklärend sein:

In der Mathematik ist eine Gruppe eine Menge von Elementen zusammen mit einer Operation, die zwei beliebige ihrer Elemente zu einem dritten Element kombiniert, das vier Bedingungen erfüllt, die Gruppenaxiome genannt werden: Schließung, Assoziativität, Identität und Invertierbarkeit. Eines der bekanntesten Beispiele für eine Gruppe ist die Menge der ganzen Zahlen zusammen mit der Additionsoperation; das Hinzufügen von zwei Ganzzahlen bildet eine andere Ganzzahl. ( Ссылка )

%Vor%

Keine Compilerfehler, aber ich habe ein paar Fragen:

  • Wie kann ich nach (3) und (4) in meiner Loopsammlung suchen? Ich
  • Später möchte ich prüfen, ob ganze Gruppen nativer Objekte wie int und long Gruppen sind. Wie kann ich S1 gleich einem std::set aller long s setzen?
Donald Knuth 28.05.2014, 21:35
quelle

2 Antworten

2

Sie sollten eine Klasse erstellen, um den Begriff einer Menge mit einer Operation op ( + ) auszudrücken (Hinweis: Dieses " + " ist keine gewöhnliche Arithmetik + so

%Vor%

ist falsch , dies sollte

sein %Vor%

), Werte (oder eher Elemente) dieser Menge (ein Container) und ein spezielles Element namens 1 (oder e ) (es ist 0 für ganze Zahlen) R mit (Operation genannt) addition + , aber 1 für ganze Zahlen R \ 0 mit Multiplikation "x"). Sie müssen Ihrer Klasse ein 1 hinzufügen. Es ist unbedingt notwendig, (3) und (4) zu überprüfen. Außerdem ist die Identität 1 im Allgemeinen keine Ganzzahl 0, sondern eine Beschreibung eines speziellen Identitätselements , das dasselbe Element x ergibt, wenn x selbst ist unterliegt der Operation + mit 1 , ( e ), und 1 > + x = x. (Sie können einen Ausdruck überspringen, wenn die Operation "+" kommutativ ist, was gilt, wenn S eine abelsche Gruppe ist).

Nun, was Sie tun werden, hängt von der Sache ab, wenn Sie einen Tipp-Parameter einführen möchten oder nicht. Um ein identity-Element in einer gegebenen Menge mit einem Hinweis zu finden, können Sie

schreiben %Vor%

Dies ist nicht einfach, um ein Identitätselement allgemein anzugeben. Ein einfaches Beispiel von ganzen Zahlen oder anderen arithmetischen Typen mit unserem bekannten + ist nur eines der einfachsten und nicht erweiterbar, dh im Bereich der Bruchteile von Ring Z, dem Q (Z) , e für + ist gegeben durch ein Paar [0,1] und für " x " durch [1,1]. Um dies allgemeiner zu machen, müssen Sie über Elemente iterieren, wählen Sie e und rufen Sie op auf, um zu prüfen, ob (3) für alle Elemente gilt.

%Vor%     
4pie0 28.05.2014, 22:06
quelle
0

Zuerst ein Fehler: Assoziativität erfordert auch op, nicht +.
Schließung sieht gut aus.

Neutrales Element: Nun, du musst nach einem Element N suchen damit jedes Element A der Menge op(A,N)=A und op(N,A)=A erfüllt (Diese zwei Dinge sind nicht das Gleiche)
Es muss so ein N geben, oder es ist keine Gruppe Probieren Sie jedes Element für N aus, und in der N-Schleife jedes A ...

Und inverse Elemente: Für jedes Element A muss ein B sein (kann dasselbe sein wie A)
also op(A,B)=N (N von vorher).
Diese Dinge passen einfach in deine Schleifen.
Every A {Every B {...}}
N ist bekannt.

ABER: Wenn Sie mit großen Datensätzen arbeiten wollen, wie alle langen (oder sogar unendlichen) Dinge,
Du kannst so einfache Methoden nicht mehr verwenden (selbst die Assoziativität ist schlecht)

Und die Frage nach der Neuimplementierung von Mathematica usw. ist ein bisschen viel ...

    
deviantfan 28.05.2014 21:50
quelle