如何显示L = L(G)?


22

通过提供正式的语法来指定正式的语言是一项常见的任务:我们不仅需要语法来描述语言,而且还要解析它们,甚至需要进行适当的科学学习。在所有情况下,重要的是手头的语法正确无误,即能准确生成所需的单词。

我们经常可以在较高层次上争论为什么语法可以充分表达所需语言,而没有形式化证明。但是如果我们出于某种原因有疑问或需要正式证明怎么办?我们可以应用哪些技术?

这应该成为参考问题。因此,请谨慎给出一般的,有说服力的答案,至少由一个例子说明了这一点,但仍然涵盖了许多情况。谢谢!

Answers:


21

语法本身就是递归对象,因此答案似乎很明显:归纳法。就是说,细节往往很难正确。在续篇中,我将介绍一种技术,该技术可以减少对机械步骤的语法正确性证明,但前提是要进行一些创造性的预处理。

基本思想是不局限于语法和语言单词;以这种方式很难掌握语法的结构。相反,我们将讨论语法可以创建的一组句子。此外,我们将一个艰巨的证明目标分成许多更容易处理的小目标。

令为具有非终结点,终结点,规则和起始符号的形式语法。我们用表示可以从给定派生的句子集合,即。生成的语言是。假设我们想证明对于某些。ñ Ť δ 小号Ñ θ ģ 小号δ α θ ģ G=(N,T,δ,S)NTδSNϑ(G)Sδģ 大号ģ = θ ģ Ť *大号= 大号ģ 大号Ť *αϑ(G)SαGL(G)=ϑ(G)T大号=大号G大号Ť

安萨兹

这就是我们要做的。我们定义中号1个中号ķñŤ,使得

  1. ϑG=一世=1个ķ中号一世
  2. Ť一世=1个ķ中号一世=大号

虽然2.通常通过的定义是很清楚的,但是1.需要一些认真的工作。这两个项目一起明确表示LG = L(根据需要)。中号一世大号G=大号

为了便于表示法,让我们分别表示中号=一世=1个ķ中号一世

坎road的路

进行这种证明有两个主要步骤。

  • 如何找到(好)中号一世
    一种策略是调查语法的工作阶段。并不是每个语法都适合这个想法。通常,这是一个创造性的步骤。如果我们可以自己定义语法,它将有所帮助。通过一些经验,我们将能够使用这种方法定义更易于处理的语法。

  • 如何证明1.?
    与任何集合相等一样,有两个方向。

    • :(结构)上的感应的制作 ģϑG中号G
    • :一般一个感应通过中号,从包含一种起始小号中号ϑG中号一世小号

这是很具体的。细节取决于手头的语法和语言。

考虑语言

大号={一种ñbñCññ}

语法δG=({S,A},{a,b,c},δ,S)δ

SScAAaAbε

为此,我们要证明。这个语法的工作阶段是什么?好吧,它首先生成c m,然后生成a n b n。这立即通知我们选择M i,即L=L(G)cmanbnMi

M0={ScmmN},M1={anAbncmm,nN},M2={anbncmm,nN}.

中号0Ť * = 中号1Ť * = ,第2项已经照顾。对于1.,我们将证明分为宣布的两部分。M2=L中号0Ť=中号1个Ť=

ϑG中号

我们按照的规则进行结构归纳。G

IA:由于我们成功地锚。小号=小号C0中号0

IH:承担一些句子的集合,我们也知道X 中号XϑGX中号

IS:任意的。我们必须表明,任何形式的α具有和任何规则应用于未来,我们不会离开中号。我们通过完全区分大小写来做到这一点。通过归纳假设,我们知道(确切地)以下情况之一适用:αXϑG中号α中号

  • ,即瓦特= 小号Ç 一些Ñ。 可以应用两个规则,这两个规则都可以得出 M中的一个句子: w中号0w=小号Cñ
    中号
    • 小号C小号C+1个中号0
    • 小号C一种C=一种0一种b0C中号1个
  • wM1w=anAbncmm,nN
    • wan+1Abn+1cmM1
    • wanbncmM2
  • wM3wT

Since we have successfully covered all cases, the induction is complete.

ϑ(G)M

We perform one (simple) proof per Mi. Note how we chain the proofs so "later" Mi can anchor using the "earlier" Mi.

  • M1: We perform an induction over m, anchoring in Sc0=S and using SSc in the step.
  • M2: We fix m to an arbitrary value and induce over n. We anchor in Acm, using that SScmAcm by the former proof. The step progresses via AaAb.
  • M3: For arbitrary m,nN we use the former proof for SanAbncmanbncm.

This concludes the second direction of the proof of 1., and we are done.

We can see that we heavily exploit that the grammar is linear. For non-linear grammars, we need Mi with more than one variable parameter (in the proof(s)), which can become ugly. If we have control over the grammar, this teaches us to keep it simple. Consider as deterring example this grammar which is equivalent to G:

SaAbCεAaAbεCcCε

Exercise

Give a grammar for

大号={bķ一种bC一种ñbØķñØñķØ2=ñ2}

并证明其正确性。

如果遇到麻烦,请使用以下语法:

考虑 G={小号[R一种C}{一种bC}δ小号 与生产

小号b小号b[Rbb一种[R[Rb一种b一种一种一种一种一种CCbCCbCbC

中号一世

中号0={b一世小号b一世一世ñ}中号1个={b一世bØØñ一世Ø}中号2={bķ[Rb一世ķñ一世ķ}中号3={bķ一种一世一种一种2一世bØķØ一世ñķØ}中号4={bķ一种bC一世C一种2bØķØ一世ñķØ}中号5=大号

非线性语法呢?

上下文无关语言类别的特征是Dyck语言:本质上,每种上下文无关语言都可以表示为Dyck语言和常规语言的交集。不幸的是,戴克语言不是线性的,也就是说,我们不能给出固有地适合这种方法的语法。

当然,我们仍然可以定义 中号一世并做证明,但对于嵌套归纳法和非嵌套归纳法而言,必将更加艰巨。我知道有一种可以在某种程度上有所帮助的一般方法。我们将ansatz更改为显示我们至少生成所有必需的单词,并且生成了正确数量的单词(每长度)。正式地,我们表明

  1. ϑG大号
  2. |大号GŤñ|=|大号Ťñ| 对所有人 ññ

这样,我们可以将自己限制在原始ansatz的“轻松”方向上,并利用该语言的结构,而忽略语法可能具有的过于复杂的功能。当然,没有免费的午餐:我们得到了数词的全新任务G每个产生 ññ。对我们来说幸运的是,这通常很容易处理。有关详细信息,请参见此处此处 ¹。您可以在我的学士论文中找到一些例子。

对于模棱两可且不依赖上下文的语法,恐怕我们会回到ansatz语法和上限。


  1. 当使用该特定方法进行计数时,我们得到的好处是语法是明确的。反过来,这也意味着该技术必须针对模棱两可的语法而失败,因为我们永远无法证明2。
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.