Notes sur le cours sur les automates - 2° partie, Notes de Applications informatiques. Université Vincennes Saint-Denis (Paris VIII)
Francine88
Francine8813 January 2014

Notes sur le cours sur les automates - 2° partie, Notes de Applications informatiques. Université Vincennes Saint-Denis (Paris VIII)

PDF (364.8 KB)
10 pages
133Numéro de visites
Description
Notes d’informatique sur le cours sur les automates - 2° partie. Les principaux thèmes abordés sont les suivants: la syntaxe de la logique propositionnelle classique, Définitions, les automates associés, la terminologie...
20points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document
Aperçu3 pages / 10
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Aperçu avant impression terminé
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Aperçu avant impression terminé
Chercher dans l'extrait du document

Une utilisation de cette grammaire (règle de production) peut-être la suivante :

(7)

E2. la syntaxe de la logique propositionnelle classique ou calcul des propositions peut se définir

de la façon suivante (cf. chapitre de Théorie De La Démonstration) :

(8)

Les types de grammaires les plus couramment utilisées sont :

1. Les grammaires linéaires gauches qui produisent les mêmes langages que les expressions

régulières (c'est ce qui va nous intéresser dans ce chapitre)

2. Les grammaires hors-contexte (exemple ci-dessus)

3. Les grammaires contextuelles (ce type de grammaire requiert un formalisme mathématique

et ne peut être défini sans celui-ci)

Un langage est ainsi un ensemble de mots, qui sont simplement des séquences de symboles

choisis dans un ensemble fini appelé "alphabet". Les langages de la hiérarchie de Chomsky sont

formés de mots qui respectent une grammaire formelle particulière. Ce qui les distingue dans le

cadre de la classification est la nature de la grammaire.

Remarque: Le plus souvent, les symboles que l'on considère sont formés de plusieurs caractères, de

sorte qu'ils correspondent plutôt à ce que l'on appelle des mots dans la langue courante. Lorsqu'il y a

ambiguïté, par exemple en analyse lexicale (vocabulaire) et syntaxique (partie de la grammaire qui traite

de la fonction et de la disposition des mots et des propositions dans la phrase), on parle de caractères

pour les symboles de l'alphabet utilisé pour coder les informations, et de lexèmes pour les symboles de

l'alphabet abstrait, qui sont les unités de base du langage. De même, les mots du langage correspondent

plutôt à des phrases ou à des textes.)

Définition (plus formelle): Une "grammaire formelle", ou simplement "grammaire", est formée

d'un ensemble fini de symboles terminaux (qui sont les lettres ou les mots du langage), d'un

ensemble fini de non-terminaux, d'un ensemble de productions dont les membres gauches et

droits sont des mots formés de terminaux et de non-terminaux, et d'un axiome. Appliquer une

production consiste à remplacer son membre de gauche par son membre de droite ;

l'application successive d'un certain nombre de productions s'appelle une dérivation. Le

langages défini par une grammaire est l'ensemble des mots formés uniquement de symboles

terminaux qui peuvent être atteints par dérivation à partir de l'axiome.

La hiérarchie de Chomsky est formée des quatre niveaux suivants, du plus restrictif au plus

large.

N1. Les "langages de type 3", ou "langages réguliers" : ce sont les langages définis par une

grammaire régulière ou une expression régulière, ou bien encore les langages reconnus par un

automate fini.

N2. Les "langages de type 2", ou "langages algébriques" : ce sont les langages définis par une

grammaire formelle hors-contexte, ou bien encore les langages reconnaissables par un

automate à pile non déterministe. Dans cette catégorie se trouvent les langages de

programmation informatique.

N3. Les "langages de type 1", ou "langages contextuels" : ce sont les langages définis par une

grammaire contextuelle, ou encore les langages reconnaissables par une machine de Turing

non-déterministe à ruban de longueur bornée par un multiple fixé de la longueur du mot

d'entrée (ce type de langages requièrent un formalisme mathématique et ne peuvent être

définis sans celui-ci).

N4. Les langages de type 0, ou "langages récursivement énumérables". Cet ensemble inclut tous

les langages définis par une grammaire formelle. C'est aussi l'ensemble des langages

acceptables par une machine de Turing (que l'on autorise à boucler sur un mot qui n'est pas du

langage).

Remarques:

R1. Outre les 4 types de la hiérarchie de Chomsky, il existe des classes intermédiaires

remarquables : entre 3 et 2 : les langages non-contextuels déterministes, reconnaissables par

automate à pile déterministe et les langages compris entre 1 et 0 : les langages récursifs, c'est-à-

dire reconnaissables par une machine de Turing (celle-ci doit refuser les mots qui ne sont pas du

langage).

R2. Les six types ci-dessus sont strictement inclus les uns dans les autres.

Un analyseur pour un langage formel est un programme informatique qui décide si un mot

donné en entrée appartient ou non au langage, et éventuellement en construit une dérivation.

On dispose de méthodes systématiques pour écrire des programmes d'analyse des langages de

type 2 ou 3. Les interpréteurs ou compilateurs comprennent presque toujours une phase

d'analyse lexicale, qui consiste à reconnaître des langages de type 3, suivie d'une phase

d'analyse syntaxique qui est une analyse de langage de type 2.

Nous pouvons maintenant de manière vulgarisée (toujours dans l'objectif de préparer le terrain)

définir ce qu'est un automate dans le cadre de la hiérarchie de Chomsky

AUTOMATES ASSOCIÉS

Définition (simpliste): Dans le domaine de l'informatique, un "automate" est une machine a

traiter de l'information par un modèle formel (une machine de Turing) sur un langage donné.

Ainsi :

1. Sur un "langages fini" (langage contenant un nombre fini de mots), l'automate associé est

une machine comparant un texte avec celui qui est enregistré dans une mémoire morte. La

grammaire associée à un langage fini est une liste des mots du langage.

2. Sur un "langage régulier" (langage où la correction syntaxique se vérifie en ne mémorisant

qu'un nombre fini d'informations), l'automate associé est "l'automate fini déterministe" (c'est-à-

dire que, pour chaque mot entré, il n'existe qu'un parcours possible du graphe) ou "l'automate

fini indéterministe". La grammaire associée à un langage régulier est une grammaire linéaire

gauche.

3. Sur un "langage algébrique" (langage où la principale contrainte syntaxique est le

parenthésage), l'automate associé est "l'automate à piles indéterministe". La grammaire

associée est la grammaire algébrique.

4. Sur un "langage borné" (description nécessitant un formalisme mathématique), l'automate

associé est "l'automate linéairement borné". La grammaire associée est la grammaire

contextuelle.

5. Sur un "langage décidable" (un être intelligent arrive à trouver un procédé pour savoir si on

est ou pas dans le langage), l'automate associé est une machine de Turing qui s'arrête sur

toutes les données. Il n'y a aucune grammaire associée.

6. Sur un langage "semi-décidable" (un être intelligent arrive à trouver un procédé pour savoir

si on est dans le langage, mais peut rester dans l'expectative si on est à l'extérieur d'un tel

langage), l'automate associé est la machine de Turing. Les grammaires associées sont des

grammaires "semi-Turingienne", "de Vangarden", ou "grammaires affixes".

TERMINOLOGIE

Les automates travaillent donc essentiellement sur des lettres, mots, phrases et langues. Afin

de construire des méthodes d'analyses et de traitement rigoureuses et optimales sur le sujet il

est intéressant de formaliser les objets traités. C'est ce que nous allons faire dans un premier

temps en définissant ceux-ci et leurs propriétés mathématiques (qui sont très intuitives).

MOTS

Définitions:

D1. Un "alphabet" est un ensemble dont les éléments sont des "lettres". Les alphabets sont

toujours supposés finis.

D2. Un "mot" est une suite finie de lettre que nous notons par juxtaposition :

(9)

D3. Le "mot vide", noté , est le seul mot composé d'aucune lettre.

D4. La "longueur" d'un mot w est le nombre de lettres qui le composent, et est notée (le

mot vite est le seul mot de longueur 0).

Le "produit de concaténation" de deux mots et est le mot xy obtenu

par juxtaposition :

(10)

Bien entendu (trivial), nous avons . Nous notons l'ensemble des mots sur A.

Exemple:

Les gènes sont des mots sur l'alphabet ACGT, les protéines sont des mots sur un alphabet à 20

lettres. Les entiers naturels, écrits en base 10, sont des mots sur l'alphabet des dix chiffres

décimaux...

Soit A un alphabet. Soit B une partie de A. Pour tout mot , la longueur en B de w est le

nombre d'occurrences de lettres de B dans le mot w. Ce nombre sera noté .

Remarque: En particulier, nous avons trivialement

Pour tout lettre est le nombre d'occurrences de a dans w. Nous avons :

(11)

Soit , avec . Le mot miroir de w est le mot noté ou défini par :

(12)

Evidemment :

et (13)

Définitions:

D1. Un mot u est un "préfixe" ou "facteur gauche" d'un mot v s'il existe un mot x tel que .

Le mot u est "préfixe strict" ou "propre" si, de plus, . De manière symétrique, u est

"suffixe" ou "facteur droit" de v si pour un mot x. Si , alors u est "suffixe strict" ou

"propre". Le nombre de préfixe d'un mot v non vide est (le mot vide étant toujours un

préfixe, nous avons toujours n'importe quel mot non vide qui a comme préfixe au moins le mot

vide).

D2. Un mot u est "facteur" d'un mot v s'il existe x,y non vides tels que .

Exemple:

Le mot (v) aabab sur a 12 facteurs différents possibles (u) :

(14)

Lemme de Levy : Soient x,y, z, t des mots tels que . Alors il existe un mot w tel que :

avec (15)

ou:

avec (16)

Il en résulte en particulier que si , le mot w est vide, et donc et . En d'autres

termes, un monoïde libre (voir le rappel plus bas) est simplifiable à gauche et à droite.

Démonstration (bof!):

Posons:

(17)

avec de même :

(18)

avec .

Comme:

(19)

nous avons:

(20)

(mais pas nécessairement !) et:

(21)

pour de sorte que :

et (22)

Si , posons . Alors :

et (23)

Si , posons . Alors :

et (24)

C.Q.F.D.

Rappel : Dans le cadre des automates un "monoïde libre" est un ensemble A (l'alphabet), dont

les éléments sont les lettres.

est un monoïde libre si

Remarque: Dans la section d'arithmétique, chapitre de théorie des ensembles, nous parlions simplement

de "monoïde". Le monoïde .

LANGAGES

Les sous-ensembles de sont appelées des "langages formels". Par exemple, pour ,

l'ensemble est un langage.

Nous définissons sur les langages plusieurs opération. Les opération ensemblistes sont l'union,

l'intersection, la complémentation et la différence qui s'en déduit. Si X et Y sont deux parties

de , alors :

(25)

Le produit (de concaténation) de deux langages X et Y est le langage :

(26)

Remarque: Nous avions bien évidemment

et le quotient gauche de X par Y :

(27)

Exemple:

(28)

Nous avons les propriétés suivantes :

P1. (trivial)

P2. où l'inclusion est généralement stricte. Pour conceptualiser cette

propriété, il ne faut surtout pas oublier que est un ensemble de mots et que n'ont pas

nécessairement des mots de la même longueur !

Les puissances de X sont définies par et .

En particulier, si A est un alphabet, est l'ensemble des mots de longueur n.

Définitions:

D1. "L'étoile" (ou "fermeture de Kleene") de X est l'ensemble :

(29)

Exemple:

Soit . Les mots de , classés par longueur sont :

(30)

D2. L'opération "plus" est définie de manière similaire :

(31)

ÉQUATIONS D'abord voyons un petit quelque chose dont nous allons avoir besoin par la suite :

soient u et v deux mots non vides. Les trois conditions suivantes sont équivalentes (sans

démonstration car assez trivial de tête) :

C1.

C2. Il existe deux entiers tels que

C3. Il existe un mot w non vide et deux entiers tels que

Remarque: Rappelons à nouveau que nous n'avons pas forcément mais que nous pouvons très

bien avoir .

Passons maintenant aux choses intéressantes (certains points flous du chapitre de théorie de la

démonstration peuvent s'éclaircir ici parfois...) :

Définitions:

D1. Soient V et A deux alphabets disjoints (vous pouvez les imaginer comme l'ensemble des

variables et respectivement celui des constantes par exemple...). Une "équation en mots" avec

constantes sur A est un couple de mots de . Une telle équation est

représenté par . Il faut donc voir les deux mots choisis comme le membre de gauche et

respectivement de droite d'une équation

D2. Une équation est dite "équation non triviale" si

Exemple:

Soit et définissons , dès lors nous avons

D3. Un équation e est dite "équation sans constante" si .

D4. Une "solution" de l'équation e est un homomorphisme de monoïde (cf. chapitre de Théorie

Des Ensembles) invariant (car toute lettre sur A est envoyée sur A et pas

conséquent tout mot sur A est envoyé sur A) sur A tel que :

(32)

Rappel : la définition l'homomorphisme est telle que si alors .

Exemple:

Soit . Maintenant considérons les mots suivants :

(33)

définissons h tel qu'il envoie x sur b, y sur a, a sur a, b sur b. Dès lors nous avons bien :

(34)

et nous aurons toujours pour tout couple :

(35)

D4. Une solution h est dite "solution cyclique" s'il existe un mot w (appartenant à A) tel

que (en considérant le mot lui-même comme un alphabet donc) pour toute

variable x.

Remarque: Selon cette définition, les solutions de l'équation sans constantes en deux

variables x,y sont cycliques tel que :

(36)

CODES

Définition: Nous appelons "code" toute partie C d'un monoïde libre qui vérifier la condition

suivante pour tout (mot) :

(37)

En d'autres termes, C est un code si tout mot de (mot composé de mots) se factorise, de

manière unique, en un produit de mots de C. Lorsqu'un ensemble n'est pas un code, nous nous

en apercevons en général assez facilement.

Exemples:

E1. L'ensemble (language) n'est pas un code puisque le mot aba s'écrit à la fois

comme produit et comme produit .

Remarque: Les codes les plus simples sont les "codes uniformes". Ce sont des ensembles dont tous les

mots ont une même longueur (ce qui fait qu'étant donné que chaque mot est différent, la combinatoire

des mots peu très difficilement ne pas différer).

E2. L'ensemble des mots de longueur n est un code, si . Le code ASCII qui associe à

certains caractères des mots binaires de longueur 7 (voir table ASCII) est un code uniforme. CODES PRÉFIXES

Le Morse, code la lettre E, la plus fréquente, par un '.' et la lettre Y, plus rare, par '-.--' : c'est

un exemple de code de longueur variable, ce qui permet de représenter les lettres ou le mots

les plus fréquents par des mots plus courts. Une propriété importante est l'unicité du décodage

(application injective), problème qui ne se pose pas pour les codes de longueur constante. Il

peut être résolu, mais de façon trop coûteuse, quand un symbole spécial sépare deux mots

successifs du code (le blanc dans le cas du Morse).

On peut ne pas recourir à cette technique si aucun mot du code n'est le préfixe d'un autre mot

du code; un code présentant cette propriété est appelé un "code préfixe".

Exemple:

Supposons que nous décidons d'une convention de code à taille variable, qui fait correspondre,

entre autres, les valeurs suivantes:

0 "11"

2 "11010"

12 "00"

127 "0111100"

255 "0100"

Tableau: 55.1 - Correspondance de code arbitraire

Supposons alors que nous ayons à décoder la séquence: 1101000111100

Plusieurs interprétations (factorisation) sont alors possibles :

1101000111100 = 11 0100 0111100 = 0 255 127

1101000111100 = 11010 00 11 11 00 = 2 12 0 0 12

Et maintenant, nous sommes bien embarrassés! Avec plusieurs possibilités équivalentes entre

lesquelles on ne sait pas trancher, on est incapable de retranscrire le code initial.

Le problème qui s'est posé ici est que certaines codes sont le début d'autres codes. Ici, "11" est

le code du nombre 0, mais c'est aussi le début de "11010", code du nombre 2. D'où l'ambiguïté.

Nous appelons alors "code-préfixe" un codage dans lequel aucun code n'est le début d'un

autre. Ainsi, pour qu'il n'y ait aucune ambiguïté au moment du décodage, il nous faut

absolument un code-préfixe.

Exemple:

commentaires (0)
Aucun commentaire n'a été pas fait
Écrire ton premier commentaire
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Docsity n'est pas optimisée pour le navigateur que vous utilisez. Passez à Google Chrome, Firefox, Internet Explorer ou Safari 9+! Téléchargez Google Chrome