构造L = {(na(w)-nb(w))mod 3> 0}的DFA

时间:2017-10-06 11:07:45

标签: automata finite-automata dfa

根据标题:

L = {(n a (w)-n b (w))mod 3> 0}

Alphabet = {a,b}

我找到了这个问题的两个答案:

enter image description here

在此解决方案中,我们的语言被接受。

然而,

w = b

也被接受。

在下一个解决方案中:

enter image description here

我们的问题

w = b

在这里解决但

w = aaab

不被接受。

如何解决此问题?我无法在互联网上找到合适的答案。

1 个答案:

答案 0 :(得分:5)

假设我们对mod有以下定义:

x mod y = {       x,       if 0 <= x < y
            (x - y) mod y, if 0 <  y <= x
                  x,       if -y < x < 0
            (x + y) mod y, if x <= -y < 0
            -(-x mod -y)   if y < 0
          }

所以我们的模数就像这样:

3 mod 5 = 3
6 mod 5 = 6-5 mod 5 = 1 mod 5 = 1
-3 mod 5 = -3
-6 mod 5 = -6+5 mod 5 = -1 mod 5 = -1
-6 mod -5 = -(6 mod 5) = -1
6 mod -5 = -(-6 mod 5) = -(-1) = 1

我们的语言是L = {(n_a(w) - n_b(w))mod 3&gt; 0}

让我们定义A := n_a(w)B := n_b(w)。因此,我们需要使用(A - B) mod 3 > 0的定义来解决mod。我们有五个案例:

  1. 如果0 <= A - B < 3,意思是B <= A&lt; B + 3,然后(A - B)mod 3 = A - B.假设它至少为零,如果A = B,则只能为零。我们可以确认当A = B时我们总是如此# 1,我们总是有(A - B)mod 3&gt; 0假,所以我们可以抛出这种可能性。

  2. 如果0&lt; 3&lt; = A-B,意思是B&lt; 3 + B <= A或简单地A> = 3 + B,然后(A-B)mod 3 =(A-B-3)mod 3.根据假设,A-B-3> = 3 + B - B - 3&gt; = 0,所以我们仍处于案例1或2中。如果我们保留在案例2中,我们可以重复这一点,直到我们最终达到案例1,我们将看到我们不能拥有A - B - 3k = 0;也就是说,对于任何正k,它不能是A = B + 3k。

  3. 如果-3&lt; A - B&lt; 0或B-3 <0。 A&lt; B,然后(A - B)mod 3 = A - B.假设它小于零,所以我们必须抛弃所有这些可能性。

  4. 如果A - B <= -3&lt; 0,意思是A&lt; = B-3&lt; B或简单地A&lt; = B-3然后(A-B)mod 3 =(A-B + 3)mod 3.根据该假设,A-B + 3 <= B-3-B + 3 = 0 ,所以我们仍然处于第3或第4种情况。如果我们保留在案例4中,我们可以重复这一点,直到我们最终达到案例3,我们将看不到任何事情。

  5. 我们不能在这种情况下因为3&gt; 0

  6. 我们不得不从我们的语言中删除以下字符串:

    • A = B
    • A = B + 3k
    • A&lt;乙

    所以我们只保留字符串多于b的字符串,其中A - B不能被3整除。假设这种语言是常规的。考虑语言中的字符串(b ^ p)(a ^(p + 1))。通过泵浦引理,我们应该能够抽出b s的数量;但是我们可以比b获得更多a s。所以语言不能规律。

    如果我们采用x mod y更常见的定义(不一定更正确,必然):

    x mod y = {        x       , if 0 <= x < y
                    (x - y)    , if 0 < y <= x
                (x + y) mod y  , if -y < x < 0
                -(-x mod -y)   , if y < 0
              }
    

    根据这个定义:

    1. 在案例1中,我们抛出A = B
    2. 在案例2中,我们抛出A = B + 3k
    3. 在案例3中,我们抛出A = B - 3k
    4. 从3开始&gt; 0,案例4不适用
    5. 现在我们只抛出A mod B = 0(mod 3)的情况。这种语言是常规语言,有DFA:

          +------------a-------------+
          |                          |
          |  +---b----+  +---b----+  |
          |  |        |  |        |  |
          V  V        |  V        |  |
          (q0)---a--->(q1)---a--->(q2)
      --->(q0)
          (q0)---b--->(q3)---b--->(q4)
          ^  ^        |  ^        |  |
          |  |        |  |        |  |
          |  +---a----+  +---a----+  |
          |                          |
          +------------b-------------+