Cours 1 - Département Informatique
Transcription
Cours 1 - Département Informatique
Organisation http://deptinfo.unice.fr/~julia/AL 1,5 h de cours + 1,5 h de TD hebdo sur 12 semaines Automates & Langages Cours : S.Julia lundi 11h30-13h amphi Géologie TD : S.Julia lundi 15h-16h30 salle M.3.3 S.Julia lundi 16h45-18h salle M.3.3 (+ soutien) Les TD ont lieu en alternance pour les groupes 1 et 2, on commence aujourd’hui avec le groupe 1. Sandrine Julia Evaluation : L3 Info, L3 Math-MI 2016/17 Bibliographie • Introduction à la calculabilité Wolper, Dunod, 3e édit°, 2006. • Logique et automates Bellot/Sakarovitch, Ellipses, 1998. • Langages formels, calculabilité et complexité Carton, Vuibert, 2008. à la BU ! • Introduction to Automata theory, Languages, and Computation Hopcroft, Ullman, Addison-Wesley, 1979. • A Second Course in Formal Languages and Automata Theory Shallit, Cambridge Univ.Press, 2009. • Introduction to the theory of computation Sipser, PWS publishing company, 1997. Simulateurs : JFLAP, Visual Automata Simulator, AMoRE, ... ( 30 * partiel + 20 * contrôle flash + 50 * exam final ) / 100 1h30 20 mn 1h30 31 oct. nov. déc. ou janv. Utilisation (plutôt pratique) • • codage de l’information spécification des langages de programmation • • compilation, analyseurs lexicaux recherche de motifs ✦ ✦ ✦ dans un texte dans une BD sur le web • • • • • • • • systèmes d’exploitation, éditeurs compression de textes électronique des ordinateurs model-checking images de synthèse cryptographie biologie, génétique linguistique ( TALN ) • sciences cognitives • ... Utilité théorique Spécification des langages de prog. 2 NN : A 012 EE TU G RIN ! Les solutions d’un problème vues comme un langage Problème du loup, de la chèvre et des choux ... Modélisation Vérification C (model-checking) HLX/C LX/HC HLCX/ C Complexité - X L Calculabilité : A.Church A.Turing 1903-1995 1912-1954 C les mots représentent toutes les instances d’un problème • un langage regroupe les instances positives du problème • un automate (ou une autre machine) correspond à un programme. X L/HCX C Où se situent les limites de l’informatique actuelle ? • L X/HLC C HCX/L X C /HLCX X L L HC/LX C HLC/X C/HLX - Contenu du cours ✦ Automates finis déterministes ✦ Langages rationnels ✦ Expressions régulières ✦ Grammaires régulières ✦ Grammaires hors-contexte ✦ Automates à pile ✦ Langages hors-contexte ✦ Machines de Turing ✦ Automates cellulaires (ou réguliers) 1 - Automates finis déterministes C Opérations sur les langages Matériel de base Soit L et M deux langages donnés. • symbole, lettre, chiffre, caractère alphabet : ensemble fini mot : concaténation de lettres langage : ensemble de mots mot vide noté ε : l’unique mot à aucune lettre ! • longueur d’un mot m : |m| • produit de concaténation de L et M : L . M = { w = u v / u ∈ L, v ∈ M } • puissance de L : • • • • opérations ensemblistes • longueur représentation binaire de n : |bin(n)| = "log2 (n)#+1 longueur du mot vide : | ε |= 0 • nombre d’occurrences de la lettre a dans le mot m : |m|a • le ie caractère du mot m : m[i] • • • • • • préfixe (propre) suffixe (propre) facteur (propre) sous-mot miroir ordres sur les mots : préfixe, lexicographique, hiérarchique union, intersection, différences, complémentation, produit cartésien, ... ε (B) L0 = { } (I) pour tout entier i>0, Li = L . Li-1 fermeture de Kleene du langage L : • appelée “opération étoile” L* = ∪i≥0 Li ✴ on note L+ = ∪i>0 Li ✴ même si L=∅, L0 = { ε} ✴ l’ensemble des mots Σ* est la fermeture de Kleene de l’alphabet Σ ✴ L* : plus petit langage contenant Ensemble des langages rationnels* ε, L et fermé par concaténation. Expressions régulières • plus petit ensemble contenant les langages finis et clos par union, intersection et étoile • formalisme simplifié pour décrire les langages réguliers • définition inductive : • définition inductive : (B) (I) (B) ∅ ∈ R {ε} ∈ R {a} ∈ R, pour tout a ∈ Σ (I) si L, M ∈ R alors L ∪ M ∈ R L.M ∈ R L* ∈ R • par construction, l’ensemble des langages rationnels est dénombrable Exemple : les lexèmes des langages de programmation ( les entiers, les hexadécimaux, les identificateurs, les commentaires ... ) * On dit aussi réguliers du fait de l’anglais. ∅ ∈ ER ε ∈ ER a ∈ ER, pour tout a ∈ Σ Unix a son propre formalisme pour les exp. régulières que grep, find ... utilisent si α, β ∈ ER alors ( α + β ) ∈ ER ( α . β ) ∈ ER α* ∈ ER par construction, l’ensemble des expressions régulières est dénombrable • Exemple : sur l’alphabet binaire ( ( ( 0 + simplifiable en ( 0 + ε ) ( 1 0 )* ( 1 + ε ) ε).(1 . 0 )* ) . ( 1 + avec, du plus au moins prioritaire, les opérations : * puis . puis + ε )) Correspondance entre langage rationnel (ensemble) et expression régulière (formalisme) Automate fini On dit qu’une expression régulière Un automate fini A est la donnée d’un quintuplet : dénote ou décrit un langage. (B) (I) ∅ ∈ ER ε ∈ ER a ∈ ER, pour tout a ∈ Σ si α, β ∈ ER alors (α + β) ∈ ER (α .β) ∈ ER α* ∈ ER Expression régulière Langage (B) L(∅) = ∅ L(ε) = {ε} L(a) = {a} (Σ, Q, δ, q0, F) tel que : • Σ pour tout a ∈ Σ • δ (I) L(α + β) = L(α) ∪ L(β) L( α.β ) = L(α) . L(β) L( α* ) = L (α) * est un alphabet • Q est un ensemble fini d’états est un ensemble de règles de transition (les flèches) δ : Q × ( Σ ∪ {ε} ) × Q • q0 est l’état initial • F est l’ensemble des états finals (un sous-ensemble de Q) A Théorème accepte un mot m s’il existe un chemin de q0 à un état de F étiqueté par les lettres de m. un langage est rationnel si et seulement si il est dénoté par une expression régulière. L’ensemble des mots acceptés forme le langage L(A) reconnu par A. Exemple Automates finis déterministes Automate fini A = (Σ, Q, δ, q0, F) Σ = {0,1} Q = {q0,q1} δ = {(q0,0,q1),(q0,1,q0),(q0,ε,q1) } Un automate fini est déterministe (A.F.D) ssi A 1 ε q0 δ est une fonction de transition : q1 0 q0 est l’état initial δ : Q × Σ → Q ✦ d’un état donné, il part au plus une seule flèche étiquetée par une lettre donnée ✦ on n’autorise plus les ε-transitions F = {q1} Un automate fini déterministe est complet ssi Ici, A reconnaît le langage L(A) décrit par l’expression régulière : 1* (0 + ε) fonction définie sur l’ensemble Q × δ est une Σ tout entier. ✦ de chaque état, il part exactement une flèche étiquetée par chacune des lettres de l’alphabet Σ. Exemple d’A.F.D B = (Σ, Exemple d’A.F.D complet B 1 Q, δ, q0, F) q0 Σ = {0,1} Q = {q0,q1} C = (Σ, 1 q1 0 Q, δ, q0, F) 0,1 C q2 1 Σ = {0,1} 0 1 q0 Q = {q0,q1,q2} q1 0 δ = {(q0,0,q1),(q0,1,q0),(q1,1,q1)} δ = {(q0,0,q1),(q0,1,q0),(q1,0,q2),(q1,1,q1),(q2,0,q2),(q2,1,q2)} q0 est l’état initial F = {q1} q0 est l’état initial B accepte les mots du langage L(B) décrit par l’expression régulière : 1* 0 1* C reconnaît B 1 F = {q1} le langage L(C) décrit par 1*0 1*. C’est la version complétée l’automate Non-déterminisme q0 B. 1 q1 0 Equivalence A.F.N. et A.F.D. Dans un automate fini non-déterministe (A.F.N.) il peut y avoir le choix entre plusieurs chemins lors de la lecture d’un mot. Théorème si un langage est reconnu par un automate fini, alors il est également reconnu par un automate fini déterministe. Pour qu’un mot soit accepté, il suffit que ses lettres étiquettent un chemin de l’état initial à un état final ✦ si l’automate fini du départ A est déterministe, c’est évident (même s’il existe d’autres chemins non réussis). Notez qu’un A.F.D. c’est aussi un A.F.N. ! A.F.N. A.F.D. ✦ si l’automate de on se propose de qui intègre tous (cf. algorithme de départ n’est pas déterministe, construire un automate fini déterministe B les choix existant dans l’automate de départ déterminisation) ✦ il resterait à prouver formellement que le nouvel automate B accepte exactement les mots acceptés par A. Exemple de déterminisation soit l’AFN E = (Σ, Algorithme de déterminisation Q, δ, q0, F) = { 0,1 } Q = { q0,q1 } Σ q0 δ = { (q0,0,q0), (q0,0,q1),(q0,ε,q1), (q1,1,q1) } q0 est l’état initial D = (Σ, 1. 1 2. 3. Q’, δ’, q0’, F’) 0 q0’= {q0q1} est l’état initial Q’= { {q0,q1 } , {q1 }} δ’ = {, ( { q0,q1 },0,{ q0,q1 }), ({ q0,q1 },1,{ q1 } ), ({ q1 },1,{q1 } ) 1 {q0,q1} q0,q1 {q1} - q1 D 0 q1 1 q1 q 0q 1 4. 1 F’ = {{ q0q1} ,{q1 } } Application tio pila soit un AFN A = (Σ, Q, δ, q0, F) on construit l’automate B = (Σ, Q’, δ’, q0’, F’) Q’ sera inclus dans q1 0,ε F = { q1 } on construit E 0 Clôtures par δ’ ← ∅ q0’ ← {q0} ∪ {q ∈ Q tels que (q0,ε,q) ∈ δ* } Q’ ← { q0’ } ε-transitions pour tout q’ ∈ Q’ non encore considéré faire pour tout σ ∈ Σ faire q’’← { y ∈ Q / ∃ x ∈ q’ tel que (x,σ,y) ∈ δ } si q’’ ≠ ∅ alors q’’ ← q’’∪ { z ∈ Q / ∃ y ∈ q’’ tel que (y,ε,z ) ∈ δ* } δ’ ← δ’ ∪ {( q’,σ,q’’) } Q’ ← Q’ ∪ { q’’ } F’ ← {q’ tels que q’ ∩ F ≠ ∅ } Algorithme : E.R. → n om UE C 6 au S P(Q) A.F.D. • de gauche à droite, on indice les n lettres de Σ figurant dans E par les entiers de 1 à n En début de compilation, lors de l’analyse lexicale, • on transforme E en E’ en remplaçant chaque lettre par q (q∉Σ) le flot de caractères est découpé. Chaque morceau • on ajoute q0 au tout début de E’ cf. appartient à un lexème i.e. un petit langage décrit par une expression régulière. • pour tout i de 1 à n faire pour tout σ ∈ Σ faire succ(qi,σ) ← {qj qui suivent qi dans E’après lecture de σ} • Q ← {q0}, Les générateurs automatiques d’analyseurs lexicaux (Lex, Flex …) utilisent alors un algorithme pour passer directement d’une expression régulière à un automate fini déterministe complet. δ←∅ • pour tout q ∈ Q non encore considéré faire pour tout σ ∈ Σ faire q’ ← succ(q,σ) si q’≠ ∅ alors δ ← (δ ∪ (q,σ, q’)) + + + + Q ← Q ∪ {q’} • F ← { états qui contiennent un symbole final de E’ } Exemple : E.R. → • • E l’expression régulière : on indice les lettres : A.F.D. ( a + ε ) ( b a )* ( b + ε) ( a 1 + ε ) ( b 2 a 3 )* ( b 4 + ε ) on remplace les lettres par le symbole q (hors alphabet) et on met q0 devant : q0 ( q1 + ε )( q2 q3 )* ( q4 + ε) • • • • • • initialisations : Q ← q0 ,a: q0 ,b: q1 ,a: q1 ,b: Q ← Q ← {q2,q4},a: {q2,q4},b: q3 ,a: q3 ,b: {{ q0 }}, , δ←, ∅ Q ∪ {q1} Q ∪ {{q2,q4}} δ ← δ ← δ ∪ { (q0,a,q1) } δ ∪ { (q0,b,{q2,q4}) } Q ∪ {q3} δ ← δ ← δ ∪ { (q1,b,{q2,q4}) δ ∪ { ({q2,q4},a,q3) } (rien) Q ← (rien) (rien) δ ← δ ∪ { (q3,b,{q2,q4}) } ➡ A = ( Σ,Q={q0, q1, q3,{q2,q4}}, {q0}, δ, F={q0,q1,q3,{q2,q4}})