SStateAmaranth
KI-Arbeitsumgebung für Code

Äquivalenz erreichbarer DFA-Zustände

Gruppiere erreichbare Zustände eines vollständigen DFA mit höchstens 16 Zuständen und vier Symbolen nach akzeptierten Suffixen.

● ● ●StateAmaranth●
Arbeitsabläufe · Äquivalenz erreichbarer DFA-Zustände ×
def dfa_classes(table, accepting):
    if type(table) is not list or not 1 <= len(table) <= 16:
        raise ValueError("state count")
    n = len(table)
    if type(table[0]) is not list or not 1 <= len(table[0]) <= 4:
        raise ValueError("alphabet size")
    width = len(table[0])
    if any(type(row) is not list or len(row) != width or
           any(type(x) is not int or not 0 <= x < n for x in row)
           for row in table):
        raise ValueError("complete transition table")
    if type(accepting) is not set or any(
        type(x) is not int or not 0 <= x < n for x in accepting):
        raise ValueError("accepting states")
    seen, pending = {0}, [0]
    while pending:
        for dest in table[pending.pop()]:
            if dest not in seen:
                seen.add(dest); pending.append(dest)
    groups = [g for g in (seen & accepting, seen - accepting) if g]
    while True:
        owner = {s: i for i, g in enumerate(groups) for s in g}
        refined = []
        for group in groups:
            buckets = {}
            for state in sorted(group):
                key = tuple(owner[d] for d in table[state])
                buckets.setdefault(key, set()).add(state)
            refined.extend(buckets.values())
        if len(refined) == len(groups):
            return sorted([sorted(g) for g in refined])
        groups = refined
✳Gruppiere erreichbare Zustände eines vollständigen DFA mit höchstens 16 Zuständen und vier Symbolen nach akzeptierten Suffixen.
✓ ÄnderungenVor dem Anwenden prüfen ↗
Illustration der Arbeitsumgebung
ProjektPrüfe äquivalente und unterscheidbare Zustände, lasse unerreichbare aus und lehne ungültige Übergänge ab.
Vor dem Anwenden prüfenVergleichen Sie das tatsächliche Verhalten mit dem erwarteten Ergebnis. Klären Sie fehlgeschlagene Prüfungen vor weiteren Änderungen.
ModelleRichten Sie einen OpenAI-kompatiblen oder Anthropic-Endpunkt mit Basis-URL und gegebenenfalls API-Schlüssel ein. Testen Sie die Verbindung. Ein lokaler Modellserver muss laufen; entfernte Werkzeuge können Daten separat übertragen.
Arbeitsabläufe

Äquivalenz erreichbarer DFA-Zustände

Arbeitsabläufe ↗
Arbeitsabläufe
def dfa_classes(table, accepting):
    if type(table) is not list or not 1 <= len(table) <= 16:
        raise ValueError("state count")
    n = len(table)
    if type(table[0]) is not list or not 1 <= len(table[0]) <= 4:
        raise ValueError("alphabet size")
    width = len(table[0])
    if any(type(row) is not list or len(row) != width or
           any(type(x) is not int or not 0 <= x < n for x in row)
           for row in table):
        raise ValueError("complete transition table")
    if type(accepting) is not set or any(
        type(x) is not int or not 0 <= x < n for x in accepting):
        raise ValueError("accepting states")
    seen, pending = {0}, [0]
    while pending:
        for dest in table[pending.pop()]:
            if dest not in seen:
                seen.add(dest); pending.append(dest)
    groups = [g for g in (seen & accepting, seen - accepting) if g]
    while True:
        owner = {s: i for i, g in enumerate(groups) for s in g}
        refined = []
        for group in groups:
            buckets = {}
            for state in sorted(group):
                key = tuple(owner[d] for d in table[state])
                buckets.setdefault(key, set()).add(state)
            refined.extend(buckets.values())
        if len(refined) == len(groups):
            return sorted([sorted(g) for g in refined])
        groups = refined
KI-Arbeitsumgebung für Code

Zustandsbehafteten Code vereinfachen und beobachtbares Verhalten bewahren

StateAmaranth ist eine Programmierumgebung für Windows zur Untersuchung zustandsbehafteter Software mit einem verbundenen KI-Modell. Beginnen Sie mit den vom System akzeptierten Ereignissen und den Ergebnissen, die ein Aufrufer beobachten kann. Eine Anfrage zur Zustandsvereinfachung braucht diesen Kontext, damit eine kleinere Darstellung nicht auf Kosten des Anwendungsverhaltens zum Ziel wird.

Das mitgelieferte Beispiel deterministischer Zustände liefert eine konkrete Aufgabe: Äquivalenz zwischen erreichbaren Zuständen untersuchen und dabei das Akzeptanzverhalten bewahren. Bringen Sie Ihre Übergangstabelle und den vorgesehenen Anfangszustand in die Diskussion ein. Lassen Sie das Modell vor Änderungen erklären, welche Unterschiede relevant sind, besonders wenn die umgebende Anwendung mehr als ein einfaches Akzeptieren-oder-Ablehnen-Ergebnis offenlegt.

Prüfen Sie jede vorgeschlagene Gruppierung anhand kurzer Ereignisfolgen mit bekannten Ergebnissen. Nehmen Sie Pfade zu unterschiedlichen Zuständen und Fälle mit unerreichbaren Einträgen auf und führen Sie die Prüfungen in Ihrem Projekt aus. Untersuchen Sie auch die Schnittstelle, die die Gruppierung verwendet: Eine Änderung der Zustandsnummerierung oder Darstellung kann Aufrufer beschädigen, selbst wenn das Akzeptanzverhalten erhalten bleibt.

Ein uneingeschränktes KI-Modell lässt sich über einen unterstützten OpenAI-kompatiblen oder Anthropic-Endpunkt wählen, der eines anbietet. Konfigurieren Sie bei Bedarf Zugangsdaten und prüfen Sie Kontextgrenzen und Werkzeugverfügbarkeit. Das Antwortverhalten des Modells bleibt vom Endpunkt abhängig; Nachweise für eine sichere Vereinfachung liefern Ihre festgelegten Beobachtungen und durchgeführten Prüfungen.

Fragen zum Refactoring eines Zustandsautomaten

Was sollte in meiner Anfrage als beobachtbares Verhalten gelten?

Listen Sie Ausgaben oder Entscheidungen auf, auf die sich Aufrufer verlassen, nicht nur interne Zustandsnamen. Wenn Übergänge Aktionen oder Fehler auslösen, nehmen Sie diese auf. Das Beispiel auf Grundlage von Akzeptanz kann enger sein als das Verhalten, das Ihre tatsächliche Anwendung bewahren muss.

Können Zustände mit gleichem Akzeptanzverhalten in meiner App immer zusammengeführt werden?

Nicht ohne Prüfung des übrigen Vertrags. Ihre Anwendung kann Kennungen, Aktionen oder andere zustandsabhängige Effekte offenlegen. Lassen Sie den Assistenten diese Verbraucher untersuchen, bevor Sie ein allein auf Akzeptanz beruhendes Äquivalenzargument anwenden.

Wie sollten unerreichbare Zustände bei der Prüfung behandelt werden?

Geben Sie den Anfangszustand und die Ermittlung der Erreichbarkeit an. Ergänzen Sie einen Testfall mit unerreichbaren Einträgen und der vorgesehenen Ausgabe. Prüfen Sie vor einer Entfernung oder Neugruppierung, ob Aufrufer erwarten, dass diese Einträge identifizierbar bleiben.

Was sollte ich nach einer Änderung der Zustandskennungen testen?

Prüfen Sie Übergänge, gespeicherte Referenzen und jede Schnittstelle, die Kennungen anzeigt oder verwendet. Führen Sie neben Strukturprüfungen der zurückgegebenen Gruppierung auch Verhaltensfolgen aus. Erhaltene Akzeptanz allein beweist nicht, dass abhängiger Code die Darstellung weiterhin korrekt interpretiert.

Für Windows herunterladen ↗

StateAmaranth · Aktualisiert 2026-10-25