显示该语言是可判定的

时间:2017-05-15 14:23:30

标签: dfa decidable

如何显示此语言

{<C,A,B> | C,A,B are DFAs, L(C) contains the shuffle of L(A) and L(B)} 

是可判定的吗?

我相信如果我可以为A和B构建自动机,那么我可以得到一个包含它们随机播放的自动机。

我也在考虑使用空白测试,但我还没有取得任何进展。

1 个答案:

答案 0 :(得分:1)

  1. 给定DFA和B,构造DFA D使得L(D)等于L(A)和L(B)的混洗。

  2. 然后,使用笛卡尔乘积机构造为语言L(M1)= L(C)\ L(D)和L(M2)= L(D)\ L(C)构造两个DFA。

  3. 确定L(M1)和/或L(M2)中的任何一个是空的。

    • 如果L(M1)为空且L(M2)为空,则L(C)为L(A)和L(B)
    • 的混洗
    • 如果L(M1)为空,则L(C)是L(A)和L(B)的洗牌的子集
    • 如果L(M2)为空,则L(C)是L(A)和L(B)的洗牌的超集
  4. 要做#1:创建一个状态为三元组(x,y,z)的新DFA,其中:

    1. x是A
    2. 的状态
    3. y是来自B
    4. 的州
    5. z为1或2
    6. DFA的初始状态为(qi_A,qi_B,1)。输入字母表将是A和B的输入字母表的并集。转换将是:

      • f((x,y,1),a)=(x&#39;,y,2)其中f(x,a)= x&#39;在机器A
      • f((x,y,2),b)=(x,y&#39;,1)其中f(y,b)= y&#39;在机器B

      接受状态应为接受A或B的州(或者如果您愿意接受B)。

      要做#2:创建一个新的DFA,其状态是对(x,y),其中:

      1. x是D
      2. 的状态
      3. y是来自C
      4. 的州

        他DFA的初始状态为(qi_D,qi_C)。输入字母表将是A和C的输入字母表的并集。转换将是:

        • f((x,y),c)=(x&#39;,y&#39;)其中f(x,c)= x&#39;在D和f(y,c)= y&#39;在C.

        接受州将是:

          对于L(D)\ L(C),
        • 表示接受D但不接受C
        • 表示接受C而不接受D,L(C)\ L(D)

        做#3:

        1. 您可以使用众所周知的DFA最小化算法来最小化DFA。如果您最终得到一个具有单一非接受状态的DFA,则该语言为空。

        2. 您可以尝试所有输入字符串,直至生成的DFA(不会导致DFA多次进入任何状态的字符串)。如果DFA均未接受这些内容,则DFA不接受任何字符串且语言为空。