Tương đương trạng thái DFA tới được
Nhóm trạng thái tới được của DFA đầy đủ tối đa 16 trạng thái và bốn ký hiệu theo hậu tố được chấp nhận.
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| Dự án | Kiểm tra trạng thái tương đương và phân biệt, bỏ trạng thái không tới được và từ chối chuyển tiếp sai. |
|---|---|
| Kiểm tra trước khi áp dụng | So sánh hành vi thực tế với kết quả mong đợi. Nếu kiểm tra thất bại, tìm nguyên nhân trước khi sửa tiếp. |
| Mô hình | Cấu hình endpoint tương thích OpenAI hoặc Anthropic bằng URL cơ sở và khóa API nếu cần. Kiểm tra kết nối. Máy chủ mô hình cục bộ phải đang chạy; công cụ từ xa có thể truyền dữ liệu riêng. |
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Đơn giản hóa mã có trạng thái mà vẫn giữ hành vi quan sát được
StateAmaranth là không gian lập trình trên Windows để kiểm tra phần mềm có trạng thái với mô hình AI kết nối. Bắt đầu bằng sự kiện hệ thống chấp nhận và kết quả mã gọi có thể quan sát. Yêu cầu đơn giản hóa trạng thái cần bối cảnh đó để biểu diễn nhỏ hơn không thành mục tiêu làm tổn hại hành vi ứng dụng.
Ví dụ trạng thái tất định được cung cấp đưa ra nhiệm vụ cụ thể: xem xét tính tương đương giữa trạng thái đạt tới được trong khi giữ hành vi chấp nhận. Đưa bảng chuyển trạng thái và trạng thái ban đầu dự định vào thảo luận. Yêu cầu mô hình giải thích khác biệt nào quan trọng trước khi yêu cầu thay đổi, nhất là nếu ứng dụng xung quanh bộc lộ nhiều hơn kết quả chấp nhận hoặc từ chối đơn giản.
Rà soát mọi nhóm đề xuất bằng chuỗi sự kiện ngắn có kết quả đã biết. Bao gồm đường đến trạng thái khác nhau và trường hợp có mục không đạt tới được, rồi chạy kiểm tra trong dự án. Cũng kiểm tra giao diện sử dụng nhóm, vì thay đổi số trạng thái hay biểu diễn có thể phá mã gọi dù hành vi chấp nhận được giữ.
Có thể chọn mô hình AI không hạn chế qua điểm cuối tương thích OpenAI hoặc Anthropic được hỗ trợ có cung cấp. Cấu hình thông tin xác thực khi cần và xác minh giới hạn ngữ cảnh, công cụ khả dụng. Hành vi phản hồi của mô hình vẫn tùy điểm cuối; bằng chứng cho đơn giản hóa an toàn đến từ quan sát bạn đã nêu và kiểm tra bạn thực hiện.
Câu hỏi cho tái cấu trúc máy trạng thái
- Điều gì nên được tính là hành vi quan sát được trong yêu cầu?
Liệt kê đầu ra hoặc quyết định mã gọi dựa vào, không chỉ tên trạng thái nội bộ. Nếu chuyển trạng thái phát hành động hay lỗi, bao gồm chúng. Ví dụ dựa trên chấp nhận có thể hẹp hơn hành vi ứng dụng thực tế phải giữ.
- Có luôn gộp được trạng thái tương đương về chấp nhận trong ứng dụng không?
Không nếu chưa kiểm tra phần quy ước còn lại. Ứng dụng có thể bộc lộ mã định danh, hành động hoặc hiệu ứng phụ thuộc trạng thái khác. Yêu cầu trợ lý kiểm tra nơi sử dụng trước khi áp dụng lập luận tương đương chỉ dựa trên chấp nhận.
- Nên xử lý trạng thái không đạt tới được khi rà soát thế nào?
Nêu trạng thái ban đầu và cách xác định khả năng đạt tới. Bao gồm dữ liệu kiểm thử có mục không đạt tới và đầu ra mong muốn. Rà soát liệu mã gọi mong các mục đó vẫn nhận diện được trước khi chấp nhận bỏ hoặc nhóm lại.
- Tôi nên kiểm thử gì sau khi đổi mã định danh trạng thái?
Kiểm tra chuyển trạng thái, tham chiếu lưu trữ và mọi giao diện hiển thị hoặc sử dụng mã định danh. Chạy chuỗi hành vi cùng kiểm tra cấu trúc nhóm trả về. Chỉ giữ chấp nhận không chứng minh mã phụ thuộc vẫn diễn giải đúng biểu diễn.
StateAmaranth · Cập nhật 2026-10-25