仿射函数值的语言


10

写为的十进制扩展(不带前导)。令和为整数,其中。考虑的倍数的扩张小数的语言加上一个常数:n¯n0aba>0a

M={ax+b¯xN}

是正常吗?上下文无关?M

(与仿射函数图的语言对比)

我认为这将是一个不错的家庭作业问题,因此从一两个提示开始的答案不仅说明了如何解决问题,而且还解释了如何决定使用哪种技术。


刚才我意识到我已经按照@vonbrand的想法回答了一个具体案例。DFA接受以43整除的自然数的十进制表示形式
Hendrik 2013年1

Answers:


9

非常简单:假设数字以十进制表示(其他基数通过微不足道的修改处理)。构建DFA,有状态0,1,...,。起始状态为0,从输入的状态开始,数字进入状态。接受状态为(如果则可能需要调整)。aa1qd(10q+d)modab > abmodab>a


1
很好-比我的好多了!
大卫·刘易斯

8

这是正常的。让我们首先以二进制形式工作,它将推广到任何大于1的基数。令为所讨论的语言。对于a = 1,b = 0我们得到Ma,b

M1,0={1,10,11,100,101,...}

它是所有字符串,且不带前导零,这是正则表达式(为其构造一个正则表达式)。{0,1}

现在,对于任何,b仍为0,我们通过将数字乘以a来从获得,即对每个字符串执行。这可以通过根据固定字符串的位的的移位和加法序列按位完成。我们需要的两个转换是:中号0中号1 0 ˉ X¯ 一个X中号0 X ˉ 一个aMa,0M1,0x¯ax¯Ma,0xa¯

ˉ X ˉ X 0x¯2x¯,即x¯x¯0

x¯2x+x¯

在右侧连接一个0显然可以保留规律性。因此,我们仅需证明第二个操作保留了规律性。做到这一点的方法是在从右到左的上工作一个有限状态传感器。那是最难的一步。我建议使用伪代码程序和一些有限的辅助存储器(例如某些位变量)来完成此操作,而不要使用状态。只要存储器在所有输入上的大小都是固定的,并且您从右到左严格扫描,它就是有限状态转换并保留规则性。x¯

最后,要从获得我们需要在数字添加到每个字符串中,但这是通过类似的传感器来完成的,后者取决于固定数b。 M a 0 b T bMa,bMa,0bTb

要在任何基数中执行相同的操作,请另外显示如何使用依赖于d 的换能器在该基数中与一位数相乘。这样,我们可以乘以多位数字,并且仍然保留常规语言。或者,我们可以这样说,乘以只是重复加法。s d ddSdd

您只需要提示。这些步骤中的每个步骤都取决于相当复杂的定理/技术,因此证明这些步骤以获得完整的证明将是额外的工作。


您的FA不会获得作为输入,因此我看不到您所写的内容表明手头的语言是正常的。请注意,并不是所有程序都使用有限的内存对应于FA:那顶多是非常重要的一次,并从左至右在输入,考虑究竟每一次输入符号。x¯
拉斐尔

@Raphael如果愿意,您可以从右向左移动,重要的是保持一致。我在戴维的证明素描中找不到瑕疵。调用换能器比我想象的要简单一些,但是看起来很有效。
吉尔(Gilles)'所以

@吉尔斯:首先,他没有解释如何在一次通过中将乘以并乘以加到结果;他甚至减少了乘法以“一个转变和增加的序列 ”。每个单班加班都可以,但是顺序如何?其次,更重要的是,他展示了如何构建一个计算;这并不会马上给你一个FA是接受。例如,将数字相乘很容易,但分解(据称)却不容易。因此,您至少需要一个附加参数。b 一个X ˉ X¯ 一个X + b中号abax x¯ax+b¯ M
拉斐尔

我不是在构建FSA。我从一个容易显示为正则的集合开始(),然后使用一系列有限的操作转换其中的所有字符串,每个操作都保留正则性。这需要多次通过(换能器)。但这没关系,因为仅基于和预先确定换能器的顺序和每个换能器的结构。每个通道(换能器)都保持规则性,因此无需将它们交错插入一个通道中。是的,不是“基本”。但是,一口气通过一次构建FSA将会非常复杂。bM1,0ab
大卫·路易斯

1
@Raphael-是的,功能非常强大。实际上,许多非常规族在有限状态传感器下也被封闭。并且,您可以将换能器用作简化机制,从而获得非规则语言“结构”复杂性的完整理论。
大卫·路易斯

8

提示#1:首先解决最普遍的问题:当最不重要的位首先出现时,编写一个自动机,该自动机识别可被3整除的数字的十进制/二进制表示。

中间问题:证明是规则的。{ax+b¯ax+b0xZ}

提示2:“模 ” 函数的函数图是有限的。您可以在为每个计算它,它既是数字集又是自动机的语言。一个d { 0 ... 9 }(n10n+d)ad{0,,9}

提示#3:现在,取代与。这有什么变化?尝试使用常规语言通过交集稳定的事实,而不是构建临时自动机。 X ÑxZxN

提示4:现在假设是质数(因此是一个字段),并且我们仍然处于。现在,我们使用第一个位是最高有效位的表示形式。您可以用相同的方式构建自动机吗?ž /一个ž X žaZ/aZxZ

提示5:您不必总是建立自动机来证明语言是正常的。您如何使用先前的结果证明是规则的?(最高有效位在前)M


如果您认为这不合适,请随时发表评论。
jmad

提示1是一个很大的步骤。在提示4中,重要的是要意识到和是不同的。经过感觉就像是走弯路,您必须管理符号字符:为什么不留在呢?一个10 ž Ña{2,5}a10ZN
吉尔(Gilles)“所以

@Gilles:我想说当和,因为难以识别。一个X+b0XŽ3X+1234ax+b¯ax+b0xZ3x+1234
jmad 2012年

@吉尔斯:我认为提示#1太酷了,无法宠坏。您可能对提示4是正确的。
jmad 2012年

5

我遵循@vonbrand的想法:

提示1:

首先求解。您可以使用Myhill-Nerode定理。b=0

我们定义以下关系。这显然是等价关系。此外,它是右全等的,因为如果我们附加一个数字,则会得到。最后,它饱和,因为是等价类。由于具有有限数量的类,因此根据Myhill-Nerode定理,它是正规的。相关的FSA是最小的,有状态。d ˉ X听,说:ˉ ÿx¯y¯:xymodad大号大号[0]一个x¯y¯10x+d10y+dmodax¯dy¯dLL[0]a

提示2:

解决一般情况,重用情况引起的自动机。b=0

我们知道,对于,该语言是常规的。因此简单地拿状态FSA为的语言。现在我们为构造FSA 。假设有位数字。然后像深度的10元树的分支FSA并包含所有路径号码位数。可以用非形式的数字达到的所有状态都拒绝,否则接受。最后,我们在FSA的树部分与自动连接,根据其余由除以。a M b = 0 L b k k k a x + b M ab=0aMb=0Lbkkkax+bMa


我了解这项技术,但不了解细节。提示1是否也解决了情况?此外,国防部10我所期望的10个州(不是)?aa=1a
Hendrik

3

语言是普通的。

提示: 淘汰九人制


证明思想

对于并且,b < 9a=9b<9

建立一个具有个标记为到状态的自动机。是初始状态,一个最终状态是。从状态到数字,过渡到状态。0 8 0 b s d s + d 9080bsd(s+d)mod9

要处理与互质的其他值,10a10

在包组数字找到一些使得分裂(例如取,如果,因为)。ka10k1k=3a=37999=27×37

要处理的值的唯一素因子被和,a25

请注意,最后都只包含有限数量的数字。

为了归纳为和所有值,ab

使用以下事实:规则语言的并集和交集是规则的,有限语言是规则的,并且当和是互质时,的倍数恰好是两者的倍数。a1a2a1a2

请注意,我们使用任何方便的技术;证明中包含了三种主要的基本技术(正则表达式,有限自动机,集合理论性质)。


详细证明

令与互质数为。令且。通过基本算术,等于模的数正好等于等于模和等于模,因此。由于常规语言的交集是常规的,因此a=2p5qaa10M={ax+b¯xZax+b0}M={2p5qx+b¯xZ2p5qx+b0}babab2p5qM{x¯xb}=MM{x¯xb}{x¯xb}之所以是规则的,是因为它是有限(因此是规则)语言的补充,如果和也都是规则的,则是规则的;和是因此要定期,因为它是一个有限的一套语言的结合。因此,总结证明,足以证明和是规则的。MMM{x¯xb}MMM

让我们以开始,即以模的数字。十进制扩展数为的整数以其最后数字为特征,因为更靠近左边的数字更改意味着加的倍数是的倍数。因此其中是所有数字的字母,是长度为的有限单词集合,而是常规语言。M2p5qMmax(p,q)10max(p,q)2p5q0M=FFmax(p,q)M=(F)(({0}))

现在我们转到,即模数,其中与互质。如果则是所有自然数的十进制扩展集,即,这是一个普通语言。现在我们假设。令。根据费马小定理,,也就是说除以。我们建立一个确定性有限自动机,它将识别,如下所示:Maa10a=1MM={0}(({0}))a>1k=a110a11modaa10k10M

  • 状态是。第一部分代表数字位置,第二部分代表模数。[0,k1]×[0,10k2]10k1
  • 初始状态为。(0,0)
  • 有一个标记为从到的过渡如果和。d(i,u)(j,v)vd10i+umod10k1ji+1modk
  • 状态是最终的只要(注意除以)。(i,u)ubmodaa10k1

从单词到达的状态满足和。这可以通过在自动机上过渡之后对单词进行归纳来证明。为此,使用的事实来计算跃迁。因此,自动机可以通过识别形式为的数字的十进制扩展(允许初始零)。由于,自动机识别等于的数字的十进制展开模允许初始零,这是(i,u)x¯i|x¯|modkuxmod10k110k1mod10k1u+y10kubmoda b 一个' 0 * 中号中号 = 0 * 中号'{ 0 } *10k1modaba0M。因此,该语言被证明是正规的。最后,是常规语言。M=(0M)(({0}))

要推广到以外的底数,请用底数的所有素数替换上面的和。2 51025

正式证明

由您最喜欢的定理证明者作为练习留给读者。

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.