Informatica teorica Lez. n 1 – Introduzione al corso Introduzione al corso Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Argomenti della lezione Î Obiettivi e programma del corso Î Alfabeti, stringhe, linguaggi Î Operazioni su linguaggi Î Espressioni regolari Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Per studiare le proprietà fondamentali di algoritmi, programmi e calcolatori è necessario rappresentarli mediante modelli astratti e descrivere le proprietà stesse in termini formali e matematici. La disciplina nel cui ambito si svolgono tali studi è l’informatica teorica Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Nel corso di informatica teorica studieremo Æ la definizione formale dei linguaggi e le loro proprietà sintattiche Æ alcuni modelli di calcolo elementari (macchine astratte e linguaggi di programmazione) per rappresentare algoritmi Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Nel corso di informatica teorica studieremo Æ i limiti teorici del potere computazionale dei calcolatori e il concetto di calcolabilità Æ i limiti pratici dei calcolatori ed i problemi computazionalmente intrattabili Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Al termine del corso lo studente dovrebbe saper Æ caratterizzare la struttura sintattica di un testo mediante grammatiche o automi Æ formalizzare un sistema di calcolo definendone i concetti essenziali (stato, computazione ecc.) Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Al termine del corso lo studente dovrebbe saper Æ formulare semplici programmi utilizzando diversi paradigmi computazionali: macchine a stati, macchine a registri, linguaggi funzionali Æ riconoscere, almeno in casi elementari, la complessità di un problema Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Programma del corso Æ Linguaggi formali e automi Æ Macchine di Turing e calcolabilità Æ Modelli di calcolo per linguaggi imperativi e funzionali Æ Complessità di algoritmi e problemi Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Oltre alle videolezioni ed al sito web di supporto (contenente esercizi e note su argomenti particolari), il materiale didattico è costituito dal testo: G. Ausiello, F. d’Amore, G. Gambosi, Linguaggi, Modelli, Complessità, FrancoAngeli, 2003 Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Alfabeti, Stringhe, Linguaggi Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Un alfabeto è un insieme finito non vuoto di simboli, chiamati caratteri Esempio L’insieme {0,1,2,3,4,5,6,7,8,9} è l’alfabeto decimale Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso alfabeto (minuscolo) della lingua italiana: {a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,z} alfabeto dei numeri romani: {I, V, X, L, C, D, M} alfabeto del linguaggio C: {a, .. ,z,A, .. ,Z,0, … ...,9,+,-,*,/,<,>,=,->,&,%,\,!, #,[,],...} Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Dato un alfabeto S, una stringa (o parola) è una sequenza finita di caratteri di S Esempio MCMXLI è una stringa sull’alfabeto dei numeri romani Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Il numero di caratteri di una stringa x è detto lunghezza della stringa e si denota con |x|. Una stringa costituita da zero caratteri è detta stringa nulla (o vuota). La stringa vuota si denota con ε Esempio |MCMXLI| = 6 |ε| = 0 Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso L’insieme di tutte le stringhe su un alfabeto Σ (inclusa la stringa vuota) si denota Σ* + denotiamo l'insieme Con Σ+ delle stringhe non vuote. Pertanto, Prof. Giorgio Ausiello + ∪ {ε} Σ∗∗ = Σ+ Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Sull’insieme Σ* possiamo definire l’operazione di concatenazione, che si denota con ° e che consiste nel giustapporre due stringhe Esempio fatto ° rino = fattorino Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso La concatenazione è associativa. Ad esempio: sol ° (fa ° tara)=(sol ° fa) ° tara = =solfatara La concatenazione non è commutativa. Infatti pe ° ra = pera ≠ ra ° pe =rape Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Chiaramente data una qualunque stringa x, x°ε=ε°x=x ε è l’elemento neutro della concatenazione Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso La struttura algebrica <Σ*, °, ε> è un monoide, cioè un insieme chiuso rispetto all’operazione associativa di concatenazione e dotato di elemento neutro rispetto a tale operazione (monoide sintattico) Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Un linguaggio è un sottoinsieme di Σ* Esempio Dato l'alfabeto {I, V, X, L, C, D, M}, l'insieme di tutti i numeri romani da 1 a 1000 è un linguaggio Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Altri esempi Dato l'alfabeto {a, b}, l'insieme {annbnn | n > 0} è il linguaggio di tutte le stringhe costituite da una sequenza di n a (n>0), seguite da altrettante b Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Altri esempi Dato l'alfabeto del linguaggio C, l'insieme di tutti i programmi corretti (che vengono compilati senza segnalazioni di errore) è un linguaggio Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso In particolare, dato un alfabeto Σ : Æ Σ stesso è un linguaggio Æ Σ* è un linguaggio Æ l'insieme che non contiene nessuna stringa, denotato Λ o Ø è un linguaggio (detto linguaggio vuoto) Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Operazioni su linguaggi Sui linguaggi possono essere effettuate sia le operazioni insiemistiche (unione, intersezione, complementazione) sia operazioni definite sul monoide sintattico (prodotto, potenza e iterazione) Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Siano L1 ed L2 linguaggi definiti sull’alfabeto Σ unione L1 ∪ L2 = {x ∈ Σ*| x ∈ L1 ∨ x ∈ L2} L1 ∪ Λ = L1 Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso intersezione L1 ∧ L2 = {x ∈ Σ*| x ∈ L1 ∧ x ∈ L2} L1 ∧ Λ = Λ Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso complementazione L1 = {x ∈ Σ*| x ∉ L1} Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso prodotto o concatenazione L1 ° L2 = {x ∈ Σ*| esistono x1 ed x2 tali che x1 ∈ L1 ° x2 ∈ L2 e x = x 2} = {ε} ° L = L L 1°x ° {ε} 1 Esempio: L1 = {filo, teo} L2 = {logia, sofia} L1 ° L2 = {filologia, teologia, filosofia, teosofia} Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso potenza h-1 Lhh = L ° Lh-1 L00 = {ε} h≥1 per convenzione Esempio: L ={pe,ra} L22={pepe, pera, rape, rara} Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso iterazione (detta anche operazione stella) ∞ L** = ∪ Lhh {ε} h=0 Esempio: L+ = L** \ L ={a, bb} L**={ε, a, bb, aa, abb, bba, bbbb, ... } Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Espressioni regolari Metodo formale di descrizione di linguaggi. Un’espressione regolare rappresenta un insieme di stringhe basandosi sulle operazioni con le quali il linguaggio può essere costruito Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Ad esempio, se l’espressione e11 rappresenta il linguaggio L11 e l’espressione e22 rappresenta il linguaggio L22, il linguaggio L11 ∪ L22 è rappresentato dall’espressione regolare e11 + e22 Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Dato un alfabeto Σ, chiamiamo espressione regolare una stringa r sull'alfabeto Σ ∪ {Ø, +, ..,*,(,)} tale che: r=Ø r = a (a ∈ Σ) o, se s e t sono espressioni regolari: r=(s+t) oppure r=(s..t) oppure r=s* Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso espressione linguaggio r=Ø r = a (a ∈ Σ) r = (s + t) L(r) = Λ L(r) = {a} r = (s . t) r = s* Prof. Giorgio Ausiello Università di Roma “La Sapienza” L(r) = L(s) ∪ L(t) L(r) = L(s) ° L(t) L(r) = L(s)* Informatica teorica Lez. n 1 – Introduzione al corso Esempio e = (a+(b.(c.d) *)) L(e) = L(a) ∪ L(b.(c.d)*) = = L(a) ∪ (L(b) ° L((c.d)*)) = = L(a) ∪ (L(b) ° (L(c) ° L(d))*) = = {a, b, bcd, bcdcd, …} Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Per semplificare la scrittura delle espressioni regolari possiamo sfruttare: Æ eliminazione del simbolo della concatenazione, scrivendo (st) anziché (s.t) Æ uso di precedenza tra operatori: *>.>+ Æ eliminazione di parentesi inutili Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Esempi (a+(b.(c.d)*)) = a + b(cd)* (a+(b.b*)) = a+b.b* ((a+b)* . a) = (a+b)*a Prof. Giorgio Ausiello Università di Roma “La Sapienza” Informatica teorica Lez. n 1 – Introduzione al corso Come vedremo, i linguaggi rappresentabili con espressioni regolari sono un’interessante sottoclasse di tutti i possibili linguaggi. Tali linguaggi sono chiamati linguaggi regolari e si possono caratterizzare anche mediante grammatiche e macchine molto semplici Prof. Giorgio Ausiello Università di Roma “La Sapienza”