📜  NPDA 接受语言 L = {am bn cp dq | m+n=p+q ; m,n,p,q>=1}

📅  最后修改于: 2021-09-28 09:48:21             🧑  作者: Mango

先决条件——下推自动机,下推自动机被最终状态接受
问题 –设计一个非确定性的 PDA 来接受语言 L = { a^mb^nc^pd^q | m + n = p + q : m, n, p, q>=1}, 即

L = {abcd, abbcdd, abbccd, abbbccdd, ......}

在每个字符串,’a’和’b’的总数等于’c’和’d’的总数。

解释 –
在这里,我们需要保持“a”、“b”、“c”和“d”的顺序。因此,我们需要一个堆栈和状态图。 ‘a’、’b’、’c’ 和 ‘d’ 的计数由堆栈维护。我们将采用 2 个堆栈字母:

\Gamma = { 1, z }

在哪里,
\Gamma = 所有堆栈字母的集合
z = 堆栈起始符号

用于构建PDA的方法 –
由于我们想要设计一个 NPDA,因此每次 ‘a’、’b’、’c’ 和 ‘d’ 都会以正确的顺序出现。当 ‘a’ 和 ‘b’ 出现时,我们将把 ‘1’ 压入堆栈。之后,当 ‘c’ 和 ‘d’ 出现时,每次都从堆栈中弹出 ‘1’。因此,最后如果堆栈变空,那么我们可以说该字符串已被 PDA 接受。

堆栈转换函数 –

\delta (q0, a, z) \vdash (q0, 1z) \delta (q0, a, 1) \vdash (q0, 11) \delta (q0, b, 1) \vdash (q1, 11) \delta (q1, b, 1) \vdash (q1, 11) \delta (q1, c, 1) \vdash (q2, \epsilon ) \delta (q2, c, 1) \vdash (q2, \epsilon ) \delta (q2, d, 1) \vdash (q3, \epsilon ) \delta (q3, d, 1) \vdash (q3, \epsilon ) \delta (q3, \epsilon , z) \vdash (qf, z)

其中,q0 = 初始状态
qf = 最终状态
\epsilon = 表示弹出操作

所以,这是我们接受语言 L = { 所需的非确定性 PDA a^mb^nc^pd^q | m + n = p + q ; m, n, p, q>=1 }。