Esercizio 1 di linguaggi e traduttori

Lauke
Salve ragazzi qualkuno può aiutarmi con questo esercizio sulle grammatiche?

Design the grammars for the following languages:

d) the set of all strings of 0s and 1s with an unequal number of 0s and 1s

Complicatuccio...almeno per me

Risposte
Rggb1
Comincerei da come sei abituato a procedere. Usi un metodo particolare? Costruisci un automa? Vai "a naso"?

Un punto di partenza: sei in grado di costruire una grammatica che genera le stringhe con uguale numero di zeri e uno?

Lauke
No l'automa non lo costruisco, in teoria vado a naso, tentando di individuare le proprietà della grammatica.
Quella grammatica che dici si sono in grado di costruirla.

Io pensavo questo

Numero diverso di 0 e 1 implica che #0 < #1 unione #0 > #1 (# è la cardinalità)

da ciò significa che posso costruire il linguaggio come unione di due linguaggi

Il linguaggio in cui il numero di 0 è inferiore al numero di 1 e viceversa.
Ma comunque non riesco a definire una grammatica adeguata.

Rggb1
E' una buona idea. Cominciamo da qui
"Lauke":
Quella grammatica che dici si sono in grado di costruirla.

Io direi
$S-> 0S1S | 1S0S | epsilon$

e prova da questa a trovare la grammatica (ovvero le altre produzioni) per renderla con più caratteri 0 (risp. 1).

Lauke
Ho trovato la soluzione, ma confesso che non ci sarei mai arrivato...

Le produzioni sono le seguenti...

$S \rarr A | B $
$A \rarr A A | AE | EA | 1E | E1 $
$B \rarr BB | BE | EB | 0E | E0 $
$E \rarr 0E1E | 1E0E | \epsilon $

Però anche se non lo trovata io sono riuscito a dimostrare che è corretta...diciamo mi accontento. Si basa più o meno sull'idea che avevo in mente, quanto meno per la costruzione, ma a tutte queste produzioni non ci sarei mai arrivato.

Però non ho trovato nulla su quest'altro esercizio... non è che mi potreste un suggerimento su questo?

Design grammars for the following languages

f) The set of all strings of 0s and 1s of the form $ xy $ , where $ x != y $ and $x$ and $y$ are of the same length.

Per questa grammatica sarò ho provato a ragionare come segue

La stringa che devo ottenere è una stringa della forma seguente

$ \omega_{x_p} 0 \omega_{x_s} \omega_{y_p} 1 \omega_{y_s} $ oppure $ \omega_{x_p} 1 \omega_{x_s} \omega_{y_p} 0 \omega_{y_s} $

con le seguenti proprietà

$\{( | \omega_{x_p} | = | \omega_{y_p} | ),(| \omega_{x_s} | = | \omega_{y_s} | ):}

Per cui ho provato a costruire varie grammatiche sperando di trovare una relazione generale diciamo, ad esempio ho provato a costruire la grammatica per la seguente
stringa

$ \omega_{x_p} 0 \omega_{x_s} \omega_{y_p} 1 $

E la grammatica risultante è la seguente

$S \rarr X_s 1 $
$X_s \rarr X_p X_s Y_p | 0 X_0$
$X_0 \rarr 0X_0 | 1 X_0 | \epsilon $
$X_p = 0 | 1 $
$Y_p = 0 | 1 $

che dovrebbe essere corretta, però non riesco a generalizzarla al caso che mi serve...qualche suggerimento su questa sarebbe di grandissimo aiuto.

Rggb1
"Lauke":
Ho trovato la soluzione, ma confesso che non ci sarei mai arrivato...

Carenza di autostima? ;)
Comunqe mi sembrava tu ci potessi arrivare, visto che avevi detto che sai come generare la grammatica "intermedia".

"Lauke":
$S \rarr A | B $
$A \rarr A A | AE | EA | 1E | E1 $
$B \rarr BB | BE | EB | 0E | E0 $
$E \rarr 0E1E | 1E0E | \epsilon $

che sarebbe questa; se ci fai caso, l'ultima produzione è la stessa che ho messo io (e che hai detto conoscevi). Insomma, ti mancava solo un piccolo passo.

"Lauke":
f) The set of all strings of 0s and 1s of the form $ xy $ , where $ x != y $ and $x$ and $y$ are of the same length.

Per questa grammatica sarò ho provato a ragionare come segue

La stringa che devo ottenere è una stringa della forma seguente

$ \omega_{x_p} 0 \omega_{x_s} \omega_{y_p} 1 \omega_{y_s} $ oppure $ \omega_{x_p} 1 \omega_{x_s} \omega_{y_p} 0 \omega_{y_s} $

con le seguenti proprietà

$\{( | \omega_{x_p} | = | \omega_{y_p} | ),(| \omega_{x_s} | = | \omega_{y_s} | ):}

Per cui ...

Per cui il ragionamento mi sembra perfetto. Ci ho pensato un po' su e sono arrivato ad un metodo analogo (e credo la soluzione).

La stringa è $xy$ con $x!=y$ pertanto è della forma che hai indicato
$xy= \omega_{x_p} 0 \omega_{x_s} \omega_{y_p} 1 \omega_{y_s} $ oppure $xy= \omega_{x_p} 1 \omega_{x_s} \omega_{y_p} 0 \omega_{y_s} $

Ma se ci fai caso la lunghezza della stringa fra lo 0 e l'1 (o viceversa) è comunque la somma della lunghezza del prefisso e del suffisso, quindi analogamente possiamo dire
$xy= \omega_{x_p} 0 \omega_{y_p} \omega_{x_s} 1 \omega_{y_s} $ oppure $xy= \omega_{x_p} 1 \omega_{y_p} \omega_{x_s} 0 \omega_{y_s} $

quindi il PDA si può costruire, ed è un linguaggio context-free; allora ho pensato a
$S->AB|BA
$A->CAC|0
$B->CBC|1
$C->0|1

Secondo me funziona. Magari verifica e fammi sapere.

Lauke
Per la grammatica di prima ho provato a dimostrare che fosse corretta, e quella mi è venuta. Per la sua costruzione continuo a dirti era troppo xD.


Per quanto riguarda l'ultimo esercizio non credo che la grammatica proposta da te vada bene e per dimostrarlo considera che la stringa $ 1001 $ appartiene al linguaggio definito dalla tua grammatica, risulta infatti

$ S \rarr AB \rarr CACB \rarr 1ACB \rarr 10CB \rarr 100B \rarr 1001 $

Per cui non credo vada...hai definito un insieme più grande

Rggb1
"Lauke":
Per quanto riguarda l'ultimo esercizio non credo che la grammatica proposta da te vada bene e per dimostrarlo considera che la stringa $ 1001 $ appartiene al linguaggio definito dalla tua grammatica, risulta infatti

$ S \rarr AB \rarr CACB \rarr 1ACB \rarr 10CB \rarr 100B \rarr 1001 $

Ma scusa, la stringa 1001 non è della forma $xy$ con $x!=y$ e $|x|=|y|$? Infatti è $x=10$ e $y=01$... cosa c'è che non va? Forse sono io che non ho capito... :?

Lauke
Hai ragione tu...scusami, è corretto. E l'ho dimostrato, ma non riesco a scrivere che ciò che dici è vero sul forum, s'inceppa il sito mentre scrivo.

Comunque ti ringrazio molto, i tuoi suggerimenti, soprattutto per quest'ultimo esercizio, mi hanno aperto la mente.
Alla prossima!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.