只能使用2个正则表达式操作无法表达的常规语言


12

我以为所有常规语言都可以用正则表达式表示(如果某种语言是常规语言,则可以用正则表达式表示),但是有人告诉我,您需要所有这三种常规运算(并置,并集和星号)举行。

例如,有人告诉如果我只能使用union和concatenation regex操作(3个中的2个),那将是我不能仅用这两个描述的常规语言。

与Kleene明星和工会相同。有哪些例子?

Answers:


19

仅使用联合和串联,就无法描述任何无限的语言。联合和串联只能产生有限多个字符串。仅靠联合和Kleene星,就无法描述类的语言,因为无法将仅生成a的表达式与仅生成b的表达式连接起来。仅具有串联和Kleene星,就无法描述L = { a b }之类的语言L={ab}abL={a,b}


3
{a,b}

那为什么不结合就不能描述L = {a,b}呢?是因为它们不能用星号和串联表示为单独的元素吗?它只能做ab,bb,aba等吗?
user3295674 '02

@ user3295674确实如此。
DylanSp '16

仅仅通过联合和串联就不可能实现L = {a *}之类的东西,对吗?非常感谢!
user3295674'2

我什至不了解如何在没有串联的情况下定义星形。
G. Bach


4

A(ab)(a(ab)b)(aa)

如果现在允许使用星号,而不是嵌套星号,那么(至少45年)要知道是否可以使用所有常规语言是一个悬而未决的问题。这个问题被称为广义星高问题。它类似于尤瓦尔·菲利缪斯(Yuval Filmus)提到的恒星高度问题,不同之处在于现在允许互补。

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.