PushDown自动机(PDA)用于L = {a ^(n)b ^(n)c ^(n)| n> = 1}

时间:2016-10-29 07:29:08

标签: computation pushdown-automaton automata-theory jflap

我正在愚蠢地试图为非上下文语言L = {a ^(n)b ^(n)c ^(n)| n> = 1}构建一个下推自动机,并考虑到两种方法。

  

第一种方法: -

     

我认为对于字符串中的每个'a',我会将3'a'推入堆栈,对于字符串中的每个'b',我现在将从堆栈中弹出2'a'用于每个'c'in字符串我仍然会在堆栈中有1个'a'。

第一种方法的问题: - 生成的语言变成这样的事情L = {a ^(p)b ^(m)c ^(n)| p> = 1且 无法确定如何定义m和n }

  

第二种方法: -

     

我们知道L = {a ^(n)b ^(m)c ^(m)d ^(n)| n> = 0}是无上下文的语言,L = {wxw | w∈(a,b)*}也是无上下文的语言。

     

所以,我认为L = {a ^(n)b ^(m)b ^(m)c ^(n)| n> = 1且m = floor((n + 1)/ 2)}

第二种方法的问题: - 不知道我们是否可以在不影响堆栈元素的情况下计算PDA中的楼层(n + 1/2)。

请帮助确定如何在第一种方法中定义m和n,以及如何在PDA中找到地板((n + 1)/ 2)。

如果需要,可以同时使用JFLAP文件。

2 个答案:

答案 0 :(得分:1)

您没有设法为此语言构建下推自动机的一个原因是因为没有任何原因。 Bar Hillel pumping lemma显示了这一点。

概述证明,假设可以完成。然后,对于某些 p ,每个大于 p 的字符串都可以分区为 uvwxy ,s.t。,

  • | VWX | < P

  • | VX | > 1

  • 对于任何 n
  • uv n wx n y 也被自动机接受。

第一条规则暗示 vwx 不能跨越三个区域,最多只能跨越两个区域(对于足够大的字符串)。第二条和第三条规则现在意味着你可以抽水,使得无跨区域小于至少一个其他区域。

答案 1 :(得分:1)

正如Ami Tavory指出的那样,这种语言没有PDA,因为这种语言不具备上下文。如果您使用队列而不是堆栈,使用两个堆栈或使用图灵机(所有等价物),则很容易识别这种语言。

队列机器:

  1. 只要看到a s,就会排队a,直到看到b
  2. 只要您看到a s,就会将b队列为b并将其排队,直至看到c
  3. 只要您看到b s。
  4. ,就会c出列
  5. 如果您在没有其他输入和空队列的情况下结束此过程,则接受。
  6. 双栈PDA:

    1. 当看到a^n b^n时,使用第一个堆栈确保a a,并在看到a时弹出b;
    2. 当您看到b^n c^n时,使用第二个堆栈确保b b,并在看到b时弹出c;
    3. 在此过程结束时,如果两个堆栈都为空,则接受。
    4. 图灵机:

      1. 使用a^n ... c^n替换每个a并删除匹配的A;
      2. ,以确保c
      3. 通过删除匹配的A^n b^nA对,确保b;
      4. 接受是否在此过程结束时您不再有A且不再有b,即磁带已完全清除。