Come sentire intuitivamente che una lingua è regolare


9

Data una lingua L={anbncn} , come posso dire direttamente, senza guardare le regole di produzione, che questa lingua non è regolare?

Potrei usare il lemma del pompaggio, ma alcuni ragazzi stanno dicendo solo guardando la grammatica che questo non è normale. Come è possibile?


1
Chiunque può guardare qualsiasi lingua e dire semplicemente che non è normale. Non sono sicuro che l'intuizione, di per sé, sia tanto in gioco qui quanto l'esperienza. Questo è un linguaggio abbastanza semplice (nonostante sia non regolare) ed è inevitabilmente incontrato nello studio dei linguaggi formali. Una volta che ti è stato detto che non è regolare e hai dimostrato che non è regolare utilizzando alcuna tecnica di prova valida, in genere non hai bisogno di una prova per convincere altre persone, perché tutte hanno dimostrato loro stesse quando sono state introdotte alla soggetto.
Patrick87

sì, ma a volte nelle lezioni seguono solo alcune prove matematiche asciutte, ma mancano davvero di spiegazioni intuitive con esempi semplici reali
doniyor

Dimentica . Hai mai avuto la sensazione che a n b n non sia normale? anbncnanbn
Uday Reddy,

2
Guardare una grammatica e proclamare perché la grammatica non è regolare la lingua non è regolare è un errore. Esistono molte grammatiche non regolari per le lingue normali. Attenzione! Detto questo, decidere se una grammatica è regolare è facile; basta controllare le produzioni.
Raffaello

Risposte:


11

La proprietà principale di DFA / NFA è la mancanza di memoria illimitata. Se guardi una lingua e l'unico algoritmo (che dovrebbe poi essere tradotto in un automa finito) a cui puoi pensare richiede questa proprietà, cioè senti che qualsiasi algoritmo che la riconosce dovrà ricordare un numero arbitrario di cose (come nel tuo esempio) allora quella lingua probabilmente non è regolare.n

Ovviamente, dovresti sempre ricordare che l'intuizione matematica può essere sbagliata e l'unico modo per essere sicuri della tua intuizione è dimostrarlo.

EDIT: risponderò all'ultima domanda nei commenti qui, a causa della mancanza di spazio.

voi ragazzi state parlando di memoria illimitata che intendete dire è il motivo per cui non è normale. ma a ^ nb ^ m può anche avere memoria illimitata se lo desidero, no? questo non mi dà ancora pace.

Il problema non è la grandezza delle parole (di solito incontrerai infiniti linguaggi regolari, perché ogni linguaggio finito è regolare, ed è piuttosto noioso) ma quanto il DFA deve ricordare.
Nell'esempio , non è necessario ricordare m , n . L'algorihm deve solo assicurarsi che siano positivi e che la parola sia ordinata correttamente. Questo è un elenco finito e ciascuno degli elementi nell'elenco richiede una quantità costante di memoria. Confronta questo con a n b n , per il quale è richiesto un semplice alogrit per ricordare che il numero di a è uguale al numero di bambnm,n
anbnab'S. Ciò richiederà memoria illimitata. Quando guardo una lingua e vedo che qualsiasi algoritmo a cui riesco a pensare ha bisogno di memoria illimitata, la mia intuizione che la lingua non è regolare diventa più forte. Se non riesco a trovare un algoritmo "intelligente" (uno che richiede una quantità costante di memoria) in un ragionevole lasso di tempo (quanto tempo spetta a te), proverò a dimostrare che il linguaggio non è regolare.
Spero che questo lo renda un po 'più chiaro.


grazie, le prove matematiche portano l'intuizione, ma guarda questa regola di produzione: S -> ab | ASB. questo è per un ^ nb ^ n che dice che non è anche regolare. ma a ^ mb ^ n è regolare con m, n> = 1. perchè è questo? questi sono in realtà la stessa forma, giusto? non capisco la differenza tra queste due lingue
doniyor

1
Per a ^ nb ^ n devi tenere traccia di 2 cose: in primo luogo, che il numero di a è uguale al numero di b (questa è la parte impossibile per DFA), e in secondo luogo che nessuna 'b' è seguita da un 'a '. Per un ^ mb ^ n non ti interessa il valore di m, n. Ti interessa solo che ci sia almeno una 'a' e almeno una 'b' e che nessuna 'b' sia seguita da una 'a'. Informalmente parlando, devi ricordare solo 3 cose.
Boris Trayvas,

oh okay, ora ho capito.
doniyor,

quindi l'ordine è anche la cosa cruciale, giusto? come aabbcc accettato ma non aabcbc solo perché l'ordine non va bene. destra?
doniyor,

1
"La proprietà principale delle lingue normali è la mancanza di memoria illimitata." - So cosa intendi, ma quella frase non ha alcun senso. "senti che qualsiasi algoritmo che lo riconosce avrà bisogno di ricordare un numero arbitrario di cose" - Questa è davvero l'unica intuizione che conosco anche io, ma il suo genere è molto, molto pericoloso; vedi qui .
Raffaello

5

Potrei usare il lemma del pompaggio

Esattamente. Dopo aver usato il lemma di pompaggio o una qualsiasi delle altre tecniche un paio (di dozzine) di volte, inizierai a vedere gli schemi in lingue che proibiscono loro di essere regolari. è molto semplice che probabilmente hai già imparato. Quindi anche questa è una questione di esperienza, non solo di intuizione.anbn

Un buon modo per testare il tuo intuito è guardare queste lingue:

  1. {xyyzx,y,z{a,b}+}
  2. {xyyzx,y,z{a,b}}
  3. {xyyzx,y,z{a,b,c}+}
  4. {xyyzx,y,z{a,b,c}}

Quali sono senza contesto?


1
Se qualcuno conosce esempi altrettanto belli per il confine delle lingue normali, per favore, dillo. Si prega di non rovinare la risposta nei commenti.
Raffaello

Raffaello - ottimo lavoro! grazie per aver dato esempi e per avermi testato esplicitamente.
doniyor,


4

Puoi effettivamente decidere se una lingua è regolare usando calcoli abbastanza semplici, piuttosto che fare una prova completa. Devi semplicemente applicare un criterio molto potente: una lingua è regolare se e solo se ha finitamente molti quozienti.

LxxLwxwLL={anbn}aL={an1bn|n1}bL=. We can easily see that akL={ankbn|nk}. There are infinitely many quotients of the form, so it follows immediately that L is not regular.

If we construct a DFA D to decide L, and D will be in state S after reading in a, then aL is the language decided by D modified to have start state S. This same idea can be used to directly construct the minimal DFA that decides a regular language from its definition.


b\L means: if i devide the L by b, then i will get empty set?. is it because i actually have to start reading the word from begining? and not from behind?
doniyor

1
bL= because there are no strings in L that start with B. You can define a right quotient L/b similarly which corresponds to "reading from behind." A language is also regular iff it has finitely many right quotients, because the reversal of a regular language is regular. (This is easy to show using NFAs.)
James Koppel

1
Here's a good slide deck which explains quotients, and how to construct DFAs from them: cs.cmu.edu/~cdm/pdf/Minimization.pdf
James Koppel

oh okay, thanks a lot. now i get a litle. mmm... let me study this again for a while though...
doniyor
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.