Calcolabilit` a e Linguaggi Formali Parte II Compito BBBBB
16 Dicembre 2014
Esercizio 1
Enunciare e dimostrare il secondo teorema di ricorsione.
Soluzione
Teorema. Sia h una funzione calcolabile totale. Allora esiste un numero naturale n tale che φn= φh(n).
Prova. Si definisca la seguente funzione di due variabili:
f (x, y) = φh(φx(x))(y).
f `e calcolabile:
Input x,y;
Decodifica x per ottenere il programma Px; If Px↓ x then z := h(φx(x));
Decodifica z per ottenere il programma Pz; If Pz↓ y then Output φz(y).
Possiamo applicare il teorema del parametro. Esiste una funzione calcolabile totale s tale che φs(x)(y) = f (x, y).
Sia m un indice tale che s = φm. Allora abbiamo
φs(x)(y) = φφm(x)(y) = φh(φx(x))(y) ed assegnando il valore m ad x si ha:
φs(m)(y) = φφm(m)(y) = φh(φm(m))(y)
Si noti che essendo s ed h funzioni totali, φm(m) e h(φm(m)) sono ben definiti. Per ottenere la conclusione, bisogna definire n = φm(m).
Esercizio 2
Dimostrare che K = {x : Px↓ x} non `e estensionale (i.e., non rispetta le funzioni).
Soluzione
Sia n un indice di un programma che si autoriconosce. In altre parole, Pn ↓ n, mentre Pn ↑ x per ogni x 6= n. Sia inoltre r 6= n tale che φn= φr. Si vede facilmente che n ∈ K mentre r /∈ K. Infatti Pr↑ r perch´e Pr converge solo su n ed r 6= n.
Esercizio 3
(a) Definire una grammatica per ciascuno dei seguenti linguaggi:
L1= {(anb)mcak: n, m, k > 0};
L2= {anbk+nch: n, k, h > 0, k pari, 1 ≤ h ≤ 2}.
(b) Determinare il tipo di grammatica data nella classificazione di Chomski;
(c) Determinare il tipo del linguaggio. Se il linguaggio non `e regolare verificarlo con il pumping lemma. Se il linguaggio
`e regolare definire un’espressione regolare che lo definisce.
Soluzione
Il linguaggio L1 = {(anb)mcak : n, m, k > 0} non `e n`e regolare n`e libero. Infatti il tipo di simmetria della stringa (anb)m= anbanb . . . anb (m volte) richiede della memoria per ricordarsi il numero n. Quindi il linguaggio puo’ essere generato da una grammatica di tipo 0.
Il linguaggio L2`e libero dal contesto. Possiamo scrivere
L2= {anbnb2rc : n, r > 0} ∪ {anbnb2rcc : n, r > 0}
Una grammatica che genera L2: S ::= ABc|ABcc
Utilizziamo il simbolo nonterminale A per generare il linguaggio {anbn : n > 0}, ed il simbolo nonterminale B per generare il linguaggio {b2r: r > 0}.
A ::= aAb|ab B ::= bb|bbB
Supponiamo per assurdo che il linguaggio L2sia regolare. Supponiamo che siano n gli stati di un automa che riconosce L2. Consideriamo la stringa
anbnbbc
Il numero di b `e pi`u grande di n. Allora esiste una suddivisione di bn+2= xyz in tre parti con y 6= in maniera tale che xz = bs con s < n + 2. Si perde la simmetria tra an e bnbb. Infatti l’automa riconosce
anxzc = anbsc ed s < n + 2.
Esercizio 4
Semplificare la seguente espressione regolare giustificando ogni passaggio:
(R + S∗R + ∗U∗)∗+ (S + SR∗)∗
Soluzione
Definiamo per brevit`a Z = (R + S∗R + ∗U∗)∗+ (S + SR∗)∗.
Prima di tutto ∗= {}. Siccome ∈ U∗allora possiamo semplificare ∗U∗ con U∗ ed otteniamo Z = (R + S∗R + U∗)∗+ (S + SR∗)∗
Inoltre, S ⊆ SR∗ e R ⊆ S∗R perch´e
SR∗= S + SR + SRR + · · · + SRn+ . . . e
S∗R = R + SR + SSR + · · · + SnR + . . . Quindi otteniamo
Z = (S∗R + U∗)∗+ (SR∗)∗ By U∗∗= U∗ we derive
Z = (S∗R + U )∗+ (SR∗)∗ Attenzione! Z 6= (S + R + U )∗ perch´e per esempio SU 6⊆ Z.