Introduzione: alfabeti, parole, linguaggi
Transcript
Introduzione: alfabeti, parole, linguaggi
LINGUAGGI E PROPRIETA' ELEMENTARI Def. Un alfabeto Σ e' un insieme fnito non vuoto di simboli (caratteri). Es: Σbool = {0,1} Σ10 = {0,1,2,3,4,5,6,7,8,9} Σit = {a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,z} ΣC ={a, .. , z, A, .. , Z, +, -, *, /, <, >, =, ...} Def. Una parola (stringa) su un alfabeto Σ è una sequenza fnita di simboli. Def. Parola vuota è la parola che consiste di 0 simboli; si indica con ε (con λ su H.). Con Σ* denotiamo l'insieme di tutte le parole su Σ. Con Σ+ denotiamo l'insieme delle parole non vuote. Perciò Σ*= Σ+ ∪ {ε}. Def. L’operazione ° : Σ* x Σ *--> Σ* che consiste nel giustapporre due parole di Σ* si chiama concatenazione o prodotto. L'operazione di concatenazione non è commutativa, è associativa; ε è elemento neutro, cioè x ° ε = ε ° x = x, ∀ x ∈Σ*. L'insieme ( Σ*, ° , ε) è un monoide libero. Se con |x| indichiamo la lunghezza di una parola x, cioè il numero di caratteri che la compongono; allora |ε| = 0. Con xh indichiamo la concatenazione della stringa x con se stessa h volte, h ≥ 0. Per convenzione x0 = ε. Ordine canonico di Σ* è il seguente: una stringa più corta precede una più lunga; a parità di lunghezza l’ordine è quello lessicografco determinato da un prefssato ordinamento dei caratteri di Σ. Es. Se Σ={a,b} l’ordine canonico di Σ* è il seguente: ε,a,b,aa,ab,ba,bb,aaa,aab,aba,abb,baa,bab, bba,bbb,aaaa,... La cardinalità di Σ* è ℵ0. Def. Un linguaggio sull'alfabeto Σ e' un sottoinsieme di Σ*. Es: - Dato Σbool= {0,1}, l'insieme {0n1n | n > 0} è il linguaggio di tutte le stringhe costituite da una sequenza di n zeri, seguiti da altrettanti uni. - Dato ΣC ={a,.., z, A, .. , Z, +, -, *, /, <, >, =, ...}, l'insieme di tutti i programmi C che compilano è un linguaggio. - Dato Σ10 = {0,1,2,3,4,5,6,7,8,9}, l'insieme di tutti i numeri primi è un linguaggio. In particolare, per ogni alfabeto Σ : − Σ stesso è un linguaggio, − Σ* è un linguaggio, − l'insieme che non contiene nessuna parola (insieme vuoto), denotato Λ oppure Ø è un linguaggio (detto linguaggio vuoto). ΝΟΤΑ ΒΕΝΕ. Λ ≠ {ε} OPERAZIONI SU LINGUAGGI Siano L, L1 ed L2 linguaggi su Σ*. - unione L1 ∪ L2 = {x ∈ Σ* | x ∈ L1 ∨ x ∈ L2} L1 ∪ Λ = L1 - intersezione L1 ∩ L2 = {x ∈Σ* | x ∈ L1 ∧ x ∈ L2} L1 ∩ Λ = Λ - complementazione Lc = {x ∈ Σ* | x ∉ L} - concatenazione o prodotto L1 ° L2 = {x ∈Σ* | esistono x1 ed x2 tali che x1 ∈ L1 , x2 ∈ L2 e x = x1°x2} Si noti che: L ° {ε} = {ε} ° L = L L°Λ=Λ°L=Λ L1= {an | n≥1} L2= {bm | m≥1} - potenza L1 ° L2 = {an bm | n, m ≥ 1} L0 = {ε} per convenzione. Lh = L ° Lh-1, h ≥ 1 - Chiusura di Kleene del linguaggio L rispetto all’operatore di concatenazione è il linguaggio : L* = ∪h≥0 Lh L’operatore * si chiama operatore stella di Kleene (detto anche iterazione). NB. ε ∈L* per defnizione, Λ*={ε}. Ovviamente L*⊆ Σ*. Quindi: Σ* tutte le parole su Σ L* tutte le concatenazioni di parole su L oltre a {ε}. Indichiamo con L+ il linguaggio L*- {ε}, cioè L+ = ∪h≥1 Lh . Un linguaggio L è un codice se ogni parole in L+ è univocamente decomponibile come prodotto di parole di L. Ad esempio L = {a, aba, abaab} non è un codice ( osserva la parola abaaba ) mentre L = {a, ab} lo è. Es: L = {aa} L+ = {a2n | n ≥ 1} L* = {a2n | n ≥ 0} L = {a, b} L*={tutte la parole sull’alfabeto} Si ha che: L1 ° ( L2 ∪ L3) = L1 ° L2 ∪ L1 ° L3 L1 ° ( L2 ∩ L3) ⊆ L1 ° L2 ∩ L1 ° L3 L’inclusione può essere stretta. Prendiamo i linguaggi L2 ={0} e L3={10} su Σbool. Ovviamente L2 ∩ L3 = Λ ed anche L1°( L2 ∩ L3) = Λ per ogni linguaggio L1 su Σbool . Cerchiamo L1 in modo che L1 ° L2 ∩ L1 ° L3 ≠ ∅. Se L1= {1, ε}, allora si ha che L1 ° L2 = {10, 0} ed L1 ° L3 = {110, 10}. Def. Una funzione h: Σ∗1→ Σ∗2 è detta homeomorfsmo da Σ1 a Σ2 se: h(ε)=ε h(u°v)= h(u) ° h(v) ∀ v , u ∈Σ∗1 Quindi per specifcare un homeomorfsmo è suffciente farlo sui simboli dell’alfabeto. Es. di homeomorfsmo da {0, 1, #} a {0, 1}: h(#) = 10 h(0) = 00 h(1) = 11 Allora h(011#101#) = 0011111011001110. Come rappresentare un linguaggio. Se il linguagggio è fnito si possono elencare i suoi elementi. Se invece è infnito si può rappresentare con opportuni strumenti. Vediamone lo strumento delle espressioni regolari.