什么时候两种常规语言的连接才是明确的?


16

由于语言的和乙,让我们说,他们的级联一乙是明确的,如果所有的单词w ^ ∈ 一乙,恰好有一个分解w ^ = 一b有一个∈ 一和b ∈ 乙,和暧昧否则。(我不知道该属性是否存在一个确定的术语,这很难搜索!)作为一个简单的示例,{ ε ,a }与自身的串联是不明确的(w = aABABw∈ABw=aba∈Ab∈B{ε,a}),但的级联 { 一个 }与本身是明确的。w=a=εa=aε{a}

是否有一种算法来确定两种常规语言的连接是否明确?


1
Gah,这完全是新生CS问题,不是吗?老实说,我没有做太多尝试。我希望在文献中的某个地方有针对此的既定算法,而不必重新发明轮子。我在这里写软件。我(几年前)只参加了几门CS课程,所以我基本上是从Wikipedia开始的。我知道没有人会喜欢不想为他们的答案而工作的人,因此,如果有教科书或论文或您可以指给我的东西,而不仅仅是给我一个算法,那将是有帮助的!谢谢!
— rstern

我将其添加为评论是因为,虽然它的主题相对不恰当,但也许可以为您提供一些帮助。Unicode联盟有一些确定语言之间通用性的过程。我已经在他们的网站上阅读了一个非常有用的链接,但是对于我自己的一生,今天找不到它可以代替此答案。如果您有时间进行研究,请访问FAQ页面unicode.org/faq
— htm11h 2015年

Answers:


10

提示:给定和B的 DFA ,请构造一个NFA,该NFA接受具有至少两个不同分解的A B中的单词。NFA跟踪A B的标准NFA的两个副本(通过将A和B的 DFA 通过ϵ过渡加入)形成,以确保从A到B的切换发生在两个不同的点。ABABABABϵAB


感谢您的提示!因此,据我所知,我可以为歧义词构造一个NFA ,然后测试该自动机是否为空。棘手的部分似乎是“确保从A到B的切换发生在两个不同的点”。我不知道怎么做,除了服用两个交叉产品(?)一乙的DFA和删除所有(的一个末端,一个末端)产品状态-我handwaving,我很担心从过渡甲乙 NFA到甲乙 DFA将与的想法螺杆甲ABABABAAABABA-终奌站。听起来,嗯,效率低下;是否有适用于软件的已知算法?
— rstern

是的,虽然总可以选择以一种聪明的方式来做,但这听起来并不太有效。我不知道针对此问题的任何特定算法,但是可能存在。
— Yuval Filmus 2015年

7

更新(感谢Yuval Filmus)。

鉴于两种语言和Ÿ的一个*,让 X - 1 ÿXYA∗ 我声称Xý是明确的,当且仅如果语言X-1X∩ýý-1∩甲+是空的。

X−1Y={u∈A∗∣there exists x∈X such that xu∈Y}YX−1={u∈A∗∣there exists x∈X such that ux∈Y}
XYX−1X∩YY−1∩A+

XYuXYu=x1y2=x2y1x1,x2∈X and y1,y2∈Y. Without loss of generality, we may assume that x1 is a prefix of x2, that is, x2=x1zz∈A+u=x1y2=x1zy1y2=zy1z∈X−1X∩YY−1

X−1X∩YY−1 contains some nonempty word z. Then there exist x1,x2∈X and y1,y2∈Y such that x2=x1z and y2=zy1. It follows that x2y1=x1zy1=x1y2 and hence the product XY is ambiguous.

If X and Y are regular, then both X−1X and YY−1 are regular and thus X−1X∩YY−1 is also regular (see Yuval's answer for an automaton accepting this language).


What if z is the empty word?
— Yuval Filmus

Ooops. I update.
— J.-E. Pin
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.