Skip to content

Latest commit

 

History

History
381 lines (252 loc) · 9.73 KB

Tutorato8_180521.md

File metadata and controls

381 lines (252 loc) · 9.73 KB

Esercizi automi a pila deterministici (DPDA)

Esercizi vari

Esercizio T1

Definire un DPDA per il linguaggio L che accetti per stack vuoto. Poi convertirlo in DPDA che accetta per stato finale.

L = {anbn | n ≥ 1} ∪ {anc2n | n ≥ 1}

Visto che L gode della proprietà del prefisso è possibile accettarlo con un DPDA anche per pila vuota.

Accettazione per pila vuota: Esercizio T1.a

Conversione in DPDA che accetta per stato finale: Esercizio T1.b

Cioè è sufficiente spostare le transizioni che svuotano lo stack sulle transizioni verso lo stato finale accettante.

Esercizio T2

L'esercizio T1 del tutorato 7 è deterministico?

No, infatti esistono le due transizioni:

  • δ(q1, b, A) = {(q1, ε)}
  • δ(q1, ε, A) = {(q1, ε)}

Esercizi pag 267

Esercizio 6.4.1.a

PDA P che accetta palindromi pari. È deterministico?

La definizione di P è la seguente:

P = ({q, p, f}, {0, 1}, {0, 1, Z}, δ, q, Z, {f})

Transizioni:

  1. δ(q, 0, Z) = {(q, 0Z)}
  2. δ(q, 1, Z) = {(q, 1Z)}
  3. δ(q, 0, 0) = {(q, 00)}
  4. δ(q, 0, 1) = {(q, 01)}
  5. δ(q, 1, 0) = {(q, 10)}
  6. δ(q, 1, 1) = {(q, 11)}
  7. δ(q, ε, Z) = {(p, Z)}
  8. δ(q, ε, 0) = {(p, 0)}
  9. δ(q, ε, 1) = {(p, 1)}
  10. δ(p, 0, 0) = {(p, ε)}
  11. δ(p, 1, 1) = {(p, ε)}
  12. δ(p, 0, 0) = {(p, ε)}
  13. δ(p, ε, Z) = {(f, Z)}

Un automa a pila è deterministico se, ∀ q, a, X valgono questi punti:

  • δ(q, a, X) contiene una sola coppia;
  • se δ(q, a, X) contiene una coppia, allora δ(q, ε, X) deve essere vuoto.

Quindi l'automa P non è deterministico. Ad esempio le transizioni 2 e 7, 3 e 8 violano la seconda proprietà.

D'altronde questo linguaggio non ha la proprietà del prefisso, quindi non potrebbe essere accettato da un DPDA.

Esercizio 6.4.1.c

PDA P = ({p, q}, {0, 1}, {X, Z}, δ, q, Z) con le transizioni:

  1. δ(q, 1, Z) = {(q, XZ)}
  2. δ(q, 1, X) = {(q, XX)}
  3. δ(q, 0, X) = {(p, X)}
  4. δ(q, ε, X) = {(q, ε)}
  5. δ(p, 1, X) = {(p, ε)}
  6. δ(p, 0, Z) = {(q, Z)}

In questo caso le transizioni 3 e 4 violano la seconda regola. Quindi P è un automa a pila non deterministico.

Esercizio 6.4.2.a

Definire DPDA per il linguaggio L = {0n1m, nm}

Esercizio 6.4.2.a

Esercizio 6.4.2.b

Definire DPDA per il linguaggio L = {0n1m, nm}

Esercizio 6.4.2.b

Nessuno dei due linguaggi degli ultimi due esercizi ha la proprietà del prefisso, quindi non potrebbero essere accettati da DPDA che accettano per stack vuoto.

Esercizio 6.4.2.c

Definire DPDA per il linguaggio L = {0n1m0n, con n, m arbitrari}

P = ({q0, q1, q2, q3, q4, q5}, {0, 1}, {Z, 0}, δ, q0, Z, {q0, q4, q5})

Esercizio 6.4.2.c

Alcuni casi limite:

  • 02n è accettata, in quanto le transizioni fra q0 e q1 servono proprio ad assicurarsi che la stringa si soli '0' sia di lunghezza pari.
  • Anche 1m è accettato. Infatti se q2 vede una Z sullo stack, vuol dire che non sono stati letti '0' prima degli '1', e quindi transita in q5 che accetta qualunque numero di '1'.
  • La stringa vuota è accettata da q0.

Esercizi CFL

Esercizi pag 286

Esercizio 7.1.2

Trasformare la CFG:

  1. eliminare le ε-produzioni;
  2. eliminare produzioni unitarie;
  3. eliminare simgoli inutili (non generatori e non raggiungibili);
  4. mettere in forma normale di Chomsky.

CFG:

  • S => ASB | ε
  • A => aAS | a
  • B => SbS | A | bb

1. Eliminazione ε-produzioni:

I simboli annullabili sono: Z = {S}

Sostituiamo ogni simbolo annullabile (in questo caso solo S) con la possibilità che ci sia, oppure no:

  • S => ASB | AB
  • A => aAS | aA | a
  • B => SbS | Sb | bS | b | A | bb

2. Eliminazione produzioni unitarie:

Le coppie unitarie sono:

  • (S, S) => \
  • (A, A) => \
  • (B, B) => (B, A)

Quindi ottengo:

  • S => ASB | AB
  • A => aAS | aA | a
  • B => SbS | Sb | bS | b | bb | aAS | aA | a

3. Eliminazione simboli inutili:

  • Sia S, A, B sono generatori;
  • Inoltre sono anche tutti raggiungibili.

4. Forma normale di Chomsky:

Tutte le produzioni devono essere costituite da 2 variabili oppure da un terminale.

  • S => AE | AB
  • A => MF | MA | a
  • B => GS | SN | NS | b | MF | MA | a | NN
  • M => a
  • N => b
  • E => SB
  • F => AS
  • G => SN

Esercizio 7.1.3

Trasformare la CFG:

  1. eliminare le ε-produzioni;
  2. eliminare produzioni unitarie;
  3. eliminare simgoli inutili (non generatori e non raggiungibili);
  4. mettere in forma normale di Chomsky.
  • S => 0A0 | 1B1 | BB
  • A => C
  • B => S | A
  • C => S | ε

1. Eliminazione delle ε-produzioni;

I simboli annullabili sono: Z = {C, A, B, S}

  • S => 0A0 | 00 | 1B1 | 11 | BB | B
  • A => C
  • B => S | A
  • C => S

Questa grammatica accetta lo stesso linguaggio di quella originle, a meno del simbolo ε (dato che S era annullabile).

2. Eliminazione produzioni unitarie

Le coppie unitarie sono:

  • (S, S) => (S, B), (S, A), (S, C)
  • (A, A) => (A, C), (A, S), (A, B)
  • (B, B) => (B, S), (B, A), (B, C)
  • (C, C) => (C, S), (C, B), (C, A)

Quindi la grammatica diventa:

  • S => 0A0 | 00 | 1B1 | 11 | BB
  • A => 0A0 | 00 | 1B1 | 11 | BB
  • B => 0A0 | 00 | 1B1 | 11 | BB
  • C => 0A0 | 00 | 1B1 | 11 | BB

3. Eliminazione simboli inutili

I generatori sono: π = {0, 1, S, A, B, C}. I raggiungibili sono: R = {S, A, 0, 1, B}.

Quindi C va rimossa perchè non raggiungibile, ma in realtà si possono rimuovere anche A e B perchè sono identiche ad S.

Quindi rimane:

  • S => 0S0 | 00 | 1S1 | 11 | SS

4. Portare a CNF

  • S => XE | EE | YF | FF | SS
  • X => ES
  • Y => FS
  • E => 0
  • F => 1

Esercizio 7.1.4

  • S => AAA | B
  • A => aA | B
  • B => ε

1. Eliminazione ε-produzioni

I simboli annullabili sono: Z = {B, S, A}. Siccome B può produrre solo la stringa vuota, va rimossa, e di conseguenza va tolta anche ogni produzione che contiene B nel corpo.

Quindi:

  • S => AAA | AA | A
  • A => aA | a

Il linuaggio di questa grammatica è identico al precedente tranne per la stringa vuota che non è più possibile produrre.

2. Eliminazione produzioni unitarie

Coppie unitarie:

  • (S, S) => (S, A)
  • (A, A) => \

Quindi:

  • S => AAA | AA | aA | a
  • A => aA | a

3. Eliminazione simboli inutili

I generatori sono π = {a, A, S}. I raggiungibili sono R = {S, A, a}. Quindi non cambia nulla.

4. Porto in CNF

Devono restare solo produzioni con un terminale oppure due variabili nel corpo.

  • S => BA | AA | CA | a
  • A => CA | a
  • B => AA
  • C => a

Esercizio 7.1.6

Scrivere una grammatica CNF per le stringhe di parentesi bilanciate.

Una possibile grammatica non normalizzata é:

  • S => (S) | SS | ()

Che in CNF diventa:

  • S => AC | SS | BC
  • A => BS
  • B => (
  • C => )

Altro esercizio

Esercizio T3

  • S => XY
  • X => abb | aXb | ε
  • Y => c | cY

1. Elimino ε-produzioni:

Solo la variabile X è annullabile.

  • S => XY | Y
  • X => abb | aXb | ab
  • Y => c | cY

2. Elimino produzioni unitarie:

Coppie unitarie:

  • (S, S) => (S, Y)
  • (X, X) => \
  • (Y, Y) => \

Quindi basta aggiungere ad S le produzioni non unitarie di Y:

  • S => XY | c | cY
  • X => abb | aXb | ab
  • Y => c | cY

3. Elimino simboli inutili:

Sono tutti generatori, e sono tutti raggiungibili.

4. Metto in CNF:

  • S => XY | c | CY
  • X => AD | AE | AB
  • Y => c | CY
  • C => c
  • A => a
  • B => b
  • D => BB
  • E => XB

Macchine di Touring

Esercizi pag 347

Esercizio 8.2.1.b

Descrivere le ID della TM in figura 8.10 (del libro) con la parola in input 000111.

[q0]000111 -| X[q1]00111 -| X0[q1]0111 -| X00[q2]111 -| X0[q2]0Y11 -| X[q2]00Y11 -| [q2]X00Y11 -| X[q0]00Y11 -| ... riparte dall'inizio ...

Esercizio 8.2.2.b

TM che accetta L = {anbncn | n ≥ 1}.

NB: il simbolo blank si indica con '□' in JFLAP.

M = ({q0, q1, q2, q3, q4, q5}, {a, b, c}, {X, Y, □}, δ, q0, □, {q5})

Esercizio 8.2.2.c

Esercizio 8.2.2.c

TM che accetta L = {wwR | w è una qualunque stringa di 0 e 1} (palindromi pari).

N = ({q0, q1, q2, q3, q4, q5, q6}, {0, 1}, {X, □}, δ, q0, □, {q6})

Esercizio 8.2.2.c