我如何显示这种语言
{<C,A,B> | C,A,B are DFAs, L(C) contains the shuffle of L(A) and L(B)}
是可判定的?
我相信如果我可以为 A 和 B 构建自动机,那么我可以得到一个包含它们的 shuffle 的自动机。
我也在考虑使用空性测试,但我还没有取得任何进展。
给定 DFA A 和 B,构造一个 DFA D 使得 L(D) 等于 L(A) 和 L(B) 的 shuffle。
然后,使用语言 L(M1) = L(C) \ L(D) 和 L(M2) = L(D) \ L(C) 的笛卡尔积机器构造来构造两个 DFA。
如果 L(M1) 和/或 L(M2) 中的任何一个为空,请确定哪个。
要做#1:创建一个新的 DFA,其状态为三元组 (x, y, z),其中:
DFA 的初始状态将是 (qi_A, qi_B, 1)。输入字母表将是 A 和 B 的输入字母表的并集。转换将是这样的:
接受状态应该是在 A 或 B 中接受的状态(或者如果您愿意,也可以只是 B)。
要做#2:创建一个新的 DFA,其状态是对 (x, y) 其中:
他 DFA 的初始状态将是 (qi_D, qi_C)。输入字母表将是 A 和 C 的输入字母表的并集。转换将是这样的:
接受状态将是:
要做#3:
您可以使用众所周知的 DFA 最小化算法来最小化 DFA。如果您最终得到一个具有单个非接受状态的 DFA,则该语言为空。
您可以尝试所有输入字符串,直到生成的 DFA 的抽水长度(不会导致 DFA 多次进入任何状态的字符串)。如果 DFA 不接受这些,则 DFA 不接受任何字符串并且语言为空。