Nella prima parte, mostriamo un algoritmo esponenziale per decidere la circolarità. Nella seconda parte, mostriamo che questo è un problema difficile. Nella terza parte, mostriamo che ogni lingua circolare è un'unione di lingue nella forma (qui r potrebbe essere la regexp vuota); l'unione non è necessariamente disgiunta. Nella quarta parte, mostriamo un linguaggio circolare che non può essere scritto come somma disgiunta ∑ r + i .r+r∑r+i
Modifica: incorporate alcune correzioni a seguito dei commenti di Mark. In particolare, le mie precedenti affermazioni che la circolarità è completa o NP-difficile sono state corrette.
Modifica: corretto modulo normale da a ∑ r + i . Esibiva un linguaggio "intrinsecamente ambiguo".∑r∗i∑r+i
Continuando il commento di Peter Taylor, ecco come decidere (estremamente inefficientemente) se una lingua è circolare dato il suo DFA. Costruisci un nuovo DFA i cui stati sono tuple dei vecchi stati. Questo nuovo DFA esegue in parallelo n copie del vecchio DFA.nn
Se la lingua non è circolare, allora esiste una parola tale che se la eseguiamo ripetutamente attraverso il DFA, iniziando con lo stato iniziale s 0 , otteniamo stati s 1 , ... , s n tali che s 1 accetta ma uno degli altri non accetta (se tutti accettano, allora la sequenza s 0 , … , s n deve scorrere in modo che w ∗ sia sempre nella lingua). In altre parole, abbiamo un percorso da s 0 , ... , s nws0s1,…,sns1s0,…,snw∗ a s 1 ,…, s n dove s 1 accetta ma uno degli altri non accetta. Al contrario, se la lingua è circolare, ciò non può accadere.s0,…,sn−1s1,…,sns1
Quindi abbiamo ridotto il problema a un semplice test di raggiungibilità diretto (basta controllare tutte le possibili -tuple "cattive" ).n
Il problema della circolarità è difficile da affrontare. Supponiamo di avere un'istanza 3SAT con variabili → x e m clausole C 1 , … , C m . Possiamo supporre che n = m (aggiungi variabili fittizie) e che n sia primo (altrimenti trova un numero primo tra n e 2 n usando il test di primalità AKS e aggiungi variabili e clausole fittizie).nx⃗ mC1,…,Cmn=mnn2n
Considera la seguente lingua: "l'input non è nel formato dove → x i è un compito soddisfacente per C i ". È facile costruire un DFA O ( n 2 ) per questa lingua. Se la lingua non è circolare, allora c'è una parola w nella lingua, un certo potere che non è nella lingua. Poiché le uniche parole non nella lingua hanno lunghezza n 2 , w deve essere di lunghezza 1 o n . Se è di lunghezzax⃗ 1⋯x⃗ nx⃗ iCiO(n2)wn2w1n , si consideri w n , invece (è ancora in lingua), in modo che w è nella lingua e w n non è nella lingua. Il fatto che w n non è nei mezzi linguistici che w è un soddisfacente assegnazione.1wnwwnwnw
Al contrario, ogni incarico soddisfacente si traduce in una parola dimostrare la non circolarità della lingua: l'assegnazione soddisfare appartiene al linguaggio, ma w n non lo fa. Pertanto la lingua è circolare se l'istanza 3SAT non è soddisfacente.wwn
In questa parte, discutiamo di una forma normale per le lingue circolari. Consideriamo alcuni DFA per un linguaggio circolare . Una sequenza C = C 0 , ... è reale se C 0 = s (lo stato iniziale), tutti gli altri stati accettano, e C i = C j implica C i + 1 = C j + 1 . Quindi ogni sequenza reale è infine periodica e ci sono solo finitamente molte sequenze reali (poiché il DFA ha finitamente molti stati).LC=C0,…C0=sCi=CjCi+1=Cj+1
Diciamo che una parola si comporta secondo C se la parola prende il DFA dallo stato allo stato c i + 1 , per tutti i . L'insieme di tutte queste parole E ( C ) è regolare (l'argomento è simile alla prima parte di questa risposta). Si noti che E ( C ) è un sottoinsieme di L .cici+1iE(C)E(C)L
Data una sequenza reale , definisci C k come sequenza C k ( t ) = C ( k t ) . Anche la sequenza C k è reale. Poiché ci sono solo molte sequenze finite C k , anche la lingua D ( C ) che è l'unione di tutte le E ( C k ) è regolare.CCkCk(t)=C(kt)CkCkD(C)E(Ck)
Affermiamo che ha la proprietà che se x , y ∈ D ( C ) quindi x y ∈ D ( C ) . Supponiamo infatti che x ∈ C k e y ∈ C l . Quindi x y ∈ C k + l . Quindi D ( C ) = D ( C ) + può essere scritto nella forma rD(C)x,y∈D(C)xy∈D(C)x∈Cky∈Clxy∈Ck+lD(C)=D(C)+ per alcune espressioni regolari r .r+r
Ogni parola nei corrisponde lingua in una certa sequenza reale C , vale a dire che esiste una vera e propria sequenza di C che w comporta secondo. Quindi L è l'unione di D ( C ) su tutto il settore sequenza C . Pertanto ogni linguaggio circolare ha una rappresentazione della forma ∑ r + i . Al contrario, ogni linguaggio di questo tipo è circolare (banalmente).wCCwLD(C)C∑r+i
Considera il linguaggio circolare di tutte le parole sopra a , b che contengono un numero pari o un 'o un numero pari di b ' (o entrambi). Mostriamo che non può essere scritto come una somma disgiunta ∑ r + i ; per "disgiunto" intendiamo che r + i ∩ r + j = ∅ .La,bab∑r+ir+i∩r+j=∅
Nir+i x = a N b N ! x ∈ L x ∈ r + i i x N r + i z = a N ! b N ! y = a N ! b N r + j z i ≠ j x y ∉ LN>maxNix=aNbN!x∈Lx∈r+iixNr+iz=aN!bN!y=aN!bNr+jzi≠jxy∉L . Pertanto la rappresentazione non può essere disgiunta.