Una determinata lingua normale contiene un sottoinsieme infinito senza prefisso?


11

Una serie di parole su un alfabeto finito è priva di prefisso se non ci sono due parole distinte in cui una è un prefisso dell'altra.

La domanda è:

Qual è la complessità del controllo se una lingua normale indicata come NFA contiene un sottoinsieme infinito senza prefisso?

Risposta (grazie a Mikhail Rudoy, ​​qui sotto) : può essere fatto in tempo polinomiale, e penso anche in NL.

Parafrasando la risposta di Mikhail, lascia che sia l'input NFA nella forma normale (nessuna transizione epsilon, trim), e lascia che (resp. ) essere la lingua ottenuta avendo lo stato come stato iniziale e come stato finale (rispettivamente stato come iniziale e l'insieme come finale). Per una parola let essere la parola infinita ottenuto mediante iterazione .( Σ , q 0 , F , δ ) (Σ,q0,F,δ)L [ p , r ] L[p,r]L [ p , R ] L[p,R]p p{ r } {r}p pRR u uu ωuω uu

Sono equivalenti:

  1. La lingua contiene un sottoinsieme infinito senza prefisso.L [ q 0 , F ]L[q0,F]
  2. q QqQ , modo che non sia un prefisso di .u L [ q , q ] { ε } uL[q,q]{ε} v L [ q , F ] vL[q,F]v vu ωuω
  3. q Q qQ L [ q , q ] { ε } L[q,q]{ε} u L [ q , q ] uL[q,q] v L [ q , F ]vL[q,F] modo che non sia un prefisso di .v vu ωuω

Prova:

3 2 banale.

Per 2 1, è sufficiente vedere che per ogni abbiamo che è un sottoinsieme infinito senza prefisso di .w L [ q 0 , q ] wL[q0,q]w ( u | v | ) v w(u|v|)vL [ q 0 , F ]L[q0,F]

Infine, 1 3 è la prova di "correttezza" nella risposta di Mikhail.

Risposte:


7

Il tuo problema può essere risolto in tempo polinomiale.

Per iniziare, converti l'NFA specificato in un NFA equivalente con le seguenti proprietà aggiuntive:

  • Non ci sono transizioni epsilon
  • Tutti gli stati sono raggiungibili dallo stato iniziale

Utile subroutine

Supponiamo di avere un NFA , uno stato e una stringa non vuota . La seguente subroutine ci consentirà di valutare il valore di verità della seguente istruzione: "ogni percorso in dallo stato a uno stato di accettazione corrisponde a una stringa che è un prefisso di stringa per alcuni ". Inoltre, questa subroutine verrà eseguita in tempo polinomiale.N Nq qs sNN q qs nsn nn

Innanzitutto, costruisci NFA con dichiara che accetta tutte le stringhe che non sono prefissi di per qualsiasi ( non accettazione in un ciclo per tenere traccia di dove nel "modello" di siamo così lontani, e uno accetta stato per se abbiamo già deviato da quel modello). Quindi, costruisci NFA che è esattamente come ma ha come stato iniziale. Infine, costruisci un NFA finale cui lingua èS S| s | + 1 |s|+1s nsn n n| s | |s|s s s s s ... sssssN 'N N Nq qN "N′′ L ( N " )L(N′′) L ( S ) L ( N )L(S)L(N)utilizzando la costruzione standard dell'intersezione NFA. Si noti che tutte queste costruzioni sono polinomiali nella dimensione dell'input.

Quindi prova semplicemente se il linguaggio di è vuoto (cosa che può essere fatta in tempo polinomiale con una semplice ricerca grafica). se e solo se , o in altre parole ogni stringa in non è in . In altre parole, la lingua di è vuota se e solo se accetta solo stringhe che sono prefissi di per alcuni . Questo può essere riformulato esattamente come l'istruzione che stavamo cercando di valutare: "ogni percorso in dallo stato a uno stato di accettazione corrisponde a una stringa che è un prefisso di stringaN N′′ L ( N ) = L(N′′)=L ( S ) L ( N ) = L(S)L(N)=L ( N ) L(N)L ( S ) L(S)N N′′N Ns nsn n nN Nqq s nsn nper qualche . "n

Algoritmo principale

Considera l'insieme di stati nell'NFA che si trovano in qualche ciclo. Per ciascuno di tali stati, , attenere alla seguente procedura:qq

Sia qualsiasi ciclo semplice contenente . Let tramite la stringa corrispondente al ciclo . Poiché NFA non ha transizioni epsilon, non è vuoto. Quindi applicare la subroutine a NFA, stato e stringa . Se la subroutine ci dice che ogni percorso che inizia con nell'NFA e termina in uno stato di accettazione corrisponde a un prefisso di per alcuni continua con lo stato successivo . In caso contrario, viene emesso che il linguaggio NFA specificato contiene un sottoinsieme infinito privo di prefex.P 2P2 q qs sP 2P2 s sq qs sq qs nsn n nqq

Se proviamo tutti gli stati che si trovano in un ciclo e l'algoritmo non viene mai emesso, allora emettiamo che il linguaggio NFA dato non contiene un sottoinsieme infinito privo di prefex.qq

Correttezza (prima metà)

In primo luogo, supponiamo che l'algoritmo sopra riportato asserisca che il linguaggio NFA specificato contenga un sottoinsieme infinito privo di prefex. Diciamo che questo output è stato selezionato considerando alcuni loop e alcuni stati . Come prima, è la stringa corrispondente a . Quindi sappiamo in base alla subroutine che non tutti i percorsi che iniziano con nell'NFA e terminano in uno stato di accettazione corrispondono a un prefisso di per alcuni (poiché questo è l'unico output della subroutine che porterebbe al principale algoritmo in uscita a quella ).P 2P2 q qs sP 2P2 q qs nsn n nqq

Sia un percorso la cui esistenza è affermata dalla subroutine: un percorso da a uno stato di accettazione tale che la stringa corrispondente sia un prefisso di per qualsiasi .P 3P3 q qt ts nsn nn

Sia costituito da copie di dove è sufficientemente grande da. Poiché è un ciclo attraverso , può essere trattato come un percorso da a . La stringa corrispondente a èP 2P2 m mP 2P2m mm | s | > | t | m|s|>|t|P 2P2 q qP 2P2 q qq qP 2P2 s msm

Sia un percorso dallo stato iniziale a (che esiste poiché ogni stato è raggiungibile dall'inizio) e sia la stringa corrispondente a questo percorso.P 1P1 q qrr

Quindi il percorso costituito da , copie di e è un percorso di calcolo accettabile. La stringa corrispondente a questo percorso è . Pertanto, l'NFA accetta ogni stringa del modulo . Questa è una serie infinita di stringhe accettata dall'NFA e sostengo che questa serie di stringhe è priva di prefissi. In particolare, supponiamo che sia un prefisso di con . In altre parole, è un prefisso di . Poiché ha lunghezza, questo implica cheP 1P1 x xP 2P2 P 3P3 r ( s m ) x t r(sm)xtr ( s m ) x t r(sm)xtr ( s m ) x t r(sm)xtr ( s m ) y t r(sm)yty > x y>xt t( s m ) y - x t (sm)yxt( s m ) y - x(sm)yx m ( y - x ) | S| m | s | > | t | m(yx)|s|m|s|>|t|t t è un prefisso di . Ma dall'output della subroutine sappiamo che non è un prefisso di per nessun . Pertanto, non può essere un prefisso di e, come desiderato, l'insieme di stringhe è privo di prefisso.( s m ) y - x = s m ( y - x )(sm)yx=sm(yx) t ts nsn n nr ( s m ) x t r(sm)xtr ( s m ) y tr(sm)yt

Pertanto, ho dimostrato che se l'algoritmo principale produce che il linguaggio NFA dato contiene un sottoinsieme infinito privo di prefex, questo è effettivamente il caso.

Correttezza (seconda metà)

Successivamente, mostrerò l'altra metà: se il linguaggio NFA dato contiene un sottoinsieme infinito privo di prefex, l'algoritmo principale produrrà questo fatto.

Supponiamo che il linguaggio NFA specificato contenga un sottoinsieme infinito privo di prefissi. Sia l'insieme dei percorsi di calcolo (accettanti) corrispondenti a queste stringhe. Si noti che è un insieme infinito di percorsi di calcolo che accettano le cui stringhe corrispondenti non sono mai prefissi l'una dell'altra.A AAA

Supponiamo che uno stato sia "in loop" nell'NFA se esiste un loop nell'NFA attraverso quello stato e "non-loop" in caso contrario. Considera tutti i percorsi dallo stato iniziale a qualsiasi stato di ciclo che attraversa solo stati non di ciclo (tranne per lo stato di un ciclo in cui finiscono). Lascia che sia l'insieme di questi percorsi. Ogni percorso non può avere un ciclo poiché gli stati in quel ciclo sarebbero stati di ciclo e quindi passerebbe attraverso uno stato di ciclo. Pertanto, le lunghezze dei percorsi in sono limitate dal numero di stati nell'NFA e quindi è finito (ad esempio, se lo stato iniziale è uno stato di looping, l'unico percorso di questo tipo è il percorso vuoto).P Pp P pPp pP PPP

Possiamo suddividere in sottoinsiemi in base a come iniziano i percorsi di calcolo inIn particolare, per , lascia l'insieme di tutti i percorsi di calcolo in che iniziano con il percorso e lasciare l'insieme di tutti gli altri percorsi di . Chiaramente, tutti s e sono disgiunti e la loro unione è l'intero set . Inoltre, contiene solo percorsi che non passano mai attraverso uno stato di loop e quindi mai loop; quindi è finito. Possiamo quindi concludere che alcuniA A| P | + 1 |P|+1A Ap P pPA pAp A Ap pB BA AA pAp B BA AB BB BA pApdeve essere infinito (altrimenti sarebbe un'unione di molti insiemi finiti). AA

Poiché è infinito, ci sono infiniti percorsi di calcolo, nessuno dei quali stringhe sono prefissi l'uno dell'altro, che accettano percorsi che iniziano con . Sia lo stato raggiunto alla fine del percorso . Possiamo concludere che ci sono infiniti percorsi di accettazione, chiamiamo questo insieme , a partire da tutti corrispondenti a stringhe che non sono prefissi l'una dell'altra.A pAp p pq qp pA A qq

Durante l'algoritmo principale, eseguiamo la subroutine sullo stato e alcune stringhe . Questa subroutine ci dice se ogni percorso accettante che inizia con corrisponde a una stringa che è un prefisso di per alcuni . Se così fosse, allora tutti i infiniti percorsi accettanti in sarebbero prefissi di per varie , il che implicherebbe che sono tutti prefissi l'uno dell'altro. Questo non è il caso, quindi concludiamo che quando l'algoritmo principale esegue la subroutine sullo statoqq s sq qs nsn n nA As nsn n nqq, il risultato è l'altro possibile risultato. Ciò, tuttavia, porta l'algoritmo principale a generare che il linguaggio NFA contiene un sottoinsieme infinito privo di prefissi.

Questo conclude la prova di correttezza.


Non capisco come funziona la gestione dei loop, poiché un dato stato può far parte (in modo esponenziale) di molti loop. Naturalmente, se uno qualsiasi di questi due loop può essere utilizzato per generare una sequenza non periodica, allora abbiamo finito. qq
japh

Cosa intendi con gestione dei loop? Nell'algoritmo principale, per ogni stato si sceglie solo un ciclo che attraversa (qualsiasi loop fuori da quelli potenzialmente esponenzialmente molti) e si chiama quel ciclo (dopodiché si esegue la subroutine sullo stato e stringa dove è la stringa associato a ). La subroutine gestisce essenzialmente la verifica della possibilità di generare una sequenza non periodica utilizzando quel loop. Se sì, allora abbiamo finito. Se no (e inoltre no per ogni ), allora l'intero linguaggio è un'unione di sequenze periodiche, quindi abbiamo anche finito. q q P 2 q s s P 2 qqqP2qssP2q
Mikhail Rudoy,

Per chiarire la mia domanda, ecco un semplice NFA con stato iniziale , stato finale e tre transizioni: , , . Il ciclo per non genererà le stringhe prive di prefisso, ma il ciclo per farà. q T q a q q b q q a T a bqTqaqqbqqaTab
japh

In realtà, il ciclo per non genera un set gratuito prefisso: l'insieme delle stringhe tutto utilizzare il ciclo. Nel mio algoritmo, se il circuito si sceglie per è il ciclo, allora la subroutine determinerà che no, non ogni percorso accettando a partire da ha una serie di forma , e così l'algoritmo principale dirà che un infinito esiste un sottoinsieme privo di prefissi. Se il ciclo utilizzato dall'algoritmo per è invece il ciclo la subroutine determina che non tutti i percorsi di accettazione che iniziano con hanno una stringa del moduloa a b a a q a q a q b q b aabaaqaqaqbqbe anche in questo caso l'algoritmo ha lo stesso output.
Mikhail Rudoy,

Grazie Mikhail! Penso che la tua risposta risolva la domanda.
Googlo

2

definizioni

Definizione 1 : Sia un insieme di parole. Diciamo che è privo di prefissi piacevolmente infinito (nome ai fini di questa risposta) se ci sono parole e tali che:S SS Su 0 , ... , u n , ... v 1 , ... , v n , ...u0,,un,v1,,vn,

  • Per ogni , e sono non vuoti e iniziano con lettere distinte;n 1 n1u n unv nvn

  • S = { u 0 v 1 , , u 0u n v n + 1 , }S={u0v1,,u0unvn+1,} .

L'intuizione è che puoi mettere tutte quelle parole su un infinito albero radicato (la radice è, le foglie sono e i rimanenti nodi interni) della forma seguente in modo che le parole in siano esattamente le etichette dei percorsi dalla radice a una foglia:SS

   u₀    u₁    u₂
■-----•-----•-----•⋅⋅⋅
      |     |     |
      | v₁  | v₂  | v₃
      |     |     |
      ▲     ▲     ▲

Proposizione 1.1 : Un set senza prefisso piacevolmente infinito è senza prefisso.

Prova della proposizione 1.1 : Supponiamo che sia un prefisso rigoroso di . Esistono due casi:u 0u n v n + 1u0unvn+1 u 0u m v m + 1u0umvm+1

  • Se allora è un prefisso di . Questo è impossibile perché e hanno le prime lettere distinte.n < m n<mv n + 1vn+1 u n + 1u m v m + 1un+1umvm+1 u n + 1un+1 v n + 1vn+1

  • Se allora è un prefisso di . Questo è impossibile perché e hanno le prime lettere distinte.n > m n>mu m + 1u n v n + 1um+1unvn+1 v m + 1vm+1 u m + 1um+1 v m + 1vm+1

Proposizione 1.2 : Un set senza prefissi piacevolmente infinito è infinito.

Prova della proposizione 1.2 : nella prova 1.1, abbiamo dimostrato che se allora e non sono comparabili per l'ordine dei prefissi. Non sono quindi uguali.n m nmu 0u n v n + 1u0unvn+1 u 0u m v m + 1u0umvm+1


Prova principale

Proposizione 2 : qualsiasi set infinito senza prefisso contiene un bel set infinito senza prefisso.

Proposizione 3 : una lingua contiene un set senza prefisso infinito se e solo se contiene un set senza prefisso piacevolmente infinito.

Prova di seguito.

Prova della proposizione 3 : della proposizione 2. proposizioni 1.1 e 1.2.

Proposizione 4 : l'insieme di sottoinsiemi ben privi di prefissi di un linguaggio normale (codificato come una parola infinita ) è -regolare (e la dimensione dell'automa di Büchi che lo riconosce è polinomiale nella dimensione dell'NFA che riconosce il linguaggio normale).¯ u 0 ^ v 1 ¯ u 1 ^ v 2 ¯ u 2u0¯¯¯¯¯v1ˆu1¯¯¯¯¯v2ˆu2¯¯¯¯¯ωω

Prova di seguito.

Teorema 5 : Decidere se un linguaggio regolare descritto da un NFA contiene un sottoinsieme infinito senza prefisso può essere fatto in un polinomio temporale nella dimensione del NFA.

Prova del teorema 5 : secondo la proposizione 3, è sufficiente verificare se contiene un sottoinsieme privo di prefissi piacevolmente infinito, che può essere fatto in un tempo polinomiale costruendo l'automa di Büchi dato dalla proposizione 4 e verificando la non vuoto del suo linguaggio (che può essere fatto in tempo lineare nella dimensione dell'automa di Büchi).


Prova della proposizione 2

Lemma 2.1 : Se è un set privo di prefissi, allora lo è anche (per qualsiasi parola ).S Sw - 1 S w1Sww

Prova 2.1 : per definizione.

Lemma 2.2 : Sia un insieme infinito di parole. Let sia comune prefisso più lungo di tutte le parole di . e hanno lo stesso cardinale.S Sw : = lcp ( S n ) w:=lcp(Sn)S SS Sw - 1 Sw1S

Prova 2.2 : Definisci con . È ben definito per definizione di , iniettivo per definizione di e suriettivo per definizione di .f : w - 1 S S f:w1SSf ( x ) = w x f(x)=wxw - 1 S w1Sf fww

Prova della proposizione 2 : costruiamo e per induzione su , con l'ipotesi di induzione composta dalle seguenti parti:u n unv nvn n nH nHn

  • ( P 1 ) (P1) Per tutti , ;k { 1 , , n } k{1,,n}u 0u k - 1 v kSu0uk1vkS

  • ( P 2 ) (P2) Per tutti , e sono non vuoti e iniziano con lettere distinte;k { 1 , , n } k{1,,n}u k ukv kvk

  • ( P 3 ) (P3) S n : = ( u 0u n ) - 1 SSn:=(u0un)1S è infinito;

  • ( P 4 ) (P4)S n a S na Σ Non esiste un prefisso non vuoto comune a tutte le parole in . In altre parole: non esiste lettera tale che .SnaSnaΣ

Nota 2.3 : Se abbiamo sequenze che verificano senza , possiamo modificare per farle soddisfare anche . In effetti, è sufficiente sostituire con . non è interessato. è banale. è di costruzione. è di lemma 3.H nHn ( P 4 ) (P4)u nun ( P 4 ) (P4)u n unu n lcp ( S n ) unlcp(Sn)( P 1 ) (P1)( P 2 ) (P2)( P 4 ) (P4)( P 3 )(P3)

Costruiamo ora le sequenze per induzione su :nn

  • Inizializzazione: è vero prendendo (cioè prendendo e applicando l'osservazione 3.1).H 0 H0u 0 : = lcp ( S ) u0:=lcp(S)u 0 : = εu0:=ε

  • Fase di induzione: supponiamo di avere parole e tali che per qualche . Costruiremo e tale che .u 1 , , u n u1,,unv 1 , , v n v1,,vnH nHn n nu n + 1un+1 v n + 1vn+1 H n + 1Hn+1

Poiché è infinito e privo di prefissi (per il lemma 1), non contiene modo che . Poiché è infinito, esiste una lettera tale che è infinito. Per , c'è una lettera distinta da tale che non è vuoto. Scegli . Prendendo per essere sarebbero soddisfare , eS nSn ε εS n = a Σ ( S na Σ ) Sn=aΣ(SnaΣ)S nSn a aS na Σ SnaΣ ( P 4 ) (P4)b ba aS nb Σ v n + 1S nb Σ u n + 1 a ( P 1 ) ( P2 ) ( P 3 ) quindi applichiamo l'osservazione 3.1 per ottenere : .( P 4 ) u n + 1 : = a lcp ( a - 1 S n )

( P 1 ) u 1u n v n + 1u 1u n ( S nb Σ ) S .

( P 2 ) Per definizione di e .u n + 1 v n + 1

( P 3 ) a - 1 S n a S n + 1 è infinito per definizione di , e è quindi infinito per lemma 3.

( P 4 ) u n + 1 Per definizione di .


Prova della proposta 4

Prova della proposizione 4 : Sia essere un NFA.A = ( Q , , Δ , q 0 , F )

L'idea è la seguente: leggiamo , ricordiamo dove siamo, leggiamo , torniamo indietro a dove eravamo dopo aver letto , leggiamo , ricordati dove siamo, ... Ricordiamo anche la prima lettera che è stata letta in ogni per garantire che inizi con un'altra lettera.u 0 v 1 u 0 u 1 v n u n

Mi è stato detto che questo potrebbe essere più semplice con gli automi multi-testa, ma non ho molta familiarità con il formalismo, quindi lo descriverò semplicemente usando un automa Büchi (con una sola testa).

Abbiamo impostato , in cui verranno utilizzati i simboli overlined per descrive s ed i simboli con i cappelli per l' s.Σ ' : = ¯ ΣΣ u k v k

Abbiamo impostato , dove:Q : = Q × ( { } ( Q × Σ ) )

  • ( q , ) significa che stai leggendo un po 'di ;u n

  • ( q , ( p , a ) ) significa che hai finito di leggere nello stato , che ora stai leggendo che inizia con una e che, una volta terminato , tornerai a per leggere un che non inizia con .u n p v n + 1 a p u n + 1 a

Abbiamo impostato , perché si parte dalla lettura .q 0 : = ( q 0 , ) u 0

Definiamo come .F F × Q × Σ

L'insieme delle transizioni è definito come segue:

  • " " Per ogni transizione , aggiungi ;u n q a q ( q , ) ¯ a ( q , )

  • " to " Per ogni transizione , aggiungi ;u n v n + 1 q un q ' ( q , ) un' ( q ' , ( q , un ) )

  • " " Per ogni transizione , aggiungi ;v n q un q ' ( q , ( p , un ) ) un' ( q ' , ( p , un ) )

  • " a " Per ogni transizione dove è finale e la lettera distinta da , aggiungi ;v n u n p a p p b a ( q , ( p , b ) ) ¯ a ( p , )

Lemma 4.1 : è accettato da iff per ogni , e non sono vuoti e iniziano con lettere distinte e per ogni , .¯ u 0 ^ v 1 ¯ u 1 ^ v 2 ¯ u n ^ v n + 1 An1unvnn0u0unvn+1L(A)

Prova del lemma 4.1 : lasciato al lettore.

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.