Quando la concatenazione di due lingue normali è inequivocabile?


16

Lingue Attribuite e B , diciamo che il loro concatenamento A B è inequivocabile se per tutte le parole w A B , v'è esattamente una decomposizione w = un b con un A e B B , e ambiguo altrimenti. (Non so se esiste un termine stabilito per questa proprietà, cosa difficile da cercare!) Come esempio banale, la concatenazione di { ε , a } con se stessa è ambigua ( w = aABABwABw=abaAbB{ε,a}w=a=εa=aε), ma la concatenazione di con se stessa è inequivocabile.{a}

Esiste un algoritmo per decidere se la concatenazione di due lingue regolari è inequivocabile?


1
Gah, questo è totalmente un problema di matricola CS, non è vero? Onestamente, non ho provato molto; Speravo che ci fosse un algoritmo consolidato per questo da qualche parte in letteratura e non avrei dovuto reinventare la ruota. Sto scrivendo software qui; Ho seguito solo un paio di corsi CS (diversi anni fa), quindi sostanzialmente sto partendo da Wikipedia. So che a nessuno piace qualcuno che non vuole lavorare per la sua risposta, quindi se c'è un libro di testo o un documento o qualcosa a cui potresti indicarmi invece di darmi semplicemente un algoritmo, sarebbe utile! Grazie!
rstern

Ho aggiunto questo come commento perché, beh, è ​​relativamente fuori tema, ma forse può darti un aiuto. Il consorzio Unicode ha alcuni processi per determinare la comunanza tra le lingue. Ho letto un link molto informativo sul loro sito, ma per la vita di me non sono riuscito a trovarlo oggi per farlo invece una risposta. Se hai tempo per ricercare questo qui è la loro pagina FAQ unicode.org/faq
htm11h

Risposte:


10

Suggerimento: dati i DFA per e B , costruisci un NFA che accetta le parole in A B con almeno due diverse decomposizioni. L'NFA tiene traccia di due copie dell'NFA standard per A B (formato dall'unione dei DFA per A e B con transizioni ϵ ), assicurando che il passaggio da A a B avvenga in due punti diversi.ABABABABϵAB


Grazie per il suggerimento! Quindi, se capisco, posso costruire un NFA per parole ambigue in e quindi testare l'automa per il vuoto. La parte difficile sembra essere "assicurare che il passaggio da A a B avvenga in due punti diversi". Non sono sicuro di come farlo se non quello di prendere il prodotto incrociato (?) Di due DFA A B e di eliminare tutti gli stati del prodotto ( A- terminale, A- terminale) - Sto eseguendo il lavaggio a mano, sono preoccupato che il passaggio da A B NFA a A B DFA si rovinerebbe con l'idea di -terminale. Sembra, però, inefficiente; esiste un algoritmo noto adatto al software?ABABABAAABABA
rstern

Sì, non sembra troppo efficiente, anche se c'è sempre la possibilità di farlo in modo intelligente. Non sono a conoscenza di alcun algoritmo specifico per questo problema, ma uno potrebbe esistere.
Yuval Filmus,

7

Aggiornato (grazie a Yuval Filmus).

Date due lingue e Y di A , lascia X - 1 YXYA Dichiaro cheXYnon è ambiguo se e solo se la linguaX-1XYY-1A+è vuota.

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

Prova . Supponiamo che sia ambiguo. Allora esiste una parola u che ha due decomposizioni sopra X Y , dire u = x 1 y 2 = x 2 y 1 , dove x 1 , x 2X e Y 1 , Y 2Y . Senza perdita di generalità, possiamo supporre che x 1 sia un prefisso di x 2 , ovvero x 2 = xXYuXYu=x1y2=x2y1x1,x2Xy1,y2Yx1x2x2=x1zzA+u=x1y2=x1zy1y2=zy1zX1XYY1

X1XYY1zx1,x2Xy1,y2Yx2=x1zy2=zy1x2y1=x1zy1=x1y2XY è ambiguo.

Se X e Y sono regolari, quindi entrambi X-1X e YY-1 sono regolari e quindi X-1XYY-1 è anche regolare (vedi la risposta di Yuval per un automa che accetta questa lingua).


Cosa succede se zè la parola vuota?
Yuval Filmus,

Ooops. Aggiorno.
J.-E.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.