Computer science 如何找到以下NPDA接受的语言

Computer science 如何找到以下NPDA接受的语言,computer-science,automata,automata-theory,Computer Science,Automata,Automata Theory,我想了解如何找到以下NPDA将接受的语言 M = {Q, Σ, Τ, δ, q0, z, F} Q is a set of state: {q0, q1, q2} Σ is alphabet: {a, b} Τ is stack alphabet: {0, 1, z} δ is transition function z is stack start symbol F is set of final state. 它的过渡函数如下 δ(q0, a, z) = {(q1 , 0), (q2 ,

我想了解如何找到以下NPDA将接受的语言

M = {Q, Σ, Τ, δ, q0, z, F}
Q is a set of state: {q0, q1, q2}
Σ is alphabet: {a, b}
Τ is stack alphabet: {0, 1, z}
δ is transition function
z is stack start symbol
F is set of final state.
它的过渡函数如下

δ(q0, a, z) = {(q1 , 0), (q2 , λ)}
δ(q1, b, 0) = {(q1, 1)}
δ(q1, b, 1) = {(q1, 1)}
δ(q1, a, 1) = {(q2, λ)}

基于这些转换,我将假设最终状态是q2,它接受空堆栈(看起来它甚至去掉了堆栈底部的符号z,这对我来说有点不寻常,但我想这很好)

这些转变是:

δ(q0, a, z) = {(q1 , 0), (q2 , λ)}
δ(q1, b, 0) = {(q1, 1)}
δ(q1, b, 1) = {(q1, 1)}
δ(q1, a, 1) = {(q2, λ)}
让我们一次拿一个

  • δ(q0,a,z)={(q1,0),(q2,λ)}
    意味着如果我们处于初始状态,我们看到
    a
    ,我们可以进入状态
    q1
    并用
    0
    替换
    z
    ,或者我们可以摆脱
    z
    ,进入状态
    q2
    。这实际上是NPDA的接受配置;这意味着NPDA接受空字符串,我们确定的任何语言都必须包含该字符串。因为脱离初始状态的唯一其他方法是查看
    a
    ,我们还知道,在我们的语言中,任何非空字符串都必须以
    a
    开头

  • δ(q1,b,0)={(q1,1)}
    意味着如果我们现在处于状态
    q1
    ,在输入中看到a
    b
    ,并且在堆栈顶部有
    0
    ,我们可以将堆栈符号更改为
    1
    。一旦我们从
    q0
    进入状态
    q1
    ,我们将处于此配置中。请注意,由于没有其他转换将
    0
    放在堆栈顶部,因此这是唯一可以使用此转换的时间;实际上,必须使用它,因为
    q1
    不可接受,我们必须通过此转换来清除堆栈顶部的
    0
    。因此,语言中所有非空字符串必须以
    ab
    开头

  • δ(q1,b,1)={(q1,1)}
    意味着如果我们处于状态
    q1
    ,在输入中看到a
    b
    ,并且在堆栈顶部有a
    1
    ,我们可以永远消耗更多的
    b
    s。只要输入中有更多的
    b
    ,我们将保持这种配置。但是,我们不一定需要经历这种状态:还有其他的转换将
    1
    放在堆栈的顶部,并且到接受状态的路径可能根本不涉及这种转换。此转换允许我们在上一次转换中看到的所需的
    b
    之后放置任意数量的
    b

  • δ(q1,a,1)={(q2,λ)}意味着如果我们处于状态
    q1
    ,在输入中看到一个
    a
    ,并且在堆栈顶部有一个
    1
    ,我们可以擦除堆栈并进入接受状态。这意味着该语言中的任何非空字符串都以一个
    a`结尾

  • 重述:

  • 空字符串在语言中
  • 语言中的任何非空字符串都以
    ab
  • 语言中任何非空字符串的中间可以有任意数量的
    b
    s
  • 语言中的任何非空字符串都以
    a
    结尾

  • 综上所述,我们发现一个正则表达式描述了这种语言:
    e+abb*a
    。我们不应该对此感到惊讶,因为这个NPDA的堆栈中只包含零到两个元素;由于使用的堆栈数量是恒定的,因此NPDA相当于某些DFA,因此其语言必须是规则的。

    如果不看到转换,就无法确定此NPDA接受哪种语言。什么是转换函数?对不起。我忘了写转换函数。执行转换f(q0,a,z)=(q1,0)的结果是一个只有一个零的堆栈,还是一个零和堆栈底部的符号?是“0”还是“0z”?所用的符号对我来说是前者,但我只是想确定一下,是的。前者是正确的。非常感谢。