【问题标题】:How can I prove this language is regular?我怎样才能证明这种语言是正规的?
【发布时间】:2015-12-17 18:08:33
【问题描述】:

我正在尝试证明这种语言是否:

L = { w={0,1}* | #0(w) % 3 = 0 }(0的个数可以被3整除)

经常使用抽水引理,但我找不到办法。我得到的所有其他示例,有一个简单的形式,或者说一个更定义的形式,例如 w = axbycz 等。

【问题讨论】:

    标签: finite-automata automata computation-theory dfa formal-languages


    【解决方案1】:

    该语言中至少包含三个字符的任何字符串都具有此属性:字符串中包含“1”,或者连续三个“0”。

    如果字符串包含1,那么您可以将其拆分为抽水引理,并设置y 等于字符串中的某个1。那么显然字符串 xyzxyyzxyyyz 等都在语言中,因为所有这些字符串都有相同数量的零。

    如果字符串不包含1,则连续包含三个0s。设置y为那三个0s,应该很明显xyzxyyzxyyyz等. 都在语言中,因为您每次要添加三个 0 字符,因此您总是有许多 0s 可以被 3 整除。

    cmets 中的@justhalf 是完全正确的; pumping lemma 可以用来证明一种正则语言可以被pump,或者不能被pump 的语言不是正则的,但是你不能用pumping lemma 来证明一种语言是正则的。过错。

    相反,这里证明了给定语言是基于Myhill-Nerode Theorem 的常规语言:

    考虑0s 和1s 的所有字符串的集合。将这些字符串分成三组:

    E0,所有字符串使得0s 的个数是三的倍数,

    E1,所有字符串,使得0s 的数量是三的倍数多一,

    E2,所有字符串,使得0s 的数量是三的倍数多二。

    显然,0s 和 1s 的每个字符串都属于这三个集合之一。

    此外,如果 xz 都是 0s 和 1s 的字符串,那么考虑如果串联 xz 在 L:

    1. 如果 xE0 中,则 xzL 当且仅当 zE0

    2. 如果 xE1 中,则 xzL 当且仅当 zE2

    3. 如果 xE2 中,则 xzL 当且仅当 zE1

    因此,在定理的语言中,我们三个 Ei 集合中的同一集合中的任何两个字符串都没有可区分的扩展,因此有最多三个等价类。有限数量的等价类意味着语言是规则的。

    (实际上,正好有三个等价类,但这不是必须的)

    【讨论】:

    • 我不认为你可以使用抽引引理证明一种语言是有规律的。你有这方面的参考吗?我只看到了用于证明语言不规则的抽引引理。
    • 酷证明! Downvote undone =) 基本上你已经(几乎)定义了有限自动机,我猜。
    【解决方案2】:
    • 一种语言是正规的当且仅当一些非确定性的有限自动机识别它。
    • 自动机是一个有限状态机。

    我们必须构建一个重新控制 L 的自动机。
    对于每个状态,思考如下:

    • “我在哪里?”
    • “我可以去哪里,有一些给定的条目?”

    所以,对于 L = { w={0,1}* | #0(w) % 3 = 0 }
    可能性(状态)是: 余数(除法的余数)是 0、1 或 2。这意味着我们需要三个状态。 令 q0q1q2 分别为表示余数 0,1 和 2 的状态。

    q0 是开始和最终状态。
    现在,对于“0”条目,执行数学 #0(w)%3 并进入适当的状态。
    转换功能:
    f(q0, 0) = q1
    f(q1, 0) = q2
    f(q2, 0) = q0

    对于“1”条目,它只是在任何地方循环,因为它不会改变机器状态。
    f(qx, 1) = qx


    抽水引理证明某种语言是否不规则
    这是一本关于计算理论的好书:计算理论导论第 3 版 作者:Michael Sipser。

    【讨论】:

      【解决方案3】:

      我认为您不能使用抽引引理来证明一种语言是正则的。要证明一种语言是正则的,你只需要给出一个正则表达式或一个 DFA。在这种情况下,正则表达式非常简单:

      1*(01*01*01*)*

      (证明:正则表达式显然不接受任何0个数不能被3整除的字符串,所以我们只需要证明所有可能的0个数能被3整除的字符串都被这个正则接受表达式,可以通过确认对于包含 3n 个 0 的字符串,正则表达式匹配它,因为 1n001n1 sub>01n201n3...01n3n-201n3n-101n3n 有可以替换相同数量的 0 和 nk,使其与字符串匹配,并且正则表达式清楚地接受这种格式)

      抽引引理不能用来证明一种语言是正则的,因为我们不能像丹尼尔马丁的回答那样设置y。这是一个反例,格式与他的答案相似(如果我做的事情与他的答案完全不同,请纠正我):

      我们证明语言 L = {w=0n1p | n ∈ N, n>0, p is prime} 是正则的使用抽引引理如下:注意至少有一次出现 0,所以我们取 y 为 0,我们有 xyk z = 0n+k-11p,仍然满足语言定义。所以 L 是正则的。

      但这是错误的,因为我们知道具有素数长度的序列是不规则的。这里的问题是我们不能只将 y 设置为任何字符。

      【讨论】:

      • 你是对的,我没有正确地问我的问题。你使用引理来证明一种语言是不规则的,通过使用矛盾证明。据我了解,您假设 L 是一种常规语言,我们取一个常数 m,我们在 L 中选择一个长度大于 m 的单词 w,我们将 w 分成 3 个单词 xyz,我们选择一个整数 i ,我们证明xy^iz不是L的一个元素,这与泵引理矛盾,因此假设是错误的,导致语言不规则。
      • 是的,这就是你将如何使用抽引引理来证明语言不规则。
      • 您的正则表达式不允许所有1s 的非空字符串。我想你的意思是1*(01*01*01*)*。当然,你还需要证明正则表达式匹配语言语句。
      • @DanielMartin:啊,是的,这是我的一个错误。是的,如果要证明语言是正则的,那么我们需要证明正则表达式接受的字符串和语言描述中描述的字符串是一样的。
      猜你喜欢
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2016-07-03
      • 1970-01-01
      • 2014-09-21
      • 2014-02-25
      相关资源
      最近更新 更多