Mostra $ L= $ {W $ \ in (a, b) ^ * $ |per tutte le sottostringa di W, $ -5 \ Le | u | _a- | u | _b \ le5 \} $ è regolare

cs.stackexchange https://cs.stackexchange.com/questions/129460

Domanda

Provo a dimostrare che questa lingua è regolare:

$ l= $ {w $ \ in \ (a, b) ^ * $ |Per ogni uppstring di W, $ - 5 \ le | u | _a- | u | _b \ le5 \} $

Se costruisco un NFA e correre su di esso ogni sottostringa di W (salta altre lettere ogni volta) - e solo se sono tutti accettati (segue la condizione) quindi accetta w. È possibile in NFA?C'è altro modo per mostrare la regolarità della lingua?

È stato utile?

Soluzione

Nice domanda! Questo è un problema molto non tradizionale che coinvolge lingue regolari.

Prima di tutto: No, non è possibile eseguire un automa su ogni sottostringa di una stringa che salta altre lettere, dovresti eseguire l'automazione solo una volta sulla stringa di destinazione.

In questo caso è più semplice per la ragione sul Complementary della lingua data, cioè su

$$ l ^ c={w \ in (a, b) ^ * \ mid \ text {c'è una sottostringa} u \ testo {di} w \ testo {tale che} | u | _a- | u | _b> 5 \ text {o} | u | _a- | u | _b <-5 \} $$

La lingua $ l ^ c $ è regolare, poiché è riconosciuto dalla seguente NFA:

 Inserisci la descrizione dell'immagine qui

(ogni nome di stato è la differenza $ | u | _a- | u | _B $ , la prima lettera della sottostringa $ U $ è" trovato "nonreterministicamente dall'NFA).

così, come $ l ^ c $ è regolare, anche $ l= (l ^ c) ^ c $ è.


.

Seguendo il suggerimento di Hendrick, ho cercato di determinare l'NFA e disegnare il suo complemento, e ottengo questa bella DFA che riconosce $ l :

 Inserisci la descrizione dell'immagine qui

Ogni nome di un nome di stato accettante è un intervallo: quando, eseguendo l'automa dell'automa, siamo in stato $ [x_1, x_2] $ e abbiamo letto il String $ Z $ significa che per tutte le $ x \ in [x_1, x_2] $ c'è un Suffisso $ U $ di $ z $ in modo tale che $ | u | _a- | u | _b= x $ . Altrimenti detto, seguendo il suggerimento di Dmitry, l'Automaton calcola il set residuo di $ z $ .

In un certo senso, come dice Hendrick, è come stiamo eseguendo l'Automaton su ogni sottostringa, ma questo non significa che possiamo usare direttamente un DFA che riconosca le stringhe in tale che la differenza tra la $ A $ S e la $ B $ s è in $ [- 5,5 ] $ (che sarebbe facile da realizzare) ed eseguire questo automa per ogni sottostringa di un dato, e in questo modo dimostrare che la lingua è regolare.


.

Infine, scriverò una generalizzazione banale del risultato (penso che questo sia folclore, ma non riuscivo a trovare un riferimento).

Let $ T $ Sii una lingua normale su un alfabeto $ \ sigma $ e lasciare $ l $ essere la lingua definita come segue:

$$ l={w \ in \ Sigma ^ * \ Mid \ testo {per ogni sottostringa} u \ text {} w, \ u \ in t \} $$

Allora anche $ L $ è regolare.

Infatti, come sopra, considerare $ l ^ c $ , il complemento di $ L $ , vale a dire

$$ l ^ c={w \ in \ sigma ^ * \ mid \ testo {c'è una sottostringa} u \ testo {di} w \ text {tale } u \ non \ in t \} $$

quindi $ l ^ c=sigma ^ * t ^ c \ sigma ^ * $ , e quindi $ l= (\ Sigma ^ * t ^ c \ sigma ^ *) ^ c $ è regolare, poiché la famiglia di lingue regolari è chiusa in concatenazione e complementazione.

Cleary Il risultato è ancora vero per ogni famiglia di lingue chiuse in concatenazione e complementazione, ma questa non è una condizione necessaria. Infatti, la famiglia delle lingue finite non è chiusa sotto la complementazione, ma chiaramente se $ T $ è finita, quindi anche $-contenitore "> L $ è (poiché è sempre il caso che $ l \ subeteq t $ ). D'altra parte, questo non è vero per tutte le classi di lingue. Considerare la famiglia Nr di lingue non regolari, allora $ T={1 ^ P \ MID P \ Text {è Prime}} \ in \ $ nr, Ma in questo caso abbiamo $ l=Varnothing $ , che è regolare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top