Un'espressione regolare può essere infinita?


10

So che le lingue che possono essere definite usando espressioni regolari e quelle riconoscibili da DFA / NFA (automi finiti) sono equivalenti. Inoltre non esiste alcun DFA per la lingua . Ma ancora si può essere scritto usando le espressioni regolari (per quella materia qualsiasi linguaggio non regolare può essere) come . Ma sappiamo che ogni linguaggio che ha un'espressione regolare ha un DFA che lo riconosce (contraddizione con la mia precedente affermazione). So che questa è una cosa banale, ma la definizione di espressione regolare include la condizione che dovrebbe essere finita?{0n1n|n0}{ϵ}{01}{0011}......


3
Hai già risposto alla tua domanda: se REG CFL, tali termini non possono essere espressioni regolari.
Raffaello

1
Solo una nota a margine: se facciamo cadere il requisito del DFAE / NFA essere finito, siamo in grado di costruire un automa di accettare . {0n1n|n0}

3
Come punto di terminologia, la parola "automi" è il plurale di "automa". Non esiste una parola "automatas": non puoi renderla più plurale di quanto non sia già. (automi è corretto come possessivo ma non come plurale)
insensato dal Regno Unito il

Risposte:


23

Se alle espressioni regolari fosse stato concesso di essere infinito, allora qualsiasi lingua sarebbe stata regolare.

Dato il linguaggio , possiamo sempre definire l'espressione regolare , che definisce esattamente . (Esempio: l'espressione regolare definisce .)R = w 1 + w 2 + L R 1 = ϵ + 0 + 1 + 00 + 01 + 10 + 11 + L 1 = { 0 , 1 } L={w1,w2,}R=w1+w2+L
R1=ε+0+1+00+01+10+11+L1={0,1}*

Sappiamo che alcune lingue non sono regolari, quindi questo dimostra che infinite espressioni regolari descrivono una classe più ampia di lingue rispetto alle espressioni regolari finite.


5
Adoro questa risposta, perché non solo dice che le infinite espressioni regolari sono diverse, ma che il concetto nel suo insieme non è significativo.
jmite,

Un'affermazione più concisa del punto che ho seppellito nel mio secondo paragrafo, e quindi più chiara.
Davislor,

Ma si conclude con una pura tautologia. Perché non consideriamo tutte le lingue regolari, quindi, se hanno questo modulo? Le cose che facciamo con le regex non funzionano più. Non possiamo costruire una macchina a stati con un algoritmo induttivo perché non finisce mai e ha stati infiniti. Non possiamo confrontarci con tutto nell'elenco e rifiutare se nulla corrisponde. E non possiamo comunque rappresentare fisicamente l'elenco. (Le liste che possiamo generare al computer sono le lingue decidibili.) Possiamo provare cose usando il fatto che ogni lingua ha questa forma, ma non il tipo di cose che conosciamo sui regex.
Davislor,

@jmite "non è significativo" o un caso speciale?
BAR

@BAR non ha senso, come nella classe di lingue sopra descritta da infinite espressioni regolari è solo 2 Σ cioè l'insieme di tutte le lingue. Non otteniamo una classe di linguaggi come faresti con RE, CFG o persino macchine di Turing finiti. Σ2Σ
jmite,

5

Sì, deve essere finito. Immagina di avere quel set infinito di possibili corrispondenze e il tuo input è 011. Saresti mai in grado di rifiutarlo? Saresti mai a corto di partite da controllare?

Esiste un linguaggio che, secondo tale definizione, non sarebbe regolare ? Che dire dell'insieme di tutte le coppie di programmi e input in modo tale che il programma dato si arresti sull'input dato?

Ora, se avessi un programma che enumera le stringhe in una lingua in ordine lessicografico—

Aggiornare

Per chiarire un po 'in base al feedback nei commenti, la ragione per cui non tutte le lingue di questo modulo sono regolari è per definizione. Se, ad esempio, cerchi la prova del teorema di Kleene, dipende dal fatto che un'espressione regolare deve essere limitata per dimostrare che genera una macchina a stati finiti.

Perché definiamo un linguaggio "normale" in quel modo? Poiché ogni linguaggio formale è un sottoinsieme delle stringhe di un alfabeto e ogni serie di stringhe può essere espressa come unione di singoli, quindi se chiamassimo qualsiasi serie di stringhe una lingua "normale", la lingua normale sarebbe solo un sinonimo di la lingua . Questa non è una definizione molto utile, soprattutto perché non possiamo effettivamente implementarla in hardware o software. Non possiamo archiviare un elenco infinito arbitrario da nessuna parte o costruire una macchina a stato infinito.

Come ho accennato, tuttavia, se hai un modo per enumerare tutte le stringhe in una lingua in ordine, puoi costruirne un decider (accetta quando vedi quella stringa esatta, rifiuta quando incontri una stringa che segue quella che tu stai cercando) e viceversa (per ogni stringa in ordine, eseguilo attraverso il decisore ed emettilo se e solo se è accettato). Quindi, se considerassimo regolare ogni lingua enumerabile , ogni lingua decidibile sarebbe "regolare" e avremmo bisogno di un nuovo termine per le lingue riconosciute dalle macchine a stati finiti e le loro codifiche equivalenti come espressioni finite.


1
Questa risposta è sbagliata Il solo fatto che una rappresentazione di una lingua non si presti a costruire un decisore algoritmico in modo ingenuo non implica che questa rappresentazione sia sbagliata; potrebbero esserci altri approcci. In effetti, ogni lingua decidibile ha una rappresentazione della forma che sasha propone! In breve, stai commettendo l'errore "Non riesco a vedere come, quindi deve essere impossibile".
Raffaello

@Raphael: Per favore, considera le implicazioni della tua affermazione, " ogni lingua decidibile ha una rappresentazione della forma che Sasha propone!" Questo è, in effetti, il punto che stavo sollevando nella mia risposta. La domanda era: tutte le lingue di questo modulo sono definite regolari? Bene, ogni lingua decidibile è regolare? (E, come ho mostrato, anche alcuni indecidibili?) Sarebbe una definizione utile di "normale?"
Davislor,

Inoltre, lungi dal fallire sul fatto che un decisore per un elenco infinito di stringhe non può essere fatto, la mia ultima frase è stata un suggerimento su come potrebbe essere fatto: se l'elenco di stringhe è ben ordinato, puoi rifiutarne uno non appena quando si incontra una stringa oltre nell'ordine. Tuttavia, una macchina a stati finiti non può farlo perché non può rappresentare tutti gli stati di aver confrontato con ciascuna stringa nell'elenco infinito, e nemmeno le espressioni regolari. Se potessero, sarebbero abbastanza potenti da riconoscere tutte le lingue decidibili.
Davislor,

0

Supponiamo che le espressioni regolari abbiano potuto essere infinite.

Pertanto il linguaggio definito da {ϵ} ∪ {01} ∪ {0011} ... sarà regolare. Per ogni lingua normale esiste un NFA. Un modo per ottenere questo NFA sarebbe quello di avere singoli NFA per ciascuno di {ϵ}, {01}, {0011} ... e combinarli usando ϵ transizioni. Poiché ci sono infinite espressioni regolari distinte, avremo bisogno di infiniti sub-NFA da combinare. Tuttavia, NFA può avere solo un numero finito di stati (definizione di NFA).

Pertanto non esiste un NFA in grado di definire un linguaggio definito dall'unione di infinite espressioni regolari, il che implica che il linguaggio non è regolare.

Quindi non esiste un'espressione regolare che possa definire la stessa lingua della lingua definita dall'unione di infinite espressioni regolari.

Pertanto le espressioni regolari possono avere solo espressioni finite.


Le tue "infinite espressioni regolari" definiscono quindi un'altra classe di lingue, non i linguaggi regolari. In effetti, sono in grado di definire qualsiasi linguaggio, e questo è assolutamente poco interessante (non sono limitati, quindi difficili da lavorare; e possono fare qualsiasi cosa, quindi nulla da studiare in termini di limitazioni).
vonbrand,
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.