如何证明语言是正规的?


48

有很多方法可以证明某种语言不是正规语言,但是我需要做些什么来证明某种语言正规语言呢?

例如,如果给我是规则的,那么我怎么能证明后面的L 也是规则的呢?大号大号

大号:={w大号üv=w 对于 üΣ大号 和 vΣ+}

我可以画一个不确定的有限自动机来证明这一点吗?


1
您的的定义中有错别字,请编辑以解决。L
Ran G.

2
“绘画”没有证据;您必须提供NFA并证明它接受该语言。
拉斐尔

我认为语言定义仍然没有意义...
hugomg

2
无论如何,如果问题是“我可以画一个NFA来证明它是正常的”,则该特定语言是无关紧要的。@corium,我们可以编辑问题以反映更笼统的问题:“如何证明特定的是规则的”吗?大号
Ran G.

Answers:


48

是的,如果您可以提出以下任何一项建议:

对于某些语言,则L是规则的。还有更多的等效模型,但以上是最常见的。大号大号

在“计算”世界之外,还有一些有用的属性。如果也是正规的大号

  • 这是有限的
  • 您可以通过对常规语言执行某些操作来构造它,而这些操作对于常规语言封闭的,例如

    • 路口,
    • 补充,
    • 同态
    • 逆转
    • 左或右商
    • 定期转导

    还有更多,或者

  • 如果L的等价类的数量是有限的,则使用Myhill-Nerode定理大号

在给定的示例中,我们有一些(常规)语言作为基础,并且想说一些关于从中衍生的语言L 的信息。遵循第一种方法-为L '构建一个合适的模型-我们可以假设我们想要的L的任何等效模型;当然,由于L未知,它将保持抽象。在第二种方法中,我们可以直接使用L并对其应用闭包属性,以获得对L '的描述。大号大号大号大号大号大号大号


4
值得一提的是,证明一种语言是有限的就足以表明它是正规的。这很有用,特别是在非构造性案例证明中。
Patrick87

2
编程语言中发现的regexp可以做的比常规语言要多得多。您必须限制为“经典”构造。
大卫·路易斯

4
@DavidLewis:在此站点上,您可能会假设“正则表达式”是指经典概念。
拉斐尔

@DavidLewis我同意,应该在理论上避免“ regexp”,以避免混淆。
拉斐尔

请注意,对于前四个项目符号中的任何一个,您都需要证明您的陈述确实正确的证据。
拉斐尔

10

基本方法

  1. 有限自动机(可能不确定,具有空过渡)。
  2. 常用表达。
  3. 右(或左,但不是全部)线性方程,例如,其中KL是规则的。X=KX+LKL
  4. 常规(第3类)语法。
  5. 保留常规语言的运算(布尔运算,乘积,星号,混洗,态射,态射逆,反转等)
  6. 由有限的半边形识别。

逻辑方法(通常用于形式验证)

  1. Monadic二阶逻辑(布奇定理)。
  2. 线性时间逻辑(坎普定理)。
  3. 拉宾树定理(具有两个后继的单子二阶逻辑)。很强大。

先进的方法

  1. 复杂的抽水引理。例如,参见
    [1] J. Jaffe,《常规语言的必要而充分的抽取引理》,Sigact News-SIGACT 10(1978)48-49。
    [2] A. Ehrenfeucht,R。Parikh和G. Rozenberg,《常规集的抽水引理》,SIAM J. Comput。 10(1981),536-541。
    [3] S. Varricchio,规则集的抽水条件,SIAM J. Comput。 26(1997)764-771。

  2. 好准订单。参见
    [4] W. Bucher,A。Ehrenfeucht,D。Haussler,关于由导数关系产生的总调节器,Theor。计算 科学 40(1985)131–148。
    [5] M. Kunz,语言不等式和良好拟序的正则解

  3. 支持有理数列。ñ

  4. 基于转导的代数方法(另请参见保留常规语言的操作)。


4

Ran G.的答案给出了相当广泛的等效模型列表,这些等效模型可用于指定常规语言(列表还在继续,双向自动机,MSO逻辑,但是在“更多等效模型”下的链接涵盖了')。正如拉斐尔(Raphael)强调的那样,我们需要一个论点来说服听众相信所选择的陈述确实是正确的。

重新考虑该问题,它添加了“例如 ”。这意味着我们必须给出一个有效的构造,在给定上述任何模型的情况下,我们假定指定语言L,都将该模型转换为L 。通常,这将是同一类型的模型,但不必是:例如,我们可以从L的确定性FSA开始,到L '的确定性FSA 结束。大号大号大号大号

这包括可能使用闭合操作:在例子中,明确给出的操作,我们有大号=Σ大号Σ

因此,我的观点是,答案很不错,但是当我们不从头开始构建特定语言时,应该添加“从L '的构造”。大号大号


1
我不太确定你在做什么。如果我有某些模型,则可以将其转换为其他任何等效模型。L
拉斐尔

@Raphael抱歉,我的意思是正确的。较早的答案似乎解释了我们可以构造语言的描述(如自动机,操作等)。我同意。但是,问题似乎与闭包属性有关,请参见给出的示例。在其他答案中,我没有提到这一点:要证明闭包属性,您假设您有一个描述,然后构造一个新的描述。
Hendrik

1
啊,这个 !现在我明白了,我的坏。我同意,Ran的答案缺少这一方面。大号
拉斐尔

1
我不确定为什么会丢失(或到底缺少了什么)。假设你有一个经常,和你想证明大号是有规律的,以及,你可以开始大号'的DFA,并用它来建立一个DFA的大号。但是,这是由“构造DFA的覆盖大号 ” ..有没有限制使用大号自动完成这项任务(自然,如果大号通过定义大号',你将被迫使用大号' 的自动机。) 。这同样适用于正则表达式,闭合,语法等LLLLLLLLL
冉G.

1
哦好的。实际上,我宁愿编辑问题,并删除“例如”部分,从而使问题更笼统,并为以后的类似问题提供参考。.(:
Ran G.

4

有时你会遇到指定为“所有字符串语言,每一个ķ的-元素串小号满足,其中” ķ是一些固定不变的。在这种情况下,语言将是常规的。这里的想法是定义一个有限自动机,其某些状态“记住”最近出现的k个输入符号,如对该问题的回答。sķs<some property>ķķ


4

上面的答案未涵盖的另一种方法是有限自动机转换。举一个简单的例子,让我们展示在shuffle操作下常规语言是关闭的,定义如下: 您可以使用闭包属性在shuffle下显示闭包,但也可以直接使用DFA显示它。假设 = &Sigma; Q ˚F δ

L1SL2={x1y1xnynΣ:x1xnL1,y1ynL2}
是一个DFA接受大号(为= 1 2)。我们构建了一个新的DFA&Sigma; Q ˚F δ q 0如下:Ai=Σ,Qi,Fi,δi,q0iLi一世=1个2ΣFδq0
  • 状态集合是,其中,所述第三分量记住下一个符号是否是X (当1)或Ý (当2)。Q1×Q2×{1,2}xiyi
  • 初始状态是q0=q01,q02,1
  • 接受状态为F=F1×F2×{1}
  • 转移函数由下式定义 δ q 1q 22 σ = q 1δ 2q 2σδ(q1,q2,1,σ)=δ1(q1,σ),q2,2δ(q1,q2,2,σ)=q1,δ2(q2,σ),1

此方法的更复杂的版本涉及猜测。例如,让我们说明正则语言在反向(即 L下是关闭的 (这里w 1w n R = w nw 1

LR={wR:wΣ}
(w1wn)R=wnw1。)这是标准的闭包操作之一,反转下的闭包很容易来自对正则表达式的操作(可以将其视为正则表达式的有限自动机转换的对应项)–只需逆转正则表达式即可。但是您也可以使用NFA证明关闭。假设由DFA接受&Sigma; Q ˚F δ q 0。我们构造一个NFA &Sigma; Q '˚F 'δ 'q ' 0,其中LΣ,Q,F,δ,q0Σ,Q,F,δ,q0
  • 状态集合是Q=Q{q0}
  • 初始状态是q0
  • 唯一接受状态是q0
  • 转换函数定义如下:,并且对于任何状态q Qδ(q0,ϵ)=FqQ δ q 'σ = { q δ q σ = q ' }σΣδ(q,σ)={q:δ(q,σ)=q}

(我们可以摆脱,如果我们允许多个初始状态。)这里的猜测成分是反转后的单词的最终状态。q0


猜测通常还涉及验证。一个简单的例子是下闭合转动 假设大号由DFA接受&Sigma; Q 0,其操作如下。NFA首先猜测q = δ q 0x 。然后验证δ

R(L)={yxΣ:xyL}.
L。我们构造一个NFA&Sigma; Q '˚F 'δ 'q 'Σ,Q,F,δ,q0Σ,Q,F,δ,q0q=δ(q0,x) δ q 0X = q,从移动 ÿ X的非确定性。可以将其形式化如下:δ(q,y)Fδ(q0,x)=qyx
  • 的状态是。除了初始状态q ' 0,状态是q Q={q0}Q×Q×{1,2}q0,其中 q是,我们猜测的状态下, q Ç ù - [R [R是当前状态,和 š指定我们是否在该 ÿq,qcurr,sqqcurrsy输入的一部分(1时)或输入的部分(2时)。x
  • 最终状态为:我们接受当 δ q 0X = qF={q,q,2:qQ}δ(q0,x)=q
  • 跃迁实现猜测qδ(q0,ϵ)={q,q,1:qQ}q
  • 过渡(每 q q Ç ù - [R [RQ小号{ 1 2 })模拟原来的DFA。δ(q,qcurr,s,σ)=q,δ(qcurr,σ),sq,qcurrQs{1,2}
  • 过渡,对于每个 q Q q ˚F˚F,实现从移动 ÿ部到 X部分。仅当我们在 y部分达到最终状态时,才允许这样做。δ(q,qf,1,ϵ)=q,q0,2qQqfFyxy

该技术的另一种变体包括有界计数器。作为一个例子,让我们考虑改变编辑距离闭合 给定一个DFA &Sigma; Q ˚F δ q 0大号,例如构建一个NFA &Sigma; Q '

Ek(L)={xΣ: there exists yL whose edit distance from x is at most k}.
Σ,Q,F,δ,q0L ë ķ大号如下:Σ,Q,F,δ,q0Ek(L)
  • 状态集为,其中第二项计算到目前为止所做的更改次数。Q=Q×{0,,k}
  • 初始状态是q0=q0,0
  • 接受状态为F=F×{0,,k}
  • 对于每一个我们必须转变δq,σ,iδ(q,σ),iδ(q,i,σ)
  • 插入由转换处理为所有 q σ 使得< ķq,i+1δ(q,i,σ)q,σ,ii<k
  • 缺失通过转换处理为所有q σ 使得< ķδ(q,σ),i+1δ(q,i,ϵ)q,σ,ii<k
  • 取代是类似地通过过渡手柄对所有q σ τ 使得< ķδ(q,σ),i+1δ(q,i,τ)q,σ,τ,ii<k

3

语言是常规语言,如果您可以编写一个扫描程序来决定任意字符串,则是否使用不超过固定数量的内存即可确定它们是否属于该语言-即可以在O(1)空间中进行识别。


O(1)空间,是什么意思?无论如何,DFA就足够了;可能值得在编程上明确指出这种等效性。
拉斐尔

是的,这只是一个不同的观点。
reinierpost

3

正则表达式转换是证明某些操作下关闭的一种方法。简单的两个例子是在封闭的逆转之下,封闭同态

rLLRL

  • ϵR=ϵσR=σR=
  • (r1+r2)R=(r1R+r2R)(r)R=(rR)(r1r2)R=r2Rr1R

(r1r2)R=r2Rr1R(01)R=10rRLR

h:ΣΔrLh(L)σrh(σ)


0

另一种方法是使用您知道它们已关闭的操作来构建语言。这是对显示正则表达式的扩展,因为您还有更多可用的操作(反转字符串,补码,交点,切段,仅保留一部分,同构和反同构,...)


2
Ran的答案中已经提到了这一点。
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.