SStateAmaranth
AI-werkruimte voor code

Equivalentie van bereikbare DFA-toestanden

Groepeer bereikbare toestanden van een volledige DFA met maximaal 16 toestanden en vier symbolen op geaccepteerde achtervoegsels.

● ● ●StateAmaranth●
Werkprocessen · Equivalentie van bereikbare DFA-toestanden ×
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
✳Groepeer bereikbare toestanden van een volledige DFA met maximaal 16 toestanden en vier symbolen op geaccepteerde achtervoegsels.
✓ WijzigingenControleer vóór het toepassen ↗
Illustratie van de werkruimte
ProjectTest equivalente en onderscheidbare toestanden, sluit onbereikbare uit en wijs ongeldige overgangen af.
Controleer vóór het toepassenVergelijk het werkelijke gedrag met het verwachte resultaat. Onderzoek een mislukte controle voordat je verdergaat met wijzigingen.
ModellenStel een OpenAI-compatibel of Anthropic-endpoint in met de basis-URL en zo nodig een API-sleutel. Test de verbinding. Een lokale modelserver moet actief zijn; externe hulpmiddelen kunnen apart gegevens versturen.
Werkprocessen

Equivalentie van bereikbare DFA-toestanden

Werkprocessen ↗
Werkprocessen
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
AI-werkruimte voor code

Vereenvoudig code met toestand en behoud waarneembaar gedrag

StateAmaranth is een programmeeromgeving voor Windows om software met toestand te inspecteren met een verbonden AI-model. Begin met de gebeurtenissen die het systeem accepteert en de uitkomsten die een aanroeper kan waarnemen. Een verzoek om toestanden te vereenvoudigen heeft die context nodig, zodat een kleinere representatie niet ten koste van het toepassingsgedrag het doel wordt.

Het aangeleverde voorbeeld met deterministische toestanden biedt één concrete taak: equivalentie tussen bereikbare toestanden onderzoeken met behoud van acceptatiegedrag. Neem je overgangstabel en bedoelde begintoestand mee in het gesprek. Vraag het model uit te leggen welke verschillen belangrijk zijn voordat je wijzigingen vraagt, vooral als de omringende toepassing meer toont dan alleen accepteren of weigeren.

Beoordeel elke voorgestelde groepering met korte gebeurtenisreeksen met bekende uitkomsten. Neem paden naar verschillende toestanden en gevallen met onbereikbare vermeldingen mee en voer de controles in je project uit. Bekijk ook de interface die de groepering gebruikt, want een wijziging in toestandsnummering of representatie kan aanroepers breken, ook als acceptatiegedrag behouden blijft.

Een AI-model zonder beperkingen kan worden gekozen via een ondersteund OpenAI-compatibel of Anthropic-endpoint dat er één aanbiedt. Stel zo nodig inloggegevens in en controleer contextlimieten en beschikbare tools. Het antwoordgedrag van het model blijft afhankelijk van het endpoint; bewijs voor een veilige vereenvoudiging komt uit jouw vastgelegde waarnemingen en controles.

Vragen bij een toestandsmachinerefactor

Wat moet in mijn verzoek als waarneembaar gedrag gelden?

Noem de uitvoer of beslissingen waarop aanroepers vertrouwen, niet alleen interne toestandsnamen. Neem acties of fouten mee die overgangen produceren. Het acceptatiegerichte voorbeeld kan smaller zijn dan het gedrag dat je werkelijke toepassing moet behouden.

Kunnen toestanden met gelijk acceptatiegedrag altijd worden samengevoegd?

Niet zonder de rest van het contract te controleren. Je toepassing kan identificatoren, acties of andere toestandsafhankelijke effecten blootstellen. Vraag de assistent die gebruikende code te bekijken voordat een equivalentieargument alleen op acceptatie wordt toegepast.

Hoe worden onbereikbare toestanden tijdens de beoordeling behandeld?

Leg de begintoestand vast en hoe bereikbaarheid wordt bepaald. Voeg een testgeval toe met onbereikbare vermeldingen en de bedoelde uitvoer. Bekijk of aanroepers verwachten dat die vermeldingen herkenbaar blijven voordat je verwijdering of hergroepering accepteert.

Wat moet ik testen nadat toestandsidentificatoren veranderen?

Controleer overgangen, opgeslagen verwijzingen en elke interface die identificatoren toont of gebruikt. Voer gedragsreeksen uit naast structuurcontroles van de teruggegeven groepering. Behouden acceptatie alleen bewijst niet dat afhankelijke code de representatie nog correct interpreteert.

Download voor Windows ↗

StateAmaranth · Bijgewerkt 2026-10-25