concatenation - 常规语言和串联

标签 concatenation regular-language finite-automata fsm

常规语言在串联下是封闭的 - 这可以通过使一种语言的接受状态以 epsilon 过渡到下一种语言的开始状态来证明。

如果我们考虑语言 L = {a^n | n >=0},这种语言是正则的(就是一个*)。如果我们将它与另一种语言连接起来 L = {b^n | n >=0},这也是正则的,我们最终得到 a^nb^n,但我们显然知道这不是正则的。

我的逻辑哪里出了问题?

最佳答案

两种语言 L1 和 L2 的拼接定义是所有字符串 wx 的集合,其中 w ∈ L1 并且x ∈ L2。这意味着 L1L2 由 L1 中的一个字符串和 L2 中的一个字符串配对形成的所有可能字符串组成,这不一定与配对来自每种语言的匹配字符串相同。

因此,正如@Oli Charlesworth 指出的那样,您返回此处的语言实际上并不是 { anbn | N 中的 n}。相反,它是语言 { anbm | n in N 和 m in N },即语言 a*b*。这种语言是常规语言,因为它是由常规语言给出的。

希望这对您有所帮助!

关于concatenation - 常规语言和串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565623/

相关文章:

javascript - 使用 .length 通过 concat 数组检查 JQuery 中是否存在元素

ms-access - 查询中的Concat相关函数

math - 这种语言与自身的串联是什么?

java - 正则表达式内部数字检查

java - 正则表达式中的字符集、字符串开头和结尾的固定长度和步数问题

c++ - C++ 中的 Char * 重新分配

state - 自循环上的两个输入,确定性或非确定性状态机?

binary - 用于二进制数加法和比较的图灵机

regex - 可以使用正则表达式来匹配嵌套模式吗?

c - atoi 函数从缓冲区添加数字