我需要有关自动机的证明的帮助

时间:2018-10-24 12:28:16

标签: automata

证明或反对以下有关所决定的语言集的陈述 通过每个自动机:

1) DPDA ⊆ 2-stack DPDA
2) 2-stack DPDA ⊆ DPDA
3) NPDA ⊆ 2-stack DPDA
4) 2-stack DPDA ⊆ NPDA

1 个答案:

答案 0 :(得分:1)

1)DPDA具有一个堆栈,因此具有两个堆栈的DPDA绝对可以通过不使用(或琐碎地使用)第二个堆栈来完成DPDA可以执行的任何操作。 2)两个堆栈的DPDA可以通过使用第一个堆栈确保a的数量等于b的数量,使用第二个堆栈确保a的数量等于b的数量来识别具有相同数量的a,b和c的单词的语言。 b的个数等于c的个数。由于该语言不是上下文无关的,因此没有适用于此的单栈DPDA。因此,2堆栈DPDA不相等。因为我们知道DPDA等于或等于2堆栈DPDA,所以我们知道2堆栈DPDA并不等于或等于DPDA。 3)这很难说,稍后会尝试 4)当然不是,与(2)相同。

对于(3)-我强烈怀疑2堆栈DPDA可以模拟确定性TM,这暗示NPDA是2堆栈DPDA的子集。为了证明这一点,需要展示如何使用2堆栈DPDA模拟任何TM的操作。我认为像这样的可视化可能就足够了……

 _ _ _ _ _ _ _   _ _ _ _ _ _ _
|Z|_|_|_|_|_|_| |_|_|_|_|_|_|Z|
   stack #1      ^  stack #2
                 TM

输入最初完全记录在堆栈2中。要向右移动,TM从堆栈2弹出,然后推入堆栈1。要向左移动,TM从堆栈#1弹出并推入堆栈#2。当前的磁带单元始终位于堆栈#2的顶部。 2堆栈DPDA可以执行确定性TM可以执行的状态和转换方面的任何操作;它可以使用两个堆栈来模拟如上所述的磁带。例如,接受所有回文的不确定性上下文无关语言的TM的工作方式如下:

  1. 检查第一个单元格。如果为空,则停止接受。否则,写一个空格并移至End(s)状态,其中s是观察到的符号。
  2. 处于结束状态时,向右移动,直到找到空白。然后,向左移动并进入检查状态。
  3. 在状态检查中,确认观察到的符号为s。如果不是,则停顿接受(如果为空白),否则停顿拒绝。否则,写一个空白并进入状态IsFinished并向左移动。
  4. 处于IsFinished状态时,请检查磁带单元是否为空白。如果是这样,请停止接受。否则,进入启动状态并向左移动。
  5. 处于启动状态时,向左移动,直到找到空白。然后,向右移动并再次进入初始状态。

TM与2堆栈DPDA的示例:

DTM                2-stack DPDA               
-------            --------------------
tape     State     Stack #1    Stack #2
B11011B            Z           11011Z
 ^       initial               ^
BB1011B            ZB          1011Z
  ^      End(1)                ^
BB1011B            ZB1         011Z
   ^     End(1)                ^
BB1011B            ZB10        11Z
    ^    End(1)                ^
BB1011B            ZB101       1Z
     ^   End(1)
BB1011B            ZB1011      Z
      ^  End(1)                ^           
BB1011B            ZB101       1Z
     ^   Check(1)              ^
BB101BB            ZB10        1BZ
    ^    IsFin                 ^
BB101BB            ZB1         01BZ
   ^     Start                 ^
BB101BB            ZB          101BZ
  ^      Start                 ^
BB101BB            Z           B101BZ
 ^       Start                 ^
BB101BB            ZB          101BZ
  ^      Initial               ^
BBB01BB            ZBB         01BZ
   ^     End(1)                ^
BBB01BB            ZBB0        1BZ
    ^    End(1)                ^
BBB01BB            ZBB01       BZ
     ^   End(1)                ^
BBB01BB            ZBB0        1BZ
    ^    Check(1)              ^
BBB0BBB            ZBB         0BBZ
   ^     IsFin                 ^
BBB0BBB            ZB          B0BBZ
  ^      Start                 ^
BBB0BBB            ZBB         0BBZ
   ^     initial               ^
BBBBBBB            ZBBB        BBZ
    ^    End(0)                ^
BBBBBBB            ZBB         BBBZ
   ^     Check(0)              ^
BBBBBBB            ZBB         BBBZ
   ^     halt-accept           ^

基于此示例,我认为构造是正确的,并且2堆栈DPDA与Turing机器等效。因此,NPDA等于或等于2堆栈DPDA。