Prova di non regolarità, basata sulla complessità di Kolmogorov


8

In classe il nostro professore ci ha mostrato 3 metodi per dimostrare la non regolarità:

  1. Teorema di Myhill – Nerode
  2. Pompaggio di Lemma per le lingue normali
  3. Prova di non regolarità, basata sulla complessità di Kolmogorov

Ora i primi due, il teorema di Myhill-Nerode e il lemma di pompaggio, ho capito bene e sono stato anche in grado di fare gli esercizi con i primi due metodi. Ma non ho capito il terzo. La definizione del terzo metodo è la seguente:

Permettere  L(Σbool)essere una lingua normale. Let per ogni . Quindi esiste una costante , tale che per tutti Lx={y(Σbool)|xyL} x(Σbool) c x,y(Σbool)

 K(y)log2(n+1)+c

se è la nona parola nella lingua . y Lx

Ora non capisco come usare questo teorema per dimostrare che una lingua non è regolare, non capisco davvero il concetto. Abbiamo usato la complessità di kolmogorov prima per determinare la lunghezza del programma per computer più breve di un oggetto. Come si dimostra la non regolarità con questo teorema? E qual è il pensiero dietro?

Molte grazie!

Risposte:


8

Per quanto ne sappia, questo non è uno degli approcci "classici" utilizzati per caratterizzare le lingue regolari.

Questo approccio è discusso in "Un nuovo approccio alla teoria del linguaggio formale della complessità Kolmogorov" , di Ming Li e Paul MB Vitanyi (vedere la sezione 3.1).

Forniscono diversi esempi in cui è possibile utilizzare la frase menzionata anziché utilizzare il lemma di pompaggio. Ad esempio, dimostrando la non regolarità diL dove

L={1p|p is prime}.

Dato alcuni xΣ, Lx={y|xy=1pp is prime}. Scegliamox=1p dove p è il kprimo. Permetterey1 sii la prima parola dentro Lx. Ovviamente,y1=1pp dove p è il k+1Prime. Secondo la dichiarazione che hai citato,K(y1)c (n=1), per qualche costante c dipende solo da L (vedi documento).

Dal momento che questo vale per tutti X, possiamo legare la complessità di Kolmogorov di tutti gli elementi in S={y1X|X=1p per prime p y1X è la prima stringa in LX} dalla stessa costante c. Tuttavia, l'abbiamo vistoS in realtà consiste in differenze tra numeri primi consecutivi, vale a dire S={1pK+1-pK|K1} dove pK è il Kprimo. Dal momento che sappiamoS non può aver limitato la complessità di Kolmogorov (le differenze principali diventano arbitrariamente grandi), questo significa L non può essere regolare.


2
Non conoscevo questa tecnica. Hai voglia di aggiungere una risposta alla nostra domanda di riferimento ?
Raffaello

1
Sì, posso aggiungerne uno più tardi. Devo ammettere però che anche io non ero a conoscenza di questa tecnica, mi sono appena imbattuto in questo documento dopo aver cercato la domanda di op. Non sono sicuro di quanto sia diventata popolare (rispetto ad altri metodi) questa tecnica. L'articolo di Arxiv è stato effettivamente pubblicato su SIAM nel 1995, quindi non è così nuovo come pensavo all'inizio (approccio ancora, interessante e originale).
Ariel,

Grazie mille per lo sforzo e l'esempio. Potresti spiegarmi il perché 1pp è la prima parola in  Lx? p è il primo k-esimo e p 'è il primo k + 1, quindi non dovremmo dirlo y1=1pp? E come ho capito, la pp 'non ha bisogno di essere necessariamente primi, ecco perché scegliamo questo?
gammaALpha,

1
Il prefisso è X=1p', la prima parola in L con prefisso X è poi y1X=1p-p' tale che p è il prossimo primo, quindi Xy1X=1p'+(p-p')=1p. Noi scegliamoX in questo modo perché ciò ci consente di limitare la complessità di Kolmogorov di tutto ciò y1Xda una costante. Poiché le differenze principali possono diventare arbitrariamente grandi, l'insieme di tutte questey1Xè infinito (quindi non può avere una complessità limitata). Ho aggiunto una risposta alla domanda di riferimento, contiene più informazioni che potresti trovare utili e un altro esempio.
Ariel,

3

Un altro esempio molto semplice è il seguente: utilizzare la complessità di Kolmogorov per dimostrarlo Lww={ww|w{0,1}*} non è regolare.

Ti do una prova molto informale sperando che possa aiutarti a capire meglio il ruolo della complessità di Kolmogorov.

L'idea chiave è la seguente: un automa finito D (che riconosce una lingua normale LD) ha una quantità finita di "memoria"; quindi in esecuzione su una stringa di inputX=yz quando ha "elaborato" la prima parte dell'input y l'appartenenza di X in LD dipende solo dal suo stato attuale e dalla seconda parte dell'input z.

Ora supponiamo che Lwwè regolare; poi c'è un DFADww questo lo riconosce.

Permettere y essere una stringa incomprimibile di lunghezza |y|=n»|D|

Per tutti gli ingressi X=yz, alla fine della prima parte y, il DFA Dww sarà chiaramente sullo stesso stato qioe per ipotesi accetterà solo se la parte rimanente z è tale che X=yz può essere diviso in due metà uguali (es yz=ww); per esempio

 Let y = 10110
       y   z
 x = 10110 0  >> rejected
 x = 10110 1  >> accepted  (w=101, |y|>|z|)
 x = 10110 00 >> rejected
 x = 10110 01 >> rejected
 ....
 x = 10110 10110 >> accepted  (w=10110,  |y|=|z| !!!)
 ....
 x = 10110 1101101 >> accepted (w=101101, |z|<|y|

Ma è importante notare che esiste solo una stringa z di lunghezza |y| che è accettato (z=y).

Quindi, data la descrizione di Dww, lo stato qio alla fine di ye la lunghezza |y| possiamo simulare il comportamento di Dww su tutto il 2|y| stringhe e vedere quale di esse accetta ... ma accetta esattamente z=y.

Quindi con un programma di dimensioni =|Dww|+logi+logy+c

(|Dww| è necessario spazio per memorizzare la descrizione di Dww, logi spazio per riporre qi, logy spazio per memorizzare la lunghezza di y, c è necessario spazio per le istruzioni che simulano il DFA)

possiamo "ricostruire" la stringa y; ma abbastanza grandey noi abbiamo <|y| che è una contraddizione perché y è incomprimibile.


Non conoscevo questa tecnica. Hai voglia di aggiungere una risposta alla nostra domanda di riferimento ?
Raffaello
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.