The Mobile Court of Judge Kaya

In document Exploring Primary Justice in South Sudan: Challenges, concerns, and elements that work (Page 61-66)

2. Eight case studies on primary justice

2.7 The Mobile Court of Judge Kaya

La proprietà fondamentale di tale costruzione è che preserva il linguaggio accettato. Questo significa che una stringa w ∈ A? è accettata dallo stato x ∈ S (in simboli w ∈ hhxii) se e solo se w appartiene al linguaggio generato dalla categoria sintattica hxi della grammatica corrispondente (in simboli w ∈ hhhxiii).

Teorema 7.4.4. Per tutti gli automi A = (S, T, F ), vale che per tutte le parole w ∈ A? e tutti gli stati x ∈ S

w ∈ hhxii se e solo se w ∈ hhhxiii.

Lasciamo la dimostrazione di questo teorema come esercizio per il lettore.

Esercizio 7.4.5. Dimostrare che per qualsiasi grammatica GA = (SA, PA) corrispondente ad un automa A vale che per tutti gli hxi ∈ SA, a ∈ A e w ∈ A?:

1. ε ∈ hhhxiii se e solo se hxi ε ∈ PA;

2. aw ∈ hhhxiii se e solo se hxi ahyi ∈ PA e w ∈ hhhyiii per qualche hyi ∈ SA.

7. Linguaggi Formali

Esercizio 7.4.6. Dimostrare il Teorema 7.4.4. Si suggerisce di usare l’induzione su w ∈ A? e i due punti dell’Esercizio 7.2.16 e i due punti dell’Esercizio 7.4.5

Se A è a stati finiti allora anche GAè finita e, pertanto, la seconda domanda ha risposta positiva.

La prima domanda invece ha risposta negativa. Un controesempio è fornito dal linguaggio generato dalla grammatica nell’Esempio 7.3.10. Come illustrato di seguito questo linguaggio non può essere riconosciuto da alcun automa a stati finiti.

Teorema 7.4.7. Sia A = {a, b} e sia L = {anbn| n ∈ N} ⊆ A?. Non esiste alcun automa a stati finiti A = (S, T, F ) e alcuno stato x ∈ S tale che hhxii = L.

Dimostrazione. La dimostrazione procede per assurdo: assumiamo la negazione della tesi, per mostrare che si giunge ad una contraddizione.

Supponiamo per assurdo che esista un automa A = (S, T, F ) sull’alfabeto A dove 1. esiste un x ∈ S tale che hhxii = L;

2. l’insieme di stati S ha una qualche cardinalità finita m.

Visto che m è un numero naturale, si ha che per definizione di L, la stringa ambmappartiene al linguaggio L. buche dei piccioni (Osservazione 6.2.6). Pertanto esistono due elementi j e k dell’insieme {0, . . . , m}

tali che j 6= k e xj= xk. Visto che j 6= k sappiamo che o j < k o k < j. Assumiamo che j < k (il caso k > j è del tutto analogo).

Dal momento che xj= xk possiamo costruire il walk x = x0 a // x1

Abbiamo raggiunto una contraddizione e quindi dimostrato il teorema.  Osservazione 7.4.8. Il Teorema 7.4.7 ci dice che {anbn | n ∈ N} non può essere riconosciuto da un automa a stati finiti. Utilizzando un argomento simile, si può dimostrare che anche il linguaggio delle parentesi bilanciate sull’alfabeto {(, )} non può essere riconosciuto da un automa a stati finiti.

Tale linguaggio consiste di tutte le stringhe di parentesi, possibilmente annidate, che si aprono e chiudono lo stesso numero di volte. Sono ad esempio stringhe di questo linguaggio ((())) e ((()()(()))) ma non (((). Questo esempio suggerisce che anche la sintassi della maggior parte dei linguaggi di programmazione non può essere riconosciuta da automi a stati finiti.

Per questa ragione, la sintassi dei linguaggi di programmazione è specificata solitamente attraverso grammatiche, mentre gli automi sono utilizzati per la così detta analisi lessicale. In estrema sintesi, l’analisi lessicale legge il codice sorgente un carattere alla volta e lo traduce in lessemi (token). Lo studente potrà approfondire questi argomenti in corsi più avanzati.

I Teoremi 7.4.4 e 7.4.7 ci dicono assieme una cosa molto importante: il primo stabilisce che le grammatiche sono espressive almeno quanto gli automi, il secondo che sono strettamente più espressive degli automi. Questo significa che l’insieme dei linguaggi riconosciuti dagli automi (a stati finiti) è strettamente incluso nell’insieme dei linguaggi generati da grammatiche (finite). I linguaggi

7.5. Espressioni Regolari

del primo tipo sono detti regolari e quelli del secondo sono detti liberi da contesto. Queste due tipologie di linguaggi formano le prime due classi della ben nota gerarchia di Chomsky, riportata in Figura 7.3. Lo studente ineteressato avrà modo di conoscere ulteriori classi della gerarchia in corsi più avanzati.

Figura 7.3: La Gerarchia di Chomsky.

7.5 Espressioni Regolari

In Figura 7.3 la parola “regolare” è utilizzata per denotare i linguaggi riconoscibili da automi a stati finiti. Questi linguaggi sono chiamati così in quanto godono di una caratterizzazione algebrica in termini di espressioni regolari. In questa sezione introduciamo le espressioni regolari come un primo esempio di linguaggio formale: illustriamo la loro sintassi (data attraverso una grammatica libera da contesto), la loro semantica (definita per induzione) ed enunciamo il sopramenzionato risultato di caratterizzazione.

Le espressioni regolari sono delle espressioni per denotare linguaggi su un alfabeto fissato A.

Le espressioni regolari sono usate in molti contesti applicativi: nei motori di ricerca, nei comandi search and replace negli editor di testo, in molte utilities di text processing e nell’analisi lessicale.

Inoltre molti linguaggi di programmazione provvedono librerie per le espressioni regolari.

Sintassi

Come gli automi e le grammatiche, anche le espressioni regolari sono definite per un alfabeto A fissato. Le espressioni regolari sono certe stringhe usll’alfabeto A esteso con gli operatori {+, ·,?} e le costanti {0, 1}. Cioè, l’alfabeto delle espressioni regolari è

A ∪ {+, ·,?} ∪ {0, 1} (7.25)

In queste note, come nella maggior parte delle presentazioni delle espressioni regolari, si assume che A sia disgiunto da {+, ·,?} ∪ {0, 1}, ovvero che +, ·,?, 0, 1 siano simboli, in qualche senso speciali, che non appartengono ad A.

In modo del tutto analogo alle espressioni aritmetiche, non tutte le stringhe sull’alfabeto (7.25) sono espressioni regolari. Ad esempio per A = {a, b}, a+ e a?b non sono espressioni regolari mentre a + 1, a · b? e a · a · b lo sono. Per definire in modo preciso cosa sia un’espressione regolare è conveniente utilizzare la seguente grammatica libera da contesto.

7. Linguaggi Formali

hRExpAi a | ( se a ∈ A )

0 | 1 |

hRExpAi + hRExpAi | hRExpAi · hRExpAi | hRExpAi?

(7.26)

La prima produzione hRExpAi a va pensata come tante (esattamente |A|), produzioni. Ad esempio se A = {a, b}, allora si hanno due produzioni: hRExpAi a e hRExpAi b. In estrema sintesi, tale produzione ci dice che ogni simbolo in A è una espressione regolare. La seconda e la terza produzione ci dice che anche 0 e 1 sono espressioni regolari. La quarta e la quinta produzione ci dice che se e1 ed e2 sono espressioni regolari, allora anche e1+ e2 ed e1· e2 sono espressioni regolari, mentre la sesta ci dice che se e è un’espressione regolare allora anche e? è un’espressione regolare.

Definizione 7.5.1. Una espressione regolare è una stringa che appartiene a hhhRExpAiii.

Utilizziamo RExpA per l’insieme di tutte le espressioni regolari. Cioè RexpA= hhhRExpAiii.

In document Exploring Primary Justice in South Sudan: Challenges, concerns, and elements that work (Page 61-66)