도달 가능한 DFA 상태 동치
최대 16개 상태와 네 기호를 가진 완전 DFA에서 도달 가능한 상태를 허용 접미사로 분류합니다.
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| 프로젝트 | 동치 상태와 구별 가능한 상태를 검사하고 도달 불가 상태를 제외하며 잘못된 전이를 거부합니다. |
|---|---|
| 적용하기 전에 검토하세요 | 실제 동작을 예상 결과와 비교하세요. 검사가 실패하면 다음 변경을 하기 전에 원인을 조사하세요. |
| 모델 | 기본 URL과 필요한 API 키로 OpenAI 호환 또는 Anthropic 엔드포인트를 설정하고 연결을 테스트하세요. 로컬 모델 서버는 실행 중이어야 합니다. 원격 도구는 데이터를 별도로 전송할 수 있습니다. |
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관찰 가능한 동작을 보존하며 상태 코드를 단순화하세요
StateAmaranth는 연결한 AI 모델과 상태를 가진 소프트웨어를 검토하는 Windows용 코딩 작업 공간입니다. 시스템이 허용하는 이벤트와 호출자가 관찰할 수 있는 결과부터 설명하세요. 상태 단순화 요청에는 이러한 맥락이 있어야 표현을 줄이는 목표 때문에 애플리케이션 동작을 희생하지 않습니다.
제공된 결정적 상태 예시는 수용 동작을 보존하며 도달 가능한 상태들의 동치를 살펴보는 구체적인 작업입니다. 전이표와 의도한 초기 상태를 논의에 제공하세요. 특히 주변 애플리케이션이 단순한 수용·거부 결과보다 많은 것을 노출한다면 변경 요청 전에 어떤 구분이 중요한지 설명하도록 모델에 요청하세요.
결과가 알려진 짧은 이벤트 시퀀스로 그룹화 제안을 검토하세요. 서로 다른 상태에 도달하는 경로와 도달 불가능한 항목 사례를 포함하고 프로젝트에서 검사를 실행하세요. 수용 동작이 보존되어도 상태 번호나 표현 변경은 호출 코드를 망가뜨릴 수 있으므로 그룹화 결과를 사용하는 인터페이스도 살펴보세요.
지원되는 OpenAI 호환 또는 Anthropic 엔드포인트가 제공한다면 제한 없는 AI 모델을 선택할 수 있습니다. 필요한 자격 증명을 설정하고 컨텍스트 한계와 도구 가용성을 검증하세요. 모델의 응답 동작은 여전히 엔드포인트에 따라 다릅니다. 안전한 단순화의 증거는 명시한 관찰 사항과 수행한 검사에서 나옵니다.
상태 머신 리팩터링에 관한 질문
- 요청에서 무엇을 관찰 가능한 동작으로 보아야 하나요?
내부 상태 이름뿐 아니라 호출 코드가 의존하는 출력이나 결정을 나열하세요. 전이가 동작이나 오류를 발생시키면 포함하세요. 예시의 수용 기반 범위는 실제 애플리케이션이 보존해야 하는 동작보다 좁을 수 있습니다.
- 수용 관점에서 동치인 상태는 항상 합칠 수 있나요?
나머지 계약을 확인하지 않고는 안 됩니다. 애플리케이션이 식별자, 동작, 기타 상태 의존 효과를 노출할 수 있습니다. 수용만을 근거로 동치를 적용하기 전에 해당 사용 코드를 살펴보도록 요청하세요.
- 도달 불가능한 상태는 검토에서 어떻게 다루나요?
초기 상태와 도달 가능성 판정 방법을 명시하세요. 도달 불가능한 항목과 의도한 출력을 담은 테스트 데이터를 포함하세요. 제거나 재그룹화를 수용하기 전에 호출 코드가 그 항목들을 계속 식별할 수 있기를 기대하는지 검토하세요.
- 상태 식별자가 바뀌면 무엇을 테스트해야 하나요?
전이, 저장된 참조, 식별자를 표시하거나 사용하는 모든 인터페이스를 확인하세요. 반환 그룹화의 형태 검사와 함께 동작 시퀀스도 실행하세요. 수용 동작 보존만으로 의존 코드가 표현을 여전히 올바르게 해석한다고 입증되지는 않습니다.
StateAmaranth · 업데이트 2026-10-25