Kiedy połączenie dwóch regularnych języków jest jednoznaczne?

16

Biorąc pod uwagę języki i , powiedzmy, że ich konkatenacja jest jednoznaczna, jeśli dla wszystkich słów istnieje dokładnie jeden rozkład z i , a niejednoznaczny inaczej. (Nie wiem, czy istnieje ustalony termin dla tej właściwości - trudna rzecz do wyszukania!) Jako trywialny przykład konkatenacja z samym sobą jest niejednoznaczna ( ), ale konkatenacja z samym sobą jest jednoznaczna.ABABwABw=abaAbB{ε,a}w=a=εa=aε{a}

Czy istnieje algorytm decydujący o tym, czy połączenie dwóch regularnych języków jest jednoznaczne?

rstern
źródło
1
Gah, to jest całkowicie problem świeżego CS, prawda? Szczerze mówiąc, nie próbowałem wiele; Miałem nadzieję, że gdzieś w literaturze istnieje ustalony algorytm i nie będę musiał wymyślać koła na nowo. Piszę tutaj oprogramowanie; Wziąłem tylko kilka kursów CS (kilka lat temu), więc w zasadzie zaczynam od Wikipedii. Wiem, że nikt nie lubi kogoś, kto nie chce pracować dla ich odpowiedzi, więc jeśli jest tu podręcznik, gazeta lub coś, na co możesz wskazać mnie zamiast wręczania mi algorytmu, to byłoby pomocne! Dzięki!
rstern
Dodałem to jako komentarz, ponieważ jest to dość nie na temat, ale być może może ci pomóc. Konsorcjum Unicode ma kilka procesów określania podobieństwa między językami. Przeczytałem bardzo pouczający link na ich stronie, ale przez całe życie nie mogłem znaleźć dzisiaj, aby udzielić odpowiedzi. Jeśli masz czas na zbadanie tego tutaj, to ich strona FAQ unicode.org/faq
htm11h

Odpowiedzi:

10

UWAGA: względu DFAS dla i B , skonstruować NFA która przyjmuje słowa A B o co najmniej dwie różne rozkładowi. NFA śledzi dwie kopie standardowego NFA dla A B (utworzone przez połączenie DFA dla A i B z przejściami ϵ ), zapewniając, że przejście z A do B nastąpi w dwóch różnych punktach.ABABABABϵAB

Yuval Filmus
źródło
Dzięki za podpowiedź! Więc jeśli dobrze rozumiem, mogę skonstruować NFA dla niejednoznacznych słów a następnie przetestować ten automat do pustki. Trudną częścią wydaje się być „zapewnienie, że zmiana z A na B nastąpi w dwóch różnych punktach”. Nie jestem pewien, jak to zrobić, poza pobraniem iloczynu (?) Dwóch DFA A B i usunięciem wszystkich stanów produktu ( A -terminal, A -terminal) - zastanawiam się, martwię się, że przejście z A B NFA na A B DFA zrujnowałoby pomysł AABABABAAABABA-terminal. Brzmi nieefektywnie; czy istnieje znany algorytm odpowiedni dla oprogramowania?
rernern
Tak, nie brzmi to zbyt wydajnie, choć zawsze można to zrobić w inteligentny sposób. Nie znam żadnego konkretnego algorytmu dla tego problemu, ale może istnieć jeden.
Yuval Filmus
7

Zaktualizowano (dzięki Yuval Filmus).

Biorąc pod uwagę dwa języki i Y z A , niech X - 1 YXYA Twierdzę, żeXYjest jednoznaczny wtedy i tylko wtedy, gdy językX-1XYY-1A+jest pusty.

X1Y={uAthere exists xX such that xuY}YX1={uAthere exists xX such that uxY}
XYX1XYY1A+

Dowód . Załóżmy, że jest niejednoznaczny. Wtedy istnieje słowo u , który ma dwa rozkładowi nad X Y , np U = x 1 r 2 = x 2 y 1 , w którym x 1 , x 2X i Y 1 , Y 2Y . Bez utraty ogólności możemy założyć, że x 1 jest prefiksem x 2 , czyli x 2 = xXYuXYu=x1y2=x2y1x1,x2Xy1,y2Yx1x2 dla niektórych z A + . Wynika z tego, że u = x 1 y 2 = x 1 z y 1 , skąd y 2 = z y 1 . Zatem z X - 1 X Y Y - 1 .x2=x1zzA+u=x1y2=x1zy1y2=zy1zX1XYY1

Załóżmy teraz, że zawiera jakieś niepuste słowo z . Następnie istnieją x 1 , x 2X i y 1 , y 2Y takie, że x 2 = x 1 z oraz y 2 = z y 1 . Wynika z tego, że x 2 y 1 = x 1 z y 1 =X1XYY1zx1,x2Xy1,y2Yx2=x1zy2=zy1 a zatem iloczyn X Y jest niejednoznaczny.x2y1=x1zy1=x1y2XY

Jeśli i Y są regularne, to zarówno X - 1 X, jak i Y Y - 1 są regularne, a zatem X - 1 X Y Y - 1 jest również regularne (patrz odpowiedź Yuvala dla automatu akceptującego ten język).XYX1XYY1X1XYY1

J.-E. Kołek
źródło
z
Ups Aktualizuję.
J.-E.