如何显示此语言
{<C,A,B> | C,A,B are DFAs, L(C) contains the shuffle of L(A) and L(B)}
是可判定的吗?
我相信如果我可以为A和B构建自动机,那么我可以得到一个包含它们随机播放的自动机。
我也在考虑使用空白测试,但我还没有取得任何进展。
答案 0 :(得分:1)
给定DFA和B,构造DFA D使得L(D)等于L(A)和L(B)的混洗。
然后,使用笛卡尔乘积机构造为语言L(M1)= L(C)\ L(D)和L(M2)= L(D)\ L(C)构造两个DFA。
确定L(M1)和/或L(M2)中的任何一个是空的。
要做#1:创建一个状态为三元组(x,y,z)的新DFA,其中:
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不接受任何字符串且语言为空。